场景
音频和视频可以很生动形象的记录事件的发生,它可以帮助人们回忆往事,也可以帮助人们学习知识,是一个非常实用的媒体。因此有很多的应用衍生而出,比如,抖音、快手、微信视频号等等。
阿里云的视频点播功能为不熟悉音视频技术的开发者提供了很大的便利,通过使用视频点播产品可以快速搭建出一个视频应用,在控制台还可以对视频信息进行管理。阿里云同时提供了存储视频的OSS,如果想要下载视频可以到视频详情页点击播放视频后,通过下载按钮进行下载,但如果是想要批量下载多个视频呢?单个点击效率太低,除此之外,这可能还需要一个比较大空间,为了让客户能自动下载到自己的电脑中,因此需要一个工具来实现这个功能。
方案
由于这个需求是客户自己个人临时需要用的,所以为了更快满足他的需求,方案如下:
RPA:Robotic process automation,机器人流程自动化,是通过软件机器人及人工智能技术为业务实现自动化的一种技术。
在本次方案中采用的的是影刀,大家也可以尝试使用其他的RPA工具。
在实现的过程中,我先将需要导出的视频通过视频点播的API接口生成了播放链接(这个链接我设置了有效期为30天,防止视频太大导致没下载完链接失效了),然后将所有的播放链接导出到 Excel 中,最后再用RPA工具直接读取 Excel 中的数据进行下载。
这里没有在RPA中直接读取数据库的原因是因为RPA工具需要安装在客户的电脑上运行,如果直接访问数据库,那么首先数据库需要开放对客户的网络白名单,同时还需要客户在自己的电脑上安装对应的数据库插件,并配置连接串,这从安全角度来说,明显是不行的。
以下使用PHP语言演示代码:
1、生成视频播放链接
安装扩展包
composer require alibabacloud/vod-20170321
<?php use AlibabaCloud\SDK\Vod\V20170321\Vod; use AlibabaCloud\Tea\Exception\TeaError; use AlibabaCloud\Tea\Utils\Utils; use Darabonba\OpenApi\Models\Config; use AlibabaCloud\SDK\Vod\V20170321\Models\GetPlayInfoRequest; use AlibabaCloud\Tea\Utils\Utils\RuntimeOptions; //产品图片上传 class VideoExport extends Command { public static function createClient($accessKeyId, $accessKeySecret){ $config = new Config([ // 必填,您的 AccessKey ID "accessKeyId" => $accessKeyId, // 必填,您的 AccessKey Secret "accessKeySecret" => $accessKeySecret ]); // Endpoint 请参考 https://api.aliyun.com/product/vod $config->endpoint = "vod.cn-shanghai.aliyuncs.com"; return new Vod($config); } /** * Execute the console command. * * @return mixed */ public function handle() { //导出视频数据 $accessKeyId = "your key"; $accessKeySecret = 'your secret'; $client = $this->createClient($accessKeyId,$accessKeySecret); $list = app("db")->connection("mysql")->table('tbvideo')->select( "video_id" "id" )->get(); foreach ($list as $item) { $getPlayInfoRequest = new GetPlayInfoRequest([ "videoId" => $item->video_id, "authTimeout" => 2592000,//30天,单位秒 "formats" => "mp4"//设置播放格式mp4,下载的时候也会是这个格式 ]); $runtime = new RuntimeOptions([]); $downloadUrl = "";//下载链接 $title = "";//下载标题 try { // 复制代码运行请自行打印 API 的返回值 $ret = $client->getPlayInfoWithOptions($getPlayInfoRequest, $runtime); $downloadUrl = $ret->body->playInfoList->playInfo[0]->playURL; $title = $ret->body->videoBase->title; } catch (\Exception $error) { echo $error->message; } app("db")->connection("mysql")->table('tbvideo')->where("id",$item->id) ->update(["download_url"=>$downloadUrl,"title" => $title]); } } }
2、RPA下载
以上就是批量下载视频点播的过程,如有更好的方法,欢迎交流。