コード例 #1
0
        static IEnumerable <IStreamInfo> GetOptimalStreams(StreamManifest streamManifest, Container container)
        {
            if (streamManifest.GetAudioOnlyStreams().Any() && streamManifest.GetVideoOnlyStreams().Any())
            {
                // Include audio stream
                // Priority: transcoding -> bitrate
                yield return(streamManifest
                             .GetAudioOnlyStreams()
                             .OrderByDescending(s => s.Container == container)
                             .ThenByDescending(s => s.Bitrate)
                             .First());

                // Include video stream
                if (!container.IsAudioOnly)
                {
                    // Priority: video quality -> transcoding
                    yield return(streamManifest
                                 .GetVideoOnlyStreams()
                                 .OrderByDescending(s => s.VideoQuality)
                                 .ThenByDescending(s => s.Container == container)
                                 .First());
                }
            }
            // Use single muxed stream if adaptive streams are not available
            else
            {
                // Priority: video quality -> transcoding
                yield return(streamManifest
                             .GetMuxedStreams()
                             .OrderByDescending(s => s.VideoQuality)
                             .ThenByDescending(s => s.Container == container)
                             .First());
            }
        }
コード例 #2
0
ファイル: Core.cs プロジェクト: alphamxtion/YouTubeDownloader
        private Utils.VideoSettings GetVideoSettings(VideoId videoId)
        {
            StreamManifest manifest = client.Videos.Streams.GetManifestAsync(videoId).Result;

            Utils.VideoSettings videoSettings = new Utils.VideoSettings()
            {
                StreamManifest      = manifest,
                MuxedStreamInfo     = manifest.GetMuxedStreams().ToList(),
                VideoOnlyStreamInfo = manifest.GetVideoOnlyStreams().ToList(),
                AudioOnlyStreamInfo = manifest.GetAudioOnlyStreams().ToList()
            };

            return(videoSettings);
        }
コード例 #3
0
        private static IEnumerable <IStreamInfo> GetBestMediaStreamInfos(
            StreamManifest streamManifest,
            ConversionFormat format)
        {
            // Use single muxed stream if adaptive streams are not available
            if (!streamManifest.GetAudioOnlyStreams().Any() || !streamManifest.GetVideoOnlyStreams().Any())
            {
                // Priority: video quality -> transcoding
                yield return(streamManifest
                             .GetMuxedStreams()
                             .OrderByDescending(s => s.VideoQuality)
                             .ThenByDescending(s => !IsTranscodingRequired(s.Container, format))
                             .First());

                yield break;
            }

            // Include audio stream
            // Priority: transcoding -> bitrate
            yield return(streamManifest
                         .GetAudioOnlyStreams()
                         .OrderByDescending(s => !IsTranscodingRequired(s.Container, format))
                         .ThenByDescending(s => s.Bitrate)
                         .First());

            // Include video stream
            if (!format.IsAudioOnly)
            {
                // Priority: video quality -> transcoding
                yield return(streamManifest
                             .GetVideoOnlyStreams()
                             .OrderByDescending(s => s.VideoQuality)
                             .ThenByDescending(s => !IsTranscodingRequired(s.Container, format))
                             .First());
            }
        }