2013-04-01 7 views
6

In meiner Android-Anwendung habe ich ein eingebettetes YouTube-Video.YouTube-Video-ID mit Parametern abrufen

Ich erhalte die Youtube-Video-ID von der ursprünglichen URL wie folgt:

private String extractYoutubeId(String url) { 

    String video_id = ""; 
    if (url != null && url.trim().length() > 0 && url.startsWith("http")) { 

     String expression = "^.*((youtu.be" + "\\/)" 
       + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*"; 
     CharSequence input = url; 
     Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE); 
     Matcher matcher = pattern.matcher(input); 
     if (matcher.matches()) { 
      String groupIndex1 = matcher.group(7); 
      if (groupIndex1 != null && groupIndex1.length() == 11) 
       video_id = groupIndex1; 
     } 
    } 

    return video_id; 
} 

Diese ganz gut für eine Original-URL wie dies funktioniert: http://www.youtube.com/watch?v=A7ry4cx6HfY

Als ich tun, dass das Video geladen ist und spielte perfekt in Ordnung, aber die Qualität ist sehr schlecht. (240p oder sogar schlechter, denke ich)

So vom googling, ich weiß, dass Sie nur einen Parameter wie &vq=large oder &vq=hd1080 hinzufügen müssen, um 480p/1080p zu erhalten.

Aber wenn ich eine URL wie diese http://www.youtube.com/watch?v=A7ry4cx6HfY&vq=hd1080 verwende, wird der Parameter ignoriert und die Qualität ist immer noch schlecht.

Wie kann ich das Video in besserer Qualität bekommen? Natürlich unter der Annahme, dass das Video in dieser Qualität verfügbar ist. Warum wird mein Parameter ignoriert?

Antwort

1

Ich löste dieses Problem mit der offiziellen Google Youtube API für Android.

Es ist wahrscheinlich nicht die beste Idee zu versuchen, das Holen der Videos selbst zu implementieren. Die Verwendung der API macht das für Sie und es funktioniert gut.

EDIT

Hier der Link zur API: https://developers.google.com/youtube/android/player/

+10

Ich sehe keine Methode in YouTube API, die Video ID aus URL extrahiert – CommonMan

+0

Das ist richtig, aber ich brauchte nur die ID für den Versuch, Zugriff auf die qualitativ hochwertigeren Versionen des Videos zu bekommen. Mit der YouTube API brauchst du das nicht mehr, da du auf alle Qualitätsvarianten zugreifen kannst –

2

hier, um diesen Code versuchen.

// (?:youtube(?:-nocookie)?\.com\/(?:[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11}) 
final static String reg = "(?:youtube(?:-nocookie)?\\.com\\/(?:[^\\/\\n\\s]+\\/\\S+\\/|(?:v|e(?:mbed)?)\\/|\\S*?[?&]v=)|youtu\\.be\\/)([a-zA-Z0-9_-]{11})"; 

public static String getVideoId(String videoUrl) { 
    if (videoUrl == null || videoUrl.trim().length() <= 0) 
     return null; 

    Pattern pattern = Pattern.compile(reg, Pattern.CASE_INSENSITIVE); 
    Matcher matcher = pattern.matcher(videoUrl); 

    if (matcher.find()) 
     return matcher.group(1); 
    return null; 
} 

Sie können mein ganzes Parsercode von hier https://github.com/TheFinestArtist/YouTubePlayerActivity/blob/master/library/src/main/java/com/thefinestartist/ytpa/utils/YoutubeUrlParser.java

Dies ist nützlich, Open-Source Ich habe Youtube Video spielen finden.