5

我在 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 Cloudfront 上播放文件时,这种情况发生得更频繁,而不是从它们最初所在的 Amazon S3 存储桶中播放。

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

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

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

4

2 回答 2

5

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

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

抱歉,我没有一个答案,但有很多微小的事情会绊倒你。

于 2012-10-29T00:20:06.483 回答
2

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

见:https ://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-18#section-4.3.3.3

于 2016-01-27T00:14:15.877 回答