uni-app视频播放在安卓和ios的差异

发布于 1周前 作者 yibo5220 来自 uni-app

uni-app视频播放在安卓和ios的差异

问题描述

H5页面,使用webrtc来播放视频,视频返回的比例是704x576,现在我播放视频用 object-fit 在安卓页面是正常拉伸且不会有黑边和裁剪画面,但是在ios端使用 object-fit 会出现上下裁剪的情况,如果设置为 contain 会出现黑边的情况,求怎么解决这个问题

代码示例

<video  
  id="webrtc"  
  playsinline  
  webkit-playsinline  
  x5-playsinline  
  x5-video-player-fullscreen="true"  
  x5-video-player-type="h5"  
  muted  
  x-webkit-airplay  
  show-mute-btn  
  page-gesture  
  autoplay  
  object-fit="fill"  
  controls  
  :enable-progress-gesture="false"  
  is-live  
  class="w100 h100 videoTag"  
>  
</video>

6 回复

普通的网络视频是否正常使用? 缩小下问题范围是 webrtc 的问题,还是 video 都可以复现,如果只是 rtc 有问题,请提供一个可直接使用的网址,供我测试


播放其他视屏是没有问题的.使用的 https://github.com/kernelj/jswebrtc 这个开源webrtc播放视频在安卓正常,在ios上会上下剪裁

会剪裁上下部分

红框是ios上显示视频范围

回复 1***@qq.com: 最好还是提供一个复现工程,目前看影响的范围只有 rtc+ios,我转给相关同事看看

在开发使用uni-app进行跨平台应用开发时,视频播放在安卓和iOS平台上确实可能会遇到一些差异。这些差异通常源于不同操作系统的底层实现以及设备硬件的多样性。以下是一些代码示例,展示了如何在uni-app中处理视频播放,并尝试解决一些常见的平台差异问题。

1. 基础视频播放组件

首先,我们创建一个简单的视频播放组件。在pages/video/video.vue文件中:

<template>
  <view class="container">
    <video
      id="myVideo"
      src="https://www.example.com/path/to/your/video.mp4"
      controls
      autoplay
      @play="onPlay"
      @pause="onPause"
      @ended="onEnded"
    ></video>
  </view>
</template>

<script>
export default {
  methods: {
    onPlay() {
      console.log('Video is playing');
    },
    onPause() {
      console.log('Video is paused');
    },
    onEnded() {
      console.log('Video has ended');
    }
  }
}
</script>

<style>
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
video {
  width: 100%;
  max-width: 600px;
}
</style>

2. 处理平台差异

自动播放问题

iOS设备对于自动播放视频有严格的限制,通常需要在用户交互后才能播放。可以通过监听用户事件来触发播放:

<template>
  <view class="container">
    <button @click="playVideo">Play Video</button>
    <video
      ref="video"
      src="https://www.example.com/path/to/your/video.mp4"
      controls
    ></video>
  </view>
</template>

<script>
export default {
  methods: {
    playVideo() {
      this.$refs.video.play();
    }
  }
}
</script>

全屏播放

对于全屏播放,iOS和安卓的行为也可能不同。在某些情况下,你可能需要手动触发全屏:

methods: {
  enterFullscreen() {
    const videoContext = uni.createVideoContext('myVideo');
    if (uni.getSystemInfoSync().platform === 'ios') {
      // iOS特定处理,可能需要使用自定义全屏逻辑
      videoContext.requestFullScreen();
    } else {
      // 安卓或其他平台
      videoContext.enterFullScreen();
    }
  }
}

注意:uni.createVideoContext的API在不同平台上可能有细微差异,请查阅最新的uni-app文档以确保兼容性。

结论

尽管uni-app提供了跨平台开发的能力,但在处理视频播放等特定功能时,仍然需要注意平台之间的差异。通过细致的平台检测和条件逻辑,可以有效减少这些差异带来的影响。在实际开发中,建议结合官方文档和社区资源,持续关注和解决平台特有的问题。

回到顶部