对我来说,它没有在模拟器和真实设备(iPhone 5S)上使用“iPhone”url。同时,苹果的演示运行良好,但我看不出有什么不同。对于其他url扩展,也可以(例如,url末尾的"m3u9“)。
import UIKit
import AVKit
import AVFoundation
class ViewController: UIViewController, AVAssetResourceLoaderDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// if I change m3u8 to different file extension, it's working good
let url = NSURL(string: "cplp://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8")
let asset = AVURLAsset(URL: url!, options: nil)
asset.resourceLoader.setDelegate(self, queue: dispatch_queue_create("AVARLDelegateDemo loader", nil))
let item = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: item)
player.play()
}
func resourceLoader(resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
NSLog("This method is never called in case of m3u8 url")
return true
}
}发布于 2016-06-22 10:05:48
好的,我已经找到了如何修复它,但仍然不明白为什么它只发生在"m3u8“链接。
需要保存强player或至少保存item引用。谢谢你,苹果,给我这些文件。*讽刺:
import UIKit
import AVKit
import AVFoundation
class ViewController: UIViewController, AVAssetResourceLoaderDelegate {
var player: AVPlayer! // <-- the fix
override func viewDidLoad() {
super.viewDidLoad()
// if I change m3u8 to different file extension, it's working good
let url = NSURL(string: "cplp://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8")
let asset = AVURLAsset(URL: url!, options: nil)
asset.resourceLoader.setDelegate(self, queue: dispatch_queue_create("AVARLDelegateDemo loader", nil))
let item = AVPlayerItem(asset: asset)
player = AVPlayer(playerItem: item) // <-- the fix
player.play()
}
func resourceLoader(resourceLoader: AVAssetResourceLoader, shouldWaitForLoadingOfRequestedResource loadingRequest: AVAssetResourceLoadingRequest) -> Bool {
NSLog("This method is never called in case of m3u8 url")
return true
}
}https://stackoverflow.com/questions/37962564
复制相似问题