Flutter 获取Youtube视频的缩略图
我正在使用youtube_player_Flight在我的应用程序中播放youtube视频。有没有办法在flutter中获取youtube视频的缩略图。我有一个youtube视频URL,我需要得到该URL的缩略图Flutter 获取Youtube视频的缩略图,flutter,dart,Flutter,Dart,我正在使用youtube_player_Flight在我的应用程序中播放youtube视频。有没有办法在flutter中获取youtube视频的缩略图。我有一个youtube视频URL,我需要得到该URL的缩略图 提前感谢。假设您有上传视频的youtube URL。如果你有它,那么你必须像下面的URL一样格式化它 https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg -- Just add your you
提前感谢。假设您有上传视频的youtube URL。如果你有它,那么你必须像下面的URL一样格式化它
https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg -- Just add your youtube video Id here
6cwnBBAVIwE
-这是我在这里添加的示例id。您可以添加您的youtube视频id
您可以从视频url获取youtube id,该id是youtube id的最后11位数字
例如,这里的视频url是
此视频的id是6cwnBBAVIwE
要获取id,请执行以下操作:
String url = "https://www.youtube.com/watch?v=H4p6njjPV_o"
String id = url.substring(url.length -11);
或
如果上述解决方案不起作用,则采用更高级的方法解决
1。从URL获取ID
String? convertUrlToId(String url, {bool trimWhitespaces = true}) {
if (!url.contains("http") && (url.length == 11)) return url;
if (trimWhitespaces) url = url.trim();
for (var exp in [
RegExp(
r"^https:\/\/(?:www\.|m\.)?youtube\.com\/watch\?v=([_\-a-zA-Z0-9]{11}).*$"),
RegExp(
r"^https:\/\/(?:www\.|m\.)?youtube(?:-nocookie)?\.com\/embed\/([_\-a-zA-Z0-9]{11}).*$"),
RegExp(r"^https:\/\/youtu\.be\/([_\-a-zA-Z0-9]{11}).*$")
]) {
Match? match = exp.firstMatch(url);
if (match != null && match.groupCount >= 1) return match.group(1);
}
return null;
}
String getThumbnail({
required String videoId,
String quality = ThumbnailQuality.standard,
bool webp = true,
}) =>
webp
? 'https://i3.ytimg.com/vi_webp/$videoId/$quality.webp'
: 'https://i3.ytimg.com/vi/$videoId/$quality.jpg';
2。获取缩略图URL
String? convertUrlToId(String url, {bool trimWhitespaces = true}) {
if (!url.contains("http") && (url.length == 11)) return url;
if (trimWhitespaces) url = url.trim();
for (var exp in [
RegExp(
r"^https:\/\/(?:www\.|m\.)?youtube\.com\/watch\?v=([_\-a-zA-Z0-9]{11}).*$"),
RegExp(
r"^https:\/\/(?:www\.|m\.)?youtube(?:-nocookie)?\.com\/embed\/([_\-a-zA-Z0-9]{11}).*$"),
RegExp(r"^https:\/\/youtu\.be\/([_\-a-zA-Z0-9]{11}).*$")
]) {
Match? match = exp.firstMatch(url);
if (match != null && match.groupCount >= 1) return match.group(1);
}
return null;
}
String getThumbnail({
required String videoId,
String quality = ThumbnailQuality.standard,
bool webp = true,
}) =>
webp
? 'https://i3.ytimg.com/vi_webp/$videoId/$quality.webp'
: 'https://i3.ytimg.com/vi/$videoId/$quality.jpg';
用法:
Image.network('https://img.youtube.com/vi/6cwnBBAVIwE/0.jpg'),
void main() {
String? videoId = convertUrlToId(
"https://www.youtube.com/watch?v=6cwnBBAVIwE");
String thumbnailUrl = getThumbnail(videoId: videoId ?? "");
print(thumbnailUrl);
}
输出:
Image.network('https://img.youtube.com/vi/6cwnBBAVIwE/0.jpg'),
void main() {
String? videoId = convertUrlToId(
"https://www.youtube.com/watch?v=6cwnBBAVIwE");
String thumbnailUrl = getThumbnail(videoId: videoId ?? "");
print(thumbnailUrl);
}
//由创建的文件
//拉兹万
//2021年1月20日
void main(){
最终字符串缩略图=getYoutubeThumbnail('https://www.youtube.com/watch?v=ISPK_eWX3ls');
打印(缩略图);
}
字符串getYoutubeThumbnail(字符串videoUrl){
最终Uri=Uri.tryParse(videoUrl);
if(uri==null){
返回null;
}
返回'https://img.youtube.com/vi/${uri.queryParameters['v']}/0.jpg';
}
您可以看到希望它能帮助您!1.它们不是数字2。为什么是子串?如果将来长度发生变化怎么办?您可以使用Uri.parse('url')。queryParams['v']这是如何使用Uri.parse('url')。queryParams['v']?这是一个可行的解决方案,但不是一个好的解决方案。再说一次,未来的长度变化是什么?如果最后的播放列表也是这样的https://www.youtube.com/watch?v=ZmDBbnmKpqQ&list=RDCLAK5uy_lBNUteBRencHzKelu5iDHwLF6mYqjL-JU
那你怎么办?