Flutter视频播放插件iqplayer的使用

Flutter视频播放插件iqplayer的使用

IQPlayer

简单带有字幕的视频播放器,为Flutter编写。

版本 许可证 关注者

这个包是我送给我的老师和领导 Mr. Muqtada Al-Sadr 的礼物。

基于 BLoC 高兴地构建。

截图

特性

  1. ✅ 可以从Assets、文件、网络播放视频(通过 VideoPlayerController
  2. ✅ 解析来自Assets、文件、网络的字幕(通过 SubtitleProvider 类)
  3. ✅ 使用 IQTheme 类自定义主题
  4. ✅ 支持字幕:
    • ✅ VTT格式
    • ❌ SRT格式
    • ❌ 用户自定义格式
  5. IQScreen: 一个包含视频播放器的屏幕框架
  6. IQPlayer: 一个使您可以在屏幕上观看视频的widget(目前在开发中)
  7. IQParser: 一个包含字幕视图的字幕包,包括widget和解析器
  8. IQTheme: 用于对播放器UI进行定制,使其与您的应用程序更兼容

安装

1. 添加依赖

pubspec.yaml 文件中添加依赖:

dependencies:
  iqplayer: <最新版本>

然后从命令行安装包:

flutter pub get
2. 配置权限
Android

确保在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET"/>
iOS

警告:视频播放器在iOS模拟器上不可用。必须在真实设备上进行开发和测试。

Info.plist 文件中添加以下条目:

<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

这将允许您的应用通过URL访问视频文件。

3. 导入

在Dart文件中导入:

import "package:iqplayer/iqplayer.dart";

组件

  1. IQScreen:
IQScreen(
  videoPlayerController: VideoPlayerController.network(""),
  subtitleProvider: SubtitleProvider.fromNetwork(""),
  title: "Simple Video",
  description: "Simple Description",
);
  1. IQPlayer:

目前在开发中。

  1. IQParser:

注意:它会自动与 IQScreen 一起使用,您可以使用 SubtitleProvider 显示数据。

BlocProvider<SubtitleBloc>(
  create: (context) =>
    SubtitleBloc(
      SubtitleProvider.fromNetwork(""),
    )..add(FetchSubtitles()),
  child: MyParser(),
);

注意:您可以排除 MyParser 并删除它!

注意:为什么创建 MyParser参见这里

  1. IQTheme:

注意:您可以使用此类对 IQScreenIQPlayerIQParser 进行主题定制。

您有+17种选项来定制主题!

IQScreen(
    ...
    iqTheme: IQTheme(
      ...
    ),
 );

使用

  1. 使用 IQScreenNavigator
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (BuildContext context) => IQScreen(
      title: "",
      description: "",
      videoPlayerController: VideoPlayerController.network(""),
      subtitleProvider: SubtitleProvider.fromNetwork(""),
    ),
  ),
);
  1. 使用 IQParser

您必须使用 BlocProviderSubtitleProvider 来配置字幕。

// 在您的widget中
BlocProvider<SubtitleBloc>(
  create: (context) =>
    SubtitleBloc(
      SubtitleProvider.fromNetwork(""),
    )..add(FetchSubtitles()),
  child: MyParser(),
);

// 新的parser类,您可以排除 `MyParser`
class MyParser extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return IQParser();
  }
}

注意:您可以排除 MyParser 并删除它!

注意:为什么创建 MyParser参见这里

  1. 您可以使用 IQTheme 自定义UI,例如:

您有+17种选项来定制主题!

IQTheme(
    loadingProgress: SpinKitCircle(
      color: Colors.red,
    ),
    playButtonColor: Colors.transparent,
    videoPlayedColor: Colors.indigo,
    playButton: (bool isPlay) {
      if (isPlay)
        return Icon(
          Icons.pause_circle_filled,
          color: Colors.red,
          size: 50,
        );
      return Icon(
        Icons.play_circle_outline,
        color: Colors.red,
        size: 50,
      );
    },
);

示例

import 'package:flutter/material.dart';
import 'package:flutter_spinkit/flutter_spinkit.dart';
import 'package:iqplayer/iqplayer.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'IQPlayer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: 'IQPlayer Demo'),
    );
  }
}

class MyHomePage extends StatelessWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(title),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Open IQPlayer'),
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(
                builder: (BuildContext context) => IQScreen(
                  title: title,
                  description: 'Simple video as a demo video',
                  videoPlayerController: VideoPlayerController.network(
                    'https://d11b76aq44vj33.cloudfront.net/media/720/video/5def7824adbbc.mp4',
                  ),
                  subtitleProvider: SubtitleProvider.fromNetwork(
                      'https://duoidi6ujfbv.cloudfront.net/media/0/subtitles/5675420c9d9a3.vtt'),
                  iqTheme: IQTheme(
                    loadingProgress: SpinKitCircle(
                      color: Colors.red,
                    ),
                    playButtonColor: Colors.transparent,
                    videoPlayedColor: Colors.indigo,
                    playButton: (bool isPlay) {
                      if (isPlay)
                        return Icon(
                          Icons.pause_circle_filled,
                          color: Colors.red,
                          size: 50,
                        );
                      return Icon(
                        Icons.play_circle_outline,
                        color: Colors.red,
                        size: 50,
                      );
                    },
                  ),
                ),
              ),
            );
          },
        ),
      ),
    );
  }
}

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

1 回复

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


iqplayer 是一个用于在 Flutter 应用中播放视频的插件。它基于 video_player 插件,但提供了更多的功能和自定义选项,例如自定义播放器界面、播放速度控制、亮度控制等。

以下是如何在 Flutter 项目中使用 iqplayer 的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  iqplayer: ^1.0.0  # 请检查最新版本

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

2. 导入包

在你的 Dart 文件中导入 iqplayer 包:

import 'package:iqplayer/iqplayer.dart';

3. 使用 IqPlayer 插件

IqPlayer 是一个可以直接使用的视频播放器组件。你可以在你的应用中直接使用它来播放视频。

class MyVideoPlayer extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Video Player'),
      ),
      body: Center(
        child: IqPlayer(
          controller: IqPlayerController.network(
            'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4',
          ),
          autoPlay: true,
          looping: true,
        ),
      ),
    );
  }
}

4. IqPlayerController

IqPlayerController 用于控制视频的播放、暂停、停止等操作。你可以通过 IqPlayerController.network 来加载网络视频,或者使用 IqPlayerController.file 来加载本地文件。

IqPlayerController.network(
  'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4',
)

5. 自定义播放器界面

iqplayer 提供了自定义播放器界面的功能。你可以通过 IqPlayerController 来控制视频的播放状态,并通过 IqPlayercontrols 属性来自定义播放器界面。

IqPlayer(
  controller: IqPlayerController.network(
    'https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4',
  ),
  controls: const IqMaterialControls(),
  autoPlay: true,
  looping: true,
)

6. 其他功能

iqplayer 还支持以下功能:

  • 播放速度控制:可以通过 IqPlayerControllersetPlaybackSpeed 方法来设置播放速度。
  • 亮度控制:可以通过 IqPlayerControllersetBrightness 方法来调整亮度。
  • 音量控制:可以通过 IqPlayerControllersetVolume 方法来调整音量。

7. 处理播放器事件

你可以通过 IqPlayerController 监听播放器事件,例如视频加载完成、播放完成等。

controller.addListener(() {
  if (controller.value.isPlaying) {
    // 视频正在播放
  } else {
    // 视频暂停或停止
  }
});

8. 释放资源

IqPlayerController 使用完毕后,确保调用 dispose 方法释放资源。

[@override](/user/override)
void dispose() {
  controller.dispose();
  super.dispose();
}
回到顶部