iOS 平台音视频播放器缓冲进度条实现

在 iOS 平台上开发自定义音视频播放器时,缓冲进度条的实现是至关重要的。它可以让用户直观地了解当前媒体文件的加载进度,提升用户体验。

实现缓冲进度条的关键在于准确地获取已缓冲的媒体数据量以及媒体文件总大小。我们可以通过 AVPlayerItem 类的 loadedTimeRanges 属性获取已缓冲的时间范围,并结合 duration 属性计算出缓冲进度。

以下是一段示例代码,展示了如何使用 AVPlayerItem 的属性来更新 UIProgressView 控件以显示缓冲进度:

let playerItem = AVPlayerItem(url: videoURL)
playerItem.addObserver(self, forKeyPath: "loadedTimeRanges", options: .new, context: nil)

func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == "loadedTimeRanges" {
        let loadedTimeRange = playerItem.loadedTimeRanges.first?.timeRangeValue
        if let start = loadedTimeRange?.startValue, let duration = loadedTimeRange?.duration {
            let bufferedTime = CMTimeGetSeconds(CMTimeAdd(start, duration))
            let totalTime = CMTimeGetSeconds(playerItem.duration)
            let bufferProgress = Float(bufferedTime / totalTime)
            // 更新 UIProgressView 控件
            DispatchQueue.main.async {
                self.bufferProgressBar.progress = bufferProgress
            }
        }
    }
}

通过以上步骤,我们可以实现一个功能完善的缓冲进度条,提升 iOS 音视频播放器的用户体验。

folder
[ios]视频音频缓冲进度 预估大小:249个文件
file
18e39b4776d44ef1b074af4d52e30dd80efa82 2KB
file
1eb71229a1b47a65adb99bc1c6fc731a9cf1e1 289B
file
245618a9925c86c5bf91b1010a8f92e502f6b5 3KB
file
14d24a6cb45a18125448a4110d3ebd41dc7b40 592B
file
009d8329ce6d1fde576876e7a6db96f2f9a677 3KB
file
2c9726098ea9b23b1684cea721e2570185bf69 1KB
file
113498b69e961106d82e85d897b85fae22d27b 4KB
file
1ed060d0e8f150cede2d35cfa2ed71b5db7c0a 585B
file
12f9d76b5fbbc7a42fecd973df23d39d3c367e 723B
file
102c8a8db2a9edaba5c69683ae0bc94d25c79a 184B
file
0f514a1d913921bda5c82dd336a19b72ac3506 3KB
file
1e208c2cdf0ce629fed534f03a1b714979fca3 3KB
file
26f1928529e5b56935d4f1459589fb333553d6 2KB
file
2763e3396c99f284b917dda2137b1d99ede383 699B
file
0e441a2dbd10f14dbdafb76b3c55e1da426aa6 926B
file
06c753b24238bf627798c068fb49a93b6193ab 3KB
file
1821497b8e2d5e66f3e1438b42af1d6d7ae065 587B
file
0ce39d2131118baf56aa491855f30f0dbf2554 2KB
file
0995f19a98f552668a96b949a46d4112d90c2a 872B
file
208a33a4863c1ebc61f423b2bb44b30b8af37f 614B
zip 文件大小:645.49KB