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

Jim*_*oot 5 video-streaming http-live-streaming ios ios5

我正在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版本,相应的播放列表看起来完全如下,但用'200'和'800'替换所有'400'.(嗯,实际的播放列表更长,但这是一个例子).

#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
Run Code Online (Sandbox Code Playgroud)

我有在儿童播放列表之间选择的变体播放列表:

#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
Run Code Online (Sandbox Code Playgroud)

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

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=280000
clips-200.m3u8
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Haq*_*aqa 5

我要检查的东西(没有任何特定的顺序,只是我想到的顺序)。

  1. 这些段实际上是 M3U8 声称的长度吗
  2. 它们中的音频和视频流的长度是否相同
  3. advert0.ts 是否以视频关键帧开头(这是一个大问题!)
  4. 视频和音频编解码器和参数是否相同(特别是音频 - 根本不能改变)
  5. 流是否在其他 HLS 兼容设备或应用程序上播放?例如,您可以使用 VLC 播放流吗?
  6. 有什么方法可以查看服务器日志以查看在发生故障之前和之后您正在玩的级别,如果是这样,这可能指向一个答案(例如,如果设备在不连续性上进行级别切换,也许您可以减少第一个分段块的分段大小,以便您获得一个额外的分段,从而提供提前切换的机会。

抱歉,我没有一个答案,但是有很多微小的事情可以让您绊倒。