Dash.js播放HLS流时为什么一直卡在loading状态?
我用 Dash.js 尝试播放一个 HLS 流(其实是 .m3u8 链接),但页面一直显示 loading,控制台也没报错。明明这个链接在 VLC 里能正常播放,是不是我初始化方式有问题?
我试过设置 type: ‘application/x-mpegURL’,也试过不指定 type 让它自动识别,都不行。代码大概是这样:
const video = document.querySelector('#video');
const player = dashjs.MediaPlayer().create();
player.initialize(video, 'https://example.com/stream.m3u8', true);
Dash.js 是专门播放 MPEG-DASH(.mpd 格式)的,你给它喂 .m3u8 它当然不吃。这俩协议完全是两套东西,虽然都是自适应流,但一个是苹果主导的 HLS,一个是 MPEG 组织搞的 DASH,互不兼容。
VLC 能播是因为人家全能选手,啥格式都支持。
要播 HLS 流,直接用 hls.js 就行,这才是正解:
如果你的项目需要同时支持 DASH 和 HLS 两种流,建议直接上 video.js,它通过插件能统一处理这两种格式,代码会干净很多,不用自己判断格式再切换播放器。
下次遇到这种"能播但不显示"的情况,先确认下播放器和流格式是否匹配,别像我以前一样排查半天最后发现是拿错了工具。