本文介绍如何使用 Flutter 点播播放器 SDK 播放视频。
您已完成 Flutter 点播播放器 SDK 的集成。详见集成 Flutter 点播播放器 SDK。
由于模拟器下可能出现异常,建议您使用真机进行代码调试。
点击此处,下载查看示例代码。
import 'package:bdlive_vod_player/bdlive_vod_player.dart';
建议在项目的 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();