最近在微信小程序上遇到一个诡异的问题,上传到七牛云的视频文件在所有手机上都能正常播放,但是在小米手机上,播放一段时间之后就会卡住不动,大概在 2:30 秒左右,100% 必现。然后,就在那里转圈,无法自动加载并播放视频。
同事试出一个解决方案,就是把视频在本地进行转码,然后再上传,就能解决。
但是,近一百个视频,每个视频转码需要 30 分钟,非常麻烦。所以想尝试一下七牛云的在线转码服务。
七牛云的视频在线转码服务,即持久化处理。
持久化处理使用说明
https://developer.qiniu.com/dora/manual/3686/pfop-directions-for-use
持久化数据处理(pfop)机制用于满足这种处理时间较长的场景。开发者可使用该功能对音视频进行异步转码,并将转码结果永久存储于空间中,从而大幅提升访问体验。持久化数据处理功能还提供即时的处理状态通知和查询功能,因此开发者在开始执行音视频转码后还能随时获取转码进度信息。
持久化数据处理功能可以在以下两种场景触发:
- 在资源上传过程中,自动触发处理流程。
- 针对已存在空间中的资源,手动触发处理流程。
持久化的参数
工单咨询了一下七牛的官方工作人员,什么格式的视频能够在微信小程序上正常播放。
官方的回复是:
您好,如果您使用代码操作转码的话,建议直接 avthumb/mp4 即可。
找了个有问题的视频,转码之后,测试了一下,确实在小米手机上再也没有出现过卡住不动的情况。
七牛配置
在配置文件 config/filesystems.php 中
'notify_url'=> '', //持久化处理回调地址
手动触发处理流程,修正已存在的问题视频
https://github.com/zgldh/qiniu-laravel-storage
// 注意,文件名需要 urldecode
$persistent_fop_id = $disk->persistentFop('yantai.mp4', 'avthumb/mp4'); //执行持久化数据处理
$disk->persistentStatus($persistent_fop_id); //查看持久化数据处理的状态。
查询持久化处理状态,也可以使用 HTTP 链接的形式
http://api.qiniu.com/status/get/prefop?id=xxxx
{
"code": 4,
"desc": "Callback failed,url:xxx",
"id": "xxx",
"inputBucket": "test",
"inputKey": "0.1.mp4",
"items": [
{
"cmd": "avthumb/mp4",
"code": 0,
"desc": "The fop was completed successfully",
"hash": "xxx",
"key": "xxx",
"returnOld": 0
}
],
"pipeline": "0.default",
"reqid": "xxx"
}
上传过程中,自动触发处理流程
参考: https://github.com/qiniu/php-sdk/blob/4c4f9b819f420b77bc7313b7d5ee6d33f1139df6/examples/upload_tokens.php
$policy = array(
'persistentOps' => $avthumbMp4Fop . ";" . $vframeJpgFop,
'persistentPipeline' => "video-pipe",
'persistentNotifyUrl' => "http://api.example.com/qiniu/pfop/notify",
);
$upToken = $auth->uploadToken($bucket, null, $expires, $policy, true);
所以,生成 uptoken 时,需要传入 persistentOps 和 persistentNotifyUrl 即可。
'uptoken' => QiniuStorage::disk('qiniu')->uploadToken(
null, 60*60*24,
$policy=array(
'persistentOps' => 'avthumb/mp4',
'persistentNotifyUrl' => env('APP_URL') . '/api/qiniu_pfop_callback'
))
注意,图片上传 token 跟视频上传 token 最好分开。
处理速度
1080P 的 10 分钟视频,基本10秒内就能处理完。速度还不错。
转码服务的收费标准
按照视频播放时长收费,我觉得还算合理。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式