pod_player

pub likes pub version popularity pub points

适用于 Flutter Web 和移动设备的视频播放器,pod player 支持播放来自 `Youtube` 和 `Vimeo` 的视频

pod player 是一个简单易用的视频播放器。其视频控件类似于 Youtube 播放器(带有可自定义的控件),还可以播放来自 YoutubeVimeo 的视频(通过提供 URL/视频 ID)。

此插件基于 Flutter 官方的 video_player 插件构建


平台 可用
Android
iOS
Web

功能

  • 播放 YouTube 视频(使用视频 URL 或 ID)
  • 播放 Vimeo 视频(使用视频 ID)
  • 播放 Vimeo 私有视频(使用视频 ID、访问令牌)
  • 类似 YouTube 的视频叠加层
  • 双击 以跳转视频。
  • 点击视频以显示/隐藏视频叠加层。
  • 自动隐藏叠加层
  • 更改 播放速度
  • 自定义叠加层
  • 自定义进度条
  • 自定义标签
  • 更改视频质量(适用于 Vimeo 和 YouTube)
  • 启用/禁用全屏播放器
  • 支持直播 YouTube 视频
  • [待办] 支持视频播放列表

Web 上的功能

  • 双击视频播放器以启用/禁用全屏

  • 静音/取消静音音量

  • 视频播放器与键盘集成

    • 空格键 播放/暂停视频
    • M 静音/取消静音视频
    • F 启用/禁用全屏
    • ESC 启用/禁用全屏
    • -> 快进视频
    • <- 快退视频
  • 双击视频(启用/禁用全屏)

演示


    pod_player






              pod_player

              用法

              安装


              Android


              iOS


              Web(生产环境中不推荐)


              使用 flutter_cors 包启用或禁用 CORS

              启用 CORS(运行此命令)

              dart pub global activate flutter_cors
              fluttercors --enable
              

              禁用 CORS(运行此命令)

              fluttercors --disable
              

              如何使用


              import 'package:pod_player/pod_player.dart';
              import 'package:flutter/material.dart';
              
              class PlayVideoFromNetwork extends StatefulWidget {
                const PlayVideoFromNetwork({Key key}) : super(key: key);
              
                @override
                State<PlayVideoFromNetwork> createState() => _PlayVideoFromNetworkState();
              }
              
              class _PlayVideoFromNetworkState extends State<PlayVideoFromNetwork> {
                final PodPlayerController controller;
              
                @override
                void initState() {
                  controller = PodPlayerController(
                    playVideoFrom: PlayVideoFrom.network(
                      'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/ForBiggerFun.mp4',
                    ),
                  )..initialise();
                  super.initState();
                }
              
                @override
                void dispose() {
                  controller.dispose();
                  super.dispose();
                }
              
                @override
                Widget build(BuildContext context) {
                  return Scaffold(
                    body: PodVideoPlayer(controller: controller),
                  );
                }
              }
              

              配置 PodPlayer

                controller = PodPlayerController(
                  playVideoFrom: PlayVideoFrom.youtube('https://youtu.be/A3ltMaM6noM'),
                  podPlayerConfig: const PodPlayerConfig(
                    autoPlay: true,
                    isLooping: false,
                    videoQualityPriority: [720, 360]
                  )
                )..initialise();

              添加缩略图

              PodVideoPlayer(
                controller: controller,
                videoThumbnail: const DecorationImage(
                  /// load from asset: AssetImage('asset_path')
                  image: NetworkImage('https://images.unsplash.com/photo-1569317002804-ab77bcf1bce4?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxzZWFyY2h8MXx8dW5zcGxhc2h8ZW58MHx8MHx8&w=1000&q=80',
                  ),
                  fit: BoxFit.cover,
                ),
              ),

              添加 PodPlayerLabels(自定义标签)

              @override
              Widget build(BuildContext context) {
                return Scaffold(
                  body: PodVideoPlayer(
                    controller: controller,
                    podPlayerLabels: const PodPlayerLabels(
                      play: "Play label customized",
                      pause: "Pause label customized",
                      ...
                    ),
                  ),
                );
              }

              如何从 YouTube 播放视频


              import 'package:pod_player/pod_player.dart';
              import 'package:flutter/material.dart';
              
              class PlayVideoFromYoutube extends StatefulWidget {
                const PlayVideoFromYoutube({Key key}) : super(key: key);
              
                @override
                State<PlayVideoFromYoutube> createState() => _PlayVideoFromYoutubeState();
              }
              
              class _PlayVideoFromYoutubeState extends State<PlayVideoFromYoutube> {
                final PodPlayerController controller;
              
                @override
                void initState() {
                  controller = PodPlayerController(
                    playVideoFrom: PlayVideoFrom.youtube('https://youtu.be/A3ltMaM6noM'),
                  )..initialise();
                  super.initState();
                }
              
                @override
                void dispose() {
                  controller.dispose();
                  super.dispose();
                }
              
                @override
                Widget build(BuildContext context) {
                  return Scaffold(
                    body: PodVideoPlayer(controller: controller),
                  );
                }
              }
              

              如何从 Vimeo 播放视频


              import 'package:pod_player/pod_player.dart';
              import 'package:flutter/material.dart';
              
              class PlayVideoFromVimeo extends StatefulWidget {
                const PlayVideoFromVimeo({Key key}) : super(key: key);
              
                @override
                State<PlayVideoFromVimeo> createState() => _PlayVideoFromVimeoState();
              }
              
              class _PlayVideoFromVimeoState extends State<PlayVideoFromVimeo> {
                final PodPlayerController controller;
              
                @override
                void initState() {
                  controller = PodPlayerController(
                    playVideoFrom: PlayVideoFrom.vimeo('518228118'),
                  )..initialise();
                  super.initState();
                }
              
                @override
                void dispose() {
                  controller.dispose();
                  super.dispose();
                }
              
                @override
                Widget build(BuildContext context) {
                  return Scaffold(
                    body: PodVideoPlayer(controller: controller),
                  );
                }
              }
              

              如何播放 Vimeo 私有视频


              import 'package:pod_player/pod_player.dart';
              import 'package:flutter/material.dart';
              
              class PlayVideoFromVimeoPrivateVideo extends StatefulWidget {
                const PlayVideoFromVimeoPrivateVideo({Key key}) : super(key: key);
              
                @override
                State<PlayVideoFromVimeoPrivateVideo> createState() =>
                        _PlayVideoFromVimeoPrivateVideoState();
              }
              
              class _PlayVideoFromVimeoPrivateVideoState 
                  extends State<PlayVideoFromVimeoPrivateVideo> {
                final PodPlayerController controller;
              
                @override
                void initState() {
                  String videoId = 'your private video id'; 
                  String token = 'your access token'; 
                  final Map<String, String> headers = <String, String>{};
                  headers['Authorization'] = 'Bearer ${token}';
              
                  controller = PodPlayerController(
                    playVideoFrom: PlayVideoFrom.vimeoPrivateVideos(
                      videoId,
                      httpHeaders: headers
                    ),
                  )..initialise();
                  super.initState();
                }
              
                @override
                void dispose() {
                  controller.dispose();
                  super.dispose();
                }
              
                @override
                Widget build(BuildContext context) {
                  return Scaffold(
                    body: PodVideoPlayer(controller: controller),
                  );
                }
              }
              

              选项