我在 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在我使用它进行检查时没有给出任何警告。
我非常感谢你们可以提供的任何帮助!这对我来说是一个令人费解的问题:-(