コード例 #1
0
 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
         });
     }
 }
コード例 #2
0
        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));
        }