如何提取安卓电视当前播放视频流的帧率(FPS)?
提取播放中视频片段的帧率(FPS)方法
针对你无法获取流URL或路径的场景,分不同服务类型提供可行方案:
网页端自有服务
- 用浏览器原生Media API:如果你的服务是网页形式,直接操作页面内的
<video>元素即可。等视频加载元数据后,读取video.videoTracks[0].frameRate就能拿到标称帧率;要是想获取排除卡顿丢帧后的真实播放帧率,可以自行统计:
let lastTimestamp = 0; let frameCount = 0; let actualFps = 0; const videoElement = document.querySelector('video'); videoElement.addEventListener('timeupdate', () => { const currentTime = videoElement.currentTime; if (lastTimestamp !== 0) { const timeDiff = currentTime - lastTimestamp; frameCount++; // 每1秒计算一次实际帧率 if (timeDiff >= 1) { actualFps = frameCount / timeDiff; frameCount = 0; lastTimestamp = currentTime; // 此处可将actualFps传入你的自有服务 console.log(`实际播放帧率: ${actualFps.toFixed(2)} FPS`); } } else { lastTimestamp = currentTime; } });
- 嵌入YouTube视频的情况:通过YouTube IFrame API初始化播放器后,没有直接返回帧率的接口,但可以用两种方式近似获取:一是根据
player.getVideoPlaybackQuality()返回的画质等级(比如hd1080对应60FPS、hd720对应30FPS)匹配标称帧率;二是用上面的实际帧率统计方法,实时计算播放中的真实帧率。
原生端自有服务(移动端/桌面端)
- 借助平台媒体框架:Android用ExoPlayer的话,通过
TrackSelector获取当前选中的媒体轨道,轨道信息里包含标称帧率;iOS用AVPlayer的话,从AVPlayerItem.tracks中取出对应AVAssetTrack,读取nominalFrameRate属性即可。 - 实时统计实际帧率:监听视频帧的渲染回调(Android可监听Surface的帧回调,iOS用
AVPlayerLayer的渲染通知),统计单位时间内的渲染帧数,得到真实播放帧率,这种方法能反映网络或设备性能导致的帧率波动,准确度更高。
关键提示
- 标称帧率是媒体文件的设定值,实际播放帧率可能因网络卡顿、设备性能不足低于标称值,可按需选择获取方式。
- 自适应比特率的流媒体可能动态切换帧率,需要持续监测更新数据。
内容的提问来源于stack exchange,提问作者droid_dev
相关产品推荐
相关产品推荐

