将视频流从Socket保存到文件

时间:2012-09-09 21:34:28

标签: java android sockets video streaming

我使用我的Android应用程序将视频从手机摄像头传输到我的PC服务器,并需要将它们保存到HDD上的文件中。因此,文件创建和流成功保存,但生成的文件无法播放任何视频播放器(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();

此外,如果有人会谈论可能的"陷阱,我将不胜感激。处理媒体流的保护。

谢谢,我希望你的帮助!

亚历。

UPD:

对于本地到手机存储的录制视频,我使用:

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

myMediaRecorder.setOutputFile(targetFile);

用于将其流式传输到PC(无错误处理以简化)

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 个答案:

答案 0 :(得分:1)

将此评论标记为已回答的问题:RTMP应该被正确编码和流式传输,我的简单套接字解决方案无效且问题在这个意义上是不正确的。与How to encode h.264 live stream to RTP packet with Java

相关