銷售: 1-800-867-1380

使用 Media Services SDK for .NET 傳遞資產

更新日期: 2014年9月

本主題說明將媒體內容傳遞至用戶端的三個最常用選項。

  • 使用下列其中一種格式來串流處理彈性內容:MPEG DASH、Apple HTTP 即時資料流 (HLS) 以及 Smooth Streaming。

    產生串流 URL 之後 (如本主題所示),就可以使用下列播放器進行測試:

    如需測試 Smooth Streaming URL,請使用 smf.cloudapp.net/healthmonitor 播放器。

    若要測試 MPEG DASH URL,請使用 dashif.org/reference/players/javascript/ 播放器。

    若要測試 HLS URL,請使用 iOS 裝置上的 Safari 或 3ivx-hls-player

  • 漸進式下載 MP4 檔案。

  • 將資產檔案下載到本機電腦。

如需詳細資訊以及傳遞媒體內容的相關概念和術語,請參閱 傳遞內容

Warning警告
媒體服務在建置串流內容的 URL 時會使用 IAssetFile.Name 屬性的值 (例如,http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters)。因此,不允許百分比編碼。名稱屬性的值沒有以下任何保留的百分比編碼字元:!*'();:@&=+$,/?%#[]"。檔案副檔名只能有一個 ‘.’。

以下主題會顯示如可設定 Media Services 開發。

  1. 使用 Media Services SDK for .NET 進行開發的設定

    請注意本主題中的程式碼是使用 Azure Media Services .NET SDK 延伸模組。 The Media Services .NET SDK 延伸模組是一組延伸模組方法及 Helper 函數,會簡化您的程式碼並讓其能更容易地以 Media Services 開發。

  2. 使用 Media Services SDK 連接到 Media Services

您可以傳遞 (下載或串流) 已儲存在您媒體服務帳戶中的資產 (可透過 Assets 集合取得)。您也可以下載或串流執行編碼或封裝工作所產生的資產 (可透過 OutputMediaAssets 集合取得)。本主題中的範例示範如何存取和傳遞作業的輸出媒體資產。

本節中的程式碼會執行下列動作:

  1. 建立新資產並從本機目錄上傳 MP4 夾層檔。

  2. 以單一工作準備好作業,將先前的夾層資產轉碼為多位元速率資產。

  3. 提交作業並等待完成。

  4. 取得產生編碼作業的輸出資產。

  5. 建立原始定位器以發佈輸出資產。

  6. 為彈性串流產生 Smooth Streaming、HLS 以及 MPEG-DASH URL。 

    若要根據彈性位元速率 MP4 檔案集來串流處理內容,您必須先取得至少一個隨選串流保留單元。如需詳細資訊,請參閱動態封裝

  7. 建立用於漸進式下載並將檔案下載至本機目錄的 SAS 定位器。

    您想要漸進下載的內容無法加密。

  8. 為資產中的每個 MP4 檔案產生漸進式下載 URL。

  9. 將輸出資產下載到本機資料夾。

note附註
此範例使用 Azure Media Services .NET SDK 延伸模組。此 SDK 延伸模組隱藏許多細節。如果您想要查看如何實作某些方法 (例如,下列方法如何建置串流 URL:GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri()),您可以瀏覽 github 上的程式碼:azure-sdk-for-media-services-extensions

確定更新程式碼到您輸入 MP4 檔案所在位置的資料夾。

private static readonly string _mediaFiles =
Path.GetFullPath(@"../..\Media");

private static readonly string _singleMP4File =
    Path.Combine(_mediaFiles, @"SingleMP4\BigBuckBunny.mp4");

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading; 
using System.Threading.Tasks; 
using Microsoft.WindowsAzure.MediaServices.Client;


namespace MediaServicesDeliveringContent 
{ 
    class Program 
    {
        private static readonly string _mediaFiles =
            Path.GetFullPath(@"../..\Media");

        private static readonly string _singleMP4File =
            Path.Combine(_mediaFiles, @"SingleMP4\BigBuckBunny.mp4");

        private static MediaServicesCredentials _cachedCredentials = null;
        private static CloudMediaContext _context = null;

        // Media Services account information.
        private static readonly string _mediaServicesAccountName =
            ConfigurationManager.AppSettings["MediaServicesAccountName"];
        private static readonly string _mediaServicesAccountKey =
            ConfigurationManager.AppSettings["MediaServicesAccountKey"];
        
        static void Main(string[] args) 
        {
            _cachedCredentials = new MediaServicesCredentials(_mediaServicesAccountName,
                                                                                _mediaServicesAccountKey);
            _context = new CloudMediaContext(_cachedCredentials); 

            Console.WriteLine("Creating new asset from local file..."); 
 
            // Create a new asset and upload a mezzanine file from a local path. 
            IAsset inputAsset = _context.Assets.CreateFromFile(
                _singleMP4File, 
                AssetCreationOptions.None, 
                (af, p) => 
                { 
                    Console.WriteLine("Uploading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress); 
                }); 
 
            Console.WriteLine("Asset created."); 
 
            // Prepare a job with a single task to transcode the previous mezzanine asset 
            // into a multi-bitrate asset. 
            IJob job = _context.Jobs.CreateWithSingleTask( 
                MediaProcessorNames.AzureMediaEncoder, 
                MediaEncoderTaskPresetStrings.H264AdaptiveBitrateMP4Set720p, 
                inputAsset, 
                "Sample Adaptive Bitrate MP4", 
                AssetCreationOptions.None); 
 
            Console.WriteLine("Submitting transcoding job..."); 
 
            // Submit the job and wait until it is completed. 
            job.Submit(); 
            job = job.StartExecutionProgressTask( 
                j => 
                { 
                    Console.WriteLine("Job state: {0}", j.State); 
                    Console.WriteLine("Job progress: {0:0.##}%", j.GetOverallProgress()); 
                }, 
                CancellationToken.None).Result; 
 
            Console.WriteLine("Transcoding job finished."); 
             
            // The OutputMediaAssets[0] contains the first 
            // (and in this case the only) output asset 
            // produced by the encoding job.
            IAsset outputAsset = job.OutputMediaAssets[0]; 
 
            Console.WriteLine("Publishing output asset..."); 
 
            // Publish the output asset by creating an Origin locator.  
            // Define the Read only access policy and
            // specify that the asset can be accessed for 30 days.  
            _context.Locators.Create( 
                LocatorType.OnDemandOrigin, 
                outputAsset, 
                AccessPermissions.Read, 
                TimeSpan.FromDays(30));

            // Generate the Smooth Streaming, HLS and MPEG-DASH URLs for adaptive streaming.  
            Uri smoothStreamingUri = outputAsset.GetSmoothStreamingUri();
            Uri hlsUri = outputAsset.GetHlsUri();
            Uri mpegDashUri = outputAsset.GetMpegDashUri();

            // To stream your content based on the set of 
            // adaptive bitrate MP4 files, you must first get 
            // at least one On-demand Streaming reserved unit. 
            // For more information, see http://msdn.microsoft.com/en-us/library/jj889436.aspx.
            Console.WriteLine("Output is now available for adaptive streaming:");

            // Show the streaming URLs. 
            Console.WriteLine(smoothStreamingUri);
            Console.WriteLine(hlsUri);
            Console.WriteLine(mpegDashUri);
                
            //
            // Create a SAS locator that is used for progressive download
            // or to download files to a local directory.  
            // The content that you want to progressively download cannot be encrypted.
            _context.Locators.Create( 
                LocatorType.Sas, 
                outputAsset, 
                AccessPermissions.Read, 
                TimeSpan.FromDays(30)); 

            // Get all the MP4 files in the output asset.
            IEnumerable<IAssetFile> mp4AssetFiles = outputAsset
                    .AssetFiles
                    .ToList()
                    .Where(af => af.Name.EndsWith(".mp4", 
                        StringComparison.OrdinalIgnoreCase));

            // Generate the Progressive Download URLs for each MP4. 
            List<Uri> mp4ProgressiveDownloadUris = 
                mp4AssetFiles.Select(af => af.GetSasUri()).ToList();

            Console.WriteLine("You can progressively download the following MP4 files:");
            mp4ProgressiveDownloadUris.ForEach(uri => Console.WriteLine(uri)); 
 
             string outputFolder = Path.Combine(_mediaFiles, @"job-output");

            if (!Directory.Exists(outputFolder)) 
            { 
                Directory.CreateDirectory(outputFolder); 
            } 
 
            Console.WriteLine("Downloading output asset files to local folder..."); 
 
            // Download the output asset to a local folder. 
            outputAsset.DownloadToFolder( 
                outputFolder, 
                (af, p) => 
                { 
                    Console.WriteLine("Downloading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress); 
                }); 
 
            Console.WriteLine("Downloaded files are located in '{0}'.", Path.GetFullPath(outputFolder)); 
        } 
    } 
} 

另請參閱

本文對您有任何幫助嗎?
(剩餘 1500 個字元)
感謝您提供意見
Microsoft 正展開一份線上問卷調查,了解您對於 MSDN 網站的看法。 如果您選擇參加,您離開 MSDN 網站時即會顯示線上問卷調查。

您是否想要參加?
顯示:
© 2014 Microsoft