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."); }
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); }
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."); }
// </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."); }
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)); }
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); }
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())); }
/// <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); }