O processamento de mídia transforma um arquivo de áudio ou vídeo em outros arquivos para atender a diferentes larguras de banda, dispositivos e necessidades dos usuários. Esse processo inclui recursos como transcodificação de vídeo, snapshots e marcas d'água. Este tópico fornece exemplos de chamadas de API com o kit de desenvolvimento de software (SDK) Python para processamento de mídia. Os exemplos abrangem o envio de jobs de transcodificação para cenários como criptografia HLS, transcodificação padrão e substituição de marca d'água. Também demonstram como enviar jobs de snapshot, consultar dados de snapshot e pré-processar vídeos no estúdio de produção.
Observações de uso
Todos os exemplos deste tópico usam um par de AccessKey para inicializar uma instância de cliente.
Para obter detalhes sobre os parâmetros de solicitação e resposta, acesse o Alibaba Cloud OpenAPI Explorer e abra a aba API Documentations.
Para exemplos de SDK de outras operações de API, visite o Alibaba Cloud OpenAPI Explorer. Na aba Parameters, especifique os parâmetros e inicie a chamada. Em seguida, selecione a versão do SDK e o idioma na aba SDK Sample Code para visualizar e baixe o código.
Os exemplos deste tópico utilizam o SDK V1.0. Para exemplos da V2.0, selecione a versão correta do SDK no OpenAPI Explorer.
Inicializar um cliente
Antes de usar o SDK, inicialize um cliente. Para mais informações, consulte Initialization.
Envie um job de transcodificação padrão
Chame a API SubmitTranscodeJobs para gerar um código de exemplo do SDK destinado ao envio de um job de transcodificação padrão.
Endereço do portal OpenAPI da Alibaba Cloud: SubmitTranscodeJobs.
Código de exemplo:
O código abaixo apresenta um exemplo de transcodificação sem criptografia. Para mais informações sobre a criptografia de vídeo compatível com a Alibaba Cloud, consulte Alibaba Cloud proprietary cryptography.
"""
* 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())
Envie um job de transcodificação com criptografia HLS ativada
Chame a operação SubmitTranscodeJobs para enviar um job de transcodificação com criptografia HLS ativada.
Endereço do portal OpenAPI da Alibaba Cloud: SubmitTranscodeJobs.
Código de exemplo:
O código a seguir mostra um exemplo de transcodificação com criptografia HLS ativada. Para mais detalhes, consulte HLS encryption.
"""
* 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())
Envie um job de snapshot
Chame a operação SubmitSnapshotJob para enviar um job de snapshot.
Endereço do portal OpenAPI da Alibaba Cloud: SubmitTranscodeJobs.
Código de exemplo:
Para mais informações sobre como crie um modelo de snapshot, consulte Create a snapshot template.
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())
Consultar dados de snapshot
Chame a operação ListSnapshots para consultar dados de snapshot.
Endereço do portal OpenAPI da Alibaba Cloud: SubmitTranscodeJobs.
Pré-processar vídeos no estúdio de produção
Chame a operação SubmitPreprocessJobs para pré-processar vídeos no estúdio de produção.
Endereço do portal OpenAPI da Alibaba Cloud: SubmitTranscodeJobs.
Documentos relacionados
Media processing: Descreve os recursos de processamento de mídia do ApsaraVideo for VOD, incluindo tipos de capacidade, cenários de uso e detalhes de cada recurso.
Transcoding FAQ: Aborda problemas comuns e sugestões de resolução durante o uso da transcodificação de vídeo sob demanda.