0
我通過C#API代碼上傳時收到以下內容。 (它似乎從門戶網站工作正常)Azure媒體服務瞬態錯誤上傳
TransientSystem:發生了一個瞬態錯誤。我們對不便表示抱歉。請再試一次。
我找不到任何關於這個,顯然它不告訴我任何東西。
這裏是我的代碼:var account = GetAzureAccount(); var client = 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()));
}`
它從那裏繼續,但失敗的工作狀態錯誤。
這主要是從樣本複製,所以我很茫然。任何人都有建議?
謝謝!
你好詹姆斯,你從哪個服務得到短暫的錯誤:天藍色的存儲休息API或天藍色的媒體服務休息API?我假設它發生在CopyBlob(sourceBlob,assetContainer)中的某處。 –
當您嘗試啓動媒體服務作業以創建流暢的流媒體資源並且資產文件的名稱與blob的名稱不完全匹配時,會發生這種情況,因爲它們僅通過字符串而不是blob id鏈接。見下面的答案。 –