2011-12-20 83 views
7

我想了解如何套接字的工作,特别是我需要一些代码示例服务器端接收设备从媒体记录器发送的流。android stream音频到服务器

非常感谢您的帮助。

我真正的最终目的是在设备上谈话,并在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(); 
+0

您在PC上使用哪种语言? – Axis 2012-01-06 19:16:11

+0

我使用.NET平台,vb.net或c#是一样的。 – Giuseppe 2012-01-07 08:09:49

回答

4

似乎不错,但我个人更喜欢缓冲设备上的音频,它从另一个发送到服务器而不是像你一样直接将录音机绑在插座上。因为本地缓冲将允许您优雅地处理连接中断。

想象一下,你正在记录和用户通过隧道,并失去互联网连接 - 如果你直接流媒体,套接字将关闭,用户会很恼火:-)但是,如果你是在本地缓冲数据,您可以重新建立连接并继续从停止的地方将音频发送到服务器,并且希望用户甚至不必知道连接中断就发生了,因为它只是奇迹般地工作。

为了让它起作用,您必须将录制内容写入本地缓冲区,并有单独的线程检查该缓冲区上的新数据并尽快发送到服务器。

+2

一些示例点? – Giuseppe 2012-01-07 08:09:14