时间:2021-07-15 | 标签: | 作者:Q8 | 来源:Google Cloud网络
小提示:您能找到这篇{使用 GCP Transcoder API 构建自动化转码工作流}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的使用 GCP Transcoder API 构建自动化转码工作流内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您! |
概述 本文介绍谷歌云 Transcoder API 的基本使用,以及应用 Transcoder API , Cloud Functions , Cloud Pub/Sub 等服务搭建自动化视频转码工作流的通用方案。该方案的架构如下图所示。后面的章节会介绍一些关键步骤的实现方法和示例。 以下为配置自动化转码任务的主要步骤。
因为目前谷歌云转码服务暂时还不支持控制台界面话配置,下面的步骤都是使用 REST API 完成。为了生成鉴权的 OAuth Token ,也需要执行命令的环境安装谷歌云 gcloud 命令行工具,具体参考[4]Installing Google Cloud SDK 也可以在控制台 Cloud Shell 内执行命令,该环境自带谷歌云命令行工具。 谷歌云转码服务简介 谷歌云 Transcoder API 目前可以支持如下功能。 ● 不同容器格式的输出 ,包括 MPEG-4 (MP4)、基于 HTTP 的动态自适应流式传输(DASH,也称为 MPEG-DASH)和 HTTP Live Streaming (HLS) ● 以不同的比特率和分辨率输出 ● 以编程方式优化视频输出,包括: ○ 剪裁视频尺寸 ○ 插入重叠式图片或动画 ● 配置低层级编码参数,例如比特率 ● 使用综合的编辑列表重新合成现有媒体内容 ● 通过数字版权管理 ( DRM ) 系统加密内容以保护内容,包括: ○ 适用于 HLS 格式的 FairPlay 流式传输 ○ 适用于 MPEG-DASH 格式的 PlayReady ○ 适用于 Chromium Web 浏览器和 Android 上的 MPEG-DASH 和 HLS 的Widevine ● 插入广告关键帧以允许视频播放器客户端插入广告 ● 使用生成的视频帧精灵表创建缩略图。 ● 创建作业模板以保存和重复使用自定义或复杂的配置,从而对作业进行转码 对于转码的媒体文件,支持如下输入编码格式 支持如下输出编码格式 开通Transcoder API 可以用下面步骤在谷歌云控制台开通 Transcoder API。首先在控制台搜索栏搜索 Transcoder API,并进入 Transcoder API 管理界面。 在 Transcoder API 管理界面,如果该服务没有开通,会有一个蓝色 ENABLE 按钮。点击此按钮以开通此服务。开通服务并不会产生任何费用。 服务开通后,可以点击 MANAGE 按钮来查看服务使用状态。 创建转码模板 Job Template 根据业务的需要,参照文档[3] JobConfig reference来创建 Job Template(转码模板)。下面为将输入文件转码为多码率 H264 编码 HLS 视频流的模板样例。 附录B. Job Template 示例(下拉文章) 该示例也可以从 Github 地址下载。 https://github.com/eugeneyu/cloud-demos/blob/master/transcode/transcode-template-multi-bitrate.json 要创建 Job Template,首先配置环境变量 其中 PROJECT_ID 是谷歌云项目的 ID,LOCATION 是使用转码服务的谷歌云区域,TEMPLATE_ID 是客户自己定义的转码模板 ID 。 然后执行下面命令来创建 Job Template 转码模板。 注意,Job Template 不能更新,只能新加,或者对现有的删除后重建。删除 Job Template 可以用下面命令。 转码配置还要注意下面几点。 ● 如果使用 Fragmented MP4 (fmp4) 封装格式,可以用同一组媒体文件来提供 DASH 和 HLS 流,仅是播放列表内容不一样,这样可以节省存储,方便管理。但是要注意,fmp4 封装不能混装( multiplex )音频和视频流在一个文件里,而需要把音频单独输出成一个文件。 ● 如果使用传统的 TS 封装格式来提供 HLS公共关系学危机公关的定义 流,要注意可以使用 H264 或 H265 视频编码,但是不能使用 VP9 编码。 提交转码任务 转码任务配置主要指定输入文件,输出路径,和转码模板。输入文件需要是在谷歌云存储中的媒体文件。 如果提交任务顺利,命令行会输出任务的信息,其中含有如下的任务名称。 可以用命令轮询任务的执行情况,直到任务完成。 查询任务信息可以看到类似下面的输出。 当 state 为 RUNNING 时,任务仍在进行。当其为 SUCCEEDED 时,表示任务成功完成。 创建 Pub/Sub 消息队列接收转码完成通知 可以配置转码任务将转码结果自动投递到谷歌云 Pub/Sub 消息队列,来触发后续工作流。首先创建一个 Pub/Sub 的 Topic 来接收消息。 然后在刚创建的 Topic 的详情页点击创建 Subscription ,并选微信引流加人法择 Create subscription。 给 Subscription 命名,其它配置保留缺省值即可。这个 Subscription 可以用来消费消息。 在 Subscription 详情页,可以点击 VIEW MESSAGES 按钮,在控制台查看队列中的消息。在转码任务提交并成功完成后,队列中会添加一条新消息,通知任务完成。 消息查看界面如下图。 使用 Cloud Functions 自动触发转码任务 如果想自动对新上传的视频文件进行转码,使用文件上传触发的 Cloud Functions 是一个比较合适的选择。下面步骤介绍如何配置一个自动转码的 Cloud Functions 云函数。 首先创建一个 Cloud Functions 实例。在配置中选择触发项为对象存储的文件创建事件。 在 Service Account 配置中选择可以读写对应对象存储,并执行 Transcoder API 的服务账号,比如 GCE 缺省服务账号。 在其它配置中的环境变量配置界面,配置如下几个环境变量。这几个变量会被下面的云函数代码读取,来进行一些自定义的输入输出配置。 注意函数的触发桶( Trigger Bucket )和转码文件的输出目的桶( DEST_LOCATION )不要配置成同一个,否则会导致循环转码。 在下面的界面填写 Cloud Functions 的 Python 代码和依赖包。 其中,依赖包为 Python 代码如下。也可以从 https://github.com/eugeneyu/cloud-demos/blob/master/cloud-functions/gcs_start_transcode.py 下载。 from google.auth import compute_engine import google.auth.transport.requests import os import requests import logging from flask import abort PROJECT_ID = os.environ['PROJECT_ID'] PROJECT_LOCATION = os.environ['PROJECT_LOCATION'] DEST_LOCATION = os.environ['DEST_LOCATION'] TEMPLATE_ID = os.environ['TEMPLATE_ID'] def exit_abort(): return abort(500) def start_transcode(event, context): bucket_name_input = event['bucket'] object_name_input = event['name'] file_name = os.path.split(object_name_input)[1] file_name_wo_extension = os.path.splitext(file_name)[0] cred = compute_engine.credentials.Credentials() auth_req = google.auth.transport.requests.Request() cred.refresh(auth_req) #print(cred.token) api_url = "https://transcoder.googleapis.com/v1beta1/projects/{}/locations/{}/jobs".format(PROJECT_ID, PROJECT_LOCATION) headers = { "Authorization": "Bearer {}".format(cred.token), "Content-Type": "application/json" } test = "gs://{}/{}".format(bucket_name_input, object_name_input) print("Bucket: {}, inputUri: {} ".format(bucket_name_input, test)) data = { "inputUri": "gs://{}/{}".format(bucket_name_input, object_name_input), "outputUri": "{}/{}/".format(DEST_LOCATION, file_name_wo_extension), "templateId": "{}".format(TEMPLATE_ID) } response = requests.post(url = api_url, headers=headers, json = data) if not response.ok or "error" in response.text: logging.error(RuntimeError(response.text)) exit_abort() response_json = response.json() print("New job started - Job Name: {}".format(response_json['name'])) 部署完云函数后,可以往输入桶上传一个视频文件,然后在云函数详情页查看执行日志。转码任务提交完成后,可以到 Pub/Sub 界面查看转码完成通知。也可以到对象存储响应输出目录查看结果文件。也可以用浏览器或[5] Shaka 播放器测试播放。 使用 Cloud Functions 自动发布转码后视频与上一节步骤类似,可以新建一个 Cloud Functions 云函数,设置其触发源为 Pub/Sub 消息队列。根据转码任务的完成消息,可以进行将输出文件移动到发布路径,并更新媒资系统或内容数据库。如果消息队列中收到的是转码失败消息,则做相应的错误处理和通知,比如将源视频文件移动到单独的目录。对于这些处理本文不提供示例代码,但是可以参考以下移动对象存储中文件的云函数。 https://github.com/eugeneyu/cloud-demos/blob/master/cloud-functions/bucket_to_bucket.py |
上一篇:卖家如何对lazada产品进行市场分析
下一篇:Google Cloud:基于 Dataproc 的 Apache Flink
基于对传统行业渠道的理解,对互联网行业的渠道我们可以下这样一个定义:一切...
小米应用商店的后台操作和苹果是比较相似的,因为都能填写100字符关键词,允许...
小米的规则目前是在变更中的,但是根据经验小米的搜索排名评分的高低是个很重...
为了恰饭,有时候是要接入一些广告的,所以FB也专门有一个广告的SDK,这就是A...
在 2018 年于旧金山举行的游戏开发者大会上,Amazon Web Services (AWS) 曾宣布,目前世...
关于Facebook Audience Network如何收款的问题,其实官方已经给了详细的步骤。本文主要...
本文介绍了Audience Network对广告载体的质量检查,以及它重点广告形式需要注意的问...
随着iOS开发,作为开发者或公司需要针对iOS App开发涉及的方方面面作出对应的信息...
Facebook和谷歌对出海企业广告渠道都很熟悉,但事实上,在国外还有一些渠道也很...
卖家从做号的第1分钟开始,就一定要想好变现路径是什么?一定要以变现为目的去...
小提示:您应该对本页介绍的“使用 GCP Transcoder API 构建自动化转码工作流”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通使用 GCP Transcoder API 构建自动化转码工作流的相关事宜。
关键词:使用,GCP,Transcoder,API,构建自