uni-app liver-push组件使用snapshot拍照所得图片尺寸与画面不一致

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

uni-app liver-push组件使用snapshot拍照所得图片尺寸与画面不一致

给组件aspect属性配置1:1,并且用样式控制画面区域为宽高相等的正方形,snapshot所得图片依然是全屏捕获的图片。希望拍出画面呈现区域的图片图片。

2 回复

参考代码 <live-pusher
id=“livePusher”
ref=“livePusher”
class=“livePusher”
mode=“FHD”
:aspect=“aspect”
device-position=“back”
:auto-focus=“true”
:muted=“true”
:background-mute=“true”
:enable-mic=“false”
:style="{
width: ‘750px’,
height: ‘750px’
}"
@touchstart=“handleFocusIos”
/>


在uni-app中使用liver-push组件进行实时视频推流时,如果遇到通过snapshot拍照所得图片尺寸与画面不一致的问题,通常是因为拍照时未指定正确的分辨率或者拍照参数设置不正确。以下是一个基本的代码示例,展示如何设置拍照参数,确保拍照所得图片尺寸与画面一致。

首先,确保你已经在页面中引入了liver-push组件,并进行了基本的配置。

<template>
  <view>
    <liver-push
      id="livePush"
      url="your_rtmp_url"
      :autoplay="true"
      :muted="true"
      @snapshot="onSnapshot"
    ></liver-push>
    <button @click="takeSnapshot">拍照</button>
  </view>
</template>

<script>
export default {
  methods: {
    takeSnapshot() {
      const context = uni.createCameraContext();
      // 设置拍照参数,确保图片尺寸与画面一致
      const settings = {
        quality: 'high',  // 图片质量
        success: (res) => {
          const tempFilePaths = res.tempImagePaths;
          console.log('拍照成功:', tempFilePaths);
          // 可以在这里进行图片处理或上传
        },
        fail: (err) => {
          console.error('拍照失败:', err);
        }
      };

      // 在某些平台上,可能需要指定宽高,确保与liver-push的画面一致
      // 假设你的画面是1280x720
      const width = 1280;
      const height = 720;

      // 注意:uni-app的createCameraContext API不直接支持设置拍照分辨率
      // 但可以通过设置livePush的video组件的object-fit和宽高来间接控制
      // 这里我们假设liver-push已经通过样式设置了正确的宽高

      // 调用拍照方法
      context.takePhoto(settings);
    },
    onSnapshot(e) {
      console.log('snapshot:', e);
      // 这里处理snapshot事件,如果需要
    }
  }
};
</script>

<style>
/* 确保liver-push组件的样式正确,以匹配你的视频画面尺寸 */
#livePush {
  width: 100%;
  height: auto; /* 或指定具体高度,如720px,保持宽高比 */
  object-fit: cover; /* 保持画面填充且不变形 */
}
</style>

注意

  1. uni.createCameraContext()通常用于原生相机操作,而liver-push是基于RTMP协议的推流组件,其拍照功能可能不完全依赖于这个API。如果liver-push组件提供了自己的拍照API(如snapshot事件),应优先使用。
  2. 在实际项目中,拍照分辨率和质量的设置可能需要根据具体需求进行调整。
  3. 如果liver-push组件的拍照功能不支持直接设置分辨率,可能需要通过调整视频流的分辨率和宽高比来间接实现。
  4. 上述代码仅为示例,具体实现可能需要根据uni-app的版本和liver-push组件的文档进行调整。
回到顶部