HLS && .m3u8в iOS 10

Я пытаюсь воспроизвести видеопоток .m3u8 в своем приложении. Я программирую на Swift для iOS 9 и 10.

Вот что я получил до сих пор:

import UIKit
import AVKit
import AVFoundation
import DynamicBlurView

class VideoPlayerViewController: AVPlayerViewController {

    var urlString: String!
    let blurView = DynamicBlurView()

    override func viewDidLoad() {
        super.viewDidLoad()

        streamVideo()
    }

    func streamVideo() {
        blurView.frame = view.frame
        UIView.showProgressView(on: view, blurView: blurView)

        let url = URL(string: urlString!)
        let item = AVPlayerItem(url: url!)
        player = AVPlayer(playerItem: item)

        UIView.hideProgressView(on: view, blurView: blurView)
        player?.play()
    }
}

Это должно быть просто, но я получаю ошибки и сбои повсюду.

Это ошибка, которую я получаю:

Домен ошибки = AVFoundationErrorDomain Code = -11800 "Операция не может быть завершена" UserInfo = {NSLocalizedDescription = Операция не может быть завершена, NSUnderlyingError = 0x7b5b6810 {Домен ошибки = NSOSStatusErrorDomain Code = -12782 "(null)"}, NSLocalizedFailureReason = An произошла неизвестная ошибка (-12782)}

Помогите пожалуйста мне!

РЕДАКТИРОВАТЬ:

Пробовал это предложение безуспешно. приложение все равно вылетает. Сбой приводит меня к AppDelegate, если эта информация кому-нибудь поможет.

import UIKit
import AVKit
import AVFoundation
import DynamicBlurView

class VideoPlayerViewController: AVPlayerViewController {

    var urlString: String!
    let blurView = DynamicBlurView()

    override func viewDidLoad() {
        super.viewDidLoad()

        streamVideo()
    }

    func streamVideo() {
        blurView.frame = view.frame
        UIView.showProgressView(on: view, blurView: blurView)

        let sampleURL = "https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8"

        guard let url = URL(string: sampleURL) else { return }
        let playerItem = AVPlayerItem(url: url)
        player = AVPlayer(playerItem: playerItem)
        player?.play()

        UIView.hideProgressView(on: view, blurView: blurView)
    }
}

person S. Stark    schedule 08.03.2017    source источник


Ответы (1)


Вы должны убедиться, что ваш URL-адрес предоставляет действительный источник HLS.

import UIKit
import AVKit
import AVFoundation

class myAVPlayerViewController: AVPlayerViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // custom HLS
        // http://localhost:3000/assets/videos/iframe_index.m3u8
        // apple HLS example
        // https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8

        guard let url = URL(string: "https://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/bipbop_4x3_variant.m3u8") else { return }
        let playerItem = AVPlayerItem(url: url)
        player = AVPlayer(playerItem: playerItem)
        player?.play()
    }
}

Кроме того, не забудьте установить для ключа NSAllowsArbitraryLoads значение YES в словаре NSAppTransportSecurity в вашем Info.plist.

person Willjay    schedule 08.03.2017