2013-04-01 2 views
6

В моем приложении для Android у меня встроенное видео YouTube.Получение идентификатора видео YouTube, включая параметры

Я получаю ID видео YouTube из исходного URL следующим образом:

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

Это прекрасно работает для оригинального URL, как это: http://www.youtube.com/watch?v=A7ry4cx6HfY

Когда я делаю, что видео загружается и играл отлично, но качество очень плохое. (240p или еще хуже, я думаю)

Так что из поиска в Google я просто хочу добавить параметр &vq=large или &vq=hd1080, чтобы получить 480p/1080p.

Но когда я использую такой URL-адрес http://www.youtube.com/watch?v=A7ry4cx6HfY&vq=hd1080, параметр игнорируется, а качество по-прежнему плохое.

Как я могу получить видео в лучшем качестве? Конечно, предполагая, что видео доступно по этому качеству. Почему мой параметр игнорируется?

ответ

1

Я решил эту проблему, используя официальный API-интерфейс Google Youtube для Android.

Возможно, это не самая лучшая идея попытаться реализовать получение видео самим. Использование API делает это для вас, и это работает отлично.

EDIT

Здесь ссылка на API: https://developers.google.com/youtube/android/player/

+10

Я не вижу никакого метода в API YouTube, который извлекает идентификатор видео с URL – CommonMan

+0

Это правильно, но мне нужен только идентификатор, чтобы попытаться получить доступ к более качественным версиям видео. С API YouTube вам больше не нужно, поскольку вы можете получить доступ ко всем вариантам качества –

2

Попробуйте этот код здесь.

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

Вы можете найти весь мой код парсера здесь https://github.com/TheFinestArtist/YouTubePlayerActivity/blob/master/library/src/main/java/com/thefinestartist/ytpa/utils/YoutubeUrlParser.java

Это полезно с открытым исходным кодом, которое я сделал играть Youtube видео. https://github.com/TheFinestArtist/YouTubePlayerActivity

Смежные вопросы