【问题标题】:Flutter : Get thumbnail of Youtube videoFlutter:获取 Youtube 视频的缩略图
【发布时间】:2020-08-27 19:26:25
【问题描述】:

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

提前致谢。

【问题讨论】:

标签: flutter dart


【解决方案1】:

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

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg  --  Just add your youtube video Id here

代码片段:

Image.network('https://img.youtube.com/vi/6cwnBBAVIwE/0.jpg'),

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

您可以从视频网址中获取 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);

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

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

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

用法:

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

输出:

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

【讨论】:

  • 1.它们不是数字 2. 为什么是子字符串?如果将来长度发生变化怎么办?您可以使用 Uri.parse('url').queryParams['v']
  • 这是你如何使用 Uri.parse('url').queryParams['v']??
  • 这是一个可行的解决方案,但很糟糕。再次,未来的长度变化是多少?如果最后也是这样的播放列表https://www.youtube.com/watch?v=ZmDBbnmKpqQ&amp;list=RDCLAK5uy_lBNUteBRencHzKelu5iDHwLF6mYqjL-JU那你怎么办?
  • 要获得 16:9 版本的图像,请将 /0 替换为 /mqdefault
【解决方案2】:
// 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';
}

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 2011-10-12
    • 2015-03-26
    • 2017-10-14
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 2015-10-31
    相关资源
    最近更新 更多