Exemplo n.º 1
0
        private async static Task DownloadResults(IAzureMediaServicesClient client, string assetName, string resultsFolder)
        {
            ListContainerSasInput parameters        = new ListContainerSasInput();
            AssetContainerSas     assetContainerSas = client.Assets.ListContainerSas(
                resourceGroupName,
                accountName,
                assetName,
                permissions: AssetContainerPermission.Read,
                expiryTime: DateTime.UtcNow.AddHours(1).ToUniversalTime()
                );

            Uri containerSasUrl          = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            CloudBlobContainer container = new CloudBlobContainer(containerSasUrl);

            string directory = Path.Combine(resultsFolder, assetName);

            Directory.CreateDirectory(directory);

            Console.WriteLine("Downloading results to {0}.", directory);

            var blobs = container.ListBlobsSegmentedAsync(null, true, BlobListingDetails.None, 200, null, null, null).Result;

            foreach (var blobItem in blobs.Results)
            {
                if (blobItem is CloudBlockBlob)
                {
                    CloudBlockBlob blob     = blobItem as CloudBlockBlob;
                    string         filename = Path.Combine(directory, blob.Name);

                    await blob.DownloadToFileAsync(filename, FileMode.Create);
                }
            }

            Console.WriteLine("Download complete.");
        }
Exemplo n.º 2
0
        private async Task <string> GetVisualModerationJsonFile(IAzureMediaServicesClient client, string resourceGroupName, string accountName, string assetName)
        {
            ListContainerSasInput parameters        = new ListContainerSasInput();
            AssetContainerSas     assetContainerSas = client.Assets.ListContainerSas(resourceGroupName, accountName, assetName, permissions: AssetContainerPermission.Read, expiryTime: DateTime.UtcNow.AddHours(1).ToUniversalTime());

            Uri containerSasUrl          = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            CloudBlobContainer container = new CloudBlobContainer(containerSasUrl);

            var blobs = container.ListBlobsSegmentedAsync(null, true, BlobListingDetails.None, 200, null, null, null).Result;

            string jsonString = null;

            foreach (var blobItem in blobs.Results)
            {
                if (blobItem is CloudBlockBlob)
                {
                    CloudBlockBlob blob = blobItem as CloudBlockBlob;
                    if (blob.Name == "contentmoderation.json")
                    {
                        jsonString = await blob.DownloadTextAsync();
                    }
                }
            }
            return(jsonString);
        }
Exemplo n.º 3
0
        private static void DownloadResults(IAzureMediaServicesClient client,
          string resourceGroup,
          string accountName,
          string assetName,
          string resultsFolder)
        {
            AssetContainerSas assetContainerSas = client.Assets.ListContainerSas(
                    resourceGroup,
                    accountName,
                    assetName,
                    permissions: AssetContainerPermission.Read,
                    expiryTime: DateTime.UtcNow.AddHours(1).ToUniversalTime()
                    );

            Uri containerSasUrl = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            CloudBlobContainer container = new CloudBlobContainer(containerSasUrl);

            string directory = Path.Combine(resultsFolder, assetName);
            Directory.CreateDirectory(directory);

            Console.WriteLine("Downloading results to {0}.", directory);

            foreach (IListBlobItem blobItem in container.ListBlobs(null, true, BlobListingDetails.None))
            {
                if (blobItem is CloudBlockBlob)
                {
                    CloudBlockBlob blob = blobItem as CloudBlockBlob;
                    string filename = Path.Combine(directory, blob.Name);

                    blob.DownloadToFile(filename, FileMode.Create);
                }
            }

            Console.WriteLine("Download complete.");
        }
        // </GetStreamingURLs>

        /// <summary>
        ///  Downloads the results from the specified output asset, so you can see what you got.
        /// </summary>
        /// <param name="client">The Media Services client.</param>
        /// <param name="resourceGroupName">The name of the resource group within the Azure subscription.</param>
        /// <param name="accountName"> The Media Services account name.</param>
        /// <param name="assetName">The output asset.</param>
        /// <param name="outputFolderName">The name of the folder into which to download the results.</param>
        // <DownloadResults>
        private static async Task DownloadOutputAssetAsync(
            IAzureMediaServicesClient client,
            string resourceGroup,
            string accountName,
            string assetName,
            string outputFolderName)
        {
            if (!Directory.Exists(outputFolderName))
            {
                Directory.CreateDirectory(outputFolderName);
            }

            AssetContainerSas assetContainerSas = await client.Assets.ListContainerSasAsync(
                resourceGroup,
                accountName,
                assetName,
                permissions : AssetContainerPermission.Read,
                expiryTime : DateTime.UtcNow.AddHours(1).ToUniversalTime());

            Uri containerSasUrl          = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            CloudBlobContainer container = new CloudBlobContainer(containerSasUrl);

            string directory = Path.Combine(outputFolderName, assetName);

            Directory.CreateDirectory(directory);

            Console.WriteLine($"Downloading output results to '{directory}'...");

            BlobContinuationToken continuationToken = null;
            IList <Task>          downloadTasks     = new List <Task>();

            do
            {
                // A non-negative integer value that indicates the maximum number of results to be returned at a time,
                // up to the per-operation limit of 5000. If this value is null, the maximum possible number of results
                // will be returned, up to 5000.
                int?ListBlobsSegmentMaxResult = null;

                BlobResultSegment segment = await container.ListBlobsSegmentedAsync(null, true, BlobListingDetails.None, ListBlobsSegmentMaxResult, continuationToken, null, null);

                foreach (IListBlobItem blobItem in segment.Results)
                {
                    CloudBlockBlob blob = blobItem as CloudBlockBlob;
                    if (blob != null)
                    {
                        string path = Path.Combine(directory, blob.Name);

                        downloadTasks.Add(blob.DownloadToFileAsync(path, FileMode.Create));
                    }
                }

                continuationToken = segment.ContinuationToken;
            }while (continuationToken != null);

            await Task.WhenAll(downloadTasks);

            Console.WriteLine("Download complete.");
        }
Exemplo n.º 5
0
        // </WaitForJobToFinish>

        /// <summary>
        ///  Downloads the results from the specified output asset, so you can see what you got.
        /// </summary>
        /// <param name="client">The Media Services client.</param>
        /// <param name="resourceGroupName">The name of the resource group within the Azure subscription.</param>
        /// <param name="accountName"> The Media Services account name.</param>
        /// <param name="assetName">The output asset.</param>
        /// <param name="outputFolderName">The name of the folder into which to download the results.</param>
        // <DownloadResults>
        private async Task DownloadOutputAssetAsync(
            IAzureMediaServicesClient client,
            string resourceGroup,
            string accountName,
            string assetName,
            string outputFolderName)
        {
            const int ListBlobsSegmentMaxResult = 5;

            if (!Directory.Exists(outputFolderName))
            {
                Directory.CreateDirectory(outputFolderName);
            }

            AssetContainerSas assetContainerSas = await client.Assets.ListContainerSasAsync(
                resourceGroup,
                accountName,
                assetName,
                permissions : AssetContainerPermission.Read,
                expiryTime : DateTime.UtcNow.AddHours(1).ToUniversalTime());

            Uri containerSasUrl          = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            CloudBlobContainer container = new CloudBlobContainer(containerSasUrl);

            string directory = Path.Combine(outputFolderName, assetName);

            Directory.CreateDirectory(directory);

            WriteLine($"Downloading output results to '{directory}'...");

            BlobContinuationToken continuationToken = null;
            IList <Task>          downloadTasks     = new List <Task>();

            do
            {
                BlobResultSegment segment = await container.ListBlobsSegmentedAsync(null, true, BlobListingDetails.None, ListBlobsSegmentMaxResult, continuationToken, null, null);

                foreach (IListBlobItem blobItem in segment.Results)
                {
                    CloudBlockBlob blob = blobItem as CloudBlockBlob;
                    if (blob != null)
                    {
                        string path = Path.Combine(directory, blob.Name);

                        downloadTasks.Add(blob.DownloadToFileAsync(path, FileMode.Create));
                    }
                }

                continuationToken = segment.ContinuationToken;
            }while (continuationToken != null);

            await Task.WhenAll(downloadTasks);

            WriteLine("Download complete.");
        }
        // </GetStreamingURLs>


        /// <summary>
        ///  Downloads the results from the specified output asset, so you can see what you got.
        /// </summary>
        /// <param name="client">The Media Services client.</param>
        /// <param name="resourceGroupName">The name of the resource group within the Azure subscription.</param>
        /// <param name="accountName"> The Media Services account name.</param>
        /// <param name="assetName">The output asset.</param>
        /// <param name="outputFolderName">The name of the folder into which to download the results.</param>
        // <DownloadResults>
        private static async Task DownloadOutputAssetAsync(
            IAzureMediaServicesClient client,
            string resourceGroupName,
            string accountName,
            string assetName,
            string outputFolderName)
        {
            if (!Directory.Exists(outputFolderName))
            {
                Directory.CreateDirectory(outputFolderName);
            }

            // Use Media Service and Storage APIs to download the output files to a local folder
            AssetContainerSas assetContainerSas = client.Assets.ListContainerSas(
                resourceGroupName,
                accountName,
                assetName,
                permissions: AssetContainerPermission.Read,
                expiryTime: DateTime.UtcNow.AddHours(1).ToUniversalTime()
                );

            Uri containerSasUrl           = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            BlobContainerClient container = new BlobContainerClient(containerSasUrl);

            string directory = Path.Combine(outputFolderName, assetName);

            Directory.CreateDirectory(directory);

            Console.WriteLine("Downloading results to {0}.", directory);

            string continuationToken = null;

            // Call the listing operation and enumerate the result segment.
            // When the continuation token is empty, the last segment has been returned
            // and execution can exit the loop.
            do
            {
                var resultSegment = container.GetBlobs().AsPages(continuationToken);

                foreach (Azure.Page <BlobItem> blobPage in resultSegment)
                {
                    foreach (BlobItem blobItem in blobPage.Values)
                    {
                        var    blobClient = container.GetBlobClient(blobItem.Name);
                        string filename   = Path.Combine(directory, blobItem.Name);
                        await blobClient.DownloadToAsync(filename);
                    }

                    // Get the continuation token and loop until it is empty.
                    continuationToken = blobPage.ContinuationToken;
                }
            } while (continuationToken != "");

            Console.WriteLine("Download complete.");
        }
        // </GetStreamingURLs>

        /// <summary>
        ///  Downloads the results from the specified output asset, so you can see what you got.
        /// </summary>
        /// <param name="client">The Media Services client.</param>
        /// <param name="resourceGroupName">The name of the resource group within the Azure subscription.</param>
        /// <param name="accountName"> The Media Services account name.</param>
        /// <param name="assetName">The output asset.</param>
        /// <param name="outputFolderName">The name of the folder into which to download the results.</param>
        // <DownloadResults>
        private static async Task DownloadOutputAssetAsync(
            IAzureMediaServicesClient client,
            string resourceGroup,
            string accountName,
            string assetName,
            string outputFolderName)
        {
            if (!Directory.Exists(outputFolderName))
            {
                Directory.CreateDirectory(outputFolderName);
            }

            AssetContainerSas assetContainerSas = await client.Assets.ListContainerSasAsync(
                resourceGroup,
                accountName,
                assetName,
                permissions : AssetContainerPermission.Read,
                expiryTime : DateTime.UtcNow.AddHours(1).ToUniversalTime());

            Uri containerSasUrl           = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            BlobContainerClient container = new BlobContainerClient(containerSasUrl);

            string directory = Path.Combine(outputFolderName, assetName);

            Directory.CreateDirectory(directory);

            Console.WriteLine($"Downloading output results to '{directory}'...");

            string       continuationToken = null;
            IList <Task> downloadTasks     = new List <Task>();

            do
            {
                var resultSegment = container.GetBlobs().AsPages(continuationToken);

                foreach (Azure.Page <BlobItem> blobPage in resultSegment)
                {
                    foreach (BlobItem blobItem in blobPage.Values)
                    {
                        var    blobClient = container.GetBlobClient(blobItem.Name);
                        string filename   = Path.Combine(directory, blobItem.Name);

                        downloadTasks.Add(blobClient.DownloadToAsync(filename));
                    }
                    // Get the continuation token and loop until it is empty.
                    continuationToken = blobPage.ContinuationToken;
                }
            } while (continuationToken != "");

            await Task.WhenAll(downloadTasks);

            Console.WriteLine("Download complete.");
        }
Exemplo n.º 8
0
        private async Task DownloadOutputAssetAsync(
            IAzureMediaServicesClient client,
            string name,
            string resourceGroup,
            string accountName,
            string assetName,
            string directory, int index)
        {
            AssetContainerSas assetContainerSas = await client.Assets.ListContainerSasAsync(
                resourceGroup,
                accountName,
                assetName,
                permissions : AssetContainerPermission.Read,
                expiryTime : DateTime.UtcNow.AddHours(1).ToUniversalTime());

            Uri containerSasUrl          = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            CloudBlobContainer container = new CloudBlobContainer(containerSasUrl);

            BlobContinuationToken continuationToken = null;
            IList <Task>          downloadTasks     = new List <Task>();

            do
            {
                int?ListBlobsSegmentMaxResult = null;

                BlobResultSegment segment = await container.ListBlobsSegmentedAsync(null, true, BlobListingDetails.None, ListBlobsSegmentMaxResult, continuationToken, null, null);

                List <CloudBlockBlob> array = new List <CloudBlockBlob>();
                foreach (IListBlobItem blobItem in segment.Results)
                {
                    CloudBlockBlob blob = blobItem as CloudBlockBlob;
                    array.Add(blob);
                }
                array = array.OrderByDescending(x => x.Properties.Length).ToList();
                name  = name + ".mp4";
                string path = Path.Combine(directory, name);

                downloadTasks.Add(array[index].DownloadToFileAsync(path, FileMode.Create));
                continuationToken = segment.ContinuationToken;
            }while (continuationToken != null);

            await Task.WhenAll(downloadTasks);
        }
        public static async Task <XDocument> TryToGetClientManifestContentAsABlobAsync(IAzureMediaServicesClient amsClient, string amsResourceGroup, string amsAccountName, string assetName)
        {
            // get the manifest
            ListContainerSasInput input = new()
            {
                Permissions = AssetContainerPermission.Read,
                ExpiryTime  = DateTime.Now.AddMinutes(5).ToUniversalTime()
            };

            AssetContainerSas responseSas = await amsClient.Assets.ListContainerSasAsync(amsResourceGroup, amsAccountName, assetName, input.Permissions, input.ExpiryTime);

            string uploadSasUrl = responseSas.AssetContainerSasUrls.First();

            Uri sasUri = new(uploadSasUrl);
            CloudBlobContainer container = new(sasUri);

            BlobContinuationToken continuationToken = null;
            List <CloudBlockBlob> blobs             = new();

            do
            {
                BlobResultSegment segment = await container.ListBlobsSegmentedAsync(null, false, BlobListingDetails.Metadata, null, continuationToken, null, null);

                blobs.AddRange(segment.Results.Where(blob => blob is CloudBlockBlob).Select(b => b as CloudBlockBlob));

                continuationToken = segment.ContinuationToken;
            }while (continuationToken != null);
            IEnumerable <CloudBlockBlob> ismc = blobs.Where(b => b.Name.EndsWith(".ismc", StringComparison.OrdinalIgnoreCase));

            if (!ismc.Any())
            {
                throw new Exception("No ISMC file in asset.");
            }

            string content = await ismc.First().DownloadTextAsync();

            return(XDocument.Parse(content));
        }
Exemplo n.º 10
0
        public static async Task CopyFromAssetToBlob(IAzureMediaServicesClient client, string resourceGroup, string accountName,
                                                     string assetName, string resultBlobConnString, string resultContainer, string resultsFolder, string filter)
        {
            AssetContainerSas assetContainerSas = client.Assets.ListContainerSas(resourceGroup, accountName, assetName, permissions: AssetContainerPermission.Read,
                                                                                 expiryTime: DateTime.UtcNow.AddHours(1).ToUniversalTime());
            Uri containerSasUrl                = new Uri(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            CloudBlobContainer  container      = new CloudBlobContainer(containerSasUrl);
            CloudStorageAccount targertAccount = CloudStorageAccount.Parse(resultBlobConnString);
            var targetClient    = targertAccount.CreateCloudBlobClient();
            var targetContainer = targetClient.GetContainerReference(resultContainer);
            var directory       = targetContainer.GetDirectoryReference(resultsFolder);

            string      filename = string.Empty;
            List <Task> tasks    = new List <Task>();

            foreach (var blobItem in
                     container.ListBlobs(null, true, BlobListingDetails.None).OfType <CloudBlockBlob>().Where(b => b.Name.EndsWith(filter)))
            {
                CloudBlockBlob destBlockBlob = directory.GetBlockBlobReference(blobItem.Name);
                tasks.Add(TransferManager.CopyAsync(blobItem, destBlockBlob, true));
            }
            await Task.WhenAll(tasks);
        }
Exemplo n.º 11
0
        public static async Task <XDocument> TryToGetClientManifestContentAsABlobAsync(IAzureMediaServicesClient amsClient, string amsResourceGroup, string amsAccountName, string assetName)
        {
            // get the manifest
            ListContainerSasInput input = new()
            {
                Permissions = AssetContainerPermission.Read,
                ExpiryTime  = DateTime.Now.AddMinutes(5).ToUniversalTime()
            };

            AssetContainerSas responseSas = await amsClient.Assets.ListContainerSasAsync(amsResourceGroup, amsAccountName, assetName, input.Permissions, input.ExpiryTime);

            string uploadSasUrl = responseSas.AssetContainerSasUrls.First();

            var sasUri    = new Uri(uploadSasUrl);
            var container = new BlobContainerClient(sasUri);

            var blobs = new List <BlobItem>();

            await foreach (Azure.Page <BlobItem> page in container.GetBlobsAsync().AsPages()) // BlobTraits.All, BlobStates.All
            {
                blobs.AddRange(page.Values);
            }

            var ismc = blobs.Where(b => b.Properties.BlobType == BlobType.Block && b.Name.EndsWith(".ismc", StringComparison.OrdinalIgnoreCase));

            if (!ismc.Any())
            {
                throw new Exception("No ISMC file in asset.");
            }

            BlobClient blobClient = container.GetBlobClient(ismc.First().Name);

            var response = new BlobClient(blobClient.Uri).DownloadContent();

            return(XDocument.Parse(response.Value.Content.ToString()));
        }
Exemplo n.º 12
0
        /// <summary>
        /// Downloads the specified output asset.
        /// </summary>
        /// <param name="client">The Media Services client.</param>
        /// <param name="resourceGroupName">The name of the resource group within the Azure subscription.</param>
        /// <param name="accountName"> The Media Services account name.</param>
        /// <param name="assetName">The output asset.</param>
        /// <param name="outputFolderName">The name of the folder into which to download the results.</param>
        /// <param name="progess">Action for call back.</param>
        /// <param name="downloadAssets">Boolean whether to persist assets to disk.</param>
        /// <param name="token">The CancellationToken.</param>
        /// <returns></returns>
        private async Task <IList <string> > GenerateResults(
            IAzureMediaServicesClient client,
            string resourceGroupName,
            string accountName,
            string assetName,
            string outputFolderName,
            Action <string> progess,
            bool downloadAssets,
            CancellationToken token)
        {
            var list = new List <string>();
            // Use Media Service and Storage APIs to download the output files to a local folder
            AssetContainerSas assetContainerSas = client.Assets.ListContainerSas(
                resourceGroupName,
                accountName,
                assetName,
                permissions: AssetContainerPermission.Read,
                expiryTime: DateTime.UtcNow.AddHours(1).ToUniversalTime()
                );

            Uri containerSasUrl           = new(assetContainerSas.AssetContainerSasUrls.FirstOrDefault());
            BlobContainerClient container = new(containerSasUrl);

            var downloadFolder = Path.Combine(_environment.WebRootPath, outputFolderName);

            string directory = Path.Combine(downloadFolder, assetName);

            Directory.CreateDirectory(directory);
            string urlPrefix = directory.Replace(_environment.WebRootPath, string.Empty).Replace(@"\", "/");

            _logger.LogInformation($"Downloading results to {directory}.");
            progess("Downloading results..");

            string continuationToken = null;

            // Call the listing operation and enumerate the result segment.
            // When the continuation token is empty, the last segment has been returned
            // and execution can exit the loop.
            do
            {
                var resultSegment = container.GetBlobs().AsPages(continuationToken);

                foreach (Azure.Page <Azure.Storage.Blobs.Models.BlobItem> blobPage in resultSegment)
                {
                    foreach (Azure.Storage.Blobs.Models.BlobItem blobItem in blobPage.Values)
                    {
                        var    blobClient = container.GetBlobClient(blobItem.Name);
                        string filename   = Path.Combine(directory, blobItem.Name);
                        var    url        = Path.Combine(urlPrefix, blobItem.Name);
                        progess($"Retriving file {blobClient.Uri.AbsoluteUri}");
                        if (downloadAssets)
                        {
                            await blobClient.DownloadToAsync(filename);
                        }
                        if (Path.GetExtension(filename) == ".png" || Path.GetExtension(filename) == ".jpg")
                        {
                            list.Add(url);
                        }
                    }

                    // Get the continuation token and loop until it is empty.
                    continuationToken = blobPage.ContinuationToken;
                }
            } while (continuationToken != "");

            _logger.LogInformation("Download complete.");
            return(list);
        }