Я попытался буферизовать и немедленно воспроизвести аудио remote url
с быстрым языком.
но проблема в том, чтобы долго readyToPlay
дело и играть.
например, для запуска звукового URL требуется от 12 до 15 секунд.
это мой код:
var asset: AVAsset!
var player: AVPlayer!
var playerItem: AVPlayerItem!
private var playerItemContext = 0
let requiredAssetKeys = [ "playable","hasProtectedContent"]
let url = URL(string: "http://sound_link.mp3")!
asset = AVAsset(url: url)
playerItem = AVPlayerItem(asset: asset,
automaticallyLoadedAssetKeys: requiredAssetKeys)
playerItem.addObserver(self,
forKeyPath: #keyPath(AVPlayerItem.status),
options: [.old, .new],
context: &playerItemContext)
player = AVPlayer(playerItem: playerItem)
что в соответствии с этой (ExploringAVFoundation) документацией это сделано
и для управления, что игрок готов к игре, я использую observeValue func
:
override func observeValue(forKeyPath keyPath: String?,of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard context == &playerItemContext else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
return
}
if keyPath == #keyPath(AVPlayerItem.status) {
let status: AVPlayerItemStatus
if let statusNumber = change?[.newKey] as? NSNumber {
status = AVPlayerItemStatus(rawValue: statusNumber.intValue)!
} else {
status = .unknown
}
// Switch over status value
switch status {
case .readyToPlay:
print("readyToPlay \(status.rawValue)")
player.play() // here play remote sound
case .failed:
print("readyToPlay \(status.rawValue)")
case .unknown:
print("failed \(status.rawValue)")
}
}
}
и это возвращается журнал:
2017-02-08 13:44:00.626036 [15144:3747850] [aqme] 255: AQDefaultDevice (1): skipping input stream 0 0 0x0
readyToPlay 1
2017-02-08 13:44:02.631182 [15144:3747850] [aqme] 255: AQDefaultDevice (173): skipping input stream 0 0 0x0
в приведенном выше журнале, readyToPlay 1
4 секунды, чтобы появилось readyToPlay 1
затем 10 секунд, чтобы воспроизвести звук
Скорость работы сервера хороша, и я попытался воспроизвести серверный звук в Android
и максимальное время для буферизации и воспроизведения звука составляет около 3 секунд (в приложении Android
), но при полной буферизации IOS
и воспроизведении звука полностью занимает около 15 секунд!
Спасибо за внимание