2016-06-22 7 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

[OK]を、私はそれだけのために起こっている理由を理解していない、まだそれを修正するが、方法を見つけました"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 
    } 
} 
関連する問題