Android MediaRecorder使用setOutPutFile()方法通过Socket进行流传输

9
我正在开发一款Android应用程序,它应该能够在不将其存储到SD卡上的情况下,将视频流传输到我的本地服务器。
为此,我使用C#制作了一个简单的套接字应用程序,用于侦听特定的IP:PORT。
在Android部分,我使用套接字将setOutputFile()设置为此IP:PORT。
这个应用程序在Android手机上启动得很好,但它没有显示预览,当我开始录制时它会退出而不会出现任何异常。它也没有向网络发送任何数据流。
当我将setOutPutFile()设置为SD卡时,它能够完美地工作并记录视频。
对于服务器部分,当我从任何其他应用程序(来自PC)向相同的IP:PORT发送数据时,它可以接收数据。
总之,我想建立PC和Android之间使用套接字进行流媒体传输的通信通道。
以下是我的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
 ...
 ...

我无法理解此处发生的问题。 我是否在正确的方向上?


你好Vinod,你能发布一下Android应用的源代码吗?我试着做同样的事情,但是视频会卡住,我不知道为什么...谢谢。 - Rob
抱歉,我不能发布商业项目的代码。如果您能将您的代码发送给我,我会尝试解决问题。谢谢。 - Vinod Maurya
我基本上和你做的一样,但是我在格式上遇到了困难...我收到了一些东西,但是没有正确的头部。我的问题在这里非常清楚地描述了(http://www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system),但我不知道该怎么处理。 你能展示一下那个小部分吗? 谢谢。 - Rob
嗨,Vinod,我在录制方面也遇到了问题。我的服务器端运行良好,但是从我的Android客户端无法发送数据。因此,如果可能的话,您能否提供一些示例源代码。 - Murtz
1个回答

5

我的服务器代码出了问题。

我不得不使用 TcpListener 替代 TcpClient

以下是正确的代码:

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

1
嗨,Vinod,我正在尝试做同样的事情,但是在我的情况下.NET服务器端不正常工作,有没有可能得到您的可用代码? - Giuseppe
@Giuseppe,现在代码已经是一个IP地址,所以我无法分享代码,但如果您能详细说明问题,我可以提供帮助。 - Vinod Maurya
1
那么,你是否可以通过Socket从Android MediaPlayer使用PFD->FD进行流媒体传输呢? - ChiefTwoPencils

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