uni-app 【报Bug】uni.chooseVideo和uni.getVideoInfo获取到的mov格式视频的宽高不正确

uni-app 【报Bug】uni.chooseVideo和uni.getVideoInfo获取到的mov格式视频的宽高不正确

开发环境 版本号 项目创建方式
Windows win10 HBuilderX
产品分类:uniapp/App

PC开发环境操作系统:Windows

HBuilderX类型:正式

HBuilderX版本号:3.4.7

手机系统:Android

手机系统版本号:Android 10

手机厂商:华为

手机机型:华为mate30 pro

页面类型:vue

vue版本:vue2

打包方式:云端

示例代码:

uni.chooseVideo({ sourceType: [‘camera’], success: function (res) { self.src = res.tempFilePath; uni.getVideoInfo({ src:res.tempFilePath, success:(res)=>{ console.log(res) } }) console.log(res) } });

操作步骤:
```
chooseVideo然后再getVideoinfo
```

预期结果:
```
获取到mov视频的宽高正确
```

实际结果:
```
mov格式的视频宽高都是0
```

bug描述:
```
uni.chooseVideo和uni.getVideoinfo获取到的mov格式视频的宽高都是0

更多关于uni-app 【报Bug】uni.chooseVideo和uni.getVideoInfo获取到的mov格式视频的宽高不正确的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

MP4格式的height总是比width大,不管是宽屏还是竖屏的

更多关于uni-app 【报Bug】uni.chooseVideo和uni.getVideoInfo获取到的mov格式视频的宽高不正确的实战教程也可以访问 https://www.itying.com/category-93-b0.html


mov的宽和高都是0

在使用 uni.chooseVideouni.getVideoInfo 获取 .mov 格式视频的宽高时,可能会遇到获取到的宽高不正确的问题。这通常是由于 .mov 格式的视频文件在编码或元数据存储方式上与常见的视频格式(如 .mp4)有所不同,导致 uni.getVideoInfo 无法正确解析视频的宽高信息。

可能的原因

  1. 元数据问题.mov 格式的视频文件可能没有正确存储宽高信息,或者存储的方式与 uni.getVideoInfo 解析的方式不一致。
  2. 编码问题:某些 .mov 文件可能使用了特殊的编码方式,导致 uni.getVideoInfo 无法正确读取视频的宽高。
  3. 平台差异:不同平台(iOS、Android)对 .mov 格式的支持和解析方式可能不同,导致在某些平台上获取的宽高信息不正确。

解决方案

  1. 使用第三方库:可以尝试使用第三方库(如 ffmpegvideo.js)来解析 .mov 文件的宽高信息。这些库通常对视频格式的支持更全面,能够正确解析 .mov 文件的元数据。

  2. 手动解析元数据:如果对视频文件的格式有一定了解,可以尝试手动解析 .mov 文件的元数据,获取宽高信息。这需要对 .mov 文件的结构有一定的了解。

  3. 转换视频格式:如果可能,可以将 .mov 文件转换为 .mp4 格式,然后再使用 uni.getVideoInfo 获取宽高信息。.mp4 格式通常更容易被正确解析。

  4. 反馈给 uni-app 团队:如果确认是 uni.getVideoInfo 的 bug,可以将问题反馈给 uni-app 官方团队,等待官方修复。

示例代码

以下是一个使用 ffmpeg.js 解析视频宽高的示例:

// 引入 ffmpeg.js
import { createFFmpeg, fetchFile } from '[@ffmpeg](/user/ffmpeg)/ffmpeg';

const ffmpeg = createFFmpeg({ log: true });

async function getVideoInfo(file) {
  await ffmpeg.load();
  ffmpeg.FS('writeFile', 'input.mov', await fetchFile(file));
  await ffmpeg.run('-i', 'input.mov');
  const output = ffmpeg.FS('readFile', 'input.mov');
  const videoInfo = new TextDecoder().decode(output);
  console.log(videoInfo);
}

// 使用 uni.chooseVideo 选择视频文件
uni.chooseVideo({
  success(res) {
    getVideoInfo(res.tempFilePath);
  }
});
回到顶部