2016-04-30 3 views
0

Если кто-то знаком с использованием youtubeextractor, я пытаюсь сделать следующее. Я использую этот пример, размещенный на сайте для библиотеки.youtubeextractor получение разных разрешений

string link = "youtube link"; 

IEnumerable<VideoInfo> videoInfos = DownloadUrlResolver.GetDownloadUrls(link); 

VideoInfo video = videoInfos.First(info => info.VideoType == VideoType.Mp4 && info.Resolution == 360); 

Этот код ищет только определенное разрешение, что, если это разрешение не существует?

Если у кого есть пример ищет разрешения позволяет говорить 1080, если 1080 не существует, то мы ищем 720, в противном случае захватить разрешение 420, в этом порядке приоритета: 1080 -> 720 -> 480

ответ

1
IEnumerable<VideoInfo> videos = DownloadUrlResolver.GetDownloadUrls(txtUrl.Text); 
foreach (var vid in videos) { 
    if (vid.Resolution > maxRez) 
     maxRez = vid.Resolution; 
} 
cboRezolution.Text = maxRez.ToString(); 
VideoInfo video = videos.First(p => p.VideoType == VideoType.Mp4 && p.Resolution == Convert.ToInt32(maxRez)); 
lblStatus.Text = video.Title; 
1
VideoInfo video = videoInfos.OrderByDescending(info=>info.Resolution) 
        .First(info => info.VideoType == VideoType.Mp4) 

Это вернет видео .MP4 с лучшим разрешением.

Если вы заинтересованы только в некоторых разрешениях, то вы можете сделать это, как

var allowedResolutions = new List<int>() { 1080, 720, 480, 360 }; 

VideoInfo video = videoInfos.OrderByDescending(info=>info.Resolution) 
        .Where(info => allowedResolutions.Contains(info.Resolution)) 
        .First(info => info.VideoType == VideoType.Mp4) 
+0

Вы любопытное потерял меня на этот ответ. Как OrderByDescending() ищет конкретные разрешения? Я что-то упускаю? – sledgehammer

+0

@sledgehammer Он пытается найти максимальное разрешение в зависимости от того, что доступно – Eser

+0

Допустим, у меня есть разрешение, хранящееся в ini-файле, и я хочу, чтобы – sledgehammer

0
public static IEnumerable<VideoInfo> GetVideoInfos(YoutubeModel model) 
{ 
    int xx; 
    IEnumerable<VideoInfo> videoInfos = DownloadUrlResolver.GetDownloadUrls(model.Link); 

     int[] arr = new int[3] { 360, 720, 1080 }; 
     for (xx = 0; xx < 3; xx++) 
     { 
      try 
      { 
       VideoInfo video = videoInfos 
            .First(info => info.VideoType == VideoType.Mp4 && info.Resolution == arr[xx]); 
      } 
      catch (Exception st) 
      { 

      } 
     } 
    return videoInfos; 
} 

//Returns VideoInfo object (Only for video model) 
public static VideoInfo GetVideoInfo(YoutubeVideoModel videoModel) 
{ 
    //Select the first .mp4 video with 360p resolution 
    VideoInfo video = videoModel.VideoInfo.First(); 
    return video; 
} 
-1

В качестве альтернативы, рассмотреть вопрос об использовании YoutubeExplode, он сильно типизированных перечисление для хранения качество видео, среди множества других преимуществ.

Вы можете использовать его, чтобы сделать следующее:

using (var client = new YoutubeClient()) 
{ 
    // Get the video info 
    var videoInfo = await client.GetVideoInfoAsync("video_id"); 

    // Get streams above 480p and sort them by quality descending (higher first) 
    var hqStreams = videoInfo.Streams.Where(s => s.Quality >= VideoStreamQuality.Medium480).OrderByDescending(s => s.Quality); 

    // Select the first stream (highest quality) 
    var bestStream = hqStreams.First(); 
} 
Смежные вопросы