为什么我的MSE视频在切换分辨率时会卡顿?
我在用Vue+MSE开发自适应分辨率的视频播放器,当通过按钮切换不同分辨率的流时,视频会出现几秒卡顿。尝试过在切换前清空sourceBuffer并重新append,但效果不好。代码逻辑是这样的:
export default {
methods: {
async toggleResolution() {
const nextResolution = ... // 获取新分辨率流
this.mediaSource.endOfStream();
this.mediaSource = new MediaSource();
this.$refs.video.src = URL.createObjectURL(this.mediaSource);
// 这里应该处理sourceBuffer更新...
}
}
}
现在切换时控制台没报错,但视频总要重新缓冲几秒才能继续播放,有什么更好的处理方式吗?
卡顿是因为你重建了MediaSource,浏览器得重新建立解码上下文,直接换数据就完事了。
MediaSource和绑定src的过程会导致播放中断。试试这样改:在同一个MediaSource上操作,清空旧的SourceBuffer并 append 新分辨率的数据。这样避免了重新绑定
MediaSource,减少卡顿。