我试图在MKV
版本上播放Lollipop
视频文件但无法播放,但它在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
。可能是什么问题?请帮忙。
答案 0 :(得分:2)
我认为这个问题可能是因为mkvparser.cpp
检查丢失了。在ParseTrackEntry
中,一旦识别出TrackEntry
,就会在audio
数据包中检查video
是否存在,反之亦然。
虽然Matroska
file specification(参考:第21页,表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;
对于subtitle
跟踪ContentEncoding
进行此更改,处理将继续,您的文件应该播放。
P.S:如果他们同意此更改,我们可能需要与Google核对。