【问题标题】:peer to peer voice calling in android without sip在没有 sip 的情况下在 android 中进行点对点语音通话
【发布时间】:2015-04-07 02:00:15
【问题描述】:

我正在开发一个应用程序,它使用户能够通过流式传输原始 pcm 音频流在 LAN (WI-FI) 内进行语音呼叫。 但我无法播放收到的音轨

这是我的接收器代码:

   private AudioTrack speaker;



    public void startReceiving() {

        Thread receiveThread = new Thread (new Runnable() {

            @Override
            public void run() {

                try {

                    DatagramSocket socket = new DatagramSocket(1127);
                    Log.d("VR", "Socket Created");


                    byte[] buffer = new byte[256];


                    //minimum buffer size. need to be careful. might cause problems. try setting manually if any problems faced
                    int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);

                    speaker = new AudioTrack(AudioManager.STREAM_MUSIC,sampleRate,channelConfig,audioFormat,minBufSize,AudioTrack.MODE_STREAM);


                    speaker.play();
                    while(status==true) {
                        try {


                            DatagramPacket packet = new DatagramPacket(buffer,buffer.length);
                            socket.receive(packet);
                            Log.d("VR", "Packet Received");

                            //reading content from packet
                            buffer=packet.getData();
                            Log.d("VR", "Packet data read into buffer");

                            //sending data to the Audiotrack obj i.e. speaker
                            speaker.write(buffer, 0, minBufSize);
                            Log.d("VR", "Writing buffer content to speaker");

                        } catch(IOException e) {
                            Log.e("VR","IOException");
                        }
                    }
                    speaker.play();

                } catch (SocketException e) {
                    Log.e("VR", "SocketException");
                }


            }

        });
        receiveThread.start();
    }

这是我的发件人代码:

public void startStreaming()
{
    Thread streamThread = new Thread(new Runnable(){
        @Override
        public void run()
        {
            try{

                DatagramSocket socket = new DatagramSocket();
                Log.d("VS", "Socket Created");

                byte[] buffer = new byte[minBufSize];

                Log.d("VS", "Buffer created of size " + minBufSize);


                Log.d("VS", "Address retrieved");
                recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize);
                Log.d("VS", "Recorder initialized");


                recorder.startRecording();


                InetAddress IPAddress = InetAddress.getByName("192.168.0.101");
                byte[] sendData = new byte[1024];
                byte[] receiveData = new byte[1024];


                while (status==true)
                {
                    DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 1127);
                    socket.send(sendPacket);
                }

            } catch(UnknownHostException e) {
                Log.e("VS", "UnknownHostException");
            } catch (IOException e) {
                Log.e("VS", "IOException");
                e.printStackTrace();
            }


        }

    });
    streamThread.start();
}

我不能使用 SIP,它只是一个普通的音频流。 任何人都可以帮我解决这个问题

谢谢。

【问题讨论】:

    标签: android streaming voip audio-streaming peer


    【解决方案1】:

    你有两个问题:

    1. 您的接收器线程似乎没有播放...它始终处于循环中并且永远不会到达 speaker.play()。
    2. 您的发送线程从不发送任何数据...例如:

      recorder.read(sendData, 0, sendData.length);
      

    【讨论】:

    • 您好 msj121,我正在接收当我打印日志时将显示的字节,但我似乎收到了相同的数据,我的意思是像 2B03F5 之类的东西(但它一遍又一遍地显示相同的数据一个循环)。我确实通过实现一个java接收器来测试我的发件人并且它起作用了。有一点滞后和重叠。
    • 我可以为 speaker.play 做正确的放置吗?
    • 目前speaker.play循环前的播放是正确的,后面的没用。我认为其他一切看起来都是正确的。尝试取出任何日志消息,它们会减慢您的线程并可能导致间隙。此外,如果这不起作用,您可能需要尝试增加线程优先级。如果我所说的对声誉和帮助他人是正确的,也请标记为答案。
    • 我会试试的,我会回复你的。顺便感谢您的支持,我将发布完整的解决方案。
    • 谢谢它的帮助,通过对采样率和缓冲区大小的反复试验,我能够运行它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 2011-09-13
    • 2013-10-02
    • 1970-01-01
    相关资源
    最近更新 更多