从Android到桌面应用程序的音频流

时间:2010-12-01 12:28:52

标签: android audio streaming java

标题真的是什么。我需要从电话上的麦克风传输音频,然后在计算机上的桌面应用程序(也是Java代码)中播放。

使用UDP或TCP对我来说无关紧要,无论什么效果最好。无论如何,手机和电脑将在同一个NAT上,因此传输工作正常。

我很清楚如何使用以下代码从设备发送流数据:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

String host = "10.0.2.2";
int port = 5740;

Socket socket = null;
try {
    socket = new Socket(InetAddress.getByName(host), port);

    ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
    recorder.setOutputFile(pfd.getFileDescriptor());
    recorder.prepare();
    recorder.start();

    Log.d(TAG, "Sending audio for 20 seconds..");
    Thread.sleep(20000);

    } catch (Exception e) {     
    // TODO Auto-generated catch block
        e.printStackTrace();
            }

问题是,如何在PC上的java应用程序中播放此流? 或者有更好的方式来传输声音吗?

我已经在互联网上挖掘了这方面的信息,但没有任何好的结果,但肯定有人必须在此之前完成这项工作吗?

提前感谢您的任何帮助!

2 个答案:

答案 0 :(得分:2)

我做了一些非常接近你一直试图做的事情。我正在服务器上使用gstreamer来监听udp端口。还有一个用java编写的中继服务器,它基本上只不过是一个环回套接字。有一个服务器端口等待移动客户端连接,在接收数据时,它使用DatagramPackets(udp数据包的java类)将它们全部转储到gstreamer的udp端口。唯一的问题是为你的gstreamer管道找到合适的解码器。

答案 1 :(得分:1)

您是否可以编写一个仅在该端口连接到手机并接收数据的客户端?

现在,没有mp4 java解码器,因此您需要使用其他格式。使用JavaLayer或JOgg查看一些示例应用程序。它们都可以与任何InputStream一起使用,因此只要您可以打开套接字,就可以播放您的流。

另外,我不确定Android,但是你不需要打开ServerSocket并等待连接吗?

相关问题