Processar ativos com a API REST do Media Services
Após a ingestão de ativos para o Serviços de Mídia do Windows Azure, é possível codificar, transmultiplexar, inserir uma marca d'água e etc. na mídia, antes de fornecê-la aos clientes. Essas atividades são agendadas e executadas em múltiplas instâncias de função de segundo plano para garantir um alto desempenho e disponibilidade. Essas atividades são chamadas de trabalhos e cada trabalho é composto de tarefas atômicas que fazem o real trabalho no arquivo do ativo. Se você planeja fazer o mesmo conjunto de tarefas em um grande número de ativos, o Serviços de Mídia suporta JobTemplates e TaskTemplates para lhe ajudar a alcançar este objetivo.
Importante |
|---|
| Depois de se conectar com êxito em https://media.windows.net/API, você receberá um redirecionamento 301 que especifica outro URI dos Serviços de Mídia. Você deve fazer chamadas subsequentes para o novo URI. |
Criar um trabalho
Cada trabalho pode ter uma ou mais tarefas dependendo do tipo de processamento que você deseja realizar. Por meio da API REST, é possível criar os trabalhos e as tarefas relacionados em uma de duas maneiras: As tarefas podem ser definidas embutidas por meio da propriedade de navegação das tarefas nas entidades de trabalho, ou por meio do processamento em lotes com o protocolo OData. O SDK do Media Services usa processamento em lotes; contudo, por uma questão de legibilidade dos exemplos de código neste tópico, as tarefas são definidas embutidas. Para obter mais informações sobre o processamento em lotes, consulte Processamento em lotes com o protocolo OData (Open Data).
O exemplo a seguir mostra como criar e publicar um trabalho com uma tarefa definida para codificar um vídeo em uma resolução e qualidade específicas. As predefinições válidas de configuração de tarefa estão especificadas em Cadeias de caracteres de predefinição de tarefa para o Windows Azure Media Encoder.
POST https://media.windows.net/API/Jobs HTTP/1.1
Content-Type: application/json;odata=verbose
Accept: application/json;odata=verbose
DataServiceVersion: 3.0
MaxDataServiceVersion: 3.0
x-ms-version: 2.0
Authorization: Bearer http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=youraccountname&urn%3aSubscriptionId=2f84471d-b1ae-4e75-aa09-010f0fc0cf5b&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&Audience=urn%3aWindowsAzureMediaServices&ExpiresOn=1336802231&Issuer=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&HMACSHA256=gR%2fNaIZgolFLxBOmfSECrp16Mp0Mti3KoePVjBUCzls%3d
Host: media.windows.net
Content-Length: 476
{"Name" : "NewTestJob", "InputMediaAssets" : [{"__metadata" : {"uri" : "https://media.windows.net/api/Assets('nb%3Acid%3AUUID%3Aaab7f15b-3136-4ddf-9962-e9ecb28fb9d2')"}}], "Tasks" : [{"Configuration" : "H264 Broadband 720p", "MediaProcessorId" : "nb:mpid:UUID:70bdc2c3-ebf4-42a9-8542-5afc1e55d217", "TaskBody" : "<?xml version=\"1.0\" encoding=\"utf-8\"?><taskBody><inputAsset>JobInputAsset(0)</inputAsset><outputAsset>JobOutputAsset(0)</outputAsset></taskBody>"}]}
Se bem-sucedido, a seguinte resposta será retornada:
HTTP/1.1 201 Created
Cache-Control: no-cache
Content-Length: 1017
Content-Type: application/json;odata=verbose;charset=utf-8
Location: https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3A40dc7bef-6bd9-2247-9f3d-d80bc257d715')
Server: Microsoft-IIS/7.5
x-ms-request-id: d2052a71-95b1-4a52-9420-ccca1202a5fb
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 11 May 2012 21:32:40 GMT
{"d":{"__metadata":{"id":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3A40dc7bef-6bd9-2247-9f3d-d80bc257d715')","uri":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3A40dc7bef-6bd9-2247-9f3d-d80bc257d715')","type":"Microsoft.Cloud.Media.Vod.Rest.Data.Models.Job"},"Tasks":{"__deferred":{"uri":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3A40dc7bef-6bd9-2247-9f3d-d80bc257d715')/Tasks"}},"OutputMediaAssets":{"__deferred":{"uri":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3A40dc7bef-6bd9-2247-9f3d-d80bc257d715')/OutputMediaAssets"}},"InputMediaAssets":{"__deferred":{"uri":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3A40dc7bef-6bd9-2247-9f3d-d80bc257d715')/InputMediaAssets"}},"Id":"nb:jid:UUID:40dc7bef-6bd9-2247-9f3d-d80bc257d715","Name":"NewTestJob","Created":"\/Date(1336771959431)\/","LastModified":"\/Date(1336771959431)\/","EndTime":null,"Priority":0,"RunningDuration":0,"StartTime":null,"State":0,"TemplateId":null}}
Existem algumas coisas importantes a observar em qualquer solicitação de trabalho:
-
As propriedades TaskBody DEVEM usar XML literal para definir o número de ativos de entrada ou de saída que serão usados pela tarefa. O tópico Tarefa contém a Definição de Esquema XML para o XML.
-
Na definição de TaskBody, cada valor interno para <inputAsset> e <outputAsset> deve ser definido como um JobInputAsset(valor) ou JobOutputAsset(valor).
-
Uma tarefa pode ter múltiplos ativos de saída. Um JobOutputAsset(x) só pode ser usado uma vez como uma saída de uma tarefa em um trabalho.
-
É possível especificar JobInputAsset ou JobOutputAsset como um ativo de entrada de uma tarefa.
-
As tarefas não devem formar um ciclo.
-
O parâmetro value que você passa para o JobInputAsset ou JobOutputAsset representa o valor do índice para um ativo. Os ativos reais são definidos nas propriedades de navegação dos InputMediaAssets e OutputMediaAssets na definição da entidade de trabalho.
-
Observação Já que o Serviços de Mídia é criado em OData v3, os ativos individuais nas coleções de propriedade de navegação dos InputMediaAssets e OutputMediaAssets são referenciados por meio de um par nome-valor "__metadata : uri". -
Os InputMediaAssets mapeiam para um ou mais ativos criados por você no Serviços de Mídia. Os OutputMediaAssets são criados pelo sistema. Eles não referenciam um ativo existente.
-
Os OutputMediaAssets podem ser nomeados usando o atributo assetName. Se esse atributo não estiver presente, então o nome do OutputMediaAsset será o valor de texto interno do elemento <outputAsset>, seja ele qual for, com um sufixo do valor do nome do trabalho ou o valor da ID do trabalho (nos casos em que a propriedade Name não estiver definida). Por exemplo, se você definir o valor de assetName como "Amostra", então a propriedade Name de OutputMediaAsset será definida como "Amostra". Contudo, se você não definiu um valor para assetName, mas definiu o nome do trabalho como "NovoTrabalho", então a propriedade Name de OutputMediaAsset será "JobOutputAsset(valor)_NovoTrabalho".
O exemplo a seguir mostra como definir o atributo assetName:
"<?xml version=\"1.0\" encoding=\"utf-8\"?><taskBody><inputAsset>JobInputAsset(0)</inputAsset><outputAsset assetName=\"CustomOutputAssetName\">JobOutputAsset(0)</outputAsset></taskBody>"
-
Para habilitar o encadeamento de tarefas:
-
Um trabalho deve ter pelo menos 2 tarefas
-
Deve haver pelo menos uma tarefa que tenha como entrada a saída de outra tarefa no trabalho.
-
Um trabalho deve ter pelo menos 2 tarefas
Para obter mais informações sobre as entidades de trabalho e tarefa, consulte Trabalhos e Tarefa, respectivamente.
Criar um JobTemplate
Como descrito na introdução, ao processar múltiplos ativos usando um conjunto comum de tarefas, os JobTemplates são úteis para especificar as predefinições de tarefa padrão, a ordem das tarefas e assim por diante.
O exemplo a seguir mostra como criar um JobTemplate com um TaskTemplate definido de forma embutida. O TaskTemplate usa o Windows Azure Media Encoder como o MediaProcessor para codificar o arquivo de ativo; contudo, outros MediaProcessors também podem ser usados.
POST https://media.windows.net/API/JobTemplates HTTP/1.1
Content-Type: application/json;odata=verbose
Accept: application/json;odata=verbose
DataServiceVersion: 3.0
MaxDataServiceVersion: 3.0
x-ms-version: 2.0
Authorization: Bearer http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=youraccountname&urn%3aSubscriptionId=2f84471d-b1ae-4e75-aa09-010f0fc0cf5b&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&Audience=urn%3aWindowsAzureMediaServices&ExpiresOn=1336731433&Issuer=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&HMACSHA256=w%2bpnT6CW6jSzyVgJLP2cN0QyLL0peOt8PJC6XnPhvZ4%3d
Host: media.windows.net
Content-Length: 574
Expect: 100-continue
{"Name" : "NewJobTemplate25", "JobTemplateBody" : "<?xml version=\"1.0\" encoding=\"utf-8\"?><jobTemplate><taskBody taskTemplateId=\"nb:ttid:UUID:071370A3-E63E-4E81-A099-AD66BCAC3789\"><inputAsset>JobInputAsset(0)</inputAsset><outputAsset>JobOutputAsset(0)</outputAsset></taskBody></jobTemplate>", "TaskTemplates" : [{"Id" : "nb:ttid:UUID:071370A3-E63E-4E81-A099-AD66BCAC3789", "Configuration" : "H264 Smooth Streaming 720p", "MediaProcessorId" : "nb:mpid:UUID:70bdc2c3-ebf4-42a9-8542-5afc1e55d217", "Name" : "SampleTaskTemplate2", "NumberofInputAssets" : 1, "NumberofOutputAssets" : 1}] }
Importante |
|---|
| Diferentemente de outras entidades do Serviços de Mídia, você deve definir um novo identificador GUID para cada TaskTemplate e posicioná-lo na propriedade taskTemplateId e ID no corpo da solicitação. O esquema de identificação do conteúdo deve seguir o esquema descrito em Identificar as entidades do Windows Azure Media Services. Além disso, os JobTemplates não podem ser atualizados. Em vez disso, você deve criar um novo juntamente com as suas alterações atualizadas. |
Se bem-sucedido, a seguinte resposta será retornada:
HTTP/1.1 201 Created
Cache-Control: no-cache
Content-Length: 959
Content-Type: application/json;odata=verbose;charset=utf-8
Location: https://media.windows.net/api/JobTemplates('nb%3Ajtid%3AUUID%3A42da394a-bed5-1749-a541-b0d5447f60d0')
Server: Microsoft-IIS/7.5
x-ms-request-id: b57dcc60-60d8-491c-a91c-8a65fa8aa5cb
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 11 May 2012 00:17:38 GMT
{"d":{"__metadata":{"id":"https://media.windows.net/api/JobTemplates('nb%3Ajtid%3AUUID%3A42da394a-bed5-1749-a541-b0d5447f60d0')","uri":"https://media.windows.net/api/JobTemplates('nb%3Ajtid%3AUUID%3A42da394a-bed5-1749-a541-b0d5447f60d0')","type":"Microsoft.Cloud.Media.Vod.Rest.Data.Models.JobTemplate"},"TaskTemplates":{"__deferred":{"uri":"https://media.windows.net/api/JobTemplates('nb%3Ajtid%3AUUID%3A42da394a-bed5-1749-a541-b0d5447f60d0')/TaskTemplates"}},"Id":"nb:jtid:UUID:42da394a-bed5-1749-a541-b0d5447f60d0","Created":"\/Date(1336695459669)\/","JobTemplateBody":"<?xml version=\"1.0\" encoding=\"utf-8\"?><jobTemplate><taskBody taskTemplateId=\"nb:ttid:UUID:071370A3-E63E-4E81-A099-AD66BCAC3789\"><inputAsset>JobInputAsset(0)</inputAsset><outputAsset>JobOutputAsset(0)</outputAsset></taskBody></jobTemplate>","LastModified":"\/Date(1336695459669)\/","Name":"NewJobTemplate25","NumberofInputAssets":0,"TemplateType":1}}
Criar um trabalho usando um JobTemplate
O exemplo a seguir mostra como criar um trabalho referenciando uma ID de JobTemplate:
POST https://media.windows.net/API/Jobs HTTP/1.1
Content-Type: application/json;odata=verbose
Accept: application/json;odata=verbose
DataServiceVersion: 3.0
MaxDataServiceVersion: 3.0
x-ms-version: 2.0
Authorization: Bearer http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=youraccountname&urn%3aSubscriptionId=2f84471d-b1ae-4e75-aa09-010f0fc0cf5b&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&Audience=urn%3aWindowsAzureMediaServices&ExpiresOn=1336908022&Issuer=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&HMACSHA256=RYXOraO6Z%2f7l9whWZQN%2bypeijgHwIk8XyikA01Kx1%2bk%3d
Host: media.windows.net
Content-Length: 249
{"Name" : "NewTestJob", "InputMediaAssets" : [{"__metadata" : {"uri" : "https://media.windows.net/api/Assets('nb%3Acid%3AUUID%3A3f1fe4a2-68f5-4190-9557-cd45beccef92')"}}], "TemplateId" : "nb:jtid:UUID:15e6e5e6-ac85-084e-9dc2-db3645fbf0aa"}
Se bem-sucedido, a seguinte resposta será retornada:
HTTP/1.1 201 Created
Cache-Control: no-cache
Content-Length: 1064
Content-Type: application/json;odata=verbose;charset=utf-8
Location: https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3Ab21b1baf-8cee-734e-9f1a-b0f12b06e2d5')
Server: Microsoft-IIS/7.5
x-ms-request-id: 82feb593-ee74-45db-85c5-24c0a7600f2d
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sun, 13 May 2012 01:22:53 GMT
{"d":{"__metadata":{"id":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3Ab21b1baf-8cee-734e-9f1a-b0f12b06e2d5')","uri":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3Ab21b1baf-8cee-734e-9f1a-b0f12b06e2d5')","type":"Microsoft.Cloud.Media.Vod.Rest.Data.Models.Job"},"Tasks":{"__deferred":{"uri":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3Ab21b1baf-8cee-734e-9f1a-b0f12b06e2d5')/Tasks"}},"OutputMediaAssets":{"__deferred":{"uri":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3Ab21b1baf-8cee-734e-9f1a-b0f12b06e2d5')/OutputMediaAssets"}},"InputMediaAssets":{"__deferred":{"uri":"https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3Ab21b1baf-8cee-734e-9f1a-b0f12b06e2d5')/InputMediaAssets"}},"Id":"nb:jid:UUID:b21b1baf-8cee-734e-9f1a-b0f12b06e2d5","Name":"NewTestJob","Created":"\/Date(1336872171998)\/","LastModified":"\/Date(1336872171998)\/","EndTime":null,"Priority":0,"RunningDuration":0,"StartTime":null,"State":0,"TemplateId":"nb:jtid:UUID:15e6e5e6-ac85-084e-9dc2-db3645fbf0aa"}}
Observação |
|---|
| Essa resposta é a mesma do exemplo criar trabalho mostrado anteriormente, exceto que a propriedade TemplateId está definida. |
Monitorar o progresso de processamento
É possível recuperar o status do trabalho usando a propriedade State, como mostrado no exemplo a seguir. Para obter mais informações sobre a recuperação de valores de propriedade, consulte Gerenciar ativos com a API REST do Media Services. Para obter mais informações sobre a propriedade State, consulte Propriedades da entidade de trabalho.
GET https://media.windows.net/api/Jobs('nb%3Ajid%3AUUID%3A0f7d4b0e-ea6c-9748-ad34-09575bdfbd21')/State HTTP/1.1
Content-Type: application/json;odata=verbose
Accept: application/json;odata=verbose
DataServiceVersion: 3.0
MaxDataServiceVersion: 3.0
x-ms-version: 2.0
Authorization: Bearer http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=youraccountname&urn%3aSubscriptionId=2f84471d-b1ae-4e75-aa09-010f0fc0cf5b&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&Audience=urn%3aWindowsAzureMediaServices&ExpiresOn=1336908022&Issuer=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&HMACSHA256=RYXOraO6Z%2f7l9whWZQN%2bypeijgHwIk8XyikA01Kx1%2bk%3d
Host: media.windows.net
Content-Length: 0
Se bem-sucedido, a seguinte resposta será retornada:
HTTP/1.1 200 OK
Cache-Control: no-cache
Content-Length: 17
Content-Type: application/json;odata=verbose;charset=utf-8
Server: Microsoft-IIS/7.5
x-ms-request-id: 01324d81-18e2-4493-a3e5-c6186209f0c8
X-Content-Type-Options: nosniff
DataServiceVersion: 1.0;
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sun, 13 May 2012 05:16:53 GMT
{"d":{"State":2}}
Cancelar um trabalho
O Serviços de Mídia lhe permite cancelar trabalhos em execução com a função CancelJob. Essa chamada irá retornar um código de erro 400 se você tentar cancelar um trabalho quando o estado do trabalho for cancelado, cancelando, erro ou concluído.
O exemplo a seguir mostra como chamar a função CancelJob.
GET https://media.windows.net/API/CancelJob?jobid='nb%3ajid%3aUUID%3a9e9533ba-2b9b-fa4c-a33d-73eebd49039b' HTTP/1.1 Content-Type: application/json;odata=verbose Accept: application/json;odata=verbose DataServiceVersion: 3.0 MaxDataServiceVersion: 3.0 x-ms-version: 2.0 Authorization: Bearer http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=youraccountname&urn%3aSubscriptionId=2f84471d-b1ae-4e75-aa09-010f0fc0cf5b&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&Audience=urn%3aWindowsAzureMediaServices&ExpiresOn=1336908753&Issuer=https%3a%2f%2fwamsprodglobal001acs.accesscontrol.windows.net%2f&HMACSHA256=kolAgnFfbQIeRv4lWxKSFa4USyjWXRm15Kd%2bNd5g8eA%3d Host: media.windows.net
Se bem-sucedido, um código de resposta 204 será retornado sem corpo de mensagem.
Observação |
|---|
| Você deve codificar a ID do trabalho na URL (normalmente nb:jid:UUID: algumvalor) ao passá-la como um parâmetro para a função CancelJob. |
Consulte também
Data da compilação:
Importante