セールス: 1-800-867-1380

Media Services SDK for .NET によるエンコード ジョブの作成

更新日: 2014年7月

インターネット上でデジタル ビデオを配信するには、メディアを圧縮する必要があります。デジタル ビデオ ファイルのサイズは非常に大きいので、インターネットで配信できない場合や、お客様のデバイスで適切に表示できないことがあります。エンコーディングとは、お客様がメディアを閲覧できるようにビデオやオーディオを圧縮するプロセスのことです。

エンコードジョブは、Media Services で最も一般的な処理操作の 1 つです。メディア ファイルをあるエンコードから別のエンコードに変換するには、エンコード ジョブを作成します。コンコードするときは、Media Services の組み込みの Media Encoder を使用できます。Media Services パートナーによって提供されるエンコーダー (Azure Marketplace を通して入手可能なサード パーティのエンコーダー) も使用できます。エンコード タスクの詳細を指定するには、該当するエンコーダーに対して定義されたプリセット文字列を使用するか、またはプリセット構成ファイルを使用します。使用できるプリセットの種類を確認するには、「Windows Azure Media Services 用のタスク プリセット」を参照してください。サード パーティのエンコーダーを使用した場合は、ファイルを検証する必要があります。詳細については、「H264 アダプティブ ビットレート MP4 セットの検証」の例を参照してください。

Media Services を操作するときの一般的なシナリオには、次のようなものがあります。

  1. 入力ファイル (中間ファイルと呼ばれる) をアップロードする。例: H.264、MP4、または WMV (サポートされている形式の一覧については「Media Services Encoder によってサポートされている形式」を参照)。

  2. 中間ファイルを H.264 MP4 アダプティブ ビットレート セットにエンコードする。

    noteメモ
    中間ファイルをアダプティブ ビットレート MP4 セットにエンコードしてから、Dynamic PackagingまたはStatic Packagingを使ってそのセットを目的の形式に変換することをお勧めします。

    中間ファイルを直接 Smooth Streaming にエンコードする場合は、「Media Services Encoder システムのプリセット」に記載されている任意の "Smooth Streaming" プリセットを使用できます。ただし、中間ファイルのサイズが非常に小さい場合を除き、推奨しません。

    WMV ファイルを Smooth Streaming に変換する場合は、最初にファイルを H.264 にエンコードする必要があります。WMV は、通常は ASF コンテナー形式を使用するビデオ コーデックです。H.264 は、MP4 コンテナー形式で使用できるビデオ コーデックです。スムーズ ストリーミングでは、フラグメント化 MP4 または f-mp4 と呼ばれる MP4 のバリエーションを使用します。スムーズ ストリーミングは、異なるビットレートのファイルのセットを必要とするアダプティブ ストリーミング形式であり、全ビットレートにわたって位置合わせされたフラグメントとしてすべてエンコードされています。位置合わせされたフラグメントでエンコードされた一連の MP4 ファイルは、再エンコードを必要としないで f-mp4 に変換できます。これは、WMV ファイルには当てはまりません。詳細については、「Smooth Streaming Technical Overview (スムーズ ストリーミングの技術概要)」を参照してください。 

  3. オンデマンド ロケーターを作成して、アダプティブ ビットレート MP4 セットを含む資産を発行する。

  4. コンテンツをクライアントに提供します。Dynamic Packagingを使って、コンテンツ (MPEG DASH、Smooth Streaming、HLS など) の適切な形式を提供します。

    コンテンツを保護する場合は、「メディアのセキュリティ保護」セクションのトピックを参照してください。

このトピックでは、「MP4 ファイルをアップロードし、Azure Media Encoder を使用して H.264 MP4 アダプティブ ビットレート セットを生成する」について説明します。また、MPEG DASH、HLS、および Smooth Streaming URL の作成方法についても説明します。

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

  1. Media Services SDK for .NET での開発のセットアップ

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

  2. Media Services SDK を使用して Media Services に接続する

次の例では、"H264 Adaptive Bitrate MP4 Set 720p" プリセット文字列に基づいたエンコード ジョブの作成方法を示します。プリセット文字列の一覧については、トピック「Media Services Encoder システムのプリセット」を参照してください。

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

  1. 単一の .mp4 ファイルをアップロードします。

  2. .mp4 ファイルをアダプティブ ビットレート MP4 セットにエンコードします。

    資産を H.264 アダプティブ ビットレート セットにエンコードすると、動的パッケージングを利用できます。Dynamic Packaging では、それ以上のパッケージング処理を行わなくても、指定されたプロトコルでストリームを提供できます。

  3. オンデマンド ロケーターを作成することで、資産を発行します。

  4. MPEG DASH、Smooth Streaming、HLS ストリーミングの URL を取得します。詳細については、「Media Services SDK for .NET を使用して資産を配信する」を参照してください。

コードを更新して、入力 MP4 ファイルが置かれているフォルダーをポイントするようにしてください。

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

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

このサンプルでは、Azure Media Services .NET SDK Extensions を使用します。 

using Microsoft.WindowsAzure.MediaServices.Client;
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 System.Xml.Linq;

namespace MediaServicesPackaging
{
    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)
        {
            // Create and cache the Media Services credentials in a static class variable.
            _cachedCredentials = new MediaServicesCredentials(
                            _mediaServicesAccountName,
                            _mediaServicesAccountKey);

            // Use the cached credentials to create CloudMediaContext.
            _context = new CloudMediaContext(_cachedCredentials);

            // Use the SDK extension method to create a new asset by 
            // uploading a mezzanine file from a local path.
            IAsset asset = _context.Assets.CreateFromFile(
                _singleMP4File,
                AssetCreationOptions.None,
                (af, p) =>
                {
                    Console.WriteLine("Uploading '{0}' - Progress: {1:0.##}%", af.Name, p.Progress);
                });

            // Encode an MP4 file to a set of multibitrate MP4s.
            IAsset assetMultibitrateMP4s =
                EncodeMP4ToMultibitrateMP4s(asset);

            // Publish the asset.
            _context.Locators.Create(
                LocatorType.OnDemandOrigin,
                assetMultibitrateMP4s,
                AccessPermissions.Read,
                TimeSpan.FromDays(30));

            // Get the URLs.
            Console.WriteLine("Smooth Streaming URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetSmoothStreamingUri().ToString());
            Console.WriteLine("MPEG DASH URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetMpegDashUri().ToString());
            Console.WriteLine("HLS URL:");
            Console.WriteLine(assetMultibitrateMP4s.GetHlsUri().ToString());
        }

        public static IAsset EncodeMP4ToMultibitrateMP4s(IAsset asset)
        {
            // Create a new job.
            IJob job = _context.Jobs.Create("Convert MP4 to Smooth Streaming.");

            // In Media Services, a media processor is a component that handles a specific processing task, 
            // such as encoding, format conversion, encrypting, or decrypting media content.
            //
            // Use the SDK extension method to  get a reference to the Azure Media Encoder.
            IMediaProcessor encoder = _context.MediaProcessors.GetLatestMediaProcessorByName(
                MediaProcessorNames.WindowsAzureMediaEncoder);

            // Add task 1 - Encode single MP4 into multibitrate MP4s.
            ITask adpativeBitrateTask = job.Tasks.AddNew("MP4 to Adaptive Bitrate Task",
                encoder,
                "H264 Adaptive Bitrate MP4 Set 720p",
                TaskOptions.None);

            // Specify the input Asset
            adpativeBitrateTask.InputAssets.Add(asset);

            // Add an output asset to contain the results of the job. 
            // This output is specified as AssetCreationOptions.None, which 
            // means the output asset is in the clear (unencrypted).
            adpativeBitrateTask.OutputAssets.AddNew("Multibitrate MP4s",
                                    AssetCreationOptions.None);

            // 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;

            // Get the output asset that contains the smooth stream.
            return job.OutputMediaAssets[0];
        }
    }
}

プログラムをビルドして実行します。

この情報は役に立ちましたか。
(残り 1500 文字)
フィードバックをいただき、ありがとうございました
表示:
© 2014 Microsoft