关于uniapp小程序压缩视频后上传云点播视频损坏这件事

  1. 问题起因

    公司自研项目 技术栈是 uniapp 开发微信小程序 小程序内有个需要用户录制视频并上传的功能 项目内使用的是 uni.createCameraContext 相机组件进行录制视频的 一开始并没有出现什么问题 可以正常录制及上传 直到需求上多了一个 《视频直接上传过大 需要进行压缩处理再上传》 之后 问题就来了!本以为只是个简单的压缩罢了。想着直接使用uniapp提供的 uni.compressVideo api就好了 接下来就是一顿操作 简单测试一遍 自信提交!下班!

uni.compressVideo({
	src,
	quality: 'low',
	// bitrate:60000,
	// fps: 30,
	// resolution:1,
	success: (res) => {
		//压缩后处理
	},
	fail: (err) => {
		//错误处理
	},
});
  1. 问题初现
    第二天到公司后 昨天测试测出问题了 发现压缩后上传的视频 在云点播上是损坏的 基本上播放到十秒左右 就会突然跳到结束 不压缩上传的话 就没有问题
    然后就是不停的测,改,测,改,测…
    整了一下午还是没搞好。 后来翻 uniapp 文档的时候 看到了在暂停录像api上 还有个属性 compressed:启动视频压缩,压缩效果同 chooseVideo 抱着死马当活马医的态度换上了 然后一测 居然好了 那么新的问题又来了 既然文档上说压缩效果同 chooseVideo 为什么一个行一个不行呢。不过现在没时间想这个了 还有个问题就是 视频录制超时的话 是没有这个压缩的 而如果在超时之前自动暂停的话 又会导致录制时间可能不准确。后来经过讨论 还是决定先使用这个方法 只不过要把录制时间多加一两秒 尽量的保持准确。

  2. 新的问题
    又是新的一天 在使用结束录制的 compressed属性暂时解决问题后 新的问题又来了 具体可看微信社区的bug反馈链接:开启compressed后,结束录制CameraContext.stopRecord无返回数据
    简单来讲就是 开启了这个属性后 录制视频 第一次录制可以正常返回视频数据 但是从第二次开始 返回的数据就是null的 关闭这个属性后 数据正常关于uniapp小程序压缩视频后上传云点播视频损坏这件事_第1张图片
    (这个bug现在好像已经修复了)
    关于uniapp小程序压缩视频后上传云点播视频损坏这件事_第2张图片

  3. 转机
    在使用compressed解决问题失败后 不得不另寻他路 在新建了一份代码片段 并将小程序内的功能在代码片段里实现后 我尝试将压缩后的视频直接在小程序内播放 发现:在想程序内播放 视频并无问题 下载后播放也没问题 将下载下来的视频放点电脑上 从电脑上在云点播后台上传 也没有问题!
    从这可以得知 并不是小程序的压缩视频有问题 而是云点播的上传有问题 随后到云点播后台 找了人工客服 花费一下午时间 从客服那边拿到了一个不同版本的 SDK 将项目内的 SDK 替换后 发现问题解决了。
    询问客服得知 云点播官方文档内的 SDK 下载链接可能并非是最新版的 最好到git仓库上下载
    然后自以为问题解决 收工下班

  4. 再起波澜–结束
    第二天上班时 得知昨天的问题并没完全解决
    经过测试发现 压缩过的视频 只要超过8MB 还是会出现上述的视频损坏的问题 8MB之后的视频文件 全部上传不上去 视频直接被截断了 (大概是8MB 差不多两个月前了 有些记不清了)
    然后打开昨天从客服那边拿到的新版本 SDK 源码 翻看了下源码 从源码中找到了 getCosStrategy 函数 在这个函数内的 sourceData 对象 里面的 ChunkSize 参数就是出现问题的地方了 将 ChunkSize 参数改为1048576 * 30 问题就解决了

  5. 结论
    视频压缩后上传损坏的问题可以确定是源码内的getCosStrategy函数下的sourceData对象的ChunkSize值过小造成的 将数值改为自己项目需要的大小即可
    最好还是不要改源码 直接在上传函数内传入自己需要的大小即可

VodUploader.start({
	...
	chunkSize:1024*1024*(MB)
	...
})

其实腾讯上传SDK文档内有这个参数的描述
但是描述内写的是分块上传时 每块的大小 并没有写会限制整体上传的大小 所以导致从头到尾都把这个参数忽视了 还是后面翻了源码才找到了这个参数 感觉文档这里写的和实际上的不太一样 也有可能视频被压缩了的问题
关于uniapp小程序压缩视频后上传云点播视频损坏这件事_第3张图片
总之 问题到此就结束了。
闲来无事 就想记录下这次遇到的问题 好让自己有点印象 不至于转头就忘了。
如果这篇文章有帮助到您 那是我的荣幸。如果没有帮助 那也感谢您能看到最后

你可能感兴趣的:(微信小程序,小程序,uni-app,腾讯云,视频,微信小程序)