2017-02-16 102 views
0

在我的应用程序中播放音频直播流,延迟非常重要。我正在使用AVPlayer,但它需要5-6秒才能启动,我需要延迟3秒。我该怎么做才能更快开始播放并减少延迟? 设置一个小缓冲区将完成这项工作?如何使用AVPlayer进行设置?无线电流AVPlayer延迟(延迟)是高速3

这是我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 
     } 
    } 
} 
+0

我想实现AVAudioSession,但我无法理解它 – Jason

回答

0

我假设你的网络速度不够快,加载必要的缓冲3秒的延迟。

你想要看的是AVPlayer-prerollAtRate:。正确使用时,它可以在按下播放按钮和听到声音时保持最小的延迟时间。然而,它需要下载歌曲的一部分以供处理。

至于AVAudioSession,它不是你要找的,AVPlayer是适合你的课堂。

如果AVPlayer速度不够快,我建议您查看BASS这是一个低级C类音频库,它建立在AudioUnits框架之上,可以对您的流进行精确和快速的控制。