我正在开发一款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
...
...
我无法理解这里发生的问题。我正朝着正确的方向前进吗?
答案 0 :(得分:5)
我的服务器代码出现问题。
我必须使用TcpListener
代替TcpClient
。
以下是正确的代码:
TcpListener listener = new TcpListener(ipAddress, 8210);
Socket s = listener.AcceptSocket();
NetworkStream ns = new NetworkStream(s);
.
.
.
//reading the data from stream
.
.
.