iOS AVPlayer无法加载大多数HLS流。

8

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

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);
            }
        }
    }

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

时,就会出现问题。
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工具验证了该流。

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


你尝试向苹果提交错误报告了吗? - Yuchen
我遇到了同样的问题,这个解决方案对我很有帮助, https://dev59.com/KK_la4cB1Zd3GeqPsGEi#53020960 - Fariha Hasan
1个回答

0

我使用的是不安全的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>

enter image description here


1
NSExceptionDomains是字典类型,而不是布尔类型。 NSExceptionAllowsInsecureHTTPLoads是异常域项中的子类型。 - SaadurRehman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接