Пример #1
0
        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);
        }
Пример #2
0
        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());
        }
Пример #3
0
        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);
        }
Пример #4
0
        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;
        }
Пример #5
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);
         }
     }
 }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        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);
        }
Пример #9
0
        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());
        }
Пример #10
0
        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);
        }
Пример #11
0
        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());
        }
Пример #12
0
 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 }));
 }