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