2011-03-01 75 views
9

我正在开发一款Android应用程序,该应用程序应该能够将视频流式传输到本地网络上的本地服务器,而无需将其存储在SD卡上。Android MediaRecorder setOutPutFile()使用套接字流式传输

为此,我已在C#简单的socket应用程序,侦听特定IP:使用套接字端口:端口

在Android上一部分,我已经设置setOutputFile()这个IP。

此应用程序在Android手机上完美启动,但不显示预览,当我开始录制时,它无任何例外退出。它也不会向网络发送任何数据流。

当我将setOutPutFile()设置为SD卡时,它可以很好地工作并记录视频。

对于服务器部分,当我从任何其他应用程序(从PC)发送数据到相同的IP:PORT时,它会接收数据。

总之,我想建立PC和Android之间使用socket进行流媒体的通信渠道。

这里是我的Android代码:

Socket soc=new Socket("192.168.1.3",8210); 
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(soc); 
... 
... 
// other Recorder setup steps 
... 
... 
Recorder.setOutputFile(pfd.getFileDescriptor()); // working fine for sdcard 
Recorder.setPreviewDisplay(holder.getSurface()); 
Recorder.prepare(); 

这里是我的服务器应用程序,在C#中,运行于PC:

socketForServer = new TcpClient("192.168.1.3", 8210); 
NetworkStream networkStream = socketForServer.GetStream(); 
byte[] rData = new byte[1024]; 
networkStream.Read(rData, 0, 1024); 
... 
... 
// process rData 
... 
... 

我无法理解问题这是发生在这里。我正朝着正确的方向吗?

+0

维诺德·你好,你能放开Android应用程序的源代码?我尝试做同样的事情,但视频冻结,我不知道为什么......谢谢。 – Rob 2011-05-03 06:12:37

+0

嗨,对不起,我无法发布代码,因为它来自商业项目。如果您可以向我发送您的代码,我会尝试解决此问题。谢谢 – 2011-05-03 07:33:13

+0

我基本上和你做同样的事情,但我在格式上苦苦挣扎......我收到了一些东西,但没有我想到的好头。我的问题在这里很好地描述(http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system),但我不知道如何处理。 你可以只显示一小部分? 谢谢。 – Rob 2011-05-05 07:37:47

回答

5

我的服务器代码有问题。我不得不使用TcpListener代替TcpClient

下面是正确的代码:

TcpListener listener = new TcpListener(ipAddress, 8210); 
Socket s = listener.AcceptSocket(); 
NetworkStream ns = new NetworkStream(s); 
. 
. 
. 
//reading the data from stream 
. 
. 
. 
+1

嗨维诺德,我想要做同样的事情,但.NET服务器端在我的情况下工作不正常,任何机会得到你的工作代码? – Giuseppe 2013-04-12 05:58:22

+0

@Giuseppe该代码现在是一个IP,所以我不能分享代码,但如果你可以详细说明你的问题,那么我可以帮忙。 – 2013-04-12 06:20:54

+1

因此,您可以通过Socket的方式从Android MediaPlayer与PFD - > FD进行流式传输? – ChiefTwoPencils 2014-08-23 06:19:04