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);
        }
Example #2
0
        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);
        }