uni-app nvue下 video拉流 ios一直触发error且detail对象内没有值

uni-app nvue下 video拉流 ios一直触发error且detail对象内没有值

示例代码:

<video class="livePlayer" autoplay :src="url" :controls="false" [@error](/user/error)="error" id="myVideo" ref="myVideo" @click="page_click" style="flex: 1;" />

具体代码已在附件内

操作步骤:

获取后台地址返回的视频拉流之后 ios正常播放画面 有声音 会一直触发error 返回的event对象内detail是空对象 安卓无问题

预期结果:

视频拉流加载成功之后不会触发error

实际结果:

视频拉流加载成功之后一直触发error

bug描述:

nvue下 video拉流 ios一直触发@error 且detail对象内没有值
安卓@error无异常 第一次获取流会有概率问题失败 调用@error后重载无异常
详情见附件

开发环境 版本号 项目创建方式
Windows 64 HBuilderX
4.15
iOS iOS 14

Image

bug.zip


更多关于uni-app nvue下 video拉流 ios一直触发error且detail对象内没有值的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app nvue下 video拉流 ios一直触发error且detail对象内没有值的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在 uni-app 的 nvue 页面中使用 video 组件进行拉流时,如果 iOS 设备一直触发 error 事件,并且 detail 对象内没有值,可能是由于以下原因导致的:

1. 视频格式或编码不支持

iOS 设备对视频格式和编码的支持有限,通常支持 H.264 编码的 MP4 格式。如果你尝试播放的视频流格式或编码不被 iOS 支持,可能会触发 error 事件。

解决方案:

  • 确保视频流使用 H.264 编码。
  • 如果是 RTMP 流,iOS 原生不支持 RTMP,可以考虑使用 HLS(HTTP Live Streaming)格式。HLS 是 iOS 原生支持的流媒体协议。

2. HLS 流格式问题

如果你使用的是 HLS 流,确保 .m3u8 文件和 .ts 文件能够正常访问,并且 .m3u8 文件的格式正确。

解决方案:

  • 检查 .m3u8 文件是否能够正常访问。
  • 确保 .m3u8 文件中的 .ts 文件路径正确。

3. 跨域问题

如果视频流是从其他域名拉取的,可能会遇到跨域问题,导致视频无法播放。

解决方案:

  • 确保服务器配置了正确的 CORS(跨域资源共享)策略,允许客户端访问视频流。

4. 网络问题

如果网络不稳定或视频流地址无法访问,可能会导致 error 事件触发。

解决方案:

  • 检查网络连接是否正常。
  • 确保视频流地址能够正常访问。

5. video 组件属性配置

确保 video 组件的属性配置正确,特别是 srccontrols 等属性。

示例代码:

<template>
  <view>
    <video
      id="myVideo"
      src="https://example.com/stream.m3u8"
      controls
      @error="onVideoError"
    ></video>
  </view>
</template>

<script>
export default {
  methods: {
    onVideoError(event) {
      console.log('Video error:', event);
    }
  }
}
</script>

6. iOS 原生限制

iOS 对视频播放有一些原生限制,例如自动播放、静音播放等。确保你的视频播放行为符合 iOS 的原生限制。

解决方案:

  • 如果需要在页面加载时自动播放视频,确保视频是静音的(muted 属性)。
  • 如果需要自动播放,可以考虑在用户交互事件(如点击事件)后触发视频播放。

7. 调试信息

如果 detail 对象内没有值,可以尝试使用 console.logalert 输出更多调试信息,帮助定位问题。

示例代码:

onVideoError(event) {
  console.log('Video error event:', event);
  console.log('Error detail:', event.detail);
}
回到顶部