2016-01-08 35 views
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())); 
      }` 

它從那裏繼續,但失敗的工作狀態錯誤。

這主要是從樣本複製,所以我很茫然。任何人都有建議?

謝謝!

+0

你好詹姆斯,你從哪個服務得到短暫的錯誤:天藍色的存儲休息API或天藍色的媒體服務休息API?我假設它發生在CopyBlob(sourceBlob,assetContainer)中的某處。 –

+0

當您嘗試啓動媒體服務作業以創建流暢的流媒體資源並且資產文件的名稱與blob的名稱不完全匹配時,會發生這種情況,因爲它們僅通過字符串而不是blob id鏈接。見下面的答案。 –

回答

1

對於那些得到這個無用的錯誤,我已經確定每次你的資產沒有在資產容器中有一個與資產文件中的完全命名相同的blob時就得到它。修復它,所以兩者是相同的,它的工作原理。

在我看來,這將工作好了很多,如果資產文件直接鏈接到BLOB(和BLOB繼承)所以,這可能不會發生,之間存在着兩個(即一個強大的非字符串鏈接assetfile應該只是強調它的BLOB)

的延伸。在平均時間,媒體小組的建議:讓這個扔的信息和文件名的404文件未找到錯誤沒有發現因此有可能調試。