尝试使用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可以正常工作。
两个问题:
修改
任务配置:
{
"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并在那里工作。
答案 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元素。