Я попытался буфер и сразу же сыграл remote url
аудио с быстрым языком.AVPlayer слишком длинный и с задержкой до readyToPlay и проигрывать музыку на сервере в swift
но проблема с длинным временем до 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) documentation've done that
и обрабатывать, что игрок готов к игроку играть я использовать 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
в выше журнале, возьмите 4 секунды, чтобы появиться readyToPlay 1
затем принять 10 секунд, чтобы играть звук
скорость Север хорошо и я пытался играть звук сервера в Android
и макс время для буферизации и воспроизведения звука составляет около 3 секунд (в приложении Android
), но в IOS
буферизация и воспроизведение звука полностью, полностью занимает около 15 секунд!
Благодарит Вас за внимание
Ваша проблема в том, что для iOS требуется слишком много времени для загрузки достаточного количества файлов, чтобы сделать его доступным для воспроизведения? Можете ли вы опубликовать ссылку на файл, который вы тестируете, чтобы мы могли делать некоторые сравнения? –
@DaveWeston, независимо от того, какие ссылки - я пробовал несколько ссылок - тоже ссылки работают корректно в 'Android', но не в' IOS' – Saeid
Причина, о которой я прошу, заключается в том, что в моих тестах звук начинает играть почти мгновенно. Я взял код из вашего вопроса и использовал этот URL-адрес: http://www.mfiles.co.uk/mp3-downloads/frederic-chopin-piano-sonata-2-op35-3-funeral-march.mp3 –