Dash.js在React中监听缓冲事件不触发怎么办?
我用Dash.js在React里做视频播放,想监听缓冲开始事件来显示加载提示。按照文档写了事件绑定,但控制台一直没输出,是哪里漏了吗?
import React, { useRef, useEffect } from 'react';
import dashjs from 'dashjs';
const VideoPlayer = ({ src }) => {
const playerRef = useRef();
useEffect(() => {
const player = dashjs.createPlayer({
referenceId: playerRef.current.id,
autoPlay: true,
streaming: {
bufferingTime: 2
}
});
player.initialize();
player.attachSource(src);
// 这里绑定事件没反应
player.on('bufferingstart', () => {
console.log('开始缓冲了!'); // 没有输出
});
return () => player.destroy();
}, [src]);
return ;
};
export default VideoPlayer;
尝试过换成’onBufferStart’和’onBuffer’事件名都不行,视频能正常播放但缓冲提示一直不显示。控制台也没报错,求大佬指点!
bufferingstart,而是BUFFERING_STARTED。而且必须用dashjs.MediaPlayer.events里面定义的常量,否则绑定无效。下面是修复后的代码:
血泪教训:Dash.js 的文档写得挺坑,很多事件名不是直觉写法,比如还有
PLAYBACK_ENDED、ERROR等,一定要去查它源码里的MediaPlayer.events才行。你写的bufferingstart这种命名是 Angular 或是某些其他框架的写法,Dash.js 不认这个。你现在的代码里写的是
'bufferingstart',但实际上应该用dashjs.MediaPlayer.events.BUFFERING_START这个常量。这是 Dash.js 推荐的最佳实践,能避免拼写错误的问题。修改后的代码如下:
另外,记得也监听一下
BUFFERING_END事件,这样可以更完整地处理加载提示的显示和隐藏逻辑。这种问题真是让人头大,明明视频能正常播放,但事件就是不触发,其实很多时候是细节没踩对。希望这次能解决你的问题!