2013-04-01 12 views
6

W mojej aplikacji na Androida mam osadzony film z YouTube.Uzyskiwanie identyfikatora filmu wideo w YouTube, w tym parametrów

Dostaję identyfikator wideo YouTube z oryginalnego adresu URL w następujący sposób:

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

Działa to dobrze dla oryginalnego url jak poniżej: http://www.youtube.com/watch?v=A7ry4cx6HfY

Kiedy robię, że film jest załadowany i grał doskonale, ale jakość jest bardzo zła. (240p lub nawet gorzej, myślę)

Tak więc z google, wiem, że wystarczy dodać parametr taki jak &vq=large lub &vq=hd1080, aby uzyskać 480p/1080p.

Ale kiedy używam adresu URL takiego jak ten http://www.youtube.com/watch?v=A7ry4cx6HfY&vq=hd1080 parametr jest ignorowany, a jakość nadal jest zła.

Jak mogę uzyskać wideo w lepszej jakości? Oczywiście zakładając, że film jest dostępny w tej jakości. Dlaczego mój parametr jest ignorowany?

Odpowiedz

1

Rozwiązałem ten problem, korzystając z oficjalnego interfejsu API serwisu YouTube dla Androida w wersji .

To chyba nie jest najlepszy pomysł, aby spróbować samemu uzyskać dostęp do filmów. Używanie API robi to za Ciebie i działa dobrze.

EDIT

Tutaj link do API: https://developers.google.com/youtube/android/player/

+10

Nie widzę żadnej metody w YouTube API, która pobiera identyfikator wideo z URL – CommonMan

+0

To prawda, ale tylko potrzebne identyfikator dla próbuje uzyskać dostęp do wyższych wersjach jakościowych wideo. Dzięki API YouTube nie potrzebujesz już tego, ponieważ masz dostęp do wszystkich odmian jakości –

2

Spróbuj kod tutaj.

// (?: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; 
} 

można znaleźć cały mój kod parsera stąd https://github.com/TheFinestArtist/YouTubePlayerActivity/blob/master/library/src/main/java/com/thefinestartist/ytpa/utils/YoutubeUrlParser.java

ta jest przydatna open source Zrobiłem grać Video Youtube. https://github.com/TheFinestArtist/YouTubePlayerActivity

Powiązane problemy