Как создать простой плеер в быстром iOS-приложении - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь создать простое приложение для iOS с плеером.Есть кнопка, и когда вы нажимаете кнопку, она должна воспроизводить поток.Мой код выглядит следующим образом:

@IBAction func playVideo(_ sender: UIButton) {
    let url = URL(string: "https://.../index.m3u8")!

    // Create the asset instance and the resouce loader because we will be asked
    // for the license to playback DRM protected asset.
    let asset = AVURLAsset(url: url)
    let queue = DispatchQueue(label: "FP License Acquire")
    asset.resourceLoader.setDelegate(self, queue: queue)

    // Create the player item and the player to play it back in.
    let playerItem = AVPlayerItem(asset: asset)
    let player = AVPlayer(playerItem: playerItem)

    // Create a new AVPlayerViewController and pass it a reference to the player.
    let controller = AVPlayerViewController()
    controller.player = player

    // Modally present the player and call the player's play() method when complete.
    present(controller, animated: true) {
        player.play()
    }

}

Однако я получаю следующее сообщение об ошибке для строки "asset.resourceLoader.setDelegate (self, queue: queue)" Сообщение об ошибке:

"Cannot convert value of type 'ViewController' to expected argument type 'AVAssetResourceLoaderDelegate?'  Insert ' as! AVAssetResourceLoaderDelegate'"

Когда я вставляю 'как!AVAssetResourceLoaderDelegate ', он выдает следующую ошибку во время выполнения:

Could not cast value of type 'DRMTest.ViewController' (0x1009ae0c8) to 'AVAssetResourceLoaderDelegate' (0x1126ebf00).

/ Я действительно новичок в разработке swift и iOS.Я не понимаю проблемы и не знаю, что делать.Все, что мне нужно, это простой AVPlayer

1 Ответ

0 голосов
/ 19 декабря 2018

Ваш контроллер представления должен соответствовать AVAssetResourceLoaderDelegate делегату для устранения ошибки, поэтому код должен выглядеть следующим образом:

class ViewController: UIViewController, AVAssetResourceLoaderDelegate {
    @IBAction func playVideo(_ sender: UIButton) {
        let url = URL(string: "https://.../index.m3u8")!

        // Create the asset instance and the resouce loader because we will be asked
        // for the license to playback DRM protected asset.
        let asset = AVURLAsset(url: url)
        let queue = DispatchQueue(label: "FP License Acquire")
        asset.resourceLoader.setDelegate(self, queue: queue)

        // Create the player item and the player to play it back in.
        let playerItem = AVPlayerItem(asset: asset)
        let player = AVPlayer(playerItem: playerItem)

        // Create a new AVPlayerViewController and pass it a reference to the player.
        let controller = AVPlayerViewController()
        controller.player = player

        // Modally present the player and call the player's play() method when complete.
        present(controller, animated: true) {
            player.play()
        }
    }
}
...