1

Azure メディア サービスを使用してメディアを一括エンコードするコードを作成しています。このプロセスは正常に機能しますが、元のメディア (BLOB に格納されている) と新しい出力アセット ID を参照できるように、プロセス中に SQL データベース内のソース アセットと出力アセットを追跡する必要もあります。

BLOB メディア アイテムを取り込んでエンコードすると、エンコーダーによって新しい IAsset.ID が新しくエンコードされたアウト アセットに割り当てられます。ただし、ジョブがエンコーダーに送信されるまで、これは出力アセットに割り当てられないようです。

ジョブがエンコーダーに送信される前に、出力 asset.id を取得するにはどうすればよいですか? または、エンコードされたアセットの asset.id をプログラムで安全に取得するにはどうすればよいですか? (アセットを Azure から取得する方法は知っていますが、ソースと出力メディアを結び付ける必要があるため、正しい出力アセットを確実に取得することが重要です)

違いがある場合は、WCFを使用しています。

以下の現在の方法

/// <summary>
        /// Encodes the asset from media storge.
        /// </summary>
        /// <param name="encodeTaskListSubmit">The encode task list.</param>
        private List<List<EncodeInputTask>> ListofEncoderTasks;
        public void EncodeAssetFromMediaStorge(List<EncodeInputTask> encodeTaskListSubmit)
        {
            var encodeTaskList = encodeTaskListSubmit;
           //check list contents            
            int i = 0;
            foreach (var encodeTask in encodeTaskList)
            {
                var assetIdCheckAgainstAzureAssets = _context.Assets.Where(x => x.Id == encodeTask.Asset.Id).FirstOrDefault();

                if (assetIdCheckAgainstAzureAssets == null)
                {
                    encodeTaskList.RemoveAt(i);
                }
                i++;
            }

            var h264SmoothStreaming1080P =
                encodeTaskList.Where(
                    x => x.EncodePreset == MediaServices.EncodePresetsForSmoothStreaming.H264SmoothStreaming1080P)
                              .ToList();

            var h264SmoothStreaming720P =
                encodeTaskList.Where(
                    x => x.EncodePreset == MediaServices.EncodePresetsForSmoothStreaming.H264SmoothStreaming720P)
                              .ToList();

            var h264SmoothStreaming720Pfor3Gor4G =
                encodeTaskList.Where(
                    x => x.EncodePreset == MediaServices.EncodePresetsForSmoothStreaming.H264SmoothStreaming720Pfor3Gor4G)
                              .ToList();

            var h264SmoothStreamingSd16X9 =
                encodeTaskList.Where(
                    x => x.EncodePreset == MediaServices.EncodePresetsForSmoothStreaming.H264SmoothStreamingSd16X9)
                              .ToList();

            var h264SmoothStreamingSd4X3 =
                encodeTaskList.Where(
                    x => x.EncodePreset == MediaServices.EncodePresetsForSmoothStreaming.H264SmoothStreamingSd4X3)
                              .ToList();


            //create new encoder job reference
            IJob encoderJobs = _context.Jobs.Create("Job " + DateTime.Now + " " + Guid.NewGuid().ToString());

            var processor = GetLatestMediaProcessorByName("Windows Azure Media Encoder");

            ListofEncoderTasks = new List<List<EncodeInputTask>>
                {
                    h264SmoothStreaming1080P,
                    h264SmoothStreaming720P,
                    h264SmoothStreaming720Pfor3Gor4G,
                    h264SmoothStreamingSd16X9,
                    h264SmoothStreamingSd4X3
                };

            foreach (List<EncodeInputTask> encodeTasks in ListofEncoderTasks)
            {
                foreach (EncodeInputTask encodeTask in encodeTasks)
                {
                    var encodePreset = Global.Common.GetEnumDescription(encodeTask.EncodePreset);

                    ITask task = encoderJobs.Tasks.AddNew("Task " + DateTime.Now + Guid.NewGuid(), processor, encodePreset, TaskOptions.ProtectedConfiguration);

                    task.InputAssets.Add(encodeTask.Asset);

                    string outputAssetName = encodeTask.Asset.Name + " " + encodePreset;

                    task.OutputAssets.AddNew(outputAssetName + " " + encodePreset, AssetCreationOptions.None);

                    encodeTask.Asset.Name = outputAssetName;

                    DatabaseAction.UpdateMediaItemState(encodeTask.Asset.Id, true, MediaServices.InternalAssetState.Encoding);
                }
            }

            DatabaseAction.EncodeJobRegistry(encoderJobs.Name,true,ListofEncoderTasks);

            DatabaseAction.RegisterSourceAssetInEncodedTable(ListofEncoderTasks);

            encoderJobs.Submit();         

        }
4

1 に答える 1

1

エンコードされたアセットはそのソースへのリンクを保持します。これが「親」プロパティです。

このメソッドを使用して、新しくエンコードされたアセットとその親の間のリンクを作成できます。

于 2013-04-28T12:59:30.767 に答える