Dash.js播放HLS流时为什么一直卡在loading状态?

慕容永穗 阅读 9

我用 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);
我来解答 赞 4 收藏
二维码
手机扫码查看
1 条解答
UE丶翠翠
兄弟,你这问题根源很简单:Dash.js 根本不支持 HLS 流。

Dash.js 是专门播放 MPEG-DASH(.mpd 格式)的,你给它喂 .m3u8 它当然不吃。这俩协议完全是两套东西,虽然都是自适应流,但一个是苹果主导的 HLS,一个是 MPEG 组织搞的 DASH,互不兼容。

VLC 能播是因为人家全能选手,啥格式都支持。

要播 HLS 流,直接用 hls.js 就行,这才是正解:

import Hls from 'hls.js';

const video = document.querySelector('#video');
const url = 'https://example.com/stream.m3u8';

if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(url);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, () => {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
// Safari 原生支持 HLS
video.src = url;
}


如果你的项目需要同时支持 DASH 和 HLS 两种流,建议直接上 video.js,它通过插件能统一处理这两种格式,代码会干净很多,不用自己判断格式再切换播放器。

下次遇到这种"能播但不显示"的情况,先确认下播放器和流格式是否匹配,别像我以前一样排查半天最后发现是拿错了工具。
点赞 1
2026-03-02 10:12