2016-04-30 5 views
0

Wenn jemand mit youtubeextractor vertraut ist, versuche ich Folgendes zu tun. Ich verwende dieses Beispiel, das auf der Website für die Bibliothek veröffentlicht wurde.youtubeextractor bekommen verschiedene Auflösungen

string link = "youtube link"; 

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

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

Dieser Code sucht nur nach einer bestimmten Auflösung, was passiert, wenn diese Auflösung nicht existiert?

Wenn jemand ein Beispiel der Suche nach einer Auflösung von 1080 kann sagen, wenn 1080 nicht existiert, dann suchen wir nach 720, sonst schnappen Sie sich eine 420-Auflösung, in dieser Prioritätsreihenfolge: 1080 -> 720 -> 480

Antwort

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) 

Dadurch wird das MP4-Video mit der besten Auflösung wiedergegeben.

Wenn Sie interessiert sind nur einige Auflösungen dann können Sie es tun, wie

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

Sie mich irgendwie über diese Antwort verloren. Wie sucht OrderByDescending() nach bestimmten Auflösungen? Fehle ich etwas? – sledgehammer

+0

@sledgehammer Es versucht, die maximale Auflösung zu finden, je nachdem, was verfügbar ist – Eser

+0

Lets sagen, ich habe die Auflösung in einer INI-Datei gespeichert und ich möchte – 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

Als Alternative zu betrachten, YoutubeExplode verwenden, es hat-stark typisierte Enum für die Videoqualität zu speichern, unter vielen anderen Vorteilen.

Sie können es verwenden, Folgendes zu tun:

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