【问题标题】:Getting YouTube Video ID including parameters获取包含参数的 YouTube 视频 ID
【发布时间】:2013-03-22 09:31:41
【问题描述】:

在我的 Android 应用程序中,我有一个嵌入的 YouTube 视频。

我从原始网址获取 Youtube 视频 ID,如下所示:

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

这适用于像这样的原始网址:http://www.youtube.com/watch?v=A7ry4cx6HfY

当我这样做时,视频已加载并播放得非常好,但质量很差。 (我认为是 240p 甚至更差)

所以通过谷歌搜索,我知道您只需要添加一个像 &vq=large&vq=hd1080 这样的参数即可获得 480p/1080p。

但是当我使用像http://www.youtube.com/watch?v=A7ry4cx6HfY&vq=hd1080 这样的网址时,该参数被忽略并且质量仍然很差。

如何才能获得更高质量的视频?当然,假设视频以这种质量可用。为什么我的参数被忽略了?

【问题讨论】:

    标签: android youtube video-streaming android-videoview


    【解决方案1】:

    我通过使用官方的 Google Youtube API for Android 解决了这个问题。

    尝试自己实现获取视频可能不是最好的主意。使用 API 可以为您做到这一点,而且效果很好。

    编辑

    这里是 API 的链接:https://developers.google.com/youtube/android/player/

    【讨论】:

    • 我在 YouTube API 中没有看到任何从 URL 中提取视频 ID 的方法
    • 没错,但我只需要 id 就可以尝试访问更高质量的视频版本。使用 YouTube API,您不再需要这些,因为您可以访问所有质量变化
    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2016-09-28
      • 2011-03-24
      • 2014-12-15
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      相关资源
      最近更新 更多