ios - Http直播: EXT-X-DISCONTINUITY tag makes all segments afterwards only have audio

标签 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在我用它检查时没有给出任何警告。

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

最佳答案

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

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

抱歉,我没有一个答案,但有很多细小的事情可能会误导您。

关于ios - Http直播: EXT-X-DISCONTINUITY tag makes all segments afterwards only have audio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13088123/

相关文章:

ios - 没有上下文的 CoreData 关系设置?

ios - 为什么 Cordova 恢复事件不会在 iOS 中使用 sencha 在电源锁定模式/ sleep 模式下触发

ipad - 什么导致错误 NSNetServicesErrorCode = "-72000"?

iphone - iOS 5:UITabBarItem setFinishedSelectedImage:withFinishedUnselectedImage:不起作用/被忽略

c# - 在 C# 中流式传输打包到 Apple TV 的 h.264

ios - 根据变量的值从 Plist 读取数据

ios - iPad GCDAsyncSocket 无法读取

ios - Web View 未加载特定 url

video - FFMPEG 在处理 MOV 文件时失败

ffmpeg - 是否可以在没有 FMS 调解的情况下将视频从 FMLE 直接流式传输到媒体播放器?