public void PublishFromBlob(string ExternalStorageConn, string ExternalStorageContainer, string ExternalBlobName, string AssetStorageConn, string AssestBlobName, string myEncodeProcessId) { //1. Create Asset // CloudStorageAccount externalStorageAccount = CloudStorageAccount.Parse(ExternalStorageConn); CloudBlobClient externalCloudBlobClient = externalStorageAccount.CreateCloudBlobClient(); CloudBlobContainer externalMediaBlobContainer = externalCloudBlobClient.GetContainerReference(ExternalStorageContainer); CloudStorageAccount assetStorageAccount = CloudStorageAccount.Parse(AssetStorageConn); CloudBlobClient AssetBlobStoragclient = assetStorageAccount.CreateCloudBlobClient(); System.Collections.Generic.List <JobFinishInfo> NotificationList = new System.Collections.Generic.List <JobFinishInfo>(); IAsset OriginalAsset; try { OriginalAsset = this.CreateAssetFromBlob(externalMediaBlobContainer, ExternalBlobName, AssetBlobStoragclient, AssestBlobName, myEncodeProcessId); if (OriginalAsset == null) { throw new Exception("Add Asset from blob Fail!"); } } catch (Exception X) { throw new Exception("[CreateAssetFromBlob] " + X.Message); } //2. Setup the enviroment// string assetName = OriginalAsset.Name; IAsset CurrentAsset; //0.setup EncodeJob myWorkerEncoder = new EncodeJob(ProfileFileDirectory); myWorkerEncoder.MediaServiceContext = ObtainContext(_accountMediaName, _accountMediaKey); myWorkerEncoder.ConnConfigFiles = this.myWamsButlerConn; //TODO: improve myWorkerEncoder.OnJobError += OnJobError; myWorkerEncoder.OnJobFinish += OnJobFinish; IAsset lastEncodedAsset = null; IJob currentJob; ILocator currentLocator; //1. check Types System.Collections.Generic.IEnumerable <OutPutFormat> formatList = GetMediaContentType(myWamsButlerConn, "wamsbutleroutputformat", myAppId); if (formatList.Count() == 0) { throw new Exception("Output Format missing, review Table wamsbutleroutputformat"); } //3. Loop for each Output Format// foreach (OutPutFormat encodeX in formatList) { currentJob = null; currentLocator = null; if ((MediaContentType)encodeX.OutTypesId == MediaContentType.HLS) { //This is package JOB, not real encoding for this reason uses the last Encode asset //Only use when you are making Static HLS Package CurrentAsset = lastEncodedAsset; } else { CurrentAsset = OriginalAsset; } //3.1. Encode & output Assets try { //Here we does the encoding and return the iJOB executed currentJob = myWorkerEncoder.ExecuteJob(encodeX, CurrentAsset, assetName + encodeX.NameTail); } catch (Exception X) { throw new Exception("[ExecuteJob] " + X.Message); } if (currentJob != null) { lastEncodedAsset = currentJob.Tasks[0].OutputAssets[0]; } if (lastEncodedAsset == null) { throw new Exception("PublishFromBlob Error: first encode could not be only publish"); } ////3.2. Publish the Asset // try { currentLocator = this.MasterPublish(encodeX, lastEncodedAsset, myWorkerEncoder); } catch (Exception X) { throw new Exception("[MasterPublish] " + X.Message); } //Notificaction JOB Complete JobFinishInfo jobCompleteMessage = new JobFinishInfo(myEncodeProcessId, ExternalBlobName, currentJob, (MediaContentType)encodeX.OutTypesId, myWorkerEncoder.UrlForClientStreaming); NotificationList.Add(jobCompleteMessage); } //4.Delete Original Asset DeleteAssest(OriginalAsset); //5. Notification: all encodig jobs are ready for this asset //notication File Complete INotificator notRobot = new QueueNotificator(myWamsButlerConn); try { notRobot.sendNotification(NotificationList); } catch (Exception X) { throw new Exception("[sendNotification] " + X.Message); } }
public void PublishFromBlob(string ExternalStorageConn, string ExternalStorageContainer, string ExternalBlobName, string AssetStorageConn, string AssestBlobName, string myEncodeProcessId) { //1. Create Asset // CloudStorageAccount externalStorageAccount = CloudStorageAccount.Parse(ExternalStorageConn); CloudBlobClient externalCloudBlobClient = externalStorageAccount.CreateCloudBlobClient(); CloudBlobContainer externalMediaBlobContainer = externalCloudBlobClient.GetContainerReference(ExternalStorageContainer); CloudStorageAccount assetStorageAccount = CloudStorageAccount.Parse(AssetStorageConn); CloudBlobClient AssetBlobStoragclient = assetStorageAccount.CreateCloudBlobClient(); System.Collections.Generic.List<JobFinishInfo> NotificationList = new System.Collections.Generic.List<JobFinishInfo>(); IAsset OriginalAsset; try { OriginalAsset = this.CreateAssetFromBlob(externalMediaBlobContainer, ExternalBlobName, AssetBlobStoragclient, AssestBlobName, myEncodeProcessId); if (OriginalAsset == null) { throw new Exception("Add Asset from blob Fail!"); } } catch (Exception X) { throw new Exception("[CreateAssetFromBlob] " + X.Message); } //2. Setup the enviroment// string assetName = OriginalAsset.Name; IAsset CurrentAsset; //0.setup EncodeJob myWorkerEncoder = new EncodeJob(ProfileFileDirectory); myWorkerEncoder.MediaServiceContext = ObtainContext(_accountMediaName, _accountMediaKey); myWorkerEncoder.ConnConfigFiles = this.myWamsButlerConn; //TODO: improve myWorkerEncoder.OnJobError += OnJobError; myWorkerEncoder.OnJobFinish += OnJobFinish; IAsset lastEncodedAsset = null; IJob currentJob; ILocator currentLocator; //1. check Types System.Collections.Generic.IEnumerable<OutPutFormat> formatList= GetMediaContentType(myWamsButlerConn, "wamsbutleroutputformat", myAppId); if (formatList.Count() == 0) { throw new Exception("Output Format missing, review Table wamsbutleroutputformat"); } //3. Loop for each Output Format// foreach (OutPutFormat encodeX in formatList) { currentJob = null; currentLocator = null; if ((MediaContentType)encodeX.OutTypesId == MediaContentType.HLS) { //This is package JOB, not real encoding for this reason uses the last Encode asset //Only use when you are making Static HLS Package CurrentAsset = lastEncodedAsset; } else { CurrentAsset = OriginalAsset; } //3.1. Encode & output Assets try { //Here we does the encoding and return the iJOB executed currentJob = myWorkerEncoder.ExecuteJob(encodeX, CurrentAsset, assetName + encodeX.NameTail); } catch (Exception X) { throw new Exception("[ExecuteJob] "+ X.Message); } if (currentJob != null) { lastEncodedAsset = currentJob.Tasks[0].OutputAssets[0]; } if (lastEncodedAsset == null) { throw new Exception("PublishFromBlob Error: first encode could not be only publish"); } ////3.2. Publish the Asset // try { currentLocator = this.MasterPublish(encodeX, lastEncodedAsset, myWorkerEncoder); } catch (Exception X) { throw new Exception("[MasterPublish] "+ X.Message); } //Notificaction JOB Complete JobFinishInfo jobCompleteMessage = new JobFinishInfo(myEncodeProcessId, ExternalBlobName, currentJob, (MediaContentType)encodeX.OutTypesId, myWorkerEncoder.UrlForClientStreaming); NotificationList.Add(jobCompleteMessage); } //4.Delete Original Asset DeleteAssest(OriginalAsset); //5. Notification: all encodig jobs are ready for this asset //notication File Complete INotificator notRobot = new QueueNotificator(myWamsButlerConn); try { notRobot.sendNotification(NotificationList); } catch (Exception X) { throw new Exception("[sendNotification] " + X.Message) ; } }
private ILocator MasterPublish(OutPutFormat currentOutPutFormat, IAsset currentAsset, EncodeJob currentWorkerEncoder) { ILocator currentLocator = null; //b. Publish switch ((MediaContentType)currentOutPutFormat.OutTypesId) { case MediaContentType.SmoothStreaming: //b. Publish H264 currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.OnDemandOrigin, MediaContentType.SmoothStreaming); break; case MediaContentType.HLS: currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.OnDemandOrigin, MediaContentType.HLS); break; case MediaContentType.H264Broadband720p: //b. Publish H264 currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.Sas, MediaContentType.H264Broadband720p); break; case MediaContentType.HDS: currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.OnDemandOrigin, MediaContentType.HDS); break; default: //b. otherssss currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.Sas, MediaContentType.OtherSingleFile); break; } return(currentLocator); }
private ILocator MasterPublish( OutPutFormat currentOutPutFormat , IAsset currentAsset, EncodeJob currentWorkerEncoder) { ILocator currentLocator = null; //b. Publish switch ((MediaContentType)currentOutPutFormat.OutTypesId) { case MediaContentType.SmoothStreaming: //b. Publish H264 currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.OnDemandOrigin, MediaContentType.SmoothStreaming); break; case MediaContentType.HLS: currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.OnDemandOrigin, MediaContentType.HLS); break; case MediaContentType.H264Broadband720p: //b. Publish H264 currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.Sas, MediaContentType.H264Broadband720p); break; case MediaContentType.HDS: currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.OnDemandOrigin, MediaContentType.HDS); break; default: //b. otherssss currentLocator = currentWorkerEncoder.GetDynamicStreamingUrl(currentAsset.Id, LocatorType.Sas, MediaContentType.OtherSingleFile); break; } return currentLocator; }