在我的应用程序中,我播放音频直播,延迟非常重要。我正在使用AVPlayer,但它需要5-6秒才能启动,我需要它3秒的最大延迟。我如何才能更快地开始播放,并减少延迟?设置一个小缓冲区就可以了吗?如何使用AVPlayer进行设置?
这是我的RadioPlayer类:
import Foundation
import AVFoundation
class RadioPlayer {
static let sharedInstance = RadioPlayer()
private var player = AVPlayer()
private var isPlaying = false
private var language: LanguageDOM?
func play() {
player.play()
isPlaying = true
}
func pause() {
player.pause()
isPlaying = false
}
func toggle() {
if isPlaying == true {
pause()
} else {
play()
}
}
func currentTimePlaying() -> CMTime {
return player.currentTime()
}
func changeLanguage(nlanguage: LanguageDOM){
self.pause()
self.language = nlanguage
player = AVPlayer(url: NSURL(string: nlanguage.url)! as URL)
self.play()
}
func currentlyPlaying() -> Bool {
return isPlaying
}
func currentLanguage() -> LanguageDOM {
return self.language!
}
func currentLanguageId() -> Int {
if self.language == nil {
return -1
}
else {
return language!.id
}
}
} 发布于 2017-06-20 21:34:20
我假设您的网络足够快,可以加载3秒延迟所需的缓冲区。
您要查看的是AVPlayer的-prerollAtRate:。如果使用得当,它将允许在您按下播放时和听到声音时之间的最小延迟。然而,它要求歌曲的一部分已经下载以进行处理。
至于AVAudioSession,它不是你想要的,AVPlayer是适合你的类。
如果AVPlayer还不够快,我建议你看看BASS,这是一个建立在AudioUnits框架之上的类似于C语言的低级音频库,它可以精确而快速地控制你的音频流。
https://stackoverflow.com/questions/42278692
复制相似问题