Прямая трансляция аудио с сервера java на клиент Android - PullRequest
0 голосов
/ 16 марта 2020

Я хочу передавать аудио со своего компьютера на android клиентов. Я взял вход и теперь хочу, чтобы он передавался через поток и воспроизводился. Теперь моя проблема заключается в том, что на стороне ввода у меня есть класс AudioInputStream и другие классы, которые я могу использовать, но на стороне android он говорит, что они являются закрытыми и недоступны вне класса. Я хочу воспроизвести звук на android. Что мне делать. Сейчас я просто хочу поддержать 1 клиента.

Сервер:

import java.net.*;
import java.io.*;
import javax.sound.sampled.*;
public class MainServer{
    private static AudioFormat getAudioFormat() {
        AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;
        float rate = 44100.0f;
        int channels = 2;
        int sampleSize = 16;
        boolean bigEndian = true;
        InetAddress addr;
        AudioFormat format = new AudioFormat(encoding, rate, sampleSize, channels, (sampleSize / 8) * channels, rate, bigEndian);
        return format;
    }
    private static TargetDataLine configureStreams(){
        try{
            AudioFormat format = getAudioFormat();
            DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
            // checks if system supports the data line
            if (!AudioSystem.isLineSupported(info)) {
                System.out.println("Line not supported");
                System.exit(0);
            }
            TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
            line.open(format);
            line.start();   
            System.out.println("Got the line and started to listen");
            return line;
        }
        catch(Exception e){
            System.err.println(e);
        }
        return null;
    }
    public static void main(String args[]){
        try{
            ServerSocket server = new ServerSocket(3000);
            System.out.println("Server is listening");
            TargetDataLine audio = configureStreams();
            while(true){
                Socket socket = server.accept();
                System.out.println("Current accepted socket: "+socket);
                HandlingClient client = new HandlingClient(socket, audio);
                client.start();
            }
        }
        catch(Exception e){
            System.err.println(e);
        }
    }
}
class HandlingClient extends Thread{
    AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
    private Socket socket;
    private OutputStream output;
    private TargetDataLine audio;
    HandlingClient(Socket socket, TargetDataLine audio){
        this.socket=socket;
        this.audio=audio;
    }
    public void run(){
        try{
            AudioInputStream ais = new AudioInputStream(audio);
            output=socket.getOutputStream();
            byte[]data = new byte[1024];
            System.out.println("Start recording and sending");
            while(true){
                data=ais.readNBytes(1024);
                output.write(data);
            }
        }
        catch(Exception e){
            System.err.println(e);
            System.out.println("OutputStream: "+output);
            System.out.println("Socket: "+socket);
        }
    }
}

Android Клиент:

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.View;
import android.widget.EditText;

import java.io.IOException;
import java.net.Socket;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        StrictMode.ThreadPolicy myCustomizableThread = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(myCustomizableThread);
        //Starting from here
    }


    public void connect(View view){
        final EditText editText = findViewById(R.id.url);
        String url = editText.getText().toString().trim(); //User enters the url in the form like 192.168.43.102:3000
        String target = url.substring(0, url.indexOf(':'));
        int port = Integer.parseInt(url.substring(url.indexOf(':')+1, url.length()));
        try {
            Socket socket = new Socket(target, port);
            //Media player here to play the recording

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...