![](/img/trans.png)
[英]Android - Using MediaMuxer with MediaExtractor and PCM stream leads to corrupted video frames
[英]Mediamuxer produces corrupted video when samples are written in batch
我正在尝试使用Android的MediaMuxer和MediaCodec来制作MP4视频。
如果我通过调用writeSampleData()将帧从编解码器直接消耗到复用器,则一切正常,并生成正确的视频。
但是,如果我尝试先将这些帧存储在数组中,然后再决定将其发送到多路复用器,则即使演示时间戳正确,我也无法制作有效的视频。
出于某种原因,尽管我认为只要具有正确的时间戳就足够了,但看来,mediamuxer的输出不仅取决于表示时间戳,而且还取决于调用“ writeSampleData”的实际时间。
谁能阐明这个问题?
感谢mstorsjo和fadden 。 实际上,我遇到了很多错误,这些错误使我无法理解实际发生的情况。 您的两个问题都使我找到了正确的代码,并确信使用writeSampleData() 并不对时间敏感。
是的,我第一次遇到错误的缓冲区。 这个问题最初并不明显,因为复用器在重写缓冲区之前正在写帧。 当我引入延迟并决定复制缓冲区内容时,我遇到了另一个问题(基本上是竞争条件),并得出结论并非如此。
该代码的作用(对于SmartPolicing项目)是捕获视频和音频以创建MP4文件。 我可以使用MediaRecorder(这是最初的解决方案),但我们也想截取帧并通过网络流式传输视频,因此我们放弃了MediaRecorder并创建了一个自定义解决方案。
现在它运行平稳。 谢谢你们
您确定确实存储了要写入帧的完整数据,而不仅仅是缓冲区索引吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.