当前位置: 首页 > 知识库问答 >
问题:

MediaMuxer错误“无法停止muxer”

鲜于子琪
2023-03-14

我正在使用mime类型为“video/avc”的MediaCodecCamera预览数据进行编码,并将编码数据(仅视频,无音频)传递给MediaMuxer。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!

有什么线索导致这一切吗?不确定你还需要什么信息。

共有3个答案

田嘉澍
2023-03-14

Android 5.0.2设备Moto E 1)宽度有两个问题

邢硕
2023-03-14

我也有同样的问题。关闭Muxer时会出现“停止失败”错误。当我在ISO查看器中检查我保存的文件时,我在其中找不到轨道。我通过仅在从视频编码器获得第一个输出后创建轨道来解决问题。这是我如何添加我的曲目

 m_VideoTrackIndex = muxer.addTrack(mediaCodec.getOutputFormat());

曲目的媒体格式从mediaCodec获得。getOutputFormat(),它只有在编码第一帧后才会初始化。在获得第一个编码数据(当然只有一次)后,我更改了代码以添加曲目。它运转良好。

微生啸
2023-03-14
E/MPEG4Writer(2166): Missing codec specific data

听起来您没有使用包含CSD的MediaFormat调用MediaMuxer#addTrack()。有关如何执行此操作的示例,请参阅EncodeAndMuxTest.java代码

查看MediaMuxer使用的MPEG4Writer实现,第2360行有一个isTrackMalformed()检查;如果CSD数据不存在,但不会立即返回,则会设置错误\u格式不正确。没有任何东西可以清除错误,因此它会做大量工作,然后失败,这似乎与您看到的相符。

 类似资料:
  • 问题内容: 问题 :无法停止泊坞窗容器,每当我尝试停止容器时,都会收到以下错误消息, 操作系统版本/内部版本: Ubuntu 16.04 | Docker版本17.09.0-ce,构建afdb6d4 | Docker Compose版本1.17.1,内部版本6d101fb 重现步骤: 使用Dockerfile和docker-compose.yml创建了Rails项目。docker-compose.

  • 我不熟悉使用声纳。我正在尝试运行Sonar服务器,但出现错误 检查日志中的web获取错误无法初始化与ProtocolHandler[“http nio-0.0.0-9000”]java关联的endpoint。网BindException:地址已在使用中:bind我不确定这个问题的解决方案是什么,我已经更改了包装器中的Java路径。conf也在环境变量中添加了路径。请帮我做这个。

  • 我正在使用堆栈和模块。首先,当我检查用法时正在使用大量资源,我决定停止它。这时停止。我的意思是,我运行了命令。基本上,我认为Logstash有问题。当我看到log in时,我得到了类似的东西,我不明白为什么。 当检查服务状态时,得到如下内容。 仍在运行,我正在试图找出如何停止它。我想,我在一开始就以一种错误的方式运行它,但为什么不可能永远停止它呢? 有什么想法吗? 谢谢!

  • 当线程停止时,关闭Spring引导的正确方法是什么?我不应该使用Spring中的吗? 谢谢!