public JsonResult Workflow(string storageAccount, string assetName, string assetDescription, string assetAlternateId, string[] fileNames, bool adaptiveStreaming, bool thumbnailImages, bool videoAnalyzer, bool audioAnalyzer, bool videoIndexer, bool audioIndexer) { try { Asset[] inputAssets; List <Job> jobs = new List <Job>(); string authToken = HomeController.GetAuthToken(Request, Response); using (MediaClient mediaClient = new MediaClient(authToken)) { Transform transform = mediaClient.CreateTransform(adaptiveStreaming, thumbnailImages, videoAnalyzer, audioAnalyzer, videoIndexer, audioIndexer); inputAssets = CreateInputAssets(mediaClient, storageAccount, assetName, assetDescription, assetAlternateId, fileNames); foreach (Asset inputAsset in inputAssets) { Job job = null; string insightId = null; if (mediaClient.IndexerEnabled() && (videoIndexer || audioIndexer)) { bool audioOnly = !videoIndexer && audioIndexer; insightId = mediaClient.IndexerUploadVideo(mediaClient.MediaAccount, inputAsset, null, Priority.Normal, true, audioOnly); } if (transform != null) { StorageBlobClient blobClient = new StorageBlobClient(mediaClient.MediaAccount, inputAsset.StorageAccountName); MediaAsset mediaAsset = new MediaAsset(mediaClient, inputAsset); string fileName = mediaAsset.Files[0].Name; string inputFileUrl = blobClient.GetDownloadUrl(inputAsset.Container, fileName, false); MediaJobOutputMode outputAssetMode = MediaJobOutputMode.SingleAsset; string[] outputAssetDescriptions = new string[] { assetDescription }; string[] outputAssetAlternateIds = new string[] { insightId }; PredefinedStreamingPolicy streamingPolicy = PredefinedStreamingPolicy.ClearStreamingOnly; job = mediaClient.CreateJob(authToken, transform.Name, null, null, Priority.Normal, null, inputFileUrl, inputAsset.Name, outputAssetMode, outputAssetDescriptions, outputAssetAlternateIds, streamingPolicy); } if (job != null) { if (!string.IsNullOrEmpty(insightId)) { job.CorrelationData.Add("insightId", insightId); } jobs.Add(job); } else { inputAsset.AlternateId = insightId; } } } return(jobs.Count > 0 ? Json(jobs.ToArray()) : Json(inputAssets)); } catch (ApiErrorException ex) { return(new JsonResult(ex.Response.Content) { StatusCode = (int)ex.Response.StatusCode }); } }
public static async Task <object> Run([HttpTrigger(WebHookType = "genericJson")] HttpRequestMessage req, TraceWriter log) { log.Info($"AMS v3 Function - publish_asset was triggered!"); string jsonContent = await req.Content.ReadAsStringAsync(); dynamic data = JsonConvert.DeserializeObject(jsonContent); // Validate input objects if (data.publishAssetName == null) { return(req.CreateResponse(HttpStatusCode.BadRequest, new { error = "Please pass publishAssetName in the input object" })); } string publishAssetName = data.publishAssetName; PredefinedStreamingPolicy streamingPolicy = PredefinedStreamingPolicy.ClearStreamingOnly; // default if (data.streamingPolicy != null) { string streamingPolicyName = data.streamingPolicy; if (predefinedStreamingPolicy.ContainsKey(streamingPolicyName)) { streamingPolicy = predefinedStreamingPolicy[streamingPolicyName]; } } string streamingEndpointName = "default"; // default if (data.streamingEndpointName != null) { streamingEndpointName = data.streamingEndpointName; } MediaServicesConfigWrapper amsconfig = new MediaServicesConfigWrapper(); string guid = Guid.NewGuid().ToString(); string locatorName = "locator-" + guid; PublishAssetOutput output = null; try { IAzureMediaServicesClient client = CreateMediaServicesClient(amsconfig); StreamingLocator locator = client.StreamingLocators.Create(amsconfig.ResourceGroup, amsconfig.AccountName, locatorName, new StreamingLocator() { AssetName = publishAssetName, StreamingPolicyName = streamingPolicy, }); string streamingUrlPrefx = ""; StreamingEndpoint streamingEndpoint = client.StreamingEndpoints.Get(amsconfig.ResourceGroup, amsconfig.AccountName, streamingEndpointName); if (streamingEndpoint != null) { streamingUrlPrefx = streamingEndpoint.HostName; } ListPathsResponse paths = client.StreamingLocators.ListPaths(amsconfig.ResourceGroup, amsconfig.AccountName, locatorName); output = MediaServicesHelper.ConvertToPublishAssetOutput(locatorName, streamingUrlPrefx, paths); } catch (ApiErrorException e) { log.Info($"ERROR: AMS API call failed with error code: {e.Body.Error.Code} and message: {e.Body.Error.Message}"); return(req.CreateResponse(HttpStatusCode.BadRequest, new { error = "AMS API call error: " + e.Message })); } return(req.CreateResponse(HttpStatusCode.OK, output)); }