エクスポート (0) 印刷
すべて展開

Media Services SDK for .NET による資産の配信

更新日: 2015年2月

このトピックでは、クライアントにメディア コンテンツを配信するための 3 つの最も一般的なオプションを説明します。

  • 次のいずれかの形式でアダプティブ コンテンツをストリーミングする。MPEG DASH、Apple HTTP Live Streaming (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警告
Media Services は、ストリーミング コンテンツの URL (http://{WAMSAccount}.origin.mediaservices.windows.net/{GUID}/{IAssetFile.Name}/streamingParameters など) を作成するときに、IAssetFile.Name プロパティの値を使用します。このため、パーセント エンコードは許可されません。Name プロパティの値は次のいずれのパーセント エンコード予約文字を持つこともできません。!*'();:@&=+$,/?%#[]"。また、ファイル名の拡張子に使用できる '.' は 1 つだけです。

以下のトピックでは、Media Services 開発のためのセットアップ方法について説明します。

  1. Setup for Development on the Media Services SDK for .NET

    このトピックのコードでは、Azure Media Services .NET SDK Extensions が使用されています。Media Services .NET SDK Extensions は、コードを簡略化し、Media Services を使った開発を容易にする拡張メソッドとヘルパー関数のセットです。

  2. Media Services SDK による Media Services への接続

Media Services アカウントに既に格納されている資産 (Assets コレクションを介して使用できる) は、配信 (ダウンロードまたはストリーミング) することができます。エンコード ジョブまたはパッケージ化ジョブを実行した結果として得られる資産 (OutputMediaAssets コレクションを介して使用できる) もダウンロードまたはストリーミングすることができます。このトピックの例では、ジョブの出力メディア資産へのアクセスおよびこれらの配信の方法を示します。

このセクションのコードは、次の処理を実行します。

  1. 新しい資産を作成し、ローカル ディレクトリから Mezzanine MP4 ファイルをアップロードします。

  2. 以前の Mezzanine 資産をマルチビット レート資産にトランスコードする単一タスクを持つジョブを準備します。

  3. ジョブを送信し、完了するまで待機します。

  4. エンコード ジョブを生成した出力資産を取得します。

  5. Origin ロケーターを作成することにより出力資産を発行します。

  6. アダプティブ ストリーミング用の Smooth Streaming、HLS、および MPEG-DASH URL を生成します。

    一連のアダプティブ ビットレート MP4 ファイルに基づいてコンテンツをストリーミングするには、まず、1 つ以上のオンデマンド ストリーミング占有ユニットを取得する必要があります。詳細については、「Dynamic Packaging」を参照してください。

  7. プログレッシブ ダウンロードを行うため、およびローカル ディレクトリにファイルをダウンロードするために使用される SAS ロケーターを作成します。

    プログレッシブ ダウンロードするコンテンツを暗号化することはできません。

  8. 資産内の MP4 ファイルごとにプログレッシブ ダウンロード URL を生成します。

  9. ローカル フォルダーに出力資産をダウンロードします。

noteメモ
このサンプルでは、Azure Media Services .NET SDK Extensions を使用します。SDK 拡張機能では、多くの詳細が非表示になっています。一部のメソッドを実装する方法 (たとえば、GetSmoothStreamingUri(), GetHlsUri(), andGetMpegDashUri() メソッドでストリーミング URL を構築する方法) を確認したい場合は、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)); 
        } 
    } 
} 

関連項目

表示:
© 2015 Microsoft