Android MediaRecorder setOutPutFile() 使用套接字进行流式传输

标签 android video-streaming android-camera

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

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

在 Android 部分,我使用套接字将 setOutputFile() 设置为此 IP:PORT。

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

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

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

简而言之,我想在PC和Android之间建立通信 channel ,使用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
 ...
 ...

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

最佳答案

我的服务器代码有问题。

我不得不使用 TcpListener 代替 TcpClient

正确的代码如下:

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

关于Android MediaRecorder setOutPutFile() 使用套接字进行流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5158323/

相关文章:

android - 在三星手机中从相机 Intent 捕获照片时获取 Uri Null

android - Opencv 的 javacameraview 无法在 Android Marshmallow 设备上打开相机

android - 应用程序空对象引用

java - xuggler 错误 - "cannot find symbol : class VideoImage"- 我缺少什么?

Android 前置摄像头 API

java - 同时、同步内容流

c# - 将原始帧转换为 webm 实时流

java - Android Studio 给 FOR 循环一个延迟

android - 我应该使用 Handler、AsyncTask 还是 Thread?

android - "Buttery""pre-butter"Android 中的 fragment 动画