我正在使用mime类型“video/avc”的Camera
对MediaCodec
预览数据进行编码,并将编码数据(仅视频,无音频)传递到MediaMuxer
。muxer似乎运行良好,并创建一个大小合理的输出文件(即,越长的i记录越大)。但是,当我尝试停止muxer时,会出现“未能停止muxer”错误:
10-21 10:39:40.755: E/AndroidRuntime(2166): Caused by: java.lang.IllegalStateException: Failed to stop the muxer
在失败的停止之前有一些可疑的MPeg4Writer日志消息:
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping Video track
10-21 10:39:40.740: E/MPEG4Writer(2166): Missing codec specific data
10-21 10:39:40.740: W/MPEG4Writer(2166): 0-duration samples found: 122
10-21 10:39:40.740: I/MPEG4Writer(2166): Received total/0-length (123/1) buffers and encoded 123 frames. - video
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping Video track source
10-21 10:39:40.740: D/MPEG4Writer(2166): Video track stopped
10-21 10:39:40.740: D/MPEG4Writer(2166): Stopping writer thread
10-21 10:39:40.740: D/MPEG4Writer(2166): 0 chunks are written in the last batch
10-21 10:39:40.740: D/MPEG4Writer(2166): Writer thread stopped
10-21 10:39:40.740: E/MPEG4Writer(2166): writer error ended!
有什么线索导致这一切吗?不知道你还需要什么信息。
最佳答案
E/MPEG4Writer(2166): Missing codec specific data
听起来你没有用包含CSD的
MediaMuxer#addTrack()
呼叫MediaFormat
。有关如何执行此操作的示例,请参见EncodeAndMuxTest.java代码。查看
MediaMuxer
使用的MPEG4Writer implementation,在第2360行有一个isTrackMalformed()
检查;如果csd数据不存在,但不立即返回,则设置ERROR_MALFORMED
。没有什么能消除错误,所以它会做一堆工作,然后失败,这似乎与你看到的相符。