Привет, мне нужна помощь с чем-то.У меня есть приложение Live Stream и приложение onDemand Playing, выполненное с помощью Ionic 1, и проигрыватель - это CordovaPlugin, созданный мной с помощью Swift Code.Я перевожу приложение на React Native и я подключаю этот плагинВсе работает нормально, кроме Live Streams.Один и тот же код есть в обоих приложениях, но реактивная версия выдает ошибку «Операция не может быть завершена».Я думаю, что это может быть настройка, однако мои знания Swift ограничены
Спасибо !!!
Вот код для видеоплеера.Я использую реализацию FairPlay от Apple.Как я повторяю, этот код работает в моем Ionic Application как плагин Cordova.Однако в React Native работает только VOD.Прямых трансляций нет.
import UIKit
import AVFoundation
import AVKit
class MyPlayerViewController: UIViewController {
var playerController = AVPlayerViewController()
private var pendingContentKeyRequests = [String: Asset]()
override func viewDidLoad() {
UIDevice.current.setValue(UIInterfaceOrientation.landscapeLeft.rawValue, forKey: "orientation")
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: [])
self.addChildViewController(playerController)
self.view.addSubview(playerController.view)
playerController.view.frame = self.view.frame
AssetPlaybackManager.sharedManager.delegate = self
setVideo(url: "http://rt-esp.secure.footprint.net/1102-inadv-qidx-1k_v3.m3u8", drm: DRM(header_name: "", header_body: "", license_server: ""), certificate: "")
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return UIInterfaceOrientationMask.landscape
}
func downloadFairPlayApplicationCertificate(certificate: String?) {
let downloader = FairPlayApplicationCertificateDownloader(certificate_url: certificate)
downloader.maybeDownloadApplicationCertificate(completion: { (success, errorMessage, errorDetailObject) -> Void in ()})
}
func playVideo(){
let asset = AssetListManager.sharedManager.asset(at: 0)
AssetPlaybackManager.sharedManager.setAssetForPlayback(asset)
}
func handleAssetListManagerDidLoadNotification(_: Notification) {
DispatchQueue.main.async {
}
}
func handleAssetLoaderDelegateDidPersistContentKeyNotification(notification: Notification) {
guard let assetName = notification.userInfo?[Asset.Keys.name] as? String, let asset = self.pendingContentKeyRequests.removeValue(forKey: assetName) else {
return
}
AssetPersistenceManager.sharedManager.downloadStream(for: asset)
}
func setVideo(url: String, drm: DRM, certificate: String) {
AssetListManager.sharedManager.removeAll()
downloadFairPlayApplicationCertificate(certificate: certificate)
AssetListManager.sharedManager.addAsset(url: url, header_name: drm.header_name, header_body: drm.header_body, license: drm.license_server)
NotificationCenter.default.addObserver(self, selector: #selector(handleAssetListManagerDidLoadNotification(_:)), name: AssetListManager.didLoadNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(handleAssetLoaderDelegateDidPersistContentKeyNotification(notification:)), name: AssetLoaderDelegate.didPersistContentKeyNotification, object: nil)
self.playVideo()
}
}
extension MyPlayerViewController: AssetPlaybackDelegate {
func streamPlaybackManager(_ streamPlaybackManager: AssetPlaybackManager, playerReadyToPlay player: AVPlayer) {
NSLog("---------- PLAY START ----------")
self.playerController.player = player
player.play()
}
func streamPlaybackManager(_ streamPlaybackManager: AssetPlaybackManager, playerCurrentItemDidChange player: AVPlayer) {
NSLog("---------- OK ----------")
}
func streamPlaybackManager(_ streamPlaybackManager: AssetPlaybackManager, playerError error: String) {
NSLog("---------- ERROR ----------")
NSLog(error)
}
}