在我的 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
当我这样做时,视频可以完美加载和播放,但质量很差。 (我认为 240p 甚至更差)
因此,通过谷歌搜索,我知道您只需添加一个参数,如 &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/