使用 GCP Transcoder API 构建自动化转码工作流

时间:2021-07-15 | 标签: | 作者:Q8 | 来源:Google Cloud网络

小提示:您能找到这篇{使用 GCP Transcoder API 构建自动化转码工作流}绝对不是偶然,我们能帮您找到潜在客户,解决您的困扰。如果您对本页介绍的使用 GCP Transcoder API 构建自动化转码工作流内容感兴趣,有相关需求意向欢迎拨打我们的服务热线,或留言咨询,我们将第一时间联系您!

概述

本文介绍谷歌云 Transcoder API 的基本使用,以及应用 Transcoder API , Cloud Functions ,  Cloud Pub/Sub 等服务搭建自动化视频转码工作流的通用方案。该方案的架构如下图所示。后面的章节会介绍一些关键步骤的实现方法和示例。

以下为配置自动化转码任务的主要步骤。

  1. 在本地配置谷歌云命令运行环境

  2. 在谷歌云对象存储服务创建输入存储桶和输出存储桶

  3. 创建转码 Job Template ,做自定义转码配置

  4. 上传待转码视频文件并提交转码任务

  5. 轮询转码状态,或者使用消息队列接收转码完成通知

因为目前谷歌云转码服务暂时还不支持控制台界面话配置,下面的步骤都是使用 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

使用 GCP Transcoder API 构建自动化转码工作流

上一篇:卖家如何对lazada产品进行市场分析
下一篇:Google Cloud:基于 Dataproc 的 Apache Flink


版权声明:以上主题为“使用 GCP Transcoder API 构建自动化转码工作流"的内容可能是本站网友自行发布,或者来至于网络。如有侵权欢迎联系我们客服QQ处理,谢谢。
相关内容
推荐内容
扫码咨询
    使用 GCP Transcoder API 构建自动化转码工作流
    打开微信扫码或长按识别二维码

小提示:您应该对本页介绍的“使用 GCP Transcoder API 构建自动化转码工作流”相关内容感兴趣,若您有相关需求欢迎拨打我们的服务热线或留言咨询,我们尽快与您联系沟通使用 GCP Transcoder API 构建自动化转码工作流的相关事宜。

关键词:使用,GCP,Transcoder,API,构建自

关于 | 业务 | 案例 | 免责 | 隐私
客服邮箱:sales@1330.com.cn
电话:400-021-1330 | 客服QQ:865612759
沪ICP备12034177号 | 沪公网安备31010702002418号