MKV视频文件没有在Lollipop上播放

时间:2015-01-09 10:50:10

标签: android android-5.0-lollipop stagefright

我试图在MKV版本上播放Lollipop视频文件但无法播放,但它在Kitkat版本中正常运行。

关于调试问题的调查结果如下,

在函数ParseTrackEntry()

音频,视频和内容编码的默认曲目设置设置为-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。可能是什么问题?请帮忙。

1 个答案:

答案 0 :(得分:2)

我认为这个问题可能是因为mkvparser.cpp检查丢失了。在ParseTrackEntry中,一旦识别出TrackEntry,就会在audio数据包中检查video是否存在,反之亦然。

虽然Matroska file specification(参考:第21页,表8之前的评论)指出这也是允许的,但当前实施报告错误。

TrackEntry元素不是videoaudiosubtitlemetadata时,处理ContentEncoding的方式必须要非常清楚。此line中的签入对metadata有效。但是,对于subtitle曲目,规范显示ContentEncoding元素可以存在(参考:上面标准的第24页)。

因此,这项检查可能应该成为

if((info.type == Track::kMetadata) && (e.start >= 0))
    return E_FILE_FORMAT_INVALID;

对于subtitle跟踪ContentEncoding进行此更改,处理将继续,您的文件应该播放。

P.S:如果他们同意此更改,我们可能需要与Google核对。