Android MediaRecorder setOutPutFile()使用Socket进行流式传输

Vin*_*rya 9 android video-streaming android-camera

我正在开发一个Android应用程序,应该能够将视频流式传输到我的网络上的本地服务器,而无需将其存储在SD卡上.

为此,我在C#中使用了一个简单的套接字应用程序来监听特定的IP:PORT

在Android部分,我设置了setOutputFile()这个IP:PORT使用套接字.

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

当我设置setOutPutFile()为SD卡时,它可以正常工作并录制视频.

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

简而言之,我想使用socket进行流媒体建立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();
Run Code Online (Sandbox Code Playgroud)

这是我在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
 ...
 ...
Run Code Online (Sandbox Code Playgroud)

我无法理解这里发生的问题.我正朝着正确的方向前进吗?

Vin*_*rya 5

我的服务器代码有问题.

我不得不用TcpListener它代替TcpClient.

以下是正确的代码:

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