Http直播:EXT-X-DISCONTINUITY标签使得之后的所有片段都只有音频

时间:2012-10-26 13:43:57

标签: ios ios5 video-streaming http-live-streaming

我正在iOS设备系列上播放HTTP Live Streaming,在iOS 5和6上使用Apple的AVPlayer库。

由于我正在播放广告内容,在内容剪辑之间,我正在使用#EXT-X-DISCONTINUITY标记,正如帮助回答上一个问题的真棒人所建议的那样。

这已经适用于单个比特率,但是当使用带有子播放列表的变体播放列表用于多个比特率时,我遇到了的问题。我只是在第一个不连续标签之后才获得带有音频的黑屏,即使在广告结束后它也不会恢复。 (我可以听到广告)。

已在iPhone 4,4S,5和iPod Touch第4代上测试和复制。 iphone 4在iOS 5上,其余的是iOS 6.它发生在大多数时间,但不是每次都发生。但可以肯定的是,我想强调只有在我的变体播放列表包含多个比特率子播放列表时才会发生这种情况。

以下是我使用的播放列表的示例(这是400kbps版本,我有一个 具有相应播放列表的200和800kbps版本看起来与以下内容完全相同,但将所有'400'替换为'200'和'800'。 (嗯,实际的播放列表更长,但这是一个例子)。

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
400-clipA-0.ts
#EXTINF:10,
400-clipA-1.ts
#EXTINF:5,
400-clipA-2.ts

#EXT-X-DISCONTINUITY
#EXTINF:10,
400-advert0.ts
#EXTINF:3,
400-advert1.ts

#EXT-X-DISCONTINUITY
#EXTINF:10,
400-clipB-0.ts
#EXTINF:10,
400-clipB-1.ts
#EXTINF:5,
400-clipB-2.ts

#EXT-X-ENDLIST

我有可在儿童播放列表中选择的变体播放列表:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=240000
clips-200.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=440000
clips-400.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=840000
clips-800.m3u8

请注意,发生的事情(约75%的时间)是当我播放时,视频将在第一个不连续标签(广告之前)之后变为黑色,并且永远不会再次恢复,尽管我可以听到广告的音频。例如,如果我只使用一个比特率变体制作变体播放列表:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=280000
clips-200.m3u8

然后我根本没有遇到这个问题!很奇怪。此外,如果我删除所有不连续标签并仍保留变量播放列表中的其他比特率,那么它(通常)工作正常,但有时它会因某种原因跳过整个.ts文件,可能是因为它需要那些不连续标签。

此外,与我们最初居住的Amazon S3存储桶相比,直接在Amazon Cloudfront上播放文件时,这种情况更常发生。

其他一些可能有用的信息:我的原始文件(剪辑和广告)都是从iPhone 4获取的.mov文件,每个文件的分辨率相同。然后我的输出(.ts文件)都是从这些产生的 - 对于每个比特率类,我在剪辑和广告中都有相同的编码设置。否则输出的分辨率和帧率都相同。

最后一件事,Apple提供的mediasegmentvalidator在我用它来检查时没有发出任何警告。

我非常感谢你们提供的任何帮助!这对我来说是一个令人费解的问题: - (

2 个答案:

答案 0 :(得分:4)

我要检查的事情(不按任何特定的顺序,只是我想到的顺序)。

  1. 这些细分实际上是M3U8声称的长度
  2. 音频和视频流的长度是否相同
  3. advert0.ts是否以视频关键帧开头(那是一个巨大的!)
  4. 视频和音频编解码器和参数是否相同(特别是音频 - 根本不能改变)
  5. 流是否在其他兼容HLS的设备或应用程序上播放?例如,您可以使用VLC播放流吗?
  6. 是否有任何方法可以观察服务器日志以查看在故障发生之前和之后您正在播放的级别,如果是这样,这可能指向答案(例如,如果设备在级别上切换不连续性,也许你可以减少第一个细分块的细分市场规模,这样你就可以获得一个额外的细分市场,从而提供更早切换的机会。
  7. 抱歉,我没有一个答案,但是有很多小小的东西可以帮助你。

答案 1 :(得分:2)

如果您在变体流中使用#EXT-X-DISCONTINUITY,那么您应该在每个变体中都有#EXT-X-DISCONTINUITY-SEQUENCE:<number>

请参阅:http://tools.ietf.org/html/draft-pantos-http-live-streaming-18#section-4.3.3.3