uni-app video组件无法播放本地未加密网络地址的m3u8文件
uni-app video组件无法播放本地未加密网络地址的m3u8文件
信息类别 | 详情 |
---|---|
产品分类 | uniapp/App |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 10 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.29 |
手机系统 | Android |
手机系统版本号 | Android 9.0 |
手机厂商 | 小米 |
手机机型 | mix3 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 云端 |
项目创建方式 | HBuilderX |
示例代码:
<video src="file:///storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc/index.m3u8" controls @error="err"></video>
操作步骤:
<video src="file:///storage/emulated/0/Android/data/io.dcloud.HBuilder/apps/HBuilder/doc/index.m3u8" controls @error="err"></video>
预期结果:
可以播放
实际结果:
不能播放
bug描述:
video不能播放本地m3u8,m3u8为未加密网络地址
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=720x1280
https://vip.ffzy-play8.com/20241112/207922_0ef795be/2000k/hls/mixed.m3u8
3 回复
m3u8 只适用于网络资源加载,也就是必须得使用 http/https 服务器加载,因此只支持播放网络资源,不支持播放本地资源
但全本地资源是可以正常播放的,即把m3u8对应的ts全部下载到本地,m3u8内原指向的网络资源改成指向本地资源是可以正常播放的
在 uni-app
中使用 video
组件播放本地未加密网络地址的 m3u8
文件时,如果遇到无法播放的问题,通常是由于视频流格式或网络请求配置不正确导致的。以下是一个简单的示例代码,展示了如何在 uni-app
中使用 video
组件播放 m3u8
文件,并包括一些可能需要的配置。
示例代码
<template>
<view>
<video
id="videoPlayer"
src="https://example.com/path/to/your/playlist.m3u8" <!-- 替换为你的m3u8文件地址 -->
controls
autoplay
muted
@error="handleError"
></video>
</view>
</template>
<script>
export default {
data() {
return {
// 可以在这里添加其他数据
};
},
methods: {
handleError(event) {
console.error('Video error:', event.detail);
// 可以在这里添加错误处理逻辑,比如显示错误提示等
uni.showToast({
title: '视频播放失败,请检查网络或文件地址',
icon: 'none'
});
}
},
onReady() {
// 如果需要,可以在这里获取video上下文进行更复杂的操作
this.videoContext = uni.createVideoContext('videoPlayer');
// 例如,监听视频加载状态
this.videoContext.onLoadedMetadata(() => {
console.log('Video metadata loaded');
});
}
};
</script>
<style scoped>
/* 样式可以根据需要调整 */
video {
width: 100%;
height: auto;
background-color: #000;
}
</style>
注意事项
-
确保m3u8文件可访问:首先确认
m3u8
文件及其引用的视频片段(TS 文件)是可以通过提供的网络地址访问的。 -
跨域问题:如果
m3u8
文件和 TS 文件位于不同的域名下,可能会遇到跨域问题。确保服务器配置了正确的 CORS(跨源资源共享)策略。 -
网络请求配置:在某些情况下,可能需要配置
uni-app
的网络请求设置,比如设置合法的域名白名单等。 -
浏览器兼容性:虽然
uni-app
封装了多平台支持,但不同平台对m3u8
文件的支持程度可能不同。确保在目标平台上进行充分测试。 -
错误处理:如上例所示,添加错误处理逻辑可以帮助诊断播放失败的原因。
如果以上方法仍然无法解决问题,建议检查具体的错误信息,并根据错误信息进一步排查问题。