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