Example #1
0
 private static void DeleteEntities <T>(MediaClient mediaClient, MediaEntity entityType) where T : Resource
 {
     T[] entities = mediaClient.GetAllEntities <T>(entityType);
     foreach (T entity in entities)
     {
         if (!entity.Name.StartsWith(Constant.Media.PredefinedPrefix, StringComparison.OrdinalIgnoreCase))
         {
             mediaClient.DeleteEntity(entityType, entity.Name);
         }
     }
 }
Example #2
0
        private static MediaJobInput GetJobInput(IAsset asset)
        {
            MediaJobInput jobInput = new MediaJobInput()
            {
                AssetId     = asset.Id,
                AssetName   = asset.Name,
                PrimaryFile = MediaClient.GetPrimaryFile(asset)
            };

            return(jobInput);
        }
Example #3
0
        public static string PublishJob(MediaJobNotification jobNotification, bool webHook)
        {
            string jobPublication = string.Empty;

            if (jobNotification != null && jobNotification.EventType == MediaJobNotificationEvent.JobStateChange &&
                (jobNotification.Properties.NewState == JobState.Error ||
                 jobNotification.Properties.NewState == JobState.Canceled ||
                 jobNotification.Properties.NewState == JobState.Finished))
            {
                if (webHook)
                {
                    string        settingKey    = Constants.AppSettingKey.MediaJobNotificationStorageQueueName;
                    string        queueName     = AppSetting.GetValue(settingKey);
                    MessageClient messageClient = new MessageClient();
                    messageClient.AddMessage(queueName, jobNotification);
                }
                else
                {
                    EntityClient entityClient = new EntityClient();
                    string       tableName    = Constants.Storage.TableName.JobPublish;
                    string       partitionKey = jobNotification.Properties.AccountName;
                    string       rowKey       = jobNotification.Properties.JobId;
                    JobPublish   jobPublish   = entityClient.GetEntity <JobPublish>(tableName, partitionKey, rowKey);
                    if (jobPublish != null)
                    {
                        tableName = Constants.Storage.TableName.JobPublishProtection;
                        ContentProtection contentProtection = entityClient.GetEntity <ContentProtection>(tableName, partitionKey, rowKey);
                        string            accountName       = jobPublish.PartitionKey;
                        string            accountKey        = jobPublish.MediaAccountKey;
                        MediaClient       mediaClient       = new MediaClient(accountName, accountKey);
                        IJob job = mediaClient.GetEntityById(MediaEntity.Job, rowKey) as IJob;
                        if (job != null)
                        {
                            mediaClient.SetProcessorUnits(job, ReservedUnitType.Basic);
                            if (jobNotification.Properties.NewState == JobState.Finished)
                            {
                                PublishContent(mediaClient, job, jobPublish, contentProtection);
                            }
                            string messageText = GetNotificationMessage(accountName, job);
                            MessageClient.SendText(messageText, jobPublish.MobileNumber);
                        }
                        if (contentProtection != null)
                        {
                            tableName = Constants.Storage.TableName.JobPublishProtection;
                            entityClient.DeleteEntity(tableName, contentProtection);
                        }
                        tableName = Constants.Storage.TableName.JobPublish;
                        entityClient.DeleteEntity(tableName, jobPublish);
                    }
                }
            }
            return(jobPublication);
        }
        private static MediaJobTask[] GetVideoSummarizationTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaJobInput[] jobInputs)
        {
            jobTask.MediaProcessor = MediaProcessor.VideoSummarization;
            JObject processorConfig  = GetProcessorConfig(jobTask);
            JToken  processorOptions = processorConfig["Options"];

            processorOptions["MaxMotionThumbnailDurationInSecs"] = jobTask.ProcessorConfigInteger[MediaProcessorConfig.SummarizationDurationSeconds.ToString()];
            processorOptions["FadeInFadeOut"] = jobTask.ProcessorConfigBoolean[MediaProcessorConfig.SummarizationFadeTransitions.ToString()];
            processorOptions["OutputAudio"]   = jobTask.ProcessorConfigBoolean[MediaProcessorConfig.SummarizationIncludeAudio.ToString()];
            jobTask.ProcessorConfig           = processorConfig.ToString();
            return(GetJobTasks(mediaClient, jobTask, jobInputs, false));
        }
Example #5
0
        private static MediaJobTask[] GetEncoderTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaJobInput[] jobInputs)
        {
            if (jobTask.MediaProcessor == MediaProcessor.EncoderPremium)
            {
                Array.Sort(jobInputs, OrderByWorkflow);
            }
            JObject processorConfig = GetProcessorConfig(jobTask);

            jobTask.ProcessorConfig = processorConfig == null ? jobTask.ProcessorConfigId : processorConfig.ToString();
            bool multipleInputTask = jobTask.MediaProcessor != MediaProcessor.EncoderStandard;

            return(GetJobTasks(mediaClient, jobTask, jobInputs, multipleInputTask));
        }
Example #6
0
        public static TokenCredentials AcquireToken(string authToken, out string subscriptionId)
        {
            string accessToken;
            User   userProfile = new User(authToken);

            subscriptionId = userProfile.MediaAccount.SubscriptionId;
            using (MediaClient mediaClient = new MediaClient(authToken))
            {
                AuthenticationResult authResult = MediaClientCredentials.AcquireToken(mediaClient.MediaAccount).Result;
                accessToken = authResult.AccessToken;
            }
            return(new TokenCredentials(accessToken));
        }
Example #7
0
        private static MediaJobTask[] GetVideoAnnotationTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets)
        {
            List <MediaJobTask> jobTasks = new List <MediaJobTask>();

            jobTask.MediaProcessor = MediaProcessor.VideoAnnotation;
            string  settingKey      = Constants.AppSettingKey.MediaProcessorVideoAnnotationDocumentId;
            string  documentId      = AppSetting.GetValue(settingKey);
            JObject processorConfig = GetProcessorConfig(documentId);

            jobTask.ProcessorConfig = processorConfig.ToString();
            MediaJobTask[] mappedJobTasks = MapJobTasks(mediaClient, jobTask, inputAssets, false);
            jobTasks.AddRange(mappedJobTasks);
            return(jobTasks.ToArray());
        }
Example #8
0
        public static MediaJobPublish PublishJobOutput(string jobName, string insightId)
        {
            MediaJobAccount jobAccount;
            MediaJobPublish jobPublish = null;

            using (DatabaseClient databaseClient = new DatabaseClient())
            {
                string collectionId = Constant.Database.Collection.MediaJobAccount;
                string documentId   = string.IsNullOrEmpty(jobName) ? insightId : jobName;
                jobAccount = databaseClient.GetDocument <MediaJobAccount>(collectionId, documentId);
            }
            if (jobAccount != null)
            {
                using (MediaClient mediaClient = new MediaClient(null, jobAccount.MediaAccount))
                {
                    if (!string.IsNullOrEmpty(insightId))
                    {
                        JObject insight = mediaClient.IndexerGetInsight(insightId);
                        if (insight != null)
                        {
                            using (DatabaseClient databaseClient = new DatabaseClient())
                            {
                                string collectionId = Constant.Database.Collection.MediaContentInsight;
                                databaseClient.UpsertDocument(collectionId, insight);
                            }
                        }
                    }
                    else
                    {
                        Job job = mediaClient.GetEntity <Job>(MediaEntity.TransformJob, jobName, jobAccount.TransformName);
                        if (job != null)
                        {
                            jobPublish = GetJobPublish(job);
                            jobPublish.UserNotification.JobOutputMessage = GetNotificationMessage(job, jobAccount, jobPublish);
                            string streamingPolicyName = PredefinedStreamingPolicy.ClearStreamingOnly;
                            if (!string.IsNullOrEmpty(jobPublish.StreamingPolicyName))
                            {
                                streamingPolicyName = jobPublish.StreamingPolicyName;
                            }
                            foreach (JobOutputAsset jobOutput in job.Outputs)
                            {
                                mediaClient.CreateLocator(jobOutput.AssetName, jobOutput.AssetName, streamingPolicyName, jobPublish.ContentProtection);
                            }
                        }
                    }
                }
            }
            return(jobPublish);
        }
Example #9
0
 private static MediaJobTask GetJobTask(MediaClient mediaClient, MediaJobTask jobTask, string assetName)
 {
     jobTask.Name = Processor.GetProcessorName(jobTask.MediaProcessor);
     if (string.IsNullOrEmpty(jobTask.OutputAssetName))
     {
         string outputAssetName = Path.GetFileNameWithoutExtension(assetName);
         jobTask.OutputAssetName = string.Concat(outputAssetName, " (", jobTask.Name, ")");
     }
     jobTask.OutputAssetEncryption = AssetCreationOptions.None;
     if (jobTask.ContentProtection != null)
     {
         jobTask.OutputAssetEncryption = AssetCreationOptions.StorageEncrypted;
     }
     return(jobTask);
 }
Example #10
0
        public static MediaJobInput[] GetJobInputs(MediaClient mediaClient, string[] assetIds)
        {
            List <MediaJobInput> jobInputs = new List <MediaJobInput>();

            foreach (string assetId in assetIds)
            {
                IAsset asset = mediaClient.GetEntityById(MediaEntity.Asset, assetId) as IAsset;
                if (asset != null)
                {
                    MediaJobInput jobInput = GetJobInput(asset);
                    jobInputs.Add(jobInput);
                }
            }
            return(jobInputs.ToArray());
        }
Example #11
0
 private static MediaJobTask MapJobTask(MediaClient mediaClient, MediaJobTask jobTask, string assetName)
 {
     jobTask.Name = Processors.GetMediaProcessorName(jobTask.MediaProcessor);
     if (jobTask.ProcessorConfig.Contains(Constants.Media.ProcessorConfig.EncoderStandardThumbnailsFormat))
     {
         jobTask.Name = string.Concat(jobTask.Name, " ", Constants.Media.ProcessorConfig.EncoderStandardThumbnailsPreset);
     }
     jobTask.Name = string.Concat(jobTask.Name, " (", assetName, ")");
     if (string.IsNullOrEmpty(jobTask.OutputAssetName) && !string.IsNullOrEmpty(assetName))
     {
         jobTask.OutputAssetName = assetName;
     }
     jobTask.OutputAssetEncryption = (jobTask.ContentProtection != null) ? AssetCreationOptions.StorageEncrypted : AssetCreationOptions.None;
     return(jobTask);
 }
Example #12
0
 internal static void PublishStream(MediaClient mediaClient, IAsset asset, ContentProtection contentProtection)
 {
     if (asset.IsStreamable || asset.AssetType == AssetType.MP4)
     {
         if (asset.Options == AssetCreationOptions.StorageEncrypted && asset.DeliveryPolicies.Count == 0)
         {
             mediaClient.AddDeliveryPolicies(asset, contentProtection);
         }
         if (asset.Locators.Count == 0)
         {
             LocatorType locatorType = LocatorType.OnDemandOrigin;
             mediaClient.CreateLocator(null, locatorType, asset, null);
         }
     }
 }
Example #13
0
        public static bool IsStreamingEnabled(MediaClient mediaClient)
        {
            bool streamingEnabled = false;

            IStreamingEndpoint[] streamingEndpoints = mediaClient.GetEntities(MediaEntity.StreamingEndpoint) as IStreamingEndpoint[];
            foreach (IStreamingEndpoint streamingEndpoint in streamingEndpoints)
            {
                if (streamingEndpoint.State == StreamingEndpointState.Running ||
                    streamingEndpoint.State == StreamingEndpointState.Scaling)
                {
                    streamingEnabled = true;
                }
            }
            return(streamingEnabled);
        }
Example #14
0
        public static MediaStream[] GetAccountStreams(string authToken, MediaClient mediaClient)
        {
            List <MediaStream>             accountStreams = new List <MediaStream>();
            IEnumerable <StreamingLocator> locators       = mediaClient.GetLocators();

            foreach (StreamingLocator locator in locators)
            {
                MediaStream[] mediaStreams = GetMediaStreams(authToken, mediaClient, locator);
                if (mediaStreams.Length > 0)
                {
                    accountStreams.AddRange(mediaStreams);
                }
            }
            return(accountStreams.ToArray());
        }
Example #15
0
        private static MediaJobTask[] GetVideoSummarizationTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets)
        {
            List <MediaJobTask> jobTasks = new List <MediaJobTask>();

            jobTask.MediaProcessor = MediaProcessor.VideoSummarization;
            string  settingKey       = Constants.AppSettingKey.MediaProcessorVideoSummarizationDocumentId;
            string  documentId       = AppSetting.GetValue(settingKey);
            JObject processorConfig  = GetProcessorConfig(documentId);
            JToken  processorOptions = processorConfig["options"];

            processorOptions["maxMotionThumbnailDurationInSecs"] = jobTask.SummaryDurationSeconds;
            jobTask.ProcessorConfig = processorConfig.ToString();
            MediaJobTask[] mappedJobTasks = MapJobTasks(mediaClient, jobTask, inputAssets, false);
            jobTasks.AddRange(mappedJobTasks);
            return(jobTasks.ToArray());
        }
Example #16
0
        public MediaProcessor[] Initialize(string authToken)
        {
            MediaClient mediaClient = new MediaClient(authToken);

            IMediaProcessor[]     mediaProcessors    = mediaClient.GetEntities(MediaEntity.Processor) as IMediaProcessor[];
            List <MediaProcessor> mediaProcessorList = new List <MediaProcessor>();

            foreach (IMediaProcessor mediaProcessor in mediaProcessors)
            {
                MediaProcessor processorType = Processors.GetMediaProcessorType(mediaProcessor.Id);
                mediaProcessorList.Add(processorType);
            }
            MediaProcessor[] mediaProcessorTypes = mediaProcessorList.ToArray();
            SetValue <MediaProcessor[]>(Constants.Cache.ItemKey.MediaProcessors, mediaProcessorTypes);
            return(mediaProcessorTypes);
        }
Example #17
0
        private static MediaJobTask[] GetFaceRedactionTasks(MediaClient mediaClient, MediaJobTask jobTask, MediaAssetInput[] inputAssets)
        {
            List <MediaJobTask> jobTasks = new List <MediaJobTask>();

            jobTask.MediaProcessor = MediaProcessor.FaceRedaction;
            jobTask.Name           = string.Concat(jobTask.Name, " ", CultureInfo.CurrentCulture.TextInfo.ToTitleCase(jobTask.FaceRedactionMode));
            string  settingKey       = Constants.AppSettingKey.MediaProcessorFaceRedactionDocumentId;
            string  documentId       = AppSetting.GetValue(settingKey);
            JObject processorConfig  = GetProcessorConfig(documentId);
            JToken  processorOptions = processorConfig["options"];

            processorOptions["mode"] = jobTask.FaceRedactionMode;
            jobTask.ProcessorConfig  = processorConfig.ToString();
            MediaJobTask[] mappedJobTasks = MapJobTasks(mediaClient, jobTask, inputAssets, false);
            jobTasks.AddRange(mappedJobTasks);
            return(jobTasks.ToArray());
        }
Example #18
0
        public static Dictionary <string, string> GetStorageAccounts(string authToken)
        {
            Dictionary <string, string> storageAccounts = new Dictionary <string, string>();

            using (MediaClient mediaClient = new MediaClient(authToken))
            {
                IList <StorageAccount> mediaStorageAccounts = mediaClient.StorageAccounts;
                foreach (StorageAccount mediaStorageAccount in mediaStorageAccounts)
                {
                    MediaStorage mediaStorage = new MediaStorage(authToken, mediaStorageAccount);
                    string       accountName  = Path.GetFileName(mediaStorageAccount.Id);
                    string       accountInfo  = string.Concat(accountName, mediaStorage.ToString());
                    storageAccounts.Add(accountName, accountInfo);
                }
            }
            return(storageAccounts);
        }
Example #19
0
        public static void PurgePublishContent(TableClient tableClient)
        {
            string tableName = Constant.Storage.Table.ContentPublish;

            MediaPublish[] contentPublishes = tableClient.GetEntities <MediaPublish>(tableName);
            foreach (MediaPublish contentPublish in contentPublishes)
            {
                string      jobId       = contentPublish.RowKey;
                MediaClient mediaClient = new MediaClient(contentPublish.MediaAccount);
                IJob        job         = mediaClient.GetEntityById(MediaEntity.Job, jobId) as IJob;
                if (job == null)
                {
                    tableClient.DeleteEntity(tableName, contentPublish);
                    DeleteContentProtections(tableClient, contentPublish.RowKey);
                }
            }
        }