Extensions for Windows Azure Media Service .NET SDK のサンプルコード

8/22にSDKのPM MingfeiのBlogで発表されましたが、.NET SDKの拡張モジュールが公開されました。

ここでは、そのサンプルコードを残しておきます。

http://mingfeiy.com/introducing-extensions-for-windows-azure-media-services-via-github-and-nuget/

・インストール方法

Visual StudioのNuGetで「windowsazure.mediaservices」で検索してください。
検索結果に2つ出てきますが「Extensions for Windows Azure Media Services .NET SDK」をインストールするだけで、関連モジュールを自動的に入れてくれますので、OKです。

※執筆時点でVisual Studio 2013 RC JPNでも動作しました。

・サンプルコード:

読んだ方が早いですので。素のSDKですと、冗長的だった部分が無くなり、より直感的にコーディング出来るようになりました。

    class
Program

    {

        private
static
readonly
Boolean _createDynamicPackageManifestFile = True;

        static
void Main(string[] args)

        {

            var targetFile = new
FileInfo(ConfigurationManager.AppSettings[“uploadfile”]);

            // 処理時間の計測

            var totalSw = new
Stopwatch();

            totalSw.Start();

            var sw = new
Stopwatch();

            Console.WriteLine(“***** 1. Windows Azure メディアサービス
接続 *****”);

            var context = new
CloudMediaContext(

                    ConfigurationManager.AppSettings[“accountName”],

                    ConfigurationManager.AppSettings[“accountKey”]

                    );

            context.ParallelTransferThreadCount = 100;

            context.NumberOfConcurrentTransfers = 100;

            Console.WriteLine(“***** 2. ファイルアップロード *****”);

            sw.Start();

            var asset = context.CreateAssetFromFile(

                targetFile.FullName,

                AssetCreationOptions.None,

                (a, p) =>

                {

                    Console.WriteLine(経過 {0}%”, p.Progress);

                });

            // — この段階でファイルの転送が完了

            // ***** 非同期実行終わり ****

            sw.Stop();

            Console.WriteLine(アップロード処理完了);

            Console.WriteLine(アップロード処理時間: {0}”, sw.Elapsed.ToString());

            sw.Reset();

            Console.WriteLine(“***** 3. トランスコード *****”);

            var outputAsset = asset;

            if (_createDynamicPackageManifestFile)

            {

                Console.WriteLine(” !!! 今回はエンコード処理は行いません。);

                // 3.a. Dynamic Package用のismファイルを作成してアップロードします。

                StringBuilder sb = new
StringBuilder(1024);

                sb.AppendLine(@”<!–?xml version=””1.0″” encoding=””utf-8″” standalone=””yes””?>”);

                sb.AppendLine(@”<smil xmlns=””http://www.w3.org/2001/SMIL20/Language””>&#8221;);

                sb.AppendLine(@” <head>”);

                sb.AppendLine(@” <meta name=””formats”” content=””” + targetFile.Extension.Replace(“.”, “”) + @””” />”);

                sb.AppendLine(@” </head>”);

                sb.AppendLine(@” <body>”);

                sb.AppendLine(@” <switch>”);

                sb.AppendLine(@” src=””” + targetFile.Name + @””” />”);

                sb.AppendLine(@” src=””” + targetFile.Name + @””” />”);

                sb.AppendLine(@” </switch>”);

                sb.AppendLine(@” </body>”);

                sb.AppendLine(@”</smil>”);

                var ismFileName = targetFile.Name.Replace(targetFile.Extension, “”) + “.ism”;

                WriteToFile(ismFileName, sb.ToString());

                var manifestFile = asset.AssetFiles.Create(ismFileName);

                manifestFile.Upload(Environment.GetEnvironmentVariable(“USERPROFILE”)

                                + @”\Desktop\”

                                + ismFileName);

            }

            else

            {

                Console.WriteLine(トランスコード開始);

                // 3.b.1. ジョブ作成

                var job = context.PrepareJobWithSingleTask(

                    MediaProcessorNames.WindowsAzureMediaEncoder,

                    MediaEncoderTaskPresetStrings.H264AdaptiveBitrateMP4SetSD4x3,

                    asset,

                    asset.Name + “- output”,

                    AssetCreationOptions.None);

                // 3.b.2. ジョブ実行.

                job.Submit();

                job = context.StartExecutionProgressTask(

                    job,

                    j =>

                    {

                        Console.WriteLine(状態: {0}”, j.State);

                        Console.WriteLine(経過: {0:0.##}%”, j.GetOverallProgress());

                    },

                    System.Threading.CancellationToken.None).Result;

                sw.Stop();

                Console.WriteLine(トランスコード完了);

                Console.WriteLine(トランスコード時間: {0}”, sw.Elapsed.ToString());

                outputAsset = job.OutputMediaAssets[0];

            }

            sw.Reset();

            Console.WriteLine(“***** 3. 配信 *****”);

            context.CreateLocator(outputAsset, LocatorType.OnDemandOrigin, AccessPermissions.Read, TimeSpan.FromHours(1));

            //context.CreateLocator(outputAsset, LocatorType.Sas, AccessPermissions.Read, TimeSpan.FromHours(1));

            // 5. URLを出力

            WriteToFile(“Smooth_Path.txt”, outputAsset.GetSmoothStreamingUri().AbsoluteUri);

            WriteToFile(“HLS_Path.txt”, outputAsset.GetHlsUri().AbsoluteUri);

            WriteToFile(“MPED-DASH_Path.txt”, outputAsset.GetMpegDashUri().AbsoluteUri);

            Console.WriteLine();

            Console.WriteLine(全ての処理が終了しました。);

            Console.WriteLine(総処理時間: {0}”, totalSw.Elapsed.ToString());

            Console.WriteLine(何かキーを押してください。);

            Console.ReadLine();

        }

        ///
<summary>

        /// Utility: 文字列のファイル出力

        ///
</summary>

        ///
outFileName”>

        ///
fileContent”>

        static
void WriteToFile(string outFileName, string fileContent)

        {

            System.IO.StreamWriter sr = System.IO.File.CreateText(

                Environment.GetEnvironmentVariable(“USERPROFILE”) +

                @”\Desktop\” +

                outFileName);

            sr.Write(fileContent);

            sr.Close();

        }

    }

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中