Flutter:获取 Youtube 视频的缩略图

Siv*_*mal 6 dart flutter

我正在使用 youtube_player_flutter 在我的应用中播放 youtube 视频。有什么方法可以在颤动中获取 youtube 视频的缩略图。我有一个 youtube 视频网址,我需要获取该网址的缩略图。

提前致谢。

jit*_*555 15

假设您有上传视频的 youtube URL。如果你有它,那么你必须像下面的 URL 一样格式化它。

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg  --  Just add your youtube video Id here
Run Code Online (Sandbox Code Playgroud)

代码片段:

Image.network('https://img.youtube.com/vi/6cwnBBAVIwE/0.jpg'),
Run Code Online (Sandbox Code Playgroud)

6cwnBBAVIwE- 这是我在此处添加的示例 ID。您可以添加您的 YouTube 视频 ID。

您可以从视频 url 中获取 youtube id,id 是 youtube id 的最后 11 位数字

例如这里的视频网址是https://www.youtube.com/watch?v=6cwnBBAVIwE

这个视频的id是 6cwnBBAVIwE

获取 id :

String url = "https://www.youtube.com/watch?v=H4p6njjPV_o"
String id = url.substring(url.length -11);
Run Code Online (Sandbox Code Playgroud)

或者

如果上述解决方案不起作用,则使用更高级的方法来解决它。

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;
}
Run Code Online (Sandbox Code Playgroud)

2.获取缩略图网址

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';
Run Code Online (Sandbox Code Playgroud)

用法:

void main() {
  String? videoId = convertUrlToId(
      "https://www.youtube.com/watch?v=6cwnBBAVIwE");
  String thumbnailUrl = getThumbnail(videoId: videoId ?? "");
  print(thumbnailUrl); 
}
Run Code Online (Sandbox Code Playgroud)

输出:

https://i3.ytimg.com/vi_webp/6cwnBBAVIwE/sddefault.webp

  • 要获得 16:9 版本的图像,请将 ``/0``` 替换为````/mqdefault``` (3认同)

Raz*_*ung 9

// File created by
// Lung Razvan <long1eu>
// on 20/01/2021

void main() {
  final String thumbnail = getYoutubeThumbnail('https://www.youtube.com/watch?v=ISPK_eWX3ls');
  print(thumbnail);
}

String getYoutubeThumbnail(String videoUrl) {
  final Uri uri = Uri.tryParse(videoUrl);
  if (uri == null) {
    return null;
  }

  return 'https://img.youtube.com/vi/${uri.queryParameters['v']}/0.jpg';
}

Run Code Online (Sandbox Code Playgroud)