2012-12-27 13 views
0

我使用Azure的媒體服務和Silverlight播放器來播放流媒體URL如何發揮安全流資產的網址動態獲取通過代碼(在Azure的媒體服務)

我能夠攝取,編碼視頻文件作爲資產文件,但是當我播放流式傳輸網址時,我面臨着問題。

我用下面的代碼來獲取網址...

context = new CloudMediaContext(_accountName, _accountKey); 
IAsset myAsset = GetAsset("UUID:7a32b941-30bd-4c96-bf4e-26df5022eec5"); 
var theManifest = from f in myAsset.AssetFiles 
where f.Name.EndsWith(".ism") 
select f; 
var manifestFile = theManifest.First(); 
IAccessPolicy streamingPolicy = _context.AccessPolicies.Create("Streaming policy", 
TimeSpan.FromDays(10), 
AccessPermissions.Read); 
ILocator originLocator = _context.Locators.CreateSasLocator(myAsset, streamingPolicy, DateTime.UtcNow.AddMinutes(-500)); 
GetAssetSasUrlList(myAsset, originLocator); 
string urlForClientStreaming = originLocator.Path + manifestFile.Name + "/manifest"; 
Console.WriteLine("URL to manifest for client streaming: "); 
Console.WriteLine(urlForClientStreaming); 

這個網址來樣 -

https://mediasvc06w4dq5k8vd08.blob.core.windows.net/asset-064ed2d5-e42d-4c49-98eb-a712db5c614f?st=2012-12-26T23%3A04%3A22Z&se=2013-01-05T23%3A04%3A22Z&sr=c&si=9350bd2f-ec23-40b2-b27a-248bba01b97e&sig=oGgesnr8mXjCdTM5Dz%2FQpFRBDR0g0%2F60ECoXY14EvsA%3DBigBuckBunny.ism/manifest

它不工作。

當我直接在瀏覽器這個URL粘貼,我獲得以下錯誤

AuthenticationFailedServer無法進行身份驗證請求。確保授權標頭的值正確形成,包括簽名。 RequestId:154422cf-822e-4bbc-af2a-fa69273dfb89時間:2012-12-27T08:57:30.9509847ZSignature字段結構不正確。

但是,如果我去,並從門戶網站(www.manage.windowsazure.com)發佈資產 - 我得到像下面就門脈網址..

http://mediaervices.origin.mediaservices.windows.net/5edbeae7-c3e6-45c5-bc5c-70f46b526cb5/BigBuckBunny.ism/Manifest

而且它與我的Silverlight播放器的工作原理..

現在的問題是,我沒有得到以代碼開頭的url和以https開頭的url不能與我的播放器一起工作。

我猜測它的安全問題,並試圖將我的播放器放在winows azure中,並試圖在播放器中播放,但沒有成功。

回答

3

不,不是安全問題。您正在請求一個Smooth資產的SAS網址,您需要一個Origin網址。正確的代碼片段是在這裏,在我的博客: http://blog-ndrouin.azurewebsites.net/?p=1931

具體做法是:

private static string GetStreamingUrl(CloudMediaContext context, string outputAssetId) 
    { 
     var daysForWhichStreamingUrlIsActive = 365; 

     var outputAsset = context.Assets.Where(a => a.Id == outputAssetId).FirstOrDefault(); 

     var accessPolicy = context.AccessPolicies.Create(outputAsset.Name, TimeSpan.FromDays(daysForWhichStreamingUrlIsActive), AccessPermissions.Read | AccessPermissions.List); 

     var assetFiles = outputAsset.AssetFiles.ToList(); 

     var assetFile = assetFiles.Where(f => f.Name.ToLower().EndsWith("m3u8-aapl.ism")).FirstOrDefault(); 
     if (assetFile != null) 
     { 
      var locator = context.Locators.CreateLocator(LocatorType.OnDemandOrigin, outputAsset, accessPolicy); 

      Uri hlsUri = new Uri(locator.Path + assetFile.Name + "/manifest(format=m3u8-aapl)"); 
      return hlsUri.ToString(); 
     } 

     assetFile = assetFiles.Where(f => f.Name.ToLower().EndsWith(".ism")).FirstOrDefault(); 
     if (assetFile != null) 
     { 
      var locator = context.Locators.CreateLocator(LocatorType.OnDemandOrigin, outputAsset, accessPolicy); 
      Uri smoothUri = new Uri(locator.Path + assetFile.Name + "/manifest"); 
      return smoothUri.ToString(); 
     } 

     assetFile = assetFiles.Where(f => f.Name.ToLower().EndsWith(".mp4")).FirstOrDefault(); 
     if (assetFile != null) 
     { 
      var locator = context.Locators.CreateLocator(LocatorType.Sas, outputAsset, accessPolicy); 
      var mp4Uri = new UriBuilder(locator.Path); 
      mp4Uri.Path += "/" + assetFile.Name; 
      return mp4Uri.ToString(); 
     } 
     return string.Empty; 
    } 
+0

你有一個更新的鏈接,這篇博客文章? – ckittel

相關問題