1
我正在編寫使用Azure媒體服務批量編碼媒體的代碼。該過程正常工作,但是我還需要在過程中跟蹤SQL數據庫中的源和輸出資產,以便我可以引用原始介質(存儲在blob中)和新的輸出資產ID。在作業提交之前從編碼任務獲取Asset.ID
當我接收到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();
}