MKV 视频文件无法在 Lollipop 上播放
MKV video file not playing on Lollipop
我试图在 Lollipop
版本中播放 MKV
视频文件但无法播放,尽管它在 Kitkat
版本中可以正常工作。
我对问题的调试发现如下,
音频、视频和内容编码的默认轨道设置设置为 -1
如果当前曲目的id既不是视频也不是音频,而是类型content_encoding,曲目设置会相应更新。
在函数后面,根据轨道类型解析缓冲区,即如果轨道是视频类型,则音频轨道设置应小于 0,similarly if the track consist of audio the video track setting should be less than 0。
但如果轨道包含内容编码类型,则会检查视频、音频和内容编码轨道设置。
由于类型内容编码会更新曲目设置,此处失败
if (e.start >= 0)
return E_FILE_FORMAT_INVALID;
删除内容编码检查后,MKV
文件播放成功。
我的文件有一个 video
轨道、一个 audio
轨道和多个 subtitles
。可能是什么问题?请帮忙。
我认为这个问题可能是由于 mkvparser.cpp
中缺少检查所致。在 ParseTrackEntry
中,一旦识别出 TrackEntry
,就会检查 audio
是否存在于 video
数据包中,反之亦然。
虽然 Matroska
file specification(参考:第 21 页,Table 8 之前的注释)指定这也是允许的,但当前的实现会报错。
当 TrackEntry
元素不是 video
或 audio
即 subtitle
或 metadata
时,则 ContentEncoding
的处理方式必须非常清楚。此 line 中的检查对 metadata
有效。但是,对于 subtitle
轨道,规范显示可以存在 ContentEncoding
元素(参考:上述标准的第 24 页)。
因此,此检查可能会变成
if((info.type == Track::kMetadata) && (e.start >= 0))
return E_FILE_FORMAT_INVALID;
进行此更改后,对于具有 ContentEncoding
的 subtitle
首曲目,处理将继续,您的文件应该会播放。
P.S: 我们可能需要与 Google 确认他们是否同意此更改。
我试图在 Lollipop
版本中播放 MKV
视频文件但无法播放,尽管它在 Kitkat
版本中可以正常工作。
我对问题的调试发现如下,
音频、视频和内容编码的默认轨道设置设置为 -1
如果当前曲目的id既不是视频也不是音频,而是类型content_encoding,曲目设置会相应更新。
在函数后面,根据轨道类型解析缓冲区,即如果轨道是视频类型,则音频轨道设置应小于 0,similarly if the track consist of audio the video track setting should be less than 0。
但如果轨道包含内容编码类型,则会检查视频、音频和内容编码轨道设置。
由于类型内容编码会更新曲目设置,此处失败
if (e.start >= 0)
return E_FILE_FORMAT_INVALID;
删除内容编码检查后,MKV
文件播放成功。
我的文件有一个 video
轨道、一个 audio
轨道和多个 subtitles
。可能是什么问题?请帮忙。
我认为这个问题可能是由于 mkvparser.cpp
中缺少检查所致。在 ParseTrackEntry
中,一旦识别出 TrackEntry
,就会检查 audio
是否存在于 video
数据包中,反之亦然。
虽然 Matroska
file specification(参考:第 21 页,Table 8 之前的注释)指定这也是允许的,但当前的实现会报错。
当 TrackEntry
元素不是 video
或 audio
即 subtitle
或 metadata
时,则 ContentEncoding
的处理方式必须非常清楚。此 line 中的检查对 metadata
有效。但是,对于 subtitle
轨道,规范显示可以存在 ContentEncoding
元素(参考:上述标准的第 24 页)。
因此,此检查可能会变成
if((info.type == Track::kMetadata) && (e.start >= 0))
return E_FILE_FORMAT_INVALID;
进行此更改后,对于具有 ContentEncoding
的 subtitle
首曲目,处理将继续,您的文件应该会播放。
P.S: 我们可能需要与 Google 确认他们是否同意此更改。