Flutter:获取 Youtube 视频的缩略图

2024-03-23

我正在使用 youtube_player_flutter 在我的应用程序中播放 youtube 视频。有没有办法在 flutter 中获取 YouTube 视频的缩略图。我有一个 YouTube 视频 URL,我需要获取该 URL 的缩略图。

提前致谢。


假设您有上传视频的 YouTube URL。如果你有它,那么你必须像下面的 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 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);

OR

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

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. 获取缩略图URL

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

Usage:

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

Output:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter:获取 Youtube 视频的缩略图 的相关文章

随机推荐

  • logrotate 后缀:dateext + 旋转

    是否可以同时使用 dateext 和旋转选项 配置必须如下所示 var log verybig log monthly size 100M dateext dateformat Y m rotate 5 create missingok c
  • 我应该在实现文件中使用未命名的名称空间吗?

    我在外部 cpp 文件中定义了一些函数 这里不涉及类 当然还有一个合适的 h 文件 使用了 cpp文件中的一些函数only在该 cpp 文件中没有其他地方 它们甚至没有在 h 文件中提及 我应该将这些函数放入未命名的命名空间中 还是可以将它
  • 无法从 Task<> 隐式转换类型

    我正在尝试掌握 NET 4 5 中的异步方法语法 我认为我已经完全理解了这些示例 但是无论异步方法的类型是什么 即Task
  • 如何将 STDIN 内容转换为数组?

    我有一个包含以下内容的文件 INPUT 123 n 456 n 789 我想像这样运行我的脚本 script rb myArray STDIN to s myArray split n puts field size 我预计会打印 3 但我
  • 如何集成Neo4j数据库、NestJS框架和GraphQL?

    我正在尝试将我的 REST API NestJS 与带有 GraphQL 查询的新 Neo4j 数据库集成 有人成功吗 提前致谢 编辑1 我添加了我的代码 import Resolver from nestjs graphql import
  • 如何减少 Perl CGI 脚本的启动时间?

    我正在开发一些 CGI 脚本 并且正在尝试找到一种解决方案来减少使用 use 导入大量模块时产生的 启动时间 Update 提供的解决方案很好 但我正在使用的脚本在控制台和 CGI 模式下运行 检查是否存在一些典型的 HTTP 环境变量 在
  • Android 状态栏通知:使其不可清除并返回到应用程序(不启动新实例)

    我正在开发一个 Android 应用程序 我想要一个用户无法清除的状态栏通知 有谁知道这是怎么做到的吗 我在 Skimble 等应用程序中见过它们 在使用该应用程序时会出现不可清除的通知 另外 当用户单击 按下通知时 我希望它返回到已经运行
  • 如何指定指向重载函数的指针?

    我想将重载函数传递给std for each 算法 例如 class A void f char c void f int i void scan const std string s std for each s begin s end
  • 修剪 JSON.NET 中的 json 字符串

    我在用JObject ToString 方法将 JSON 对象转换为字符串 但是如何修剪输出以删除标记之间的空格 无需求助于使用正则表达式 只需使用Formatting None option string json jObject ToS
  • 'Class.forName("org.sqlite.JDBC");' 是什么意思做?

    我正在尝试使用 SQLite 数据库创建一个简单的应用程序 我选择使用SQLiteJDBC 驱动程序 http www zentus com sqlitejdbc 下面的代码取自上述网站 我的问题是关于 public static void
  • MVC2 中 Html.Partial(view, model) 和 Html.RenderPartial(view,model) 之间有什么区别(如果有)?

    当然 除了它返回的类型以及您以不同方式调用它的事实之外 如果它们不同 为什么要调用其中一个而不是另一个 定义 Type System Web Mvc Html RenderPartialExtensions Assembly System
  • 编辑 web.config 中的设置

    我不知道如何标题这个问题 我正在向 PayPal 的 Express Payment API 发出请求 我正在使用他们的 dll 来帮助发出请求并解析响应 他们的代码工作的说明是将您的授权凭据添加到web config文件 我已经这样做了
  • 如何将容器上的 localhost 端口转发到主机上的 localhost?

    我的主机上有一个守护进程在某个端口 即 8008 上运行 并且我的代码通常通过联系 localhost 8008 与守护进程交互 我现在已经容器化了我的代码 但还没有容器化守护进程 如何将容器上的 localhost 8008 转发到运行容
  • 如何拥有两个具有不同命名空间和相同 JAXB 类的不同端点?

    我正在使用弹簧肥皂ws 我有以下对应于复杂类型的 JAXB 域类 XmlAccessorType XmlAccessType FIELD XmlType name propOrder reference reason XmlRootElem
  • npm 更新检查失败

    昨晚我尝试更新我的节点和 npm 它似乎很成功 但是从那时起 每当我尝试运行任何 npm 命令时 我都会遇到同样的错误 我尝试卸载并重新安装 npm 但无法解决下面的错误消息 节点版本 v8 3 0 我收到的错误消息 npm update
  • 通话录音 - 使其在 Nexus 5X 上运行(可以生根或定制 ROM)

    我正在尝试使用AudioRecord with AudioSource VOICE DOWNLINK在 Nexus 5X Android 7 1 我自己的 AOSP 版本 上 我已经过了权限阶段 将我的 APK 移至特权应用程序 并进行了调
  • 无法安装 .apk 文件

    当我尝试执行 apk 文件时 出现以下错误 安装失败 缺少共享库 在命令提示符下 cd 到 adb 的路径 导航到 SDK 的 platform tools 目录 然后执行命令 adb d install path to your app
  • Rails 的 Mailchimp API - list.subscribe(:double_optin => false) 不起作用

    我正在使用 mailchimp api gem 可以通过提交电子邮件并将确认电子邮件发送到已注册的电子邮件来使提交的电子邮件正常工作 但我想禁用 double optin 标志 我正在尝试这样做 mc Mailchimp API new m
  • 从通用列表中查找项目

    我在从通用列表中获取记录时遇到问题 我创建了一个通用函数 我想从其中获取任何类型的类的记录 以下是示例代码 public void Test
  • Flutter:获取 Youtube 视频的缩略图

    我正在使用 youtube player flutter 在我的应用程序中播放 youtube 视频 有没有办法在 flutter 中获取 YouTube 视频的缩略图 我有一个 YouTube 视频 URL 我需要获取该 URL 的缩略图