当ts文件发生变化时,为什么HLS流会在Stagefright 1.2中失真?

时间:2013-07-02 05:15:15

标签: android video http-live-streaming distortion stagefright

我设置了Apache 2.0.m3u8个文件,提供mpeg2tsHLSts个文件。这些libavformat文件是transmuxing MP4 youtubeHLS下载的VLC生成的。当我在QT.ts上播放结果HTML5时,一切正常。但在Android(Stagefright 1.2)上,该视频有几个问题:

  1. 全屏幕选项不起作用
  2. 视频时长为1:40,实际上是2:00
  3. 视频有时无法启动,您必须重新加载页面
  4. 切换基础m3u8流时,视频在转换点处可靠地扭曲(撕裂和像素化)。
  5. 如果我不使用HLS标签,其中一些可以改善。但问题#4仍然存在。

    我可以在Stagefright上播放其他ffmpeg而没有任何上述问题,所以我假设我的transmuxing代码是错误的,但即使放弃它并使用(最近添加的)libx264分段{{1}}的功能我有同样的问题。使用{{1}}进行重新编码不会改变任何内容。

    我现在正在调试这个。

1 个答案:

答案 0 :(得分:0)

Android的libstagefright(以及mediaservice的NuPlayer)并不像vlc那样成熟,而且使用vlc时出现的许多麻烦都存在于android中,它对于任何破坏,损坏,偏离的内容都更容易受到攻击。

这些像素化/宏块伪像通常存在,而某些帧在解码之前被丢弃(通过android代码或丢失)。

如果这些损坏与一些绿色字段一起出现,则可能是格式更改与关键帧同步的问题(可能是源错误实现的结果,或者部分通知ANativeWindow有关格式更改)。 在角落的情况下,您可能无法获得任何绿色帧,但裁剪/重新解决将会偏离并且可能会出现像素化。

我会做什么: 1)检查帧丢失 2)检查连续部分边界处的一些分析仪框架