我正在尝试使用嵌入在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验证了流
我现在有点卡住了.有任何想法吗?
解决方法
我使用的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>