android - 获取包含参数的 YouTube 视频 ID

标签 android youtube video-streaming android-videoview

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

我从原始 url 获取 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;
}

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

当我这样做时,视频可以完美加载和播放,但质量很差。 (我认为 24​​0p 甚至更差)

因此,通过谷歌搜索,我知道您只需添加一个参数,如 &vq=large&vq=hd1080 即可获得 480p/1080p。

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

如何获得更好质量的视频?当然,前提是视频可以达到那种质量。为什么我的参数被忽略了?

最佳答案

在这里试试这段代码。

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

关于android - 获取包含参数的 YouTube 视频 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15741234/

相关文章:

java - YouTubePlayerSupportFragment 滚动回收器 View 后视频变黑,但音频继续播放

ios - 通过手工协议(protocol)发送视频

iphone - 适用于 Android 操作系统的 PayPal 应用内购买 - 服务器/客户端模型

android - 如何实现惰性列一次滚动一列的功能

android - 带图标的 AlertDialog MultiChoiceItems

android - 收到消息后,Android 上的 Firebase Messaging 突然开始崩溃

javascript - 从YouTube channel 中获取最新视频

java - android webview youtube 嵌入视频自动播放不工作

ffmpeg - 寻找最快的视频编码器,将网络摄像头流式传输到 ipad

javascript - 有没有办法附加到对象 URL 或以其他方式创建流作为 URL?