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

标签 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提交多个 Assets 的解决方案吗?
  2. 如果没有,是否有办法从 Azure MES 中获取比 400 更丰富的错误消息?

编辑

任务配置:

{
  "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>

它告诉我,即使我在任务配置中指定了第二个输入 Assets ,也没有使用它 - 并且任务配置来自 Azure 媒体服务资源管理器并在那里工作。

最佳答案

在 Java 代码中,您应该在调用 Job.Creator 之前调用创建任务。类似于以下内容:

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

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

关于java - 在 Azure Media Encoder Standard 中向作业添加多个 InputMediaAsset 会导致 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47186160/

相关文章:

java - 变量声明问题

Azure 逻辑应用架构验证启用/禁用选项

c# - 让 CloudBlobContainer 对象成为 transient 可以吗?

azure - 如何在Android上运行azure媒体播放器

java - Maven 肯定火 : Running tests in specified dependencies

java - Karate - 比较多个 JSON 对象架构

java - 将 Hashtable 数组转换为对象数组

azure - Spark - 如何从数据帧列中获取带有父文件夹的文件名

azure - 视频索引器 [更新与 Azure 媒体服务的连接]

python - 如何使用python sdk下载交付内容(视频)?