将安卓设备音频流传输到服务器

8
我希望了解socket的工作原理,特别是需要一些服务器端的代码示例,以接收来自设备的mediarecorder发送的流。非常感谢您的任何帮助。
我的真正最终目的是在设备上进行对话并在PC上进行倾听,仅限单向传输。
目前,我能够使用以下代码发送流:
String hostname = "192.168.1.10";
int port = 8000;
Socket socket = null;
    try {
        socket = new Socket(InetAddress.getByName(hostname), port);
    } catch (UnknownHostException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(pfd.getFileDescriptor());

    try {
        recorder.prepare();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

recorder.start();

你在电脑上使用的是哪种编程语言? - Axis
我使用.NET平台,无论是vb.net还是c#都可以。 - Giuseppe
1个回答

4
似乎还不错,但我个人更喜欢在设备上缓冲音频并从另一个线程将其发送到服务器,而不是像你所做的那样直接将录音机与套接字绑定。因为本地缓冲将允许您优雅地处理连接中断。
想象一下,当您正在录制时,用户通过隧道并失去了互联网连接-如果您直接流式传输,套接字将关闭,用户将感到烦恼 :-) 但是,如果您在本地缓冲数据,您可以重新建立连接,并继续从您离开的位置将音频发送到服务器,希望用户甚至不必知道连接中断刚刚发生,因为它只是神奇地工作。
为了使其正常工作,您必须将录音写入本地缓冲区,并编写一个单独的线程检查该缓冲区上是否有新数据,并尽快将其发送到服务器。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接