すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo VOD:メディア処理

最終更新日:Oct 28, 2024

このトピックでは、メディア処理モジュールのAPI操作の使用例を示します。 API操作はApsaraVideo VOD SDK for Pythonにカプセル化されています。 API操作を呼び出して、プロダクションスタジオでトランスコードおよびスナップショットジョブの送信、スナップショットデータの照会、およびビデオの前処理を行うことができます。

使用上の注意

  • この例では、AccessKeyペアを使用してクライアントインスタンスを初期化します。

  • この操作のリクエストおよびレスポンスパラメーターの詳細については、 OpenAPI Explorerに移動します。 上部のナビゲーションバーで [APIドキュメント] をクリックすると、API操作に関連する情報が表示されます。

  • このトピックでは、一部の複雑なAPI操作のサンプルコードのみを示します。 他のAPI操作のサンプルコードを取得するには、次の操作を実行します。 Alibaba Cloud OpenAPI Explorerに移動します。左側のナビゲーションウィンドウで、サンプルコードを取得するAPI操作を見つけ、[パラメーター] タブで必要なパラメーターを指定します。 次に、[呼び出しの開始] をクリックします。 [SDKサンプルコード] タブで、サンプルコードを表示およびダウンロードする言語を選択します。

  • このトピックでは、ApsaraVideo VOD SDK for Java V1.0を使用してAPI操作を呼び出す方法について説明します。 ApsaraVideo VOD SDK for Java V2.0を使用してAPI操作を呼び出す場合、Alibaba Cloud OpenAPI Explorerでサンプルコードを取得するときにV2.0を指定します。image.png

クライアントを初期化

SDKを使用する前に、クライアントを初期化してください。 詳細については、「初期化」をご参照ください。

暗号化なしでコード変換ジョブを送信する

SubmitTranscodeJobs操作を呼び出して、暗号化せずにトランスコードジョブを送信できます。

このAPI操作の詳細については、SubmitTranscodeJobsを参照してください。

サンプルコード:

説明

次のコードは、暗号化を使用しないトランスコードの例です。 Alibaba Cloudでサポートされているビデオ暗号化の詳細については、「Alibaba Cloud独自の暗号化」をご参照ください。

"""
* Construct watermark parameters to be overridden. You can override only the URL of an image watermark and the content of a text watermark.
* Make sure that the ID of the watermark that you want to overwrite is associated with the ID of the transcoding template that you use. The ID of the transcoding template is specified by TranscodeTemplateId.
* You can call this operation to add only a watermark whose ID is associated with the ID of the transcoding template that you use.
"""
def build_override_params():
    # Override watermarks.
    watermarks = []

    // Override an image watermark. Example of the URL of an image file: https://192.168.0.0/16/watermarks/sample****.png.
    watermark1 = {'WatermarkId': '<watermarkId>', 'FileUrl': '<your File URL>'}
    watermarks.append(watermark1)

    # Override a text watermark.
    watermark2 = {'WatermarkId': '<watermarkId>', 'Content': 'new Text'}
    watermarks.append(watermark2)

    return {'Watermarks': watermarks}


"""  Start transcoding.   """
from aliyunsdkvod.request.v20170321 import SubmitTranscodeJobsRequest
def normal_submit_transcode_jobs(clt):
    request = SubmitTranscodeJobsRequest.SubmitTranscodeJobsRequest()

    # Specify the ID of the video that you want to transcode.
    request.set_VideoId('<videoId>')

    # Specify the transcoding template group.
    request.set_TemplateGroupId('<templateGroupId>')

    """
    # Configure optional parameters to overwrite watermarks.
    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暗号化を有効にしたトランスコードジョブを送信できます。

このAPI操作の詳細については、SubmitTranscodeJobsを参照してください。

サンプルコード:

説明

次のコードは、HLS暗号化を有効にしたトランスコードの例です。 詳細については、「HLS暗号化」をご参照ください。

"""
* Optional configurations of HLS encryption. If you do not use HLS encryption, these configurations are not required.
"""
from aliyunsdkvod.request.v20170321 import GenerateKMSDataKeyRequest
from aliyunsdkcore.http import protocol_type
def build_encrypt_config(clt):
    try:
        # Generate a random data key for encryption. The response contains the plaintext and ciphertext of the data key.
        # Specify only the ciphertext for HLS encryption.
        request = GenerateKMSDataKeyRequest.GenerateKMSDataKeyRequest()

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

        // The URI of the operation that is used to decrypt the data key. To obtain the URI, concatenate the URL of the decryption service and the ciphertext of the data key. The ciphertext to decrypt varies among videos. Take note that you must deploy the decryption service.
        # You can customize the name of the Ciphertext parameter. The name in this example is only for reference.
        # Example of 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


"""  Start transcoding.   """
from aliyunsdkvod.request.v20170321 import SubmitTranscodeJobsRequest
def hlsencrypt_submit_transcode_jobs(clt):
    request = SubmitTranscodeJobsRequest.SubmitTranscodeJobsRequest()

    # Specify the ID of the video that you want to transcode.
    request.set_VideoId('<videoId>')

    # Specify the transcoding template group.
    request.set_TemplateGroupId('<templateGroupId>')

    # Use Key Management Service (KMS) to generate a random encryption key.
    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操作を呼び出して、スナップショットジョブを送信できます。

このAPI操作の詳細については、SubmitSnapshotJobを参照してください。

サンプルコード:

説明

スナップショットテンプレートの作成方法の詳細については、「スナップショットテンプレートの作成」をご参照ください。

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

    # Specify the ID of the video from which you want to capture snapshots.
    request.set_VideoId('<videoId>')

    # Specify the ID of the snapshot template.
    #request.set_SnapshotTemplateId('<snapshotTemplateId>')

    # If you specify the ID of the snapshot template, the following parameters are ignored:
    request.set_Count(50)
    request.set_SpecifiedOffsetTime(0)
    request.set_Interval(1)
    request.set_Width(200)
    request.set_Height(200)

    # Configure image sprite-related parameters. This step is optional.
    spriteSnapshotConfig = {'CellWidth': 120, 'CellHeight': 68, 'Columns': 3,
                            'Lines': 10, 'Padding': 20, 'Margin': 50}
    # Specify whether to retain the source image after an image sprite is generated.
    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操作を呼び出して、スナップショットデータを照会できます。

このAPI操作の詳細については、ListSnapshotsを参照してください。

制作スタジオでビデオを前処理する

制作スタジオでビデオを前処理するには、SubmitPreprocessJobs操作を呼び出します。

このAPI操作の詳細については、SubmitPreprocessJobsを参照してください。