uni-app video组件播放m3u8视频报错
uni-app video组件播放m3u8视频报错
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | windows11 | HBuilderX |
### 操作步骤:
```html
<view class="video-wrap" ref="videoWrapHls">
<video id="myVideo"
src="http://47.106.69.181:10086/fvod/patJ7pl7R/video.m3u8"
autoplay
controls="false"
enable-progress-gesture="false"></video>
</view>
预期结果:
正常播放
实际结果:
报错Uncaught (in promise) DOMException: The element has no supported sources.
bug描述:
播放报错Uncaught (in promise) DOMException: The element has no supported sources.
更多关于uni-app video组件播放m3u8视频报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app video组件播放m3u8视频报错的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在 uni-app
中使用 video
组件播放 .m3u8
视频时,可能会遇到一些报错或无法播放的问题。以下是一些常见的原因和解决方法:
1. 检查视频源是否有效
- 确保
.m3u8
文件链接是有效的,并且可以在其他播放器(如 VLC 或浏览器)中正常播放。 - 如果视频源是跨域的,确保服务器配置了正确的 CORS 头。
2. 检查 video
组件的属性
- 确保
video
组件的src
属性正确指向.m3u8
文件。 - 如果需要支持
.m3u8
格式,可以尝试设置type
属性为"hls"
:<video :src="videoUrl" type="hls"></video>
- 如果
type
属性设置为"hls"
仍然无法播放,可能是平台不支持。
3. 平台兼容性问题
-
H5 端:H5 端默认不支持
.m3u8
格式,需要引入第三方库(如hls.js
)来实现播放。- 安装
hls.js
:npm install hls.js
- 在页面中使用:
import Hls from 'hls.js'; export default { data() { return { videoUrl: 'https://example.com/video.m3u8', }; }, mounted() { const video = this.$refs.video; if (Hls.isSupported()) { const hls = new Hls(); hls.loadSource(this.videoUrl); hls.attachMedia(video); hls.on(Hls.Events.MANIFEST_PARSED, () => { video.play(); }); } else if (video.canPlayType('application/vnd.apple.mpegurl')) { video.src = this.videoUrl; video.addEventListener('loadedmetadata', () => { video.play(); }); } }, };
<video ref="video" controls></video>
- 安装
-
App 端:App 端默认支持
.m3u8
格式,但需要确保video
组件的src
属性正确,并且视频源是有效的。 -
小程序端:小程序端可能不支持
.m3u8
格式,需要将视频转码为支持的格式(如.mp4
)。
4. 调试工具
- 使用浏览器的开发者工具(F12)查看网络请求,检查
.m3u8
文件和分片文件是否正常加载。 - 查看控制台是否有错误信息,例如跨域问题或格式不支持。
5. 其他解决方案
- 如果以上方法无效,可以尝试将
.m3u8
文件转换为其他格式(如.mp4
)进行播放。 - 使用第三方播放器插件(如
video.js
或dplayer
)来支持.m3u8
格式。
示例代码
以下是一个完整的示例,支持 H5 端播放 .m3u8
视频:
<template>
<view>
<video ref="video" controls></video>
</view>
</template>
<script>
import Hls from 'hls.js';
export default {
data() {
return {
videoUrl: 'https://example.com/video.m3u8',
};
},
mounted() {
const video = this.$refs.video;
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(this.videoUrl);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, () => {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = this.videoUrl;
video.addEventListener('loadedmetadata', () => {
video.play();
});
}
},
};
</script>