swift - 广播流媒体 AVPlayer 延迟(延迟)太高 swift 3

标签 swift avplayer audio-streaming internet-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
        }
    }
} 

最佳答案

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

你要查看的是AVPlayer-prerollAtRate:。如果使用得当,它将在您按下播放键和听到声音之间实现最小的延迟。然而,它要求已经下载歌曲的一部分进行处理。

至于 AVAudioSession,它不是您要找的,AVPlayer 才是适合您的类。

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

关于swift - 广播流媒体 AVPlayer 延迟(延迟)太高 swift 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42278692/

相关文章:

ios - 难以理解 Realm 中的 allObjects()

ios - 在播放来自 UIImagePickerController 的视频之前,AVPlayer 不会播放视频

node.js - 连接 'audio/x-wav' 缓冲区并与 'Transfer-Encoding' : 'chunked' 一起使用

android - ExoPlayer,如何加载远程音频文件的更大部分

ios - Spritekit 动画没有改变

ios - 触摸 UITableView 时取消手势识别器

ios - 使用 AVAssetDownloadTask 播放时缓存 HLS 视频

ios - 检查 AVPlayer 的播放状态并将叠加 View 添加到 AVPlayerViewController

javascript - 如何通过 NAT 传输 WebRTC 音频?

swift - NSOutlineView显示三角形垂直偏离中心