Azure mediaserver视频编码/缩略图任务失败

时间:2017-08-28 09:04:17

标签: azure azure-media-services

我们使用azure媒体服务器进行编码和生成缩略图。  我们有以下代码用于编码和生成缩略图的组合任务

IJob job = _context.Jobs.Create(filename + " - Media Encoder Standard");

        IMediaProcessor processor = GetLatestMediaProcessorByName("Media Encoder Standard");

        ITask task = job.Tasks.AddNew("Media Encoder Standard", processor, "H264 Single Bitrate 720p for Android", options);

        // Specify the input asset to be encoded.
        task.InputAssets.Add(asset);

        task.OutputAssets.AddNew("Output asset",
        AssetCreationOptions.None);

        task = job.Tasks.AddNew("Media Encoder Standard", processor, configuration, options);

        // Specify the input asset to be encoded.
        task.InputAssets.Add(asset);

        task.OutputAssets.AddNew("Output asset",
        AssetCreationOptions.None);

        // Submit the job and wait until it is completed.
        job.Submit();

        job = job.StartExecutionProgressTask(
            j =>
            {
            },
            CancellationToken.None).Result;

        Console.WriteLine("Transcoding job finished.");

        var outputAssets = job.OutputMediaAssets.ToList();

        return outputAssets;

但是,如果缩略图任务失败并且视频编码通过。我们仍会为视频生成网址。

我们使用以下代码生成网址

 public string PublishAssetGetURLs(IAsset asset, string fileExt = "")
    {
        // Publish the output asset by creating an Origin locator for adaptive streaming,
        // and a SAS locator for progressive download.

        _context.Locators.Create(
            LocatorType.Sas,
            asset,
            AccessPermissions.Read,
            TimeSpan.FromDays(365));

        IEnumerable<IAssetFile> assetFiles = asset
            .AssetFiles
            .ToList()
            .Where(af => af.Name.EndsWith(fileExt, StringComparison.OrdinalIgnoreCase));

        // Get the URls for progressive download for each specified file that was generated as a result
        // of encoding.

        List<Uri> sasUris = assetFiles.Select(af => af.GetSasUri()).ToList();

        var url = sasUris.FirstOrDefault();

        if (url != null)
        {
            return url.ToString();
        }

        return string.Empty;
    }

然而,当使用url时,我们得到以下xml

    <Error><Code>AuthenticationFailed</Code><Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
RequestId:a6d14469-0001-0008-7bdb-1f3b8a000000
Time:2017-08-28T08:58:17.0773123Z</Message><AuthenticationErrorDetail>Signature fields not well formed.</AuthenticationErrorDetail></Error>

如果两个任务都成功,它就可以正常工作。我是否需要在资产上设置某些内容?

2 个答案:

答案 0 :(得分:0)

我的假设显然是错的。只是有时我会打破。它是由sas定位器创建的url引起的。有时它会有一个+ char,这会导致错误。然而,如果它被编码,它就像一个魅力。我需要更多的咖啡

答案 1 :(得分:0)

很高兴您似乎自己修复了定位器创建错误。但是,您还提到有时在缩略图任务错误时,编码任务会成功。您是否尝试在输入视频中的特定时间戳/时间码处生成缩略图?这通常是我遇到的唯一一个编码成功且缩略图失败的情况。如果您可以共享您正在使用的缩略图预设,我们可以进一步查看。

最后,在override中,有一个示例显示您可以将编码和缩略图生成合并为一个任务。