public override void HandleExecute(ChainRequest request) { myRequest = (ButlerProcessRequest)request; _MediaServicesContext = new CloudMediaContext(myRequest.MediaAccountName, myRequest.MediaAccountKey); myBlobManager = BlobManagerFactory.CreateBlobManager(myRequest.ProcessConfigConn); //IjsonKeyValue dotControlData = myBlobManager.GetDotControlData(myRequest.ButlerRequest.ControlFileUri); IjsonKeyValue dotControlData = myBlobManager.GetProcessConfig(myRequest.ButlerRequest.ControlFileUri, myRequest.ProcessTypeId); string searchServiceName = dotControlData.Read(DotControlConfigKeys.InjectTTMLSearchServiceName); string adminApiKey = dotControlData.Read(DotControlConfigKeys.InjectTTMLadminApiKey); string indexName = dotControlData.Read(DotControlConfigKeys.InjectTTMLindexName); SearchServiceClient serviceClient = new SearchServiceClient(searchServiceName, new SearchCredentials(adminApiKey)); if (!serviceClient.Indexes.Exists(indexName)) { CreateVideoTextIndex(serviceClient, indexName); } IAsset asset = (from m in _MediaServicesContext.Assets select m).Where(m => m.Id == myRequest.AssetId).FirstOrDefault(); UploadTTML(serviceClient, indexName, asset); }
public override void HandleExecute(ChainRequest request) { //1. Step Setup myRequest = (ButlerProcessRequest)request; _MediaServicesContext = new CloudMediaContext(myRequest.MediaAccountName, myRequest.MediaAccountKey); myEncodigSupport = new EncoderSupport(_MediaServicesContext); myBlobManager = BlobManagerFactory.CreateBlobManager(myRequest.ProcessConfigConn); IjsonKeyValue dotControlData = myBlobManager.GetDotControlData(myRequest.ButlerRequest.ControlFileUri); IjsonKeyValue processData = new jsonKeyValue(myBlobManager.GetButlerConfigurationValue(ProcessConfigKeys.DefualtPartitionKey, myRequest.ProcessTypeId + ".config")); IjsonKeyValue allPorcessData = myBlobManager.GetProcessConfig(myRequest.ButlerRequest.ControlFileUri, myRequest.ProcessTypeId); //2. Get Current Asset IAsset asset = (from m in _MediaServicesContext.Assets select m).Where(m => m.Id == myRequest.AssetId).FirstOrDefault(); //3. JOB parameters string OutputAssetsName = asset.Name + "_mbIndex2"; string JobName = string.Format("GridEncodeStep_{1}_{0}", myRequest.ProcessInstanceId, asset.Name); string MediaProcessorName = myEncodigSupport.GetMediaProcessorName(allPorcessData, DotControlConfigKeys.Index2EncodeStepMediaProcessorName, "Azure Media Indexer 2 Preview"); string[] encodeConfigurations = myEncodigSupport.GetLoadEncodignProfiles(dotControlData, processData, DotControlConfigKeys.Index2EncodeStepEncodeConfigList, myRequest.ButlerRequest.MezzanineFiles, myRequest.ProcessConfigConn, this.StepConfiguration); //4. Execute JOB and Wait IJob currentJob = myEncodigSupport.ExecuteGridJob(OutputAssetsName, JobName, MediaProcessorName, encodeConfigurations, "Indexing Task", asset.Id, MyEncodigSupport_OnJobError, MyEncodigSupport_JobUpdate); //5. Copy subtitles files to input asste? if ("yes" == dotControlData.Read(DotControlConfigKeys.Index2PreviewCopySubTitles)) { CopyCaptions(currentJob.OutputMediaAssets.FirstOrDefault(), asset); currentJob.OutputMediaAssets.FirstOrDefault().Delete(); } else { myRequest.AssetId = currentJob.OutputMediaAssets.FirstOrDefault().Id; } }
public string[] GetLoadEncodignProfiles(IjsonKeyValue dotControlData, IjsonKeyValue processData, string jsonKey, List <string> MezzanineFiles, string ProcessConfigConn, string StepConfiguration) { var myBlobManager = BlobManagerFactory.CreateBlobManager(ProcessConfigConn); string[] EncodingProfiles; int profileId = 0; if (!string.IsNullOrEmpty(dotControlData.Read(jsonKey))) { //Definition encoders on instance level DotcControl File var Xlist = dotControlData.ReadArray(jsonKey).ToArray(); EncodingProfiles = new string[Xlist.Count()]; foreach (var profile in Xlist) { string url = MezzanineFiles.Where(f => f.ToLower().EndsWith(profile.ToString().ToLower())).FirstOrDefault(); if (url == null) { throw new Exception("Encoding profile is not on file package!"); } string jsonTxt = myBlobManager.ReadTextBlob(new Uri(url)); if (jsonTxt[0] != '{') { jsonTxt = jsonTxt.Substring(1, jsonTxt.Length - 1); } EncodingProfiles[profileId] = myBlobManager.ReadTextBlob(new Uri(url)); profileId += 1; } } else { if (!string.IsNullOrEmpty(processData.Read(jsonKey))) { //Definition Encoders profile on process level var profileNameList = processData.ReadArray(jsonKey).ToArray(); EncodingProfiles = new string[profileNameList.Count()]; foreach (var profileName in profileNameList) { EncodingProfiles[profileId] = myBlobManager.ReadTextBlob("mediabutlerbin", "encoderdefinitions/" + profileName); profileId += 1; } } else { //Definition on Process definition string encodigProfileFileName; if (string.IsNullOrEmpty(StepConfiguration)) { //Use default encodigProfileFileName = "H264 Multiple Bitrate 1080p.json"; } else { //Use process level definition encodigProfileFileName = StepConfiguration; } EncodingProfiles = new string[] { LoadEncodeProfile(encodigProfileFileName, ProcessConfigConn) }; } } return(EncodingProfiles); }