HarmonyOS鸿蒙Next中关于AVPlayer的bufferingUpdate事件CACHED_DURATION的value值问题

HarmonyOS鸿蒙Next中关于AVPlayer的bufferingUpdate事件CACHED_DURATION的value值问题 在使用AVPlayer的过程中发现bufferingUpdate事件的infoTypemedia.BufferingInfoType.CACHED_DURATION时,value值并不准确,或者说和官方文档说的:**表示已缓冲数据预估可播放时长,单位为毫秒(ms)**并不一致。

以下为使用一个高码率视频进行播放时的日志打印部分内容,现象是视频一直在卡顿播放。

12-24 15:06:55.770   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=BUFFERING_PERCENT value=95
12-24 15:06:55.770   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=509499
12-24 15:06:55.770   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=510937
12-24 15:06:55.770   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=512881
12-24 15:06:55.771   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=BUFFERING_PERCENT value=97
12-24 15:06:55.789   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=516509
12-24 15:06:55.789   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=523518
12-24 15:06:55.789   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=BUFFERING_PERCENT value=99
12-24 15:06:55.790   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=530527
12-24 15:06:55.790   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=537536
12-24 15:06:55.790   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=540863
12-24 15:06:55.790   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=542807
12-24 15:06:55.809   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=4837
12-24 15:06:55.809   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=11846
12-24 15:06:55.809   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=BUFFERING_PERCENT value=2
12-24 15:06:55.809   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=18856
12-24 15:06:55.809   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=25865
12-24 15:06:55.810   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=BUFFERING_PERCENT value=4
12-24 15:06:55.810   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=31081
12-24 15:06:55.810   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=32874
12-24 15:06:55.820   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=39883
12-24 15:06:55.821   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=BUFFERING_PERCENT value=7
12-24 15:06:55.821   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=46892
12-24 15:06:55.821   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=CACHED_DURATION value=53902
12-24 15:06:55.821   45491-45491   XXX     I     AVPlayer on bufferingUpdate: infoType=BUFFERING_PERCENT value=10

日志一直重复的回调BUFFERING_PERCENT(value:0->100),也就是视频一直在反复缓冲播放!但日志中CACHED_DURATION的value已达542807,换算成秒就是500多秒!然后播放器瞬间消费完缓存!

麻烦官方工程师帮忙看下这是什么原因所致?

测试机型:Meta 60 Pro (5.1.0.150 SP15 最新鸿蒙系统)

测试视频文件的部分信息:

    encoder         : Lavf60.10.100
  Duration: 00:14:58.57, start: 0.000000, bitrate: 12587 kb/s
  Stream #0:0[0x1](eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 1920x882, 12474 kb/s, 30 fps, 30 tbr, 1000k tbn (default)

更多关于HarmonyOS鸿蒙Next中关于AVPlayer的bufferingUpdate事件CACHED_DURATION的value值问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者您好,您可以参考这个示例代码:网络视频缓冲进度条,本地参考这个示例代码没有复现问题,如果开发者使用这个代码仍出现问题,开发者请提供一下您播放的视频的url。

更多关于HarmonyOS鸿蒙Next中关于AVPlayer的bufferingUpdate事件CACHED_DURATION的value值问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,AVPlayer的bufferingUpdate事件返回的CACHED_DURATION的value值表示当前已缓存的媒体时长,单位为毫秒。该值在播放网络流时动态变化,反映缓冲区数据量。开发者可通过监听此事件获取实时缓存进度,用于更新UI提示。具体数值由系统底层缓冲状态决定,直接读取即可。

从日志来看,CACHED_DURATION 值从约 542807 毫秒骤降至 4837 毫秒,这确实表明播放器内部的缓冲区被快速清空,导致视频卡顿并重新缓冲。这通常与高码率视频(如你的 12.5 Mbps 测试文件)播放时的数据消耗速率超过网络或存储的供给速率有关。

CACHED_DURATION 的值反映的是当前已下载并缓存在内存中的数据,根据当前播放码率估算出的可播放时长。这个“当前播放码率”是关键。当播放高码率视频时:

  1. 初始缓冲阶段,系统可能以一个较低的、预估的码率来计算缓存时长,因此 CACHED_DURATION 值会累积到一个很大的数字(如 500 多秒)。
  2. 开始播放后,播放器使用真实的、更高的视频码率来解码和消费数据。此时,缓冲区的数据被高速消耗。
  3. 如果数据下载速度跟不上这个高码率的消耗速度,缓冲区就会迅速见底。CACHED_DURATION 值会急剧下降,触发播放器重新进入缓冲状态(BUFFERING_PERCENT 从 0 开始),导致卡顿。

你的日志完美匹配了这个过程:缓存时长先累积到一个很高的值,然后在极短时间内(同一毫秒内)暴跌,紧接着 BUFFERING_PERCENT 回落到 2%,开始新一轮的缓冲循环。

因此,CACHED_DURATION 的值本身计算可能没有问题,问题在于其计算所依赖的“码率”在缓冲阶段和播放阶段可能不一致,导致预估的可播放时长与实际情况出现巨大偏差。这在高码率视频流播放中是一个已知的挑战。建议检查网络带宽或本地文件读取速度是否足以持续支撑 12.5 Mbps 的码率。

回到顶部