uni-app video组件无法播放本地未加密网络地址的m3u8文件

发布于 1周前 作者 gougou168 来自 Uni-App

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

下载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>

注意事项

  1. 确保m3u8文件可访问:首先确认 m3u8 文件及其引用的视频片段(TS 文件)是可以通过提供的网络地址访问的。

  2. 跨域问题:如果 m3u8 文件和 TS 文件位于不同的域名下,可能会遇到跨域问题。确保服务器配置了正确的 CORS(跨源资源共享)策略。

  3. 网络请求配置:在某些情况下,可能需要配置 uni-app 的网络请求设置,比如设置合法的域名白名单等。

  4. 浏览器兼容性:虽然 uni-app 封装了多平台支持,但不同平台对 m3u8 文件的支持程度可能不同。确保在目标平台上进行充分测试。

  5. 错误处理:如上例所示,添加错误处理逻辑可以帮助诊断播放失败的原因。

如果以上方法仍然无法解决问题,建议检查具体的错误信息,并根据错误信息进一步排查问题。

回到顶部