示例#1
0
文件: Media.cs 项目: lulzzz/SkyMedia
        private static int OrderByProcessor(MediaInsight leftItem, MediaInsight rightItem)
        {
            MediaProcessor leftProcessor  = Processor.GetMediaProcessor(leftItem.ProcessorId).Value;
            MediaProcessor rightProcessor = Processor.GetMediaProcessor(rightItem.ProcessorId).Value;

            return(leftProcessor.CompareTo(rightProcessor));
        }
示例#2
0
文件: Media.cs 项目: NU11B0T/SkyMedia
        private static MediaStream GetMediaStream(string authToken, MediaClient mediaClient, StreamingLocator streamingLocator)
        {
            MediaStream mediaStream  = null;
            string      streamingUrl = mediaClient.GetStreamingUrl(streamingLocator, null);

            if (!string.IsNullOrEmpty(streamingUrl))
            {
                Asset        asset        = mediaClient.GetEntity <Asset>(MediaEntity.Asset, streamingLocator.AssetName);
                MediaInsight mediaInsight = GetMediaInsight(mediaClient, asset);
                authToken   = !string.IsNullOrEmpty(mediaInsight.ViewToken) ? mediaInsight.ViewToken : string.Concat(Constant.AuthIntegration.AuthScheme, authToken);
                mediaStream = new MediaStream()
                {
                    Name       = string.IsNullOrEmpty(streamingLocator.Name) ? asset.Name : streamingLocator.Name,
                    Url        = streamingUrl,
                    Poster     = mediaClient.GetDownloadUrl(asset.Name, Constant.Media.Thumbnail.FileName),
                    Tracks     = Track.GetMediaTracks(mediaClient, asset),
                    Insight    = mediaInsight,
                    Protection = mediaClient.GetStreamProtection(authToken, mediaClient, streamingLocator)
                };
                List <string> assetFilterNames = new List <string>();
                AssetFilter[] assetFilters     = mediaClient.GetAllEntities <AssetFilter>(MediaEntity.StreamingFilterAsset, streamingLocator.AssetName);
                foreach (AssetFilter assetFilter in assetFilters)
                {
                    assetFilterNames.Add(assetFilter.Name);
                }
                mediaStream.Filters = assetFilterNames.ToArray();
            }
            return(mediaStream);
        }
示例#3
0
文件: Media.cs 项目: NU11B0T/SkyMedia
        private static MediaInsight GetMediaInsight(MediaClient mediaClient, Asset asset)
        {
            MediaInsight mediaInsight = new MediaInsight();

            if (mediaClient.IndexerEnabled())
            {
                using (DatabaseClient databaseClient = new DatabaseClient(false))
                {
                    string         collectionId = Constant.Database.Collection.MediaAssets;
                    MediaAssetLink assetLink    = databaseClient.GetDocument <MediaAssetLink>(collectionId, asset.Name);
                    if (assetLink != null)
                    {
                        string insightId = null;
                        if (assetLink.JobOutputs.ContainsKey(MediaTransformPreset.VideoIndexer))
                        {
                            insightId = assetLink.JobOutputs[MediaTransformPreset.VideoIndexer];
                        }
                        else if (assetLink.JobOutputs.ContainsKey(MediaTransformPreset.AudioIndexer))
                        {
                            insightId = assetLink.JobOutputs[MediaTransformPreset.AudioIndexer];
                        }
                        if (!string.IsNullOrEmpty(insightId) && mediaClient.IndexerInsightExists(insightId, out JObject insight))
                        {
                            mediaInsight.WidgetUrl = mediaClient.IndexerGetInsightUrl(insightId);
                            mediaInsight.ViewToken = insight["videos"][0]["viewToken"].ToString();
                        }
                    }
                }
            }
            return(mediaInsight);
        }
示例#4
0
        private static MediaInsight GetMediaInsight(MediaClient mediaClient, Asset asset)
        {
            MediaInsight mediaInsight = new MediaInsight();

            if (mediaClient.IndexerEnabled() && !string.IsNullOrEmpty(asset.AlternateId))
            {
                mediaInsight.WidgetUrl = mediaClient.IndexerGetInsightUrl(asset.AlternateId);
            }
            return(mediaInsight);
        }
示例#5
0
文件: Media.cs 项目: lulzzz/SkyMedia
        private static MediaStream[] GetMediaStreams(string authToken, MediaClient mediaClient, IAsset asset, bool clipperView, bool filtersOnly)
        {
            List <MediaStream> mediaStreams = new List <MediaStream>();

            IndexerClient indexerClient = new IndexerClient(authToken);

            List <MediaInsight> contentInsight = new List <MediaInsight>();

            if (!clipperView)
            {
                string documentId = DocumentClient.GetDocumentId(asset, out bool videoIndexer);
                if (!string.IsNullOrEmpty(documentId) && videoIndexer && indexerClient.IndexerEnabled)
                {
                    MediaInsight insight = new MediaInsight()
                    {
                        ProcessorId   = Processor.GetProcessorId(MediaProcessor.VideoIndexer, null),
                        ProcessorName = Processor.GetProcessorName(MediaProcessor.VideoIndexer),
                        DocumentId    = documentId,
                        SourceUrl     = indexerClient.GetInsightUrl(documentId, true)
                    };
                    contentInsight.Add(insight);
                }

                string[] fileNames = MediaClient.GetFileNames(asset, Constant.Media.FileExtension.Json);
                foreach (string fileName in fileNames)
                {
                    string[] fileNameInfo = fileName.Split(Constant.TextDelimiter.Identifier);
                    if (Enum.TryParse(fileNameInfo[0], out MediaProcessor processor) && fileNameInfo.Length == 2)
                    {
                        documentId = fileNameInfo[1].Replace(Constant.Media.FileExtension.Json, string.Empty);
                        MediaInsight insight = new MediaInsight()
                        {
                            ProcessorId   = Processor.GetProcessorId(processor, null),
                            ProcessorName = Processor.GetProcessorName(processor),
                            DocumentId    = documentId,
                            SourceUrl     = string.Empty
                        };
                        contentInsight.Add(insight);
                    }
                }

                contentInsight.Sort(OrderByProcessor);
            }

            MediaStream mediaStream = new MediaStream()
            {
                Id     = asset.Id,
                Name   = asset.Name,
                Type   = "asset",
                Source = new StreamSource()
                {
                    Src            = mediaClient.GetLocatorUrl(asset),
                    ProtectionInfo = mediaClient.GetStreamProtections(authToken, asset)
                },
                TextTracks     = GetTextTracks(mediaClient, indexerClient, asset),
                ContentInsight = contentInsight.ToArray(),
            };

            if (!filtersOnly)
            {
                mediaStreams.Add(mediaStream);
            }

            foreach (IStreamingAssetFilter assetFilter in asset.AssetFilters)
            {
                MediaStream filteredStream = mediaStream.DeepCopy();
                filteredStream.Id         = assetFilter.Id;
                filteredStream.Name       = string.Concat(mediaStream.Name, "<br><br>+ ", assetFilter.Name);
                filteredStream.Type       = "filter";
                filteredStream.Source.Src = string.Concat(filteredStream.Source.Src, "(filter=", assetFilter.Name, ")");
                mediaStreams.Add(filteredStream);
            }

            return(mediaStreams.ToArray());
        }