2016-06-22 10 views
2

시뮬레이터와 실제 장치 (iPhone 5S) 모두에서 "m3u8"url과 작동하지 않습니다. 같은 시간에 Apple 데모는 훌륭하게 작동했지만 아무런 차이가 보이지 않습니다. 그리고 다른 URL 확장으로 괜찮아요 (예를 들어, URL의 끝에 "m3u9")AVAssetResourceLoaderDelegate 및 HLS가 작동하지 않습니다?

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

답변

0

좋아, 나는 그것이에만 일어나는 이유를 이해하지 못하고 여전히 해결하지만,하는 방법을 발견했습니다 "m3u8"링크.

강력한 player 또는 적어도 item을 저장해야합니다. 감사합니다. Apple, the docs. : 풍자 :

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