You need to enable JavaScript to run this app.
导航
功能实现
最近更新时间:2024.07.30 18:26:45首次发布时间:2024.07.30 18:26:45

本文介绍如何使用 Flutter 点播播放器 SDK 播放视频。

前提条件

您已完成 Flutter 点播播放器 SDK 的集成。详见集成 Flutter 点播播放器 SDK

注意事项

由于模拟器下可能出现异常,建议您使用真机进行代码调试。

示例 Demo

点击此处,下载查看示例代码。

使用 SDK

引入头文件

import 'package:bdlive_vod_player/bdlive_vod_player.dart';

初始化 SDK

建议在项目的 main.dart 文件中,通过 runApp 方法初始化 SDK,以确保 SDK 正确的初始化顺序。

TTSDKConfiguration config = TTSDKConfiguration(
  appID: 'APP_ID',// 将 APP_ID 替换为在 SDK 应用创建后生成的 App ID。
  bundleID: 'BUNDLE_ID', // 将 BUNDLE_ID 替换为 iOS App 的唯一标识(Bundle Identifier)。
  appName: 'APP_NAME', // 将 APP_NAME 替换为创建 SDK 应用时填写的 App 英文名称。
  channel: 'CHANNEL_NAME', // 将 CHANNEL_NAME 替换为 App 的渠道名称,例如 App Store。
  licenseFilePath: 'VOD_LICENSE_PATH', // 将 VOD_LICENSE_PATH 替换为点播 License 文件的路径,例如 assets/vod.lic。
  appVersion: 'APP_VERSION', // 将 APP_VERSION 替换为 App 的版本号。合法版本号应包含 2 个或以上的分隔符,例如 1.3.2。
);
BdliveVodPlayer.startWithConfiguration(config);

创建播放器

// 创建 player 实例。
BdliveVodPlayer player = await BdliveVodPlayer.createPlayer();

// 在 Build 方法中创建并引用 BdliveVodPlayerView。
@override
Widget build(BuildContext context) {
  return Scaffold(
    body: Container(
      width: MediaQuery.of(context).size.width,
      height: MediaQuery.of(context).size.width * (9 / 16),
      // 创建 BdliveVodPlayerView 用于渲染视频,BdliveVodPlayerView 内部使用 NativeView 构造。
      child: BdliveVodPlayerView(onPlatformViewCreated: (int viewId) {
        //  在 NativeView 创建完成后,需要将 player 和 viewId 进行绑定。
        player.setPlayerContainerView(viewId);
      }),
    ),
  );
}

设置播放信息

通过设置 vid(视频 ID)和 vodPlayerToken(点播播放器 Token),使用指定点播播放器播放指定视频内容。您可以调用 ListActivityMediaAPI 获取视频 ID,调用 GetVodPlayerToken 获取点播播放器 Token。

Future<void> setVodPlayInfo(String vid, String vodPlayerToken);

播放控制

// 播放。
Future<void> play();

// 暂停播放,再次调用 play 可由暂停恢复到播放。
Future<void> pause();

// 停止播放。
Future<void> stop();

设置起播时间

// 设置视频开始播放的时间点。单位:秒。在调用 play 前设置,可实现从指定时间点开始播放或跳过片头等功能。
Future<void> setStartTime(double startTime);

跳转至指定时间点

// 跳转至视频的指定时间点。单位:秒。可实现拖拽进度条到指定时间开始播放的功能。
Future<bool?> seek(double playbackTime);

设置填充模式

/// 填充模式。
enum TTVideoEngineScalingMode {
  /// 按照视频宽高等比适配画面,不会变形,可能有黑边。
  aspectfit,
  /// 按照视频宽高等比填充画面,不会变形,可能有画面裁剪。
  aspectfill,
  /// 拉伸填充,视频宽高比例与画面比例不一致,可能会导致画面变形。
  fill
}

// 设置视频画面的填充模式。
Future<void> setScalingMode(TTVideoEngineScalingMode scalingMode);

循环播放

获取当前是否循环播放

Future<bool?> isLoop();

设置循环播放

Future<void> setLoop(bool loop);

倍速播放

获取播放速度

Future<double?> speed();

设置倍速播放

// 取值范围:(0,3]。默认值:1.0。
Future<void> setSpeed(double speed);

静音

获取当前是否静音

Future<bool?> isMute();

设置静音

Future<void> setMute(bool mute);

清晰度

获取支持的清晰度列表

Future<List<String>?> supportedResolutions();

获取当前清晰度

Future<String?> currentVideoResolution();

切换当前清晰度

Future<void> setCurrentVideoResolution(String currentVideoResolution);

获取播放信息

/// 播放器加载状态。
enum TTVideoEngineLoadState {
  /// 播放器加载初始状态。
  unknown,
  /// 播放器加载完成,可开始或恢复播放。
  playable,
  /// 播放器发生卡顿,正在加载数据。
  stalled,
  /// 播放器加载数据错误。
  error,
}

// 获取播放器加载状态。
Future<TTVideoEngineLoadState> loadState();

/// 播放状态。
enum TTVideoEnginePlaybackState {
  /// 播放停止。
  stopped,
  /// 播放中。
  playing,
  /// 播放暂停。
  paused,
  /// 播放错误。
  error,
}

// 获取播放状态。
Future<TTVideoEnginePlaybackState> playbackState();

// 获取视频宽度。单位:px。
Future<int?> videoWidth();

// 获取视频高度。单位:px。
Future<int?> videoHeight();

// 获取视频总时长。单位:秒。
Future<double?> duration();

// 获取当前可播放的时长,即已缓存的时长。单位:秒。
Future<double?> playableDuration();

// 获取当前播放时间。单位:秒。
Future<double?> currentPlaybackTime();

设置播放状态回调

Future<void> setDelegate(BdliveVodPlayerDelegate delegate);

播放状态回调

/// 视频播放完成回调。
/// @param error:错误信息。有值表示异常播放完成,否则为正常播放完成。
void Function(BDLiveError? error)? didFinish;
  
/// 授权结果回调。
/// @param success:授权是否成功。error:错误信息。仅在授权失败时有值。
void Function(bool success, BDLiveError? error)? onVodAuthResult;
  
/// 视频支持的清晰度变化回调。
/// @param supportedResolutions:当前视频支持的清晰度列表。defaultResolution:默认选中的清晰度。
void Function(List<String> supportedResolutions, String defaultResolution)? supportedResolutionsDidChange;
  
/// 视频大小变化回调。
/// @param videoWidth:视频宽度。单位:px。videoHeight:视频高度。单位:px。
void Function(int videoWidth, int videoHeight)? videoSizeDidChange;
  
/// 播放状态变化回调。
/// @param playbackState:当前的播放状态。详见 TTVideoEnginePlaybackState。
void Function(TTVideoEnginePlaybackState playbackState)? playbackStateDidChanged;
  
/// 播放器加载状态变化回调。
/// @param loadState:当前播放器的加载状态。详见 TTVideoEngineLoadState。   
void Function(TTVideoEngineLoadState loadState)? loadStateDidChanged;
  
/// 视频渲染开始回调。
void Function()? readyToDisPlay;
  
/// 播放器准备完成,可以播放视频回调。
void Function()? prepared;
  
/// 视频首帧渲染完成回调。
void Function()? readyToPlay;
  
/// 当前可播放时长变化回调。
/// @param playableDuration:当前可播放的时长,即已缓存的时长。单位:秒。
void Function(double playableDuration)? playableDurationDidChange;
  
/// 当前播放时间变化回调。
/// @param currentPlaybackTime:当前播放时间。单位:秒。
void Function(double currentPlaybackTime)? currentPlaybackTimeDidChange;

销毁播放器

Future<void> destroy();