繁体   English   中英

批量写入样本时,Mediamuxer产生损坏的视频

[英]Mediamuxer produces corrupted video when samples are written in batch

我正在尝试使用Android的MediaMuxer和MediaCodec来制作MP4视频。

如果我通过调用writeSampleData()将帧从编解码器直接消耗到复用器,则一切正常,并生成正确的视频。

但是,如果我尝试先将这些帧存储在数组中,然后再决定将其发送到多路复用器,则即使演示时间戳正确,我也无法制作有效的视频。

出于某种原因,尽管我认为只要具有正确的时间戳就足够了,但看来,mediamuxer的输出不仅取决于表示时间戳,而且还取决于调用“ writeSampleData”的实际时间。

谁能阐明这个问题?

感谢mstorsjofadden 实际上,我遇到了很多错误,这些错误使我无法理解实际发生的情况。 您的两个问题都使我找到了正确的代码,并确信使用writeSampleData() 并不对时间敏感。

是的,我第一次遇到错误的缓冲区。 这个问题最初并不明显,因为复用器在重写缓冲区之前正在写帧。 当我引入延迟并决定复制缓冲区内容时,我遇到了另一个问题(基本上是竞争条件),并得出结论并非如此。

该代码的作用(对于SmartPolicing项目)是捕获视频和音频以创建MP4文件。 我可以使用MediaRecorder(这是最初的解决方案),但我们也想截取帧并通过网络流式传输视频,因此我们放弃了MediaRecorder并创建了一个自定义解决方案。

现在它运行平稳。 谢谢你们

您确定确实存储了要写入帧的完整数据,而不仅仅是缓冲区索引吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM