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
MP4格式的height总是比width大,不管是宽屏还是竖屏的
更多关于uni-app 【报Bug】uni.chooseVideo和uni.getVideoInfo获取到的mov格式视频的宽高不正确的实战教程也可以访问 https://www.itying.com/category-93-b0.html
在使用 uni.chooseVideo
和 uni.getVideoInfo
获取 .mov
格式视频的宽高时,可能会遇到获取到的宽高不正确的问题。这通常是由于 .mov
格式的视频文件在编码或元数据存储方式上与常见的视频格式(如 .mp4
)有所不同,导致 uni.getVideoInfo
无法正确解析视频的宽高信息。
可能的原因
- 元数据问题:
.mov
格式的视频文件可能没有正确存储宽高信息,或者存储的方式与uni.getVideoInfo
解析的方式不一致。 - 编码问题:某些
.mov
文件可能使用了特殊的编码方式,导致uni.getVideoInfo
无法正确读取视频的宽高。 - 平台差异:不同平台(iOS、Android)对
.mov
格式的支持和解析方式可能不同,导致在某些平台上获取的宽高信息不正确。
解决方案
-
使用第三方库:可以尝试使用第三方库(如
ffmpeg
或video.js
)来解析.mov
文件的宽高信息。这些库通常对视频格式的支持更全面,能够正确解析.mov
文件的元数据。 -
手动解析元数据:如果对视频文件的格式有一定了解,可以尝试手动解析
.mov
文件的元数据,获取宽高信息。这需要对.mov
文件的结构有一定的了解。 -
转换视频格式:如果可能,可以将
.mov
文件转换为.mp4
格式,然后再使用uni.getVideoInfo
获取宽高信息。.mp4
格式通常更容易被正确解析。 -
反馈给 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);
}
});