internal static string GetAssetName(StorageBlobClient blobClient, string containerName, string directoryPath, out MediaFile[] assetFiles) { string assetName = null; assetFiles = GetAssetFiles(blobClient, containerName, directoryPath); if (assetFiles.Length == 1) { assetName = assetFiles[0].Name; } else { foreach (MediaFile assetFile in assetFiles) { if (assetFile.Name.EndsWith(Constant.Media.Stream.ManifestExtension, StringComparison.OrdinalIgnoreCase)) { assetName = assetFile.Name; } } } if (!string.IsNullOrEmpty(assetName)) { assetName = Path.GetFileNameWithoutExtension(assetName); } return(assetName); }
public static MediaFile[] GetAssetFiles(StorageBlobClient blobClient, string containerName, string directoryPath, out bool assetStreamable) { assetStreamable = false; List <MediaFile> files = new List <MediaFile>(); CloudBlockBlob[] blobs = blobClient.ListBlobContainer(containerName, directoryPath); foreach (CloudBlockBlob blob in blobs) { string fileName = blob.Name; string fileSize = blobClient.GetBlobSize(containerName, directoryPath, fileName, out long byteCount, out string contentType); MediaFile file = new MediaFile() { Name = fileName, ContentType = contentType, DownloadUrl = blobClient.GetDownloadUrl(containerName, fileName), ByteCount = byteCount, Size = fileSize }; if (file.Name.EndsWith(Constant.Media.Stream.ManifestExtension, StringComparison.OrdinalIgnoreCase)) { assetStreamable = true; } files.Add(file); } return(files.ToArray()); }
internal MediaAsset(MediaClient mediaClient, Asset asset) : base(asset.Id, asset.Name, asset.Type, asset.AssetId, asset.Created, asset.LastModified, asset.AlternateId, asset.Description, asset.Container, asset.StorageAccountName, asset.StorageEncryptionFormat) { StorageBlobClient blobClient = new StorageBlobClient(mediaClient.MediaAccount, asset.StorageAccountName); Files = GetAssetFiles(blobClient, asset.Container, null); Filters = mediaClient.GetAllEntities <AssetFilter>(MediaEntity.FilterAsset, null, asset.Name); StreamingLocators = mediaClient.GetStreamingUrls(asset.Name); }
public MediaAsset(MediaClient mediaClient, Asset asset) : base(asset.Id, asset.Name, asset.Type, asset.AssetId, asset.Created, asset.LastModified, asset.AlternateId, asset.Description, asset.Container, asset.StorageAccountName, asset.StorageEncryptionFormat) { StorageBlobClient blobClient = new StorageBlobClient(mediaClient.MediaAccount, asset.StorageAccountName); Files = MediaClient.GetAssetFiles(blobClient, asset.Container, null, out bool assetStreamable); StreamingFilters = mediaClient.GetAllEntities <AssetFilter>(MediaEntity.StreamingFilterAsset, asset.Name); StreamingUrls = mediaClient.GetStreamingUrls(asset.Name); Streamable = assetStreamable; Published = StreamingUrls.Length > 0; }
private void SetJobInputAssetArchive(JobInput jobInput, StandardBlobTier inputAssetStorageTier) { if (jobInput is JobInputAsset jobInputAsset && inputAssetStorageTier != StandardBlobTier.Unknown) { Asset inputAsset = GetEntity <Asset>(MediaEntity.Asset, jobInputAsset.AssetName); StorageBlobClient blobClient = new StorageBlobClient(this.MediaAccount, inputAsset.StorageAccountName); CloudBlockBlob[] blobs = blobClient.ListBlobContainer(inputAsset.Container, null); foreach (CloudBlockBlob blob in blobs) { blob.SetStandardBlobTierAsync(inputAssetStorageTier); } } }
public MediaPublishNotification PublishJobOutput(string transformName, string jobName, string eventType) { MediaPublishNotification publishNotification = new MediaPublishNotification { PhoneNumber = this.UserAccount.MobilePhoneNumber, StatusMessage = string.Format(Constant.Message.JobPublishNotification, Constant.TextFormatter.FormatValue(transformName), jobName, eventType) }; Job job = GetEntity <Job>(MediaEntity.TransformJob, jobName, transformName); if (job != null) { switch (eventType) { case Constant.Media.Job.EventType.Errored: string jobError = null; foreach (JobOutput jobOutput in job.Outputs) { if (!string.IsNullOrEmpty(jobError)) { jobError = string.Concat(jobError, Constant.Message.NewLine); } jobError = string.Concat(jobError, jobOutput.Error.Message); } publishNotification.StatusMessage = string.Concat(publishNotification.StatusMessage, Constant.Message.NewLine, jobError); break; case Constant.Media.Job.EventType.Finished: string settingKey = Constant.AppSettingKey.MediaPlayerDemoUrl; string mediaPlayerUrl = AppSetting.GetValue(settingKey); string outputPublishData = job.CorrelationData[Constant.Media.Job.CorrelationData.OutputPublish].ToString(); MediaJobOutputPublish jobOutputPublish = JsonConvert.DeserializeObject <MediaJobOutputPublish>(outputPublishData); foreach (JobOutputAsset jobOutput in job.Outputs) { Asset outputAsset = GetEntity <Asset>(MediaEntity.Asset, jobOutput.AssetName); StorageBlobClient blobClient = new StorageBlobClient(this.MediaAccount, outputAsset.StorageAccountName); if (blobClient.ContainsFile(outputAsset.Container, null, null, Constant.Media.Stream.ManifestExtension)) { StreamingLocator streamingLocator = GetStreamingLocator(jobOutput.AssetName, jobOutput.AssetName, jobOutputPublish.StreamingPolicyName, jobOutputPublish.ContentProtection); string mediaStreamUrl = GetStreamingUrl(streamingLocator, null); mediaStreamUrl = string.Format(mediaPlayerUrl, mediaStreamUrl); publishNotification.StatusMessage = string.Concat(publishNotification.StatusMessage, Constant.Message.NewLine, mediaStreamUrl); } } SetJobInputAssetArchive(job.Input, jobOutputPublish.InputAssetStorageTier); break; } } return(publishNotification); }
public async Task <Asset> CreateAsset(string storageAccount, string assetName, string assetDescription, string assetAlternateId, string fileName) { if (string.IsNullOrEmpty(assetName)) { assetName = Path.GetFileNameWithoutExtension(fileName); } StorageBlobClient blobClient = new StorageBlobClient(this.MediaAccount, storageAccount); string sourceContainer = Constant.Storage.Blob.WorkflowContainerName; string sourceUrl = blobClient.GetDownloadUrl(sourceContainer, fileName); Asset asset = CreateAsset(storageAccount, assetName, assetDescription, assetAlternateId); CloudBlockBlob assetBlob = blobClient.GetBlockBlob(asset.Container, null, fileName); await assetBlob.StartCopyAsync(new Uri(sourceUrl)); return(asset); }
public Asset CreateAsset(string storageAccount, string assetName, CloudBlockBlob sourceFile) { if (string.IsNullOrEmpty(assetName)) { assetName = Path.GetFileNameWithoutExtension(sourceFile.Name); } Asset asset = CreateAsset(storageAccount, assetName); StorageBlobClient blobClient = new StorageBlobClient(this.MediaAccount, storageAccount); CloudBlockBlob assetFile = blobClient.GetBlockBlob(asset.Container, null, sourceFile.Name); assetFile.UploadFromStream(sourceFile.OpenRead()); assetFile.Properties.ContentType = sourceFile.Properties.ContentType; assetFile.SetProperties(); return(asset); }
private static string[] GetThumbnailUrls(MediaClient mediaClient, StreamingLocator locator) { List <string> thumbnailUrls = new List <string>(); Asset asset = mediaClient.GetEntity <Asset>(MediaEntity.Asset, locator.AssetName); MediaAsset mediaAsset = new MediaAsset(mediaClient, asset); StorageBlobClient blobClient = new StorageBlobClient(mediaClient.MediaAccount, asset.StorageAccountName); StringComparison stringComparison = StringComparison.OrdinalIgnoreCase; foreach (MediaFile assetFile in mediaAsset.Files) { if (assetFile.Name.StartsWith(Constant.Media.Thumbnail.FileNamePrefix, stringComparison)) { string thumbnailUrl = blobClient.GetDownloadUrl(asset.Container, assetFile.Name, false); thumbnailUrls.Add(thumbnailUrl); } } return(thumbnailUrls.ToArray()); }
public Asset CreateAsset(StorageBlobClient sourceBlobClient, StorageBlobClient assetBlobClient, string storageAccount, string assetName, string assetDescription, string assetAlternateId, string sourceContainer, string[] fileNames) { List <Task> copyTasks = new List <Task>(); if (string.IsNullOrEmpty(assetName)) { assetName = Path.GetFileNameWithoutExtension(fileNames[0]); } Asset asset = CreateAsset(storageAccount, assetName, assetDescription, assetAlternateId); foreach (string fileName in fileNames) { string sourceUrl = sourceBlobClient.GetDownloadUrl(sourceContainer, fileName, false); CloudBlockBlob assetBlob = assetBlobClient.GetBlockBlob(asset.Container, null, fileName); Task copyTask = assetBlob.StartCopyAsync(new Uri(sourceUrl)); copyTasks.Add(copyTask); } Task.WaitAll(copyTasks.ToArray()); return(asset); }
internal static MediaFile[] GetAssetFiles(StorageBlobClient blobClient, string containerName, string directoryPath) { BlobContinuationToken continuationToken = null; List <MediaFile> files = new List <MediaFile>(); CloudBlobContainer blobContainer = blobClient.GetBlobContainer(containerName); do { BlobResultSegment blobList; if (!string.IsNullOrEmpty(directoryPath)) { CloudBlobDirectory blobDirectory = blobContainer.GetDirectoryReference(directoryPath); blobList = blobDirectory.ListBlobsSegmentedAsync(continuationToken).Result; } else { blobList = blobContainer.ListBlobsSegmentedAsync(continuationToken).Result; } foreach (IListBlobItem blobItem in blobList.Results) { string fileName = Path.GetFileName(blobItem.Uri.ToString()); string fileSize = blobClient.GetBlobSize(containerName, directoryPath, fileName, out long byteCount, out string contentType); MediaFile file = new MediaFile() { Name = fileName, Size = fileSize, ByteCount = byteCount, ContentType = contentType, DownloadUrl = blobClient.GetDownloadUrl(containerName, fileName, false) }; files.Add(file); } continuationToken = blobList.ContinuationToken; } while (continuationToken != null); return(files.ToArray()); }
public Asset CreateAsset(StorageBlobClient sourceBlobClient, StorageBlobClient assetBlobClient, string storageAccount, string assetName, string assetDescription, string assetAlternateId, string sourceContainer, string fileName) { return(CreateAsset(sourceBlobClient, assetBlobClient, storageAccount, assetName, assetDescription, assetAlternateId, sourceContainer, new string[] { fileName })); }