Flutter视频播放插件bestplayer的使用

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

Flutter视频播放插件bestplayer的使用

最佳实践

bestplayer 是一个用于在 Flutter 应用中实现视频播放功能的插件。它支持多种视频格式,并且可以集成广告功能。


获取开始

这个项目是一个插件包的起点,适用于 Android 和/或 iOS 平台的原生代码实现。

如果你对 Flutter 开发还不熟悉,可以参考以下资源:


示例代码

以下是一个完整的示例代码,展示了如何使用 bestplayer 插件来播放视频并处理广告。

示例代码

import 'package:bestplayer/bestplayer-adschedule.model.dart';
import 'package:bestplayer/bestplayer-vod.model.dart';
import 'package:bestplayer/bestplayer_controller.dart';
import 'package:bestplayer/bestplayer_event_type.dart';
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:bestplayer/bestplayer.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final controller = BestplayerController.instance;

  final iosLicense = "YOUR_IOS_LICENSE_KEY_HERE"; // 替换为你的 iOS 许可证密钥
  final androidLicense = "YOUR_ANDROID_LICENSE_KEY_HERE"; // 替换为你的 Android 许可证密钥

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlayer();
  }

  void listener(event) {
    // 处理事件
    switch (event.type) {
      case BestPlayerEventType.ready:
        {
          setState(() {}); // 更新界面状态
          break;
        }
      case BestPlayerEventType.progress:
        {
          setState(() {}); // 更新界面状态
          break;
        }
      case BestPlayerEventType.play:
        {
          setState(() {}); // 更新界面状态
          break;
        }
      case BestPlayerEventType.pause:
        {
          setState(() {}); // 更新界面状态
          break;
        }
      case BestPlayerEventType.finish:
        {
          break;
        }
      case BestPlayerEventType.adPlay:
        {
          setState(() {}); // 更新界面状态
          break;
        }
      case BestPlayerEventType.adComplete:
        {
          setState(() {}); // 更新界面状态
          break;
        }
      case BestPlayerEventType.error:
        {
          break;
        }
    }
  }

  Future<void> initPlayer() async {
    Timer(const Duration(seconds: 5), () {
      // 创建 VOD 模型
      final vod = BestplayerVodModel(
        file: "https://cdn.jwplayer.com/manifests/NjhRveIM.m3u8", // 视频文件 URL
        title: "TCN Top20 Countdown Ep 509", // 视频标题
        mediaId: "NjhRveIM", // 媒体 ID
      );

      // 创建广告计划模型
      final adSchedule = BestPlayerAdScheduleModel(
        tag:
            "https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_ad_samples&amp;sz=640x480&amp;cust_params=sample_ct%3Dlinear&amp;ciu_szs=300x250%2C728x90&amp;gdfp_req=1&amp;output=vast&amp;unviewed_position_start=1&amp;env=vp&amp;impl=s&amp;correlator=", // 广告标签
        offset: "pre", // 广告位置(预播)
      );

      // 设置广告配置
      vod.setAdvertisementConfig([adSchedule]);

      // 配置数据源
      controller.setupDataSource(vod);

      // 添加监听器
      controller.addListener(listener);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: Colors.black, // 背景色设置为黑色
        body: Center(
          child: Column(
            children: [
              Expanded(
                child: Stack(
                  children: [
                    Align(
                      alignment: Alignment.topLeft,
                      child: SizedBox(
                        width: 500,
                        height: 300,
                        child: BestPlayer(
                          androidLicense: androidLicense, // Android 许可证密钥
                          iosLicense: iosLicense, // iOS 许可证密钥
                        ),
                      ),
                    ),
                    Align(
                      alignment: Alignment.bottomLeft,
                      child: Container(
                        width: 500,
                        height: 200,
                        color: Colors.white,
                        child: Column(
                          children: [
                            Text("DURATION: ${controller.duration.inSeconds}"), // 视频总时长
                            Text("POSITION: ${controller.position.inSeconds}"), // 当前播放位置
                            Text("PLAYING: ${controller.isPlaying ? "TRUE" : "FALSE"}"), // 是否正在播放
                            Text("READY: ${controller.isReady ? "TRUE" : "FALSE"}"), // 是否准备就绪
                            Text("AD PLAYING: ${controller.isAdPlaying ? "TRUE" : "FALSE"}"), // 是否正在播放广告
                          ],
                        ),
                      ),
                    )
                  ],
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


bestplayer 是一个功能强大的 Flutter 视频播放插件,支持多种视频格式和流媒体协议。它基于 exoplayerijkplayer,提供了丰富的功能和灵活的配置选项。以下是如何在 Flutter 项目中使用 bestplayer 插件的详细步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 bestplayer 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  bestplayer: ^0.0.1  # 请检查最新版本

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

2. 导入插件

在需要使用 bestplayer 的 Dart 文件中导入插件:

import 'package:bestplayer/bestplayer.dart';

3. 创建播放器实例

创建一个 BestPlayerController 实例来控制视频播放:

BestPlayerController _controller = BestPlayerController(
  BestPlayerConfiguration(
    autoPlay: true,
    looping: false,
    aspectRatio: 16 / 9,
    allowedScreenSleep: false,
    fullScreenByDefault: false,
    deviceOrientationsAfterFullScreen: [DeviceOrientation.portraitUp],
    controlsConfiguration: BestPlayerControlsConfiguration(
      showControls: true,
      enableFullscreen: true,
      enableSkips: true,
      enablePlayPause: true,
      enableMute: true,
      enableProgressBar: true,
      enableProgressBarDrag: true,
      enableSubtitles: true,
      enableQualities: true,
      enablePlaybackSpeed: true,
    ),
  ),
);

4. 设置视频源

设置要播放的视频源。你可以播放本地文件、网络视频或流媒体:

_controller.setDataSource(
  BestPlayerDataSource(
    BestPlayerDataSourceType.network,
    "https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4",
  ),
);

5. 显示播放器

使用 BestPlayer 小部件来显示视频播放器:

[@override](/user/override)
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: Text('BestPlayer Example'),
    ),
    body: Center(
      child: BestPlayer(
        controller: _controller,
      ),
    ),
  );
}

6. 控制播放器

你可以通过 BestPlayerController 来控制视频的播放、暂停、停止等操作:

_controller.play();
_controller.pause();
_controller.stop();
_controller.seekTo(Duration(seconds: 10));

7. 释放资源

在页面销毁时,记得释放播放器资源以避免内存泄漏:

[@override](/user/override)
void dispose() {
  _controller.dispose();
  super.dispose();
}

8. 其他功能

bestplayer 还支持字幕、播放速度调整、全屏播放等功能。你可以通过 BestPlayerControllerBestPlayerControlsConfiguration 来配置这些功能。

示例代码

以下是一个完整的示例代码:

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

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

class _VideoPlayerScreenState extends State<VideoPlayerScreen> {
  BestPlayerController _controller;

  [@override](/user/override)
  void initState() {
    super.initState();
    _controller = BestPlayerController(
      BestPlayerConfiguration(
        autoPlay: true,
        looping: false,
        aspectRatio: 16 / 9,
        allowedScreenSleep: false,
        fullScreenByDefault: false,
        deviceOrientationsAfterFullScreen: [DeviceOrientation.portraitUp],
        controlsConfiguration: BestPlayerControlsConfiguration(
          showControls: true,
          enableFullscreen: true,
          enableSkips: true,
          enablePlayPause: true,
          enableMute: true,
          enableProgressBar: true,
          enableProgressBarDrag: true,
          enableSubtitles: true,
          enableQualities: true,
          enablePlaybackSpeed: true,
        ),
      ),
    );

    _controller.setDataSource(
      BestPlayerDataSource(
        BestPlayerDataSourceType.network,
        "https://www.sample-videos.com/video123/mp4/720/big_buck_bunny_720p_1mb.mp4",
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('BestPlayer Example'),
      ),
      body: Center(
        child: BestPlayer(
          controller: _controller,
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    _controller.dispose();
    super.dispose();
  }
}

void main() => runApp(MaterialApp(
  home: VideoPlayerScreen(),
));
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!