Flutter视频播放插件flutter_youtube_view的使用

发布于 1周前 作者 nodeper 来自 Flutter

Flutter视频播放插件flutter_youtube_view的使用

1. 插件简介

flutter_youtube_view 插件提供了内联的YouTube播放器。该插件通过使用 YouTube IFrame API,在Android上使用WebView,在iOS上使用WKWebview与YouTube进行交互。因此,用户设备上不需要安装YouTube应用程序,并且不会违反YouTube的服务条款。

该插件在不同平台上的实现如下:

2. 使用步骤

2.1 添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_youtube_view: ^2.0.4
2.2 安装依赖

运行以下命令来安装依赖:

$ flutter packages get
2.3 导入插件

在Dart代码中导入 flutter_youtube_view

import 'package:flutter_youtube_view/flutter_youtube_view.dart';

注意:对于iOS,应用需要在 Info.plist 文件中添加一个布尔属性以启用嵌入视图预览(key=io.flutter.embedded_views_preview,value=YES)。

2.4 使用YouTube播放器

以下是一个完整的示例代码,展示了如何在Flutter应用中使用 flutter_youtube_view 播放YouTube视频:

import 'package:flutter/material.dart';
import 'package:flutter_youtube_view/flutter_youtube_view.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> with FlutterYoutubeDelegate {
  // 视频ID
  final String videoId = 'gcj2RUWQZ60';

  // 初始化YouTube播放器
  void _onYoutubeCreated(FlutterYoutubeController controller) {
    this.controller = controller;
  }

  // 播放器回调方法
  [@override](/user/override)
  void onReady() {
    print('Player is ready');
  }

  [@override](/user/override)
  void onStateChange(String state) {
    print('Player state changed to: $state');
  }

  [@override](/user/override)
  void onError(String error) {
    print('Error: $error');
  }

  [@override](/user/override)
  void onVideoDuration(double duration) {
    print('Video duration: $duration seconds');
  }

  [@override](/user/override)
  void onCurrentSecond(double second) {
    print('Current second: $second');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('YouTube Player Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            // YouTube播放器
            Container(
              height: 300, // 设置播放器高度
              width: double.infinity, // 设置播放器宽度
              child: FlutterYoutubeView(
                onViewCreated: _onYoutubeCreated,
                listener: this,
                scaleMode: YoutubeScaleMode.none, // 缩放模式:fitWidth, fitHeight
                params: YoutubeParam(
                  videoId: videoId, // 视频ID
                  showUI: false, // 是否显示播放器UI
                  startSeconds: 0.0, // 开始播放的时间(秒)
                  autoPlay: false, // 是否自动播放
                ),
              ),
            ),
            SizedBox(height: 20),
            // 控制按钮
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: <Widget>[
                ElevatedButton(
                  onPressed: () {
                    controller?.play(); // 播放视频
                  },
                  child: Text('Play'),
                ),
                ElevatedButton(
                  onPressed: () {
                    controller?.pause(); // 暂停视频
                  },
                  child: Text('Pause'),
                ),
                ElevatedButton(
                  onPressed: () {
                    controller?.seekTo(10.0); // 跳转到第10秒
                  },
                  child: Text('Seek to 10s'),
                ),
              ],
            ),
          ],
        ),
      ),
    );
  }
}

3. 功能介绍

3.1 调用IFrame API

在视频播放过程中,可以调用以下方法与YouTube播放器进行交互:

  • play():开始播放视频。
  • pause():暂停视频。
  • loadOrCueVideo():加载或预加载视频。
  • seekTo():跳转到指定时间点。
  • setVolume()(仅限Android):设置音量。
  • mute():静音。
  • unMute():取消静音。
  • setPlaybackRate(rate: PlaybackRate.RATE_1)setPlaybackRate(rateValue: 1.0):设置播放速度。
3.2 回调函数

flutter_youtube_view 提供了多个回调函数,用于监听播放器的状态变化和错误信息:

  • onReady():当播放器准备就绪时调用。
  • onStateChange(String state):当播放器状态发生变化时调用(例如:播放、暂停、结束等)。
  • onError(String error):当发生错误时调用。
  • onVideoDuration(double duration):当获取到视频总时长时调用。
  • onCurrentSecond(double second):当视频播放到某一秒时调用。

4. 示例项目

示例项目中包含两个页面:

  • YoutubeCustomWidget:自定义播放器样式。
  • YoutubeDefaultWidget:默认播放器样式。

以下是 main.dart 的完整代码:

import 'package:flutter/material.dart';
import 'YoutubeCustomWidget.dart';
import 'YoutubeDefaultWidget.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: <String, WidgetBuilder>{
        '/custom': (BuildContext context) => new YoutubeCustomWidget(),
        '/non_custom': (BuildContext context) => new YoutubeDefaultWidget(),
      },
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('YouTube player')),
      body: Center(
        child: Column(children: <Widget>[
          ElevatedButton(
            onPressed: () {
              Navigator.of(context).pushNamed('/custom');
            },
            child: Text('Open customize player'),
          ),
          ElevatedButton(
            onPressed: () {
              Navigator.of(context).pushNamed('/non_custom');
            },
            child: Text('Open non customize player'),
          ),
        ]),
      ),
    );
  }
}

更多关于Flutter视频播放插件flutter_youtube_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter视频播放插件flutter_youtube_view的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用flutter_youtube_view插件在Flutter应用中嵌入和播放YouTube视频的示例代码。这个插件允许你以非官方的方式在Flutter应用中嵌入YouTube视频。不过请注意,由于YouTube的条款和服务可能会变化,使用此插件需要确保你遵守YouTube的使用政策。

首先,你需要在pubspec.yaml文件中添加flutter_youtube_view依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_youtube_view: ^0.3.2  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

接下来是一个完整的Flutter应用示例,它展示了如何使用flutter_youtube_view来播放YouTube视频:

import 'package:flutter/material.dart';
import 'package:flutter_youtube_view/flutter_youtube_view.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter YouTube View Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final String videoId = 'dQw4w9WgXcQ';  // 替换为你想要播放的YouTube视频ID

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter YouTube View Example'),
      ),
      body: Center(
        child: FlutterYoutubeView(
          apiKey: 'YOUR_YOUTUBE_API_KEY',  // 替换为你的YouTube API密钥
          videoId: videoId,
          params: YoutubePlayerParams(
            start: 10,  // 视频开始播放的时间(秒)
            autoplay: true,  // 是否自动播放
            fullscreen: false,  // 是否全屏播放
          ),
          progressColors: ProgressBarColors(
            playedColor: Colors.red,
            handleColor: Colors.blue,
          ),
          progressBar: true,  // 是否显示进度条
        ),
      ),
    );
  }
}

注意事项:

  1. YouTube API密钥

    • 你需要在Google Cloud Platform上创建一个项目,并启用YouTube Data API v3,然后创建一个API密钥。这个密钥将用于apiKey参数。
    • 请确保不要在客户端代码中硬编码API密钥,特别是在公开发布的应用中。考虑使用环境变量或安全存储服务来管理你的API密钥。
  2. 视频ID

    • 替换videoId变量中的值为你想要播放的YouTube视频的实际ID。
  3. 播放参数

    • YoutubePlayerParams类允许你自定义视频的播放行为,如开始时间、是否自动播放、是否全屏等。
  4. UI定制

    • ProgressBarColors类允许你自定义进度条的颜色。
  5. 错误处理

    • 在实际应用中,你可能需要添加错误处理逻辑来处理网络问题、API密钥无效或视频ID错误等情况。

这个示例提供了一个基本框架,你可以根据需要进行扩展和自定义。

回到顶部