public static void Run(
            [QueueTrigger(MessageQueues.AvContent)] ContentEncodedMessage contentMessage,
            [DocumentDB(nameof(Content), nameof(AvContent), Id = "{documentId}")] AvContent avContent,
            [Queue(MessageQueues.DocumentUpdate)] out DocumentUpdatedMessage updatedMessage, TraceWriter log)
        {
            try
            {
                log.Info(contentMessage.ToString());

                FunctionExtensions.HasValueOrThrow(avContent?.Id, "avContent", $"Unable to find record with Id: {contentMessage?.DocumentId}");

                FunctionExtensions.HasValueOrThrow(contentMessage?.RemoteAssetUri, "RemoteAssetUri");

                avContent.RemoteAssetUri = contentMessage.RemoteAssetUri;

                updatedMessage = new DocumentUpdatedMessage(contentMessage.DocumentId, contentMessage.CollectionId, contentMessage.NotificationTags)
                {
                    Title   = $"New {avContent.ContentType}!",
                    Message = avContent.DisplayName
                };
            }
            catch (Exception ex)
            {
                log.Error(ex.Message, ex);
                throw;
            }
        }
Beispiel #2
0
        public static void Run(
            [BlobTrigger(Routes.EncodeBlob)] CloudBlockBlob inputBlob, string fileName, string fileExtension,
            [Queue(MessageQueues.AvContent)] out ContentEncodedMessage contentMessage, TraceWriter log)
        {
            try
            {
                contentMessage = FunctionExtensions.GetMessageOrThrow(inputBlob);

                CachedCredentials = new MediaServicesCredentials(EnvironmentVariables.MediaServicesAccountName, EnvironmentVariables.MediaServicesAccountKey);

                Context = new CloudMediaContext(CachedCredentials);


                var newAsset = CreateAssetFromBlob(inputBlob, log).GetAwaiter().GetResult();

                var newAssetName = GetEncodedAssetName(fileName, fileExtension, encoderProcessorName);


                var job = Context.Jobs.CreateWithSingleTask(encoderProcessorName, encoderTaskConfigName, newAsset, newAssetName, AssetCreationOptions.None);

                job.Submit();


                job = job.StartExecutionProgressTask(j => log.Info($"Encoding Job Id: {job.Id}  State: {job.State}  Progress: {j.GetOverallProgress ().ToString ("P")}"), CancellationToken.None).Result;


                switch (job.State)
                {
                case JobState.Finished:
                    log.Info($"Encoding Job Id: {job.Id} is complete.");
                    break;

                case JobState.Error: throw new Exception($"Encoding Job Id: {job.Id} failed.");
                }


                var outputAsset = job.OutputMediaAssets [0];

                Context.Locators.Create(LocatorType.OnDemandOrigin, outputAsset, AccessPermissions.Read, TimeSpan.FromDays(365 * 10), DateTime.UtcNow);


                contentMessage.SetRemoteAssetUri(outputAsset.GetHlsUri());


                log.Info($"Output Asset - {contentMessage}");
            }
            catch (Exception ex)
            {
                log.Error($"ERROR: failed with exception {ex.Message}.\n {ex.StackTrace}");
                throw;
            }
        }