2017-02-16 88 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 секунды задержки.

Что вы хотите посмотреть, это -prerollAtRate: из AVPlayer. При правильном использовании он будет обеспечивать минимальную задержку между нажатием кнопки воспроизведения и звуком. Однако требуется, чтобы часть песни была загружена уже для обработки.

Что касается AVAudioSession, это не то, что вы ищете, AVPlayer - правильный класс для вас.

Если AVPlayer не достаточно быстрый, я предлагаю посмотреть на BASS, который представляет собой низкоуровневую библиотеку аудиовизуальных средств на основе структуры AudioUnits, которая позволяет точно и быстро контролировать ваш поток.