private YouTubeUri TryFindBestVideoUri(IEnumerable <YouTubeUri> uris, YouTubeUri.YouTubeQuality minQuality, YouTubeUri.YouTubeQuality maxQuality) { return(uris .Where(u => u.HasVideo && u.HasAudio && !u.Is3DVideo && u.VideoQuality >= minQuality && u.VideoQuality <= maxQuality) .OrderByDescending(u => u.VideoQuality) .FirstOrDefault()); }
/// <summary>Returns the best matching YouTube stream URI which has an audio and video channel and is not 3D. </summary> public async Task <YouTubeUri> GetVideoUriAsync(string youTubeId, YouTubeUri.YouTubeQuality minQuality, YouTubeUri.YouTubeQuality maxQuality, CancellationToken token) { var uris = await GetUrisAsync(youTubeId, token); var uri = TryFindBestVideoUri(uris, minQuality, maxQuality); if (uri == null) { throw new YouTubeUriException("No matching YouTube video or audio stream URI could be found. " + "The video may not be available in your country, " + "is private or uses RTMPE (protected streaming)."); } return(uri); }
/// <summary>Returns the best matching YouTube stream URI which has an audio and video channel and is not 3D. </summary> public Task <YouTubeUri> GetVideoUriAsync(string youTubeId, YouTubeUri.YouTubeQuality minQuality, YouTubeUri.YouTubeQuality maxQuality) { return(GetVideoUriAsync(youTubeId, minQuality, maxQuality, CancellationToken.None)); }
/// <summary>Returns the best matching YouTube stream URI which has an audio and video channel and is not 3D. </summary> public Task <YouTubeUri> GetVideoUriAsync(string youTubeId, YouTubeUri.YouTubeQuality maxQuality, CancellationToken token) { return(GetVideoUriAsync(youTubeId, DefaultMinQuality, maxQuality, token)); }