将视频数据从Socket保存到文件中

3
我使用我的 Android 应用程序将手机摄像头的视频流传输到我的 PC 服务器,并需要将其保存到硬盘上的文件中。 因此,文件已创建并成功保存了流,但是生成的文件无法用任何视频播放器(GOM、KMP、Windows Media Player、VLC 等)播放 - 没有图像,没有声音,仅出现播放错误。
我在手机上测试了我的 Android 应用程序,可以说,在这种情况下,捕获的视频成功存储在手机 SD 卡上,在将其转移到 PC 后可以无误地播放,因此我的代码是正确的。
最后,我意识到问题在于视频容器:从手机流式传输的数据以 MP4 格式存储在 PC 上的 *.mp4 文件中,在这种情况下,文件可能不适合使用视频播放器进行播放。 有人能提供如何正确保存流式视频到文件的建议吗?
以下是我处理和存储流数据的代码(未包含错误处理以简化):
// getOutputMediaFile() returns a new File object

DataInputStream in = new DataInputStream (server.getInputStream());
FileOutputStream videoFile = new FileOutputStream(getOutputMediaFile());
int len;
byte buffer[] = new byte[8192];

while((len = in.read(buffer)) != -1) {
    videoFile.write(buffer, 0, len);
}

videoFile.close();
server.close();

此外,如果有人能谈一谈在处理媒体流保留方面可能遇到的“陷阱”,我将不胜感激。

谢谢,希望得到您的帮助!

Alex。

更新:

我使用以下方法将视频记录在手机存储中:

//targetFile - new File object, represents a file on phone SD card

myMediaRecorder.setOutputFile(targetFile);

而将其流式传输到计算机(没有错误处理以简化操作)

ParcelFileDescriptor pfd = null;
Socket socket = null;
String hostname = "my IP";
int port = 8081;

socket = new Socket(InetAddress.getByName(hostname), port);
pfd = ParcelFileDescriptor.fromSocket(socket);

myMediaRecorder.setOutputFile(pfd.getFileDescriptor());

1
你的手机能播放录音吗?如果不能,我会说你的代码可能有问题。 - ian.shaun.thomas
好的,如果您使用内置相机应用程序录制视频,那么您的任何桌面视频播放器都可以播放该视频吗?如果不能,也许您只需要安装MP4编解码器。 - ian.shaun.thomas
是的,我所有的桌面视频播放器都可以播放由我的手机应用程序录制的视频,没有任何错误。只有从流中保存的视频才会出现问题。 - Alex
你的代码是正确的,正如你已经确认的那样。这里有什么问题吗? - user207421
旧话题,但我目前遇到了同样的问题。有什么建议吗? - DavidL
显示剩余3条评论
1个回答

1

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