媒体处理

媒体处理可以将一个音视频文件转换成另一个或多个音视频文件,以适应不同网络带宽、终端设备和用户的需求,包括音视频转码、视频截图、视频水印等多个功能。本文提供了Python SDK媒体处理相关的API调用示例,包含提交转码作业(包含HLS标准加密、普通转码、替换水印等场景)、提交截图作业、查询截图数据、导播台视频预处理。

接口调用说明

  • 本文提供的接口调用示例均通过AccessKey初始化客户端实例。

  • 接口的参数解释和返回字段的详细说明请访问阿里云OpenAPI门户,在各接口右侧的文档页签查看。

  • 本文仅提供部分复杂接口的代码示例,其余接口的SDK代码示例,可以通过阿里云OpenAPI门户获取。访问阿里云OpenAPI门户,在接口的左侧参数配置页签,填写需要的参数信息并发起调用后,在右侧的SDK示例页签,选择SDK版本,选择目标语言,查看并下载示例代码。

  • 本文均以V1.0版本的SDK为例进行接口调用,如需获取V2.0版本的SDK示例,请在通过阿里云OpenAPI门户获取SDK示例时,指定到对应的SDK版本。image.png

初始化客户端

使用前请先初始化客户端,请参见初始化

提交转码作业-普通

调用SubmitTranscodeJobs接口,生成提交普通转码作业的SDK示例。

阿里云OpenAPI门户地址:SubmitTranscodeJobs

调用示例如下:

说明

此示例代码为普通转码(不加密)。阿里云视频加密方案请参见阿里云视频加密(私有加密)

"""
* 构建覆盖参数,目前只支持图片水印文件地址、文字水印的内容覆盖;如不使用可忽略
* 需要替换的水印信息对应水印ID必须是关联在指定的转码模板ID上(即TranscodeTemplateId)
* 不支持通过本接口去增加一个没有关联上的水印
"""
def build_override_params():
    # 以替换水印为例
    watermarks = []

    # 替换图片水印文件,FlieURL示例:https://192.168.0.0/16/watermarks/sample****.png
    watermark1 = {'WatermarkId': '<watermarkId>', 'FileUrl': '<your File URL>'}
    watermarks.append(watermark1)

    # 替换文字水印
    watermark2 = {'WatermarkId': '<watermarkId>', 'Content': 'new Text'}
    watermarks.append(watermark2)

    return {'Watermarks': watermarks}


"""  发起转码处理   """
from aliyunsdkvod.request.v20170321 import SubmitTranscodeJobsRequest
def normal_submit_transcode_jobs(clt):
    request = SubmitTranscodeJobsRequest.SubmitTranscodeJobsRequest()

    # 需要转码的视频ID
    request.set_VideoId('<videoId>')

    # 指定转码模板组
    request.set_TemplateGroupId('<templateGroupId>')

    """
    # 可选设置覆盖参数,如替换水印
    overrideParams = build_override_params()
    request.set_OverrideParams(json.dumps(overrideParams))
    """

    request.set_accept_format('JSON')
    response = json.loads(clt.do_action_with_exception(request))
    return response

try:
    clt = init_vod_client()
    jobs = normal_submit_transcode_jobs(clt)
    print(jobs['TranscodeJobs']['TranscodeJob'])
    print(json.dumps(jobs, ensure_ascii=False, indent=4))

except Exception as e:
    print(e)
    print(traceback.format_exc())

提交转码作业-HLS标准加密

调用SubmitTranscodeJobs接口,生成使用HLS标准加密发起转码作业的SDK示例。

阿里云OpenAPI门户地址:SubmitTranscodeJobs

调用示例如下:

说明

此示例代码为使用HLS标准加密提交转码作业的示例。

"""
* 生成HLS标准加密参数的可选配置,无需使用时可忽略该配置
"""
from aliyunsdkvod.request.v20170321 import GenerateKMSDataKeyRequest
from aliyunsdkcore.http import protocol_type
def build_encrypt_config(clt):
    try:
        # 随机生成一个加密的密钥,返回的response包含明文密钥以及密文密钥
        # 视频标准加密只需要传递密文密钥即可
        request = GenerateKMSDataKeyRequest.GenerateKMSDataKeyRequest()

        request.set_protocol_type(protocol_type.HTTPS)
        request.set_accept_format('JSON')
        response = json.loads(clt.do_action_with_exception(request))

        # 解密接口地址,该参数需要将每次生成的密文密钥与接口URL拼接生成,表示每个视频的解密的密文密钥都不一样;注意您需要自己部署解密服务
        # Ciphertext作为解密接口的参数名称,可自定义,此处只作为参考
        # decryptKeyUri示例:http://example.aliyundoc.com/decrypt?' + 'Ciphertext=' + response['CiphertextBlob
        decryptKeyUri = ['<your decryptKeyUri>']

        return {'DecryptKeyUri': decryptKeyUri, 'KeyServiceType': 'KMS', 'CipherText': response['CiphertextBlob']}

    except Exception as e:
        print(e)
        #print(traceback.format_exc())
        return None


"""  发起转码处理   """
from aliyunsdkvod.request.v20170321 import SubmitTranscodeJobsRequest
def hlsencrypt_submit_transcode_jobs(clt):
    request = SubmitTranscodeJobsRequest.SubmitTranscodeJobsRequest()

    # 需要转码的视频ID
    request.set_VideoId('<videoId>')

    # 指定转码模板组
    request.set_TemplateGroupId('<templateGroupId>')

    # 使用KMS生成随机的加密密钥
    encryptConfig = build_encrypt_config(clt)
    if encryptConfig is not None:
        request.set_EncryptConfig(json.dumps(encryptConfig))

    request.set_accept_format('JSON')
    response = json.loads(clt.do_action_with_exception(request))
    return response

try:
    clt = init_vod_client()
    jobs = hlsencrypt_submit_transcode_jobs(clt)
    print(jobs['TranscodeJobs']['TranscodeJob'])
    print(json.dumps(jobs, ensure_ascii=False, indent=4))

except Exception as e:
    print(e)
    print(traceback.format_exc())

提交截图作业

调用SubmitSnapshotJob接口,生成提交截图作业的SDK示例。

阿里云OpenAPI门户地址:SubmitSnapshotJob

调用示例如下:

说明

创建截图模板详细请参见截图模板

from aliyunsdkvod.request.v20170321 import SubmitSnapshotJobRequest
def submit_snapshot_job(clt):
    request = SubmitSnapshotJobRequest.SubmitSnapshotJobRequest()

    # 需要截图的视频ID
    request.set_VideoId('<videoId>')

    # 截图模板ID
    #request.set_SnapshotTemplateId('<snapshotTemplateId>')

    # 如果设置了截图模板ID,则会忽略下面参数
    request.set_Count(50)
    request.set_SpecifiedOffsetTime(0)
    request.set_Interval(1)
    request.set_Width(200)
    request.set_Height(200)

    # 雪碧图参数,如不使用可不设置
    spriteSnapshotConfig = {'CellWidth': 120, 'CellHeight': 68, 'Columns': 3,
                            'Lines': 10, 'Padding': 20, 'Margin': 50}
    # 保留雪碧图原始图
    spriteSnapshotConfig['KeepCellPic'] = 'keep'
    spriteSnapshotConfig['Color'] = 'tomato'
    request.set_SpriteSnapshotConfig(json.dumps(spriteSnapshotConfig))

    request.set_accept_format('JSON')
    response = json.loads(clt.do_action_with_exception(request))
    return response

try:
    clt = init_vod_client()
    job = submit_snapshot_job(clt)
    print(json.dumps(job, ensure_ascii=False, indent=4))

except Exception as e:
    print(e)
    print(traceback.format_exc())

查询截图数据

调用ListSnapshots接口,生成查询截图数据的SDK示例。

阿里云OpenAPI门户地址:ListSnapshots

导播台视频预处理

调用SubmitPreprocessJobs接口,生成导播台视频预处理的SDK示例。

阿里云OpenAPI门户地址:SubmitPreprocessJobs

相关文档

  • 媒体处理概述:介绍视频点播提供的媒体处理能力,包括能力类型、使用场景及各媒体处理能力的详细信息。

  • 转码常见问题:介绍使用视频点播转码过程中的常见问题及处理建议。