尝试将HEVC编码的视频mux到三星Galaxy s6上的MediaMuxer MPEG-4容器中。
mediaFormat(从mediacodec获得):

{height=1080, width=1920, max_capacity=8847360, what=1869968451, mime=video/hevc, csd-0=java.nio.ByteArrayBuffer[position=0,limit=76,capacity=76], remained_resource=6773760}

csd-0出现在那里,根据表in the docs
MediaMuxer基于此格式创建索引为0的视频曲目。在编写一些示例并调用mediaMuxer.stop()之后,会抛出IllegalStateException,并在logcat中显示以下内容:
E/MPeg4Writer:缺少特定于编解码器的数据
D/MPEG4写入程序:视频轨迹停止
D/MPEG4Writer:视频跟踪源停止
D/MPeg4Writer:视频跟踪源已停止
i/mpeg4writer:接收的总/0长度(247/0)缓冲区和编码的247帧。-音频
I/MPEG4写入程序:音频轨迹漂移时间:0 us
i/mpeg4writer:接收的总长度/0(173/0)缓冲区和编码的173帧。-视频
D/MPEG4写入程序:视频轨迹已停止
D/MPEG4写入程序:音频轨迹停止
D/MPEG4写入程序:音频轨迹源停止
D/MPeg4Writer:音频曲目源已停止
D/MPEG4写入程序:音频曲目已停止
d/mpeg4writer:从磁道的持续时间范围是[5744606,5764430]us
d/mpeg4writer:停止writer线程
d/mpeg4writer:最后一批中写入了0个块
D/MPeg4Writer:写入程序线程已停止
E/MP4FileMuxer:完成:停止或释放失败
java.lang.IllegalStateException:无法停止muxer
生成的MP4文件不可播放。有什么问题吗?

最佳答案

所以,回答我自己的问题:似乎“video/hevc”仅由mediamuxer支持,从android 7.0r1开始(即使是n-preview-5也不支持)。似乎已经更新了MediaMuxer.addTrack()的文档以反映这一点。
相关AOSP代码:
MPEG4Writer.cpp on N preview 5 - no HEVC support
MPEG4Writer.cpp on N r1 - HEVC bits and pieces everywhere
不幸的是,有些带有棉花糖的设备支持HEVC视频编码(例如Samsung Exynos),但使用MediaMuxer将其转储到MP4文件将不起作用,因此需要自定义解决方案。

07-26 09:42