使用AndroidBreakout获得难以理解的错误

时间:2014-11-07 00:47:38

标签: android mediacodec

我一直在Fadden的http://bigflake.com/mediacodec/探索文档和示例,并将修补程序http://bigflake.com/mediacodec/0001-Record-game-into-.mp4.patch应用于突破游戏。不幸的是,在编译代码之后,我意识到它不起作用,产生不可流传输的视频文件。

我看到以下错误: " mp4文件不可流式传输。"

根据Fadden的说法,这应该通过检查mBufferInfo.flags(https://stackoverflow.com/questions/23934087/non-streamable-video-file-created-with-mediamuxer)来解决,这已经在他的代码中完成了,所以我完全失败了。有没有其他人让视频录制补丁工作?

2 个答案:

答案 0 :(得分:4)

您所看到的警告只是一个警告,仅此而已。在大多数情况下,MP4文件无法流式传输,因为您可以通过管道传递写入的MP4并让另一端播放它(除非您采取大量额外的技巧,或使用碎片MP4其中android MP4 muxer没有正常写入)。这里的流媒体意味着,一旦你拥有了最终的MP4文件,就可以开始播放它,而不必寻找文件的末尾(通过HTTP播放可以做到例如HTTP字节范围请求)。

要编写可流式处理的MP4,多路复用器会尝试猜测文件的大小,并在文件的开头保留相应大的区域以写入文件索引。如果文件变得更大,因此索引不适合保留区域,则需要在文件末尾写入。有关此猜测的详细信息,请参阅https://android.googlesource.com/platform/frameworks/av/+/lollipop-release/media/libstagefright/MPEG4Writer.cpp中的第506-519行。基本上猜测似乎归结为:“默认MAX _MOOV_BOX_SIZE值基于大约3分钟的视频录制,比特率约为3 Mbps,因为统计数据还显示捕获的大部分视频将不到3分钟。 “

如果要将这种不可流式化的MP4文件转换为可流式处理文件,可以使用libav / ffmpeg中的qt-faststart工具,该工具只需重新排序文件中的块。

答案 1 :(得分:0)