上传时出现 Azure 媒体服务暂时性错误
Azure Media Services Transient Error On upload
我在通过 C# api 代码上传时收到以下信息。 (它似乎在门户网站上运行良好)
TransientSystem:发生暂时性错误。我们对不便表示抱歉。请重试。
我找不到任何相关信息,显然它没有告诉我任何信息。
这是我的代码:`var account = GetAzureAccount();
var 客户端 = account.CreateCloudBlobClient();
var sourceContainer = await GetAzureContainer(account, ResourceUtilities.VideoResources, false);
var sourceBlob = GetBlockBlob(sourceContainer, videoResource);
var context = GetMediaContext();
IAsset asset = context.Assets.Create(GetAzureBlobName(videoResource), AssetCreationOptions.None);
try
{
IAccessPolicy writePolicy = context.AccessPolicies.Create("writePolicy", TimeSpan.FromHours(24), AccessPermissions.Write);
ILocator destinationLocator = context.Locators.CreateLocator(LocatorType.Sas, asset, writePolicy);
// Get the asset container URI and Blob copy from mediaContainer to assetContainer.
string destinationContainerName = (new Uri(destinationLocator.Path)).Segments[1];
CloudBlobContainer assetContainer = client.GetContainerReference(ResourceUtilities.MediaAssets);
if (assetContainer.CreateIfNotExists())
{
assetContainer.SetPermissions(new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Off
});
}
var assetFile = asset.AssetFiles.Create(sourceBlob.Name + "-source");
CopyBlob(sourceBlob, assetContainer);
assetFile.ContentFileSize = sourceBlob.StreamWriteSizeInBytes;
assetFile.Update();
destinationLocator.Delete();
writePolicy.Delete();
//Now encode it
IJob job = context.Jobs.Create("Media Encoder Standard");
var processor = GetLatestMediaProcessorByName(context, "Media Encoder Standard");
var task = job.Tasks.AddNew("Encode " + videoResource.FileName, processor, "H264 Multiple Bitrate 720p", TaskOptions.None);
task.InputAssets.Add(asset);
task.OutputAssets.AddNew(System.IO.Path.GetFileNameWithoutExtension(videoResource.FileName) + "-production" + System.IO.Path.GetExtension(videoResource.FileName), AssetCreationOptions.None);
job.StateChanged += Job_StateChanged;
await job.SubmitAsync();
await job.GetExecutionProgressTask(CancellationToken.None);
var finalAsset = job.OutputMediaAssets[0];
if (job.State == JobState.Error)
{
await finalAsset.DeleteAsync();
throw new InvalidOperationException(string.Join("\r\n", job.Tasks.SelectMany(t => t.ErrorDetails).Select(ed => ed.Message).ToArray()));
}`
它从那里继续,但在作业状态错误上失败。
这主要是从示例中复制的,所以我不知所措。有人有建议吗?
谢谢!
对于那些得到这个无用错误的人,我确定你每次资产在资产容器中没有与资产文件中的名称完全相同的 blob 时都会得到它。修复它,使两者相同并且有效。
在我看来,如果将资产文件 link 直接编辑到 blob(并从 blob 继承),这样就不会发生这种情况,并且有一个强大的 [=16] =] link 两者之间(即 assetfile 应该只是它下面的 blob 的扩展)
同时给媒体团队一个建议:让它抛出一个 404 file not found 错误,信息和文件名都找不到,这样就可以调试了。
我在通过 C# api 代码上传时收到以下信息。 (它似乎在门户网站上运行良好)
TransientSystem:发生暂时性错误。我们对不便表示抱歉。请重试。
我找不到任何相关信息,显然它没有告诉我任何信息。
这是我的代码:`var account = GetAzureAccount(); var 客户端 = account.CreateCloudBlobClient();
var sourceContainer = await GetAzureContainer(account, ResourceUtilities.VideoResources, false);
var sourceBlob = GetBlockBlob(sourceContainer, videoResource);
var context = GetMediaContext();
IAsset asset = context.Assets.Create(GetAzureBlobName(videoResource), AssetCreationOptions.None);
try
{
IAccessPolicy writePolicy = context.AccessPolicies.Create("writePolicy", TimeSpan.FromHours(24), AccessPermissions.Write);
ILocator destinationLocator = context.Locators.CreateLocator(LocatorType.Sas, asset, writePolicy);
// Get the asset container URI and Blob copy from mediaContainer to assetContainer.
string destinationContainerName = (new Uri(destinationLocator.Path)).Segments[1];
CloudBlobContainer assetContainer = client.GetContainerReference(ResourceUtilities.MediaAssets);
if (assetContainer.CreateIfNotExists())
{
assetContainer.SetPermissions(new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Off
});
}
var assetFile = asset.AssetFiles.Create(sourceBlob.Name + "-source");
CopyBlob(sourceBlob, assetContainer);
assetFile.ContentFileSize = sourceBlob.StreamWriteSizeInBytes;
assetFile.Update();
destinationLocator.Delete();
writePolicy.Delete();
//Now encode it
IJob job = context.Jobs.Create("Media Encoder Standard");
var processor = GetLatestMediaProcessorByName(context, "Media Encoder Standard");
var task = job.Tasks.AddNew("Encode " + videoResource.FileName, processor, "H264 Multiple Bitrate 720p", TaskOptions.None);
task.InputAssets.Add(asset);
task.OutputAssets.AddNew(System.IO.Path.GetFileNameWithoutExtension(videoResource.FileName) + "-production" + System.IO.Path.GetExtension(videoResource.FileName), AssetCreationOptions.None);
job.StateChanged += Job_StateChanged;
await job.SubmitAsync();
await job.GetExecutionProgressTask(CancellationToken.None);
var finalAsset = job.OutputMediaAssets[0];
if (job.State == JobState.Error)
{
await finalAsset.DeleteAsync();
throw new InvalidOperationException(string.Join("\r\n", job.Tasks.SelectMany(t => t.ErrorDetails).Select(ed => ed.Message).ToArray()));
}`
它从那里继续,但在作业状态错误上失败。
这主要是从示例中复制的,所以我不知所措。有人有建议吗?
谢谢!
对于那些得到这个无用错误的人,我确定你每次资产在资产容器中没有与资产文件中的名称完全相同的 blob 时都会得到它。修复它,使两者相同并且有效。
在我看来,如果将资产文件 link 直接编辑到 blob(并从 blob 继承),这样就不会发生这种情况,并且有一个强大的 [=16] =] link 两者之间(即 assetfile 应该只是它下面的 blob 的扩展)
同时给媒体团队一个建议:让它抛出一个 404 file not found 错误,信息和文件名都找不到,这样就可以调试了。