Я работаю над проектом, который реализует библиотеку OpenHome в swift.Я работаю на стороне провайдера Renderer, что означает, что прокси-серверы отправляют URL-адреса медиа-элементов в пределах одной сети для воспроизведения.Приложение после получения URL-адреса должно установить AVPlayer и воспроизвести.
Предоставленные URL-адреса выглядят следующим образом:
Если URL-адрес содержит «orig», это означает, что файл соответствует расширению.С другой стороны, если URL-адрес содержит «trans», это означает, что указанный файл будет соответствовать расширению, но он будет передаваться на лету во время преобразования.
Этот метод работает с Sonos, Android и Chromeбраузеры, когда я ввожу URL.Однако он не работает ни с iOS, ни с Safari (учитывая, что я делаю это правильно).
Я прилагаю тестовый ViewController, который обрабатывает процесс
import UIKit
import AVFoundation
class ViewController: UIViewController {
private var avAudioPlayer:AVPlayer!
private var avAudioSession:AVAudioSession = AVAudioSession.sharedInstance()
override func viewDidLoad() {
super.viewDidLoad()
try! avAudioSession.setCategory(.playback, mode: .default, options: [])
try! avAudioSession.setActive(true)
let urlString = "http://192.168.1.123:8088/ext/trans/audio/2249.mp3"
let url = URL(string: urlString)!
avAudioPlayer = AVPlayer(url: url)
avAudioPlayer?.addObserver(self, forKeyPath: "status", options: [], context: nil)
}
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "status"{
switch avAudioPlayer.status{
case .readyToPlay:
print("Hey: Ready To Play")
avAudioPlayer.play()
case .failed:
print("FAILED OH Nooo!")
case .unknown:
print("Something went wrong but ...")
}
}
}
}
- NSAllowsArbitraryLoads установленов true
Я прилагаю некоторые данные о состоянии:
print("A Reason = \(String(describing: avAudioPlayer.reasonForWaitingToPlay?.rawValue))")
-->A Reason = "AVPlayerWaitingWhileEvaluatingBufferingRateReason"
print("TIME Control Status = \(avAudioPlayer.timeControlStatus.rawValue)")
-->TIME Control Status = 1
Спасибо.