无线电流AVPlayer延迟(延迟)是高速3

时间:2017-02-16 15:52:57

标签: swift streaming avplayer radio

在我的应用中,我播放音频直播,延迟非常重要。我正在使用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
        }
    }
} 

1 个答案:

答案 0 :(得分:0)

我假设您的网络足够快,可以加载必要的缓冲区,延迟3秒钟。

您要查看的是-prerollAtRate:的{​​{1}}。如果使用得当,它可以在您按下播放和听到声音之间实现最小的延迟。然而,它需要下载部分歌曲才能进行处理。

至于AVAudioSession,它不是你想要的,AVPlayer是适合你的。

如果AVPlayer不够快,我建议调查BASS这是一个基于AudioUnits框架的低级C音频库,可以精确,快速地控制你的流。