Windows Azure Media Services .NET SDK Extensions 2.0.0 のリリース

先日のBlogにて、1.6.0.0 の不具合について述べましたが、それがfixされてリリースされています。
正式なリリース文書はありませんが、動作確認は出来ましたので、ここに残しておきます。

  • Extentionsがdllアセンブリに
    • 以前はソースコードを追えましたが、そういう扱いではなくなりました。
  • API変更
    • CloudMediaContext.<直接> から、CloudMediaContext.<コレクション>.<操作> という形に変更になっています。

    元ソースコード: github

    https://github.com/WindowsAzure/azure-sdk-for-media-services-extensions

    こちらに、簡単なサンプルコードを残しておきます。

    Enjoy!

using System;

using System.Configuration;

using System.Collections.Generic;

using System.Diagnostics;

using System.IO;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Microsoft.WindowsAzure.MediaServices.Client;

namespace ConsoleApplication2

{

    class
Program

    {

        private
static
readonly
Boolean _createDynamicPackageManifestFile = Boolean.Parse(ConfigurationManager.AppSettings[“createDynamicPackageManifestFile”]);


        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 = 10;

            context.NumberOfConcurrentTransfers = 5;

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

            sw.Start();

            var asset = context.Assets.CreateFromFile(

                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.Jobs.CreateWithSingleTask(

                    MediaProcessorNames.WindowsAzureMediaEncoder,

                    MediaEncoderTaskPresetStrings.H264AdaptiveBitrateMP4Set1080p,

                    asset,

                    asset.Name + “- output”,

                    AssetCreationOptions.None);

                sw.Start();

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

                job.Submit();

                job = job.StartExecutionProgressTask(

                    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. 配信 *****”);

            var streamingAccessPolicy = context.AccessPolicies.Create(

                “Streaming Access Policy”, TimeSpan.FromHours(1), AccessPermissions.Read);

            context.Locators.CreateLocator(

                LocatorType.OnDemandOrigin,

                outputAsset,

                streamingAccessPolicy);

            // 5. URLを出力

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

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

            WriteToFile(“MPEG-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 と連携中