在Azure Media Encoder Standard中为作业添加多个InputMediaAsset会导致400

时间:2017-11-08 17:35:18

标签: java azure azure-media-services

尝试使用Azure Media Encoder Standard缝合视频。

在Java中使用这段代码(com.microsoft.azure:azure-media:0.9.7)为Azure MES创建作业:

Job.Creator jobCreator = Job.create()
    .setName(outputAssetName)
    .addInputMediaAsset("nb:cid:UUID:ID1")
    .addInputMediaAsset("nb:cid:UUID:ID2")
    .setPriority(2)
    .addTaskCreator(task);

提交作业时,会导致以下错误:

Nov 08, 2017 6:30:03 PM com.microsoft.windowsazure.services.media.implementation.MediaExceptionProcessor processCatch
WARNING: com.sun.jersey.api.client.UniformInterfaceException: Client response status: 400
         com.sun.jersey.api.client.UniformInterfaceException: Client response status: 400
at com.microsoft.windowsazure.services.media.implementation.MediaBatchOperations.parseBatchResult(MediaBatchOperations.java:368)
at com.microsoft.windowsazure.services.media.models.Job$Creator.processResponse(Job.java:190)
at com.microsoft.windowsazure.services.media.entityoperations.EntityRestProxy.create(EntityRestProxy.java:138)
at com.microsoft.windowsazure.services.media.implementation.MediaExceptionProcessor.create(MediaExceptionProcessor.java:140)
...
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.lang.Thread.run(Thread.java:748)

使用单个InputMediaAsset可以正常工作。

两个问题:

  1. 您是否知道如何使用Java提交多个资产的解决方案?
  2. 如果没有,有没有办法获得比Azure MES中的400个更具信息性的错误消息?
  3. 修改

    任务配置:

    {
      "Version": 1.0,
      "Codecs": [
        {
          "Type": "CopyVideo"
        },
        {
          "Type": "CopyAudio"
        }
      ],
      "Outputs": [
        {
          "FileName": "{Basename}_stitch.mp4",
          "Format": {
            "Type": "MP4Format"
          }
        }
      ],
      "Sources": [
        {
          "AssetID": "nb:cid:UUID:ID1",
          "StartTime": "00:00:00",
          "Duration": "00:00:05"
        },
        {
          "AssetID": "nb:cid:UUID:ID2",
          "StartTime": "00:00:00",
          "Duration": "00:00:05"
        }
      ]
    }
    

    我挖得更深,看看我是否至少可以得到更好的错误信息,而且我得到了这个:

    HTTP/1.1 400 Bad Request
    Content-ID: 2
    X-Content-Type-Options: nosniff
    Cache-Control: no-cache
    DataServiceVersion: 1.0;
    Content-Type: application/xml;charset=utf-8
    
    <?xml version="1.0" encoding="utf-8"?><m:error xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"><m:code /><m:message xml:lang="en-US">Input asset not used - nb:cid:UUID:ID2</m:message></m:error>
    

    它告诉我第二个输入资产没有被使用,即使我在任务配置中指定它 - 并且任务配置来自Azure Media Services Explorer并在那里工作。

1 个答案:

答案 0 :(得分:0)

在Java代码中,您应该在调用Job.Creator之前调用创建Task。如下所示:

 Task.CreateBatchOperation task = Task.create(mediaProcessor.getId(), taskXml).setConfiguration(taskConfiguration).setName("Stitching Task");

在上面,taskXml对象应该引用两个输入资产。默认的Java示例代码(例如一个here)只能引用单个JobInputAsset元素。由于您使用两个(或更多)输入资产,因此必须扩展taskXml以包含其他JobInputAsset元素。