iOS AVPlayer 未加载大多数 HLS 流

Posted

技术标签:

【中文标题】iOS AVPlayer 未加载大多数 HLS 流【英文标题】:iOS AVPlayer not loading most HLS streams 【发布时间】:2015-12-01 17:17:50 【问题描述】:

我正在尝试使用嵌入在 AVPlayerViewController 中的 AVPlayer 流式传输 HLS 视频。为此,我正在按照此处的苹果文档执行以下操作来设置 AVPlayerViewController:https://developer.apple.com/library/mac/documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/02_Playback.html

let url = NSURL.init(string: "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8") // example URL from apple dev works!

let asset = AVURLAsset.init(URL: url!)
let requestedKeys = ["tracks"]
asset.loadValuesAsynchronouslyForKeys(requestedKeys) 
    () -> Void in
    dispatch_async(dispatch_get_main_queue())
        
            let error = NSErrorPointer()
            let status = asset.statusOfValueForKey("tracks", error: error)

            if (status == AVKeyValueStatus.Loaded) 
                let playerItem = AVPlayerItem.init(asset: asset)
                playerItem.addObserver(self, forKeyPath: "status", options: NSKeyValueObservingOptions.init(rawValue: 0), context: nil)
                self.avPlayerViewController.player = AVPlayer.init(playerItem: playerItem)
            
            else 
                // You should deal with the error appropriately.
                NSLog("The asset's tracks were not loaded:\n%@", (error.memory)!.localizedDescription);
            
        
    

这一切都很好。但是当我将网址更改为

let url = NSURL.init(string: "http://cdn-fms.rbs.com.br/hls-vod/sample1_1500kbps.f4v.m3u8") // but this one doesn't

或任何其他 HLS 流不再起作用。我得到这张图片: dead AVPlayer

我可以使用 safari 打开流,它工作正常。我还使用 Apple 的 HTTP Live Streaming Tools 验证了流

我现在有点卡住了。有什么想法吗?

【问题讨论】:

您是否尝试过为此向 Apple 提交错误报告? 我遇到了同样的问题,这个解决方案对我有帮助,***.com/a/53020960/9049312 【参考方案1】:

我使用的是不受保护的 HTTP URL,因此它不允许设备或模拟器播放它。我在 info.plist 中放了一个例外,以允许不安全的协议让 ios 顺利流式传输 HLS。

 <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
        <key>NSExceptionDomains</key>
        <true/>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
        <key>NSIncludesSubdomains</key>
        <true/>
    </dict>

【讨论】:

NSExceptionDomains 是字典类型而不是布尔值 NSExceptionAllowsInsecureHTTPLoads 是异常域项目中的子类型。

以上是关于iOS AVPlayer 未加载大多数 HLS 流的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS SDK - AVPlayer 中手动选择视频质量的 HLS 流?

AVPlayer 永远无法播放

AVPlayer 不播放 HLS 流

带有 HLS 冗余流和不良网络的奇怪 AVPlayer 行为

Hls 流 url 不会在 AVPlayer 中播放

在播放 iOS 时从 HLS 流(视频)中提取/录制音频