七牛云视频在线转码 - 持久化处理

更新日期: 2019-07-16 阅读次数: 3049 字数: 657 分类: CDN

最近在微信小程序上遇到一个诡异的问题,上传到七牛云的视频文件在所有手机上都能正常播放,但是在小米手机上,播放一段时间之后就会卡住不动,大概在 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 聊聊。 白天工地搬砖,晚上哄熊孩子,可能回复有点慢,见谅。 查看更多联系方式

相关文章

爱评论不评论

近期节日

2019年12月07日 大雪
2019年12月09日 "一二九"运动纪念日
2019年12月09日 世界足球日
2019年12月10日 世界人权日
2019年12月12日 西安事变纪念日
2019年12月13日 南京大屠杀
2019年12月20日 澳门回归日
2019年12月21日 国际篮球日
2019年12月22日 冬至
2019年12月24日 平安夜
2019年12月25日 圣诞节
查看更多节日