最近做的功能需要拼接视频,使用七牛云的智能多媒体服务可以满足大部分音视频处理需求,收费也还可以。

需求:直播课上完,将录制的直播视频存起来,以便用户回放观看。

解决方案:

使用七牛云,直播课上完,将录制的直播视频,分段上传(防止文件过大上传出问题);上传后,拼接视频。由于录制的课程格式是 webm 类型,若想在ios与安卓端播放,需要转码为mp4格式,所以需要做视频转码,还好七牛都给提供了!!!

【PS1:分段后其实每个文件也不算小,所以上传的时候我们用了分片上传。比较简单,可以看文档->分片上传】

【PS2:视频可以边录制边上传,但是由于目前带宽较小,网速也不算太快,为了保证直播质量,就等到课程完毕上传】

音视频转码api地址:https://developer.qiniu.com/dora/api/1246/audio-and-video-stitching-avconcat

过程:

1.看了文档,接口只能用于预转持久化处理和持久化数据处理(即触发持久化)。个人理解:预转持久化处理就是文件上传之前,先把文件上传后要做的动作告诉七牛,然后等文件上传后,七牛会给自动处理(所以使用到了七牛的队列)。所以就想先试用预转持久化处理来做。文档中无相关请求示例。自己摸索了很久,试+猜,实现了拼接,但是视频拼接顺序是错乱的,或者视频拼接多了一个(例如:拼接了两个文件(文件1、文件2),结果是文件2+文件1+文件2)提了工单,也没给个靠谱的答复,还是败给了七牛(吐槽下:文档写的是真真真不详细)。

2.换成持久化数据处理的方式,终于实现。

示例代码(需先加载七牛PHP sdk):

/*** 触发持久化拼接视频* @param $data* @return array|bool*/public function concatVideosExample($data){if (!$data['key_arr']) {          //待合并的视频文件key$this->addError('参数错误');return false;}$mainData = $data['key_arr'][0]; //第一个视频unset($data['key_arr'][0]);$url = ''; //视频key 按照顺序拼接foreach ($data['key_arr'] as $value) {$url .=  \Qiniu\base64_urlSafeEncode('kodo://' . 七牛存储空间名称. '/' . $value) . '/';}$url = rtrim($url, '/');// 合并视频key$concatVideoKey = Uuid::uuid(); //随机生成一个key,作为合并后的视频key$itemValue['bucket_name']    = 七牛存储空间名称;$itemValue['key']       = $mainData;$itemValue['fops']      = "avconcat/2/format/mp4/s/1280x720/" . $url .  '|saveas/' . \Qiniu\base64_urlSafeEncode($this->option['Bucket_Name'] . ":" . $concatVideoKey . ".mp4");  //转码为mp4 分辨率1280x720 保存$itemValue['notifyURL'] = 回调接口地址;$pfop = new PersistentFop((new Auth('Access_Key','Secret_Key')), null);// 触发持久化拼接视频list($id, $err) = $pfop->execute(七牛存储空间名称, $mainData, $itemValue['fops'], 七牛专用队列, $itemValue['notifyURL'], false);Log::info(['持久化拼接视频:' . print_r([$data, $itemValue, $id, $err, $concatVideoKey], true)], 'concatVideos'); //log// 创建文件if ($id) {// 保存拼接后的文件$service = new File;$saveData['persistent_id'] = $id ?: '';$saveData['file_name']     = $concatVideoKey . '.mp4';$saveData['file_original'] = $concatVideoKey . '.mp4';$saveData['file_url']      = $concatVideoKey . '.mp4';$saveData['type']          = 'video/mp4';。。。保存下来,供回调使用}return true;}/*** 七牛异步视频转码回调接口示例* @return bool*/public function saveCallbackDataExample(){$request    = []; //post参数if (!$request['id'] || !$request['inputBucket']) {$this->addError('参数错误');return false;}Log::info(['七牛回调接口调起:' . print_r($request, true)], 'persistentNotifyTest');if ($request['code'] != 0) {$this->addError('转码失败');return false;}// 查找文件 上面保存的数据$file = File::find(['persistent_id' => $request['id']]);if (!$file) {$this->addError('文件数据未找到');return false;}// 获取转码视频信息$videoData = $request['items'][0];$file->transcoding_url = $videoData['key'];$save = $file->save();if (!$save) {$this->addError('更新文件失败');return false;}return true;}

拼接并转码无法设置视频的帧率。

看了下视频转码接口,功能很强大。api地址-> https://developer.qiniu.com/dora/api/1248/audio-and-video-transcoding-avthumb示例如下(使用的预转持久化处理方式):

public function example($data){$policy = array('returnBody' => '{"state":"SUCCESS","key":"$(key)","hash":"$(etag)","fsize":$(fsize)......回传字段}','callbackUrl' => $this->_callBackUrl,//上传回调地址'callbackBody' => 'token=' . .....拼接到回调地址后的参数;"persistentOps" => "avthumb/mp4/s/1280x720/r/21|saveas/" . \Qiniu\base64_urlSafeEncode(七牛存储空间名称 . ":" . 随机值(作为key) . ".mp4"),"persistentNotifyUrl"=> $this->_notifyUrl,//转码后的回调地址'persistentPipeline' => 专用队列,);return ['token'=>(new Auth('Access_Key','Secret_Key'))->uploadToken(七牛存储空间名称, null, 最长请求时间, $policy)];}

七牛云实现视频拼接和转码相关推荐

  1. 七牛云音视频文件并转码、添加水印官方示例

    七牛云音视频文件并转码.添加水印官方示例 java-sdk:https://github.com/qiniu/java-sdk/blob/master/examples/upload_pfops.ja ...

  2. 七牛云音视频新功能:音频支持AAC_HE

    与大家所熟知的 MP3 一样, AAC 也是一种常见的音频格式.现如今常见的 AAC 规格有三种: LC-AAC (最基本的), HE-AAC ( AACPlus v1 ), HE-AAC v2 . ...

  3. 阿里云,腾讯云,保利威视,金山云,七牛云的视频云方案的不同之处。

    前几年,国内的视频云竞争确实超级火爆,以公共云为代表的阿里云.腾讯云等大力投入视频云研发及市场推广,都取得了不错的成绩:金山云.七牛云等也纷纷推出了自家的视频云平台. 阿里云由于初期承诺只做底层,而视 ...

  4. 使用七牛云托管视频,使用cdn加速

    七牛云: https://www.qiniu.com/ 访问控制选择私有,用户获取的链接是加密的,且是有有效期的: 上传视频文件: 添加一个域名,包含子域名,这个域名是你自己注册的. 配置CNAME: ...

  5. 七牛云招聘~视频云产品经理

    岗位:视频云产品经理 岗位职责 能够与客户.研发团队进行良好的沟通和协作. 能够根据客户的需求和反馈,思考产品的改良和演进,设计面向企业客户的优秀产品解决方案. 能够输出产品需求文档,交付给产品开发团 ...

  6. 七牛云 转码_开发者选择短视频SDK,为何青睐七牛云?

    从文字到图片再到视频的互联网内容媒介发展途径,随着 5G 技术的逐渐落地愈发清晰.短视频市场中的角力也随着诸多资本和创业者的涌入,进入到白热化阶段.这样的情况下,选择合适的短视频SDK产品就显得尤为重 ...

  7. PHP七牛云上传大视频文件异步存为m3u8格式(包括回调过程)

    问题引入 视频的第一帧加载缓慢. 简介 HTTP Live Streaming,缩写为HLS,是由苹果公司提出基于HTTP的流媒体网络传输协议.它的工作原理是把整个流分成一个个小的基于HTTP的文件来 ...

  8. 对话七牛云技术总监陈辉:音视频行业中的新系统新规划和新增长

    编者按: 从去年七牛云音视频团队发布音画质量分析系统到现在已有半年多的时间,得到了很多业内玩家和客户的认可.在即将召开的 LiveVideoStackCon 2022 音视频技术大会上海站,七牛云将以 ...

  9. 七牛切片视频php,七牛云6:付费视频防盗链-视频切片并通过AES128加密视频

    上一篇我们讲了通过七牛云的私有资源防止付费视频被盗链,今天我们学习一下七牛云的视频切片,并通过AES128进行加密. 视频切片 七牛云提供音视频切片接口以支持HLS(HTTP Live Streami ...

最新文章

  1. Android NDK开发之旅31 FFmpeg音频解码
  2. 软件测试数据怎么找,作为软件测试人员怎么能快速找到bug
  3. servlet session listener
  4. Tomcat容器做到自我保护,设置最大连接数(服务限流:tomcat请求数限制)
  5. linux命令行参数含空格,linux-具有命令行参数和空格的Perl脚本
  6. SQL(结构化查询语言)
  7. Visual Studio Code的Issue列表被黑产“攻陷”
  8. jdk8 list转Map
  9. 微信中的这个功能尽早设置,即使转错账也能及时收回!
  10. css按钮口诀 - CSS BUG顺口溜
  11. 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失败
  12. 一次vue-cli 2.x项目打包优化经历(优化xlsx插件)
  13. mysql 用户权限管理
  14. Python之time与datetime模块
  15. 数据结构实验题:用栈求解n皇后问题
  16. Java中文汉字转汉语拼音
  17. mysql 通达信公式_通达信的几个好用指标
  18. 联想 710s 安装win7(win 10 换 win 7)读不出硬盘,需要 NVME驱动
  19. 【Python】pandas计算DataFrame各列相关系数以及显著性检验
  20. 工作后出国留学经历总结

热门文章

  1. Tableau自定义分类调色板
  2. Web网站HTML打开QQ聊天窗口示例
  3. 【echarts地图制作】下钻到乡镇/街道级别的
  4. 【C语言】机试100题及代码答案(上)
  5. lisp调用天正命令参数修改_在lisp中模拟运行CAD的command命令函数
  6. 宿舍管理系统(Java毕业设计)
  7. 项目开发中,数据库是怎么设计的?
  8. mysql无法连接的sha2加密问题
  9. MATLAB画图-plot-线形、颜色、数据点形状的选择
  10. Ubuntu 安装 NVIDIA 显卡驱动详细步骤(ERROR: The Nouveau kernel driver is currently in use by your system)