本文介紹了Flutter播放器含UI整合方案。通過接入AliPlayerWidget您可以快速使用Flutter播放器。
概述
AliPlayerWidget 是一款專為 Flutter 應用程式打造的高效能視頻播放組件,基於阿里雲播放器 SDK flutter_aliplayer 構建。它不僅支援點播(VOD)、直播、列表播放以及短劇情境等,還提供了豐富的功能集和高度靈活的 UI 定製能力,能夠滿足教育、娛樂、電商以及短劇應用等多個領域對視頻播放的需求。
環境要求
類別 | 說明 |
Flutter 版本 | 不低於2.10.0,推薦使用3.22.2。 |
JDK 版本 | 推薦使用JDK 11。 說明 JDK 11設定方法:Preferences -> Build, Execution, Deployment -> Build Tools -> Gradle -> Gradle JDK -> 選擇 11(如果沒有11,請升級你的Android Studio版本) |
Android 版本 | 支援Android 6.0以上版本,Gradle 版本不低於 7.0。 |
iOS 版本 | 支援iOS 10.0及以上版本。 |
手機晶片 | 架構要求:armeabi-v7a、arm64-v8a。 |
開發工具 |
許可權配置
網路許可權
在 Android 和 iOS 中啟用網路許可權,以便播放器能夠載入線上視頻資源。
License 配置
您已擷取音視頻終端 SDK 的播放器的 License 授權認證和 License Key,擷取的詳細步驟請參見管理License。
注意:如未正確配置 License,播放器將無法正常工作,並可能拋出License授權異常。
更多初始化配置,請參考 aliplayer_widget_example 樣本工程。
樣本 Demo
為了協助開發人員快速體驗 AliPlayerWidget 的功能,我們基於 aliplayer_widget_example 樣本工程構建了一個示範包。該示範包可以直接安裝到裝置上運行,無需額外配置開發環境。
擷取方式
使用手機掃描以下二維碼,即可快速下載並安裝示範包:

注意:二維碼連結指向最新版本的示範包,請確保您的裝置已開啟允許安裝第三方應用的許可權。
SDK 整合與下載
aliplayer_widget 已經開源並提供多種下載方式。如果您需要對組件進行自訂修改,您可以使用源碼依賴的方式,直接擷取並修改源碼。完整源碼可通過以下方式擷取:
下載說明 | 下載地址 |
Pub 源 |
說明 aliplayer_widget 推薦開發人員通過包管理工具整合 |
GitHub | |
源碼包 |
下載包的內容包括:
核心組件:
AliPlayerWidget和AliPlayerWidgetController的完整實現。樣本工程:
aliplayer_widget_example提供點播、直播、列表播放等情境的程式碼範例,協助開發人員快速整合和使用。文檔與注釋:源碼包含詳細注釋和開發指南,便於二次開發與定製。
整合方式
手動添加依賴
在您的 pubspec.yaml 檔案中添加以下依賴:
dependencies:
aliplayer_widget: ^x.y.z注意:x.y.z 表示 aliplayer_widget 的版本號碼。您可以在 Pub.dev 官方頁面中查看最新穩定版本號碼,並將其替換為實際值(例如 ^7.0.0)。
使用命令列工具
如果您更傾向於使用命令列,可以直接運行以下命令來添加依賴:
flutter pub add aliplayer_widget該命令會自動更新您的 pubspec.yaml 檔案。
無論您選擇哪種方式,完成依賴添加後,請在終端中運行以下命令以安裝依賴:
flutter pub get通過上述步驟,AliPlayerWidget 就已成功整合到您的專案中,您可以開始使用它了!
快速開始
實現視頻播放
以下是一個完整的樣本,展示如何在頁面中嵌入視頻播放器。只需幾行代碼即可完成視頻播放功能。
步驟解析
初始化
AliPlayerWidgetController在
initState方法中建立_controller執行個體。調用
configure介面使用
AliPlayerWidgetData配置視頻地址、封面圖、標題等資訊。調用
_controller.configure(data)將資料傳遞給播放器組件。
釋放資源
在
dispose方法中調用_controller.destroy(),避免記憶體流失。
更多情境支援
上述樣本展示了點播情境的基本用法。如需瞭解更複雜的情境(如直播、列表播放等),請參考 aliplayer_widget_example 樣本工程,其中包含了詳細的代碼和使用說明。
樣本工程
專案說明
aliplayer_widget_example 是基於 aliplayer_widget Flutter 庫的樣本工程,旨在協助開發人員快速上手並深入理解如何在實際專案中整合和使用 AliPlayerWidget。
通過本樣本工程,您可以詳細瞭解以下內容:
如何嵌入視頻播放器組件。
如何配置不同情境下的播放功能(如點播、直播、列表播放)。
如何利用自訂選項實現個人化的使用者體驗。
編譯與運行
命令列方式運行
複製倉庫
首先,複製
aliplayer_widget_example倉庫到本地:cd aliplayer_widget_example安裝依賴
執行以下命令以安裝專案所需的依賴:
flutter pub get編譯工程
編譯Android工程
如果您需要編譯 Android 工程,請按照以下步驟操作:
確保已安裝 Android SDK 和 Gradle。
執行以下命令產生 APK 檔案:
flutter build apk編譯完成後,APK 檔案將位於
build/app/outputs/flutter-apk/app-release.apk。
編譯iOS工程
如果您需要編譯 iOS 工程,請按照以下步驟操作:
確保已安裝 Xcode 和 CocoaPods。
初始化 CocoaPods 依賴:
cd ios && pod install && cd ..執行以下命令產生 iOS 應用程式套件(IPA 檔案):
flutter build ipa編譯完成後,IPA 檔案將位於
build/ios/ipa/Runner.ipa。
運行樣本
運行Android樣本
flutter run lib/main.dart運行iOS樣本
cd ios && pod install && cd ..//運行前先pod install flutter run lib/main.dart
IDE 方式運行
使用Android Studio
開啟專案:
啟動Android Studio。選擇
Open an Existing Project,然後導航到複製的aliplayer_widget_example目錄並開啟。安裝依賴:
在 Android Studio 中,點擊
pubspec.yaml檔案,然後點擊右上方的Pub Get按鈕以安裝依賴。配置裝置:
確保已串連 Android 真機裝置。
運行應用:
點擊工具列中的綠色運行按鈕(
Run),選擇目標裝置後即可啟動應用。
使用 VS Code
開啟專案:
啟動 VS Code。選擇
File -> Open Folder,然後導航到複製的aliplayer_widget_example目錄並開啟。安裝依賴:
開啟終端(
Ctrl + ~),運行以下命令以安裝依賴:flutter pub get配置裝置:
確保已串連 Android 或 iOS 真機裝置。使用 VS Code 的裝置選取器(左下角)選擇目標裝置。
運行應用:
按下
F5或點擊左側活動欄中的Run and Debug表徵圖,選擇Flutter配置並啟動偵錯工作階段。
使用 Xcode(僅限 iOS)
開啟專案:
導航到
ios目錄,雙擊Runner.xcworkspace檔案以在 Xcode 中開啟專案。安裝 CocoaPods 依賴:
如果尚未安裝 CocoaPods 依賴,請在終端中運行以下命令:
cd ios && pod install && cd ..配置簽名:
在 Xcode 中,選擇
Runner專案,進入Signing & Capabilities標籤頁,配置有效開發人員帳號和簽署憑證。運行應用:
點擊 Xcode 工具列中的運行按鈕(
▶️),選擇目標裝置後即可啟動應用。
樣本說明
aliplayer_widget_example 工程涵蓋了多個典型情境,展示了 AliPlayerWidget 的核心功能及其在不同情境中的實際應用。無論是基礎的點播播放頁面,還是複雜的直播播放頁面和短視頻列表播放頁面,開發人員都可以通過本樣本工程快速掌握整合和使用方法,並根據需求進行定製化開發。
點播播放頁面(LongVideoPage)
功能描述
當前頁面展示如何使用 AliPlayerWidget 實現基礎的點播視訊播放功能。
運行效果
頁面載入後自動播放指定的點播視訊,並顯示封面圖和標題。使用者可以通過控制欄進行暫停、快進、調整音量等操作。樣本如下:
@override
void initState() {
super.initState();
_controller = AliPlayerWidgetController(context);
final data = AliPlayerWidgetData(
videoUrl: "https://example.com/sample-video.mp4",
coverUrl: "https://example.com/sample-cover.jpg",
videoTitle: "Sample Video Title",
);
_controller.configure(data);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: AliPlayerWidget(_controller),
);
}直播播放頁面(LivePage)
功能描述
當前頁面展示如何配置 AliPlayerWidget 以支援即時直播流媒體播放。
運行效果
頁面載入後即時播放直播流,支援低延遲播放。使用者可以在聊天視窗中查看訊息並發送自己的評論。樣本如下:
@override
void initState() {
super.initState();
_controller = AliPlayerWidgetController(context);
final data = AliPlayerWidgetData(
videoUrl: "https://example.com/live-stream.m3u8",
sceneType: SceneType.live,
);
_controller.configure(data);
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Column(
children: [
Expanded(child: AliPlayerWidget(_controller)),
_buildChatArea(),
_buildMessageInput(),
],
),
);
}短視頻列表操作用法請參見整合微短劇方案-Flutter。
核心組件
AliPlayerWidget
AliPlayerWidget 是核心的播放器組件,用於嵌入到 Flutter 應用中並播放視頻。
建構函式
AliPlayerWidget(
AliPlayerWidgetController controller, {
Key? key,
List<Widget> overlays = const [],
});名稱 | 說明 |
controller | 播放器控制器,用於管理播放邏輯。 |
overlays | 可選的浮層組件列表,用於在播放器組件上疊加自訂 UI。 |
樣本如下
AliPlayerWidgetController
AliPlayerWidgetController 是播放器組件的核心控制器,用於管理播放器組件的初始化、播放、銷毀等邏輯。
方法說明
名稱 | 說明 |
configure(AliPlayerWidgetData data) | 配置資料來源。 |
play() | 開始播放視頻。 |
pause() | 暫停播放。 |
seek(Duration position) | 跳轉到指定播放位置。 |
setUrl(String url) | 設定視頻播放地址。 |
destroy() | 銷毀播放器執行個體,釋放資源。 |
樣本如下
// 初始化播放器組件控制器
final controller = AliPlayerWidgetController(context);
// 設定播放器組件資料
AliPlayerWidgetData data = AliPlayerWidgetData(
videoUrl: "https://example.com/video.mp4",
);
controller.configure(data);
// 銷毀播放器
controller.destroy();AliPlayerWidgetData
AliPlayerWidgetData 是播放器組件所需的資料模型,包含視頻地址、封面圖、標題等資訊。
屬性說明
名稱 | 說明 |
videoUrl | 視頻播放地址(必填)。 |
coverUrl | 封面圖地址(可選)。 |
videoTitle | 視頻標題(可選)。 |
thumbnailUrl | 縮圖地址(可選)。 |
sceneType | 播放情境類型,預設為點播( |
樣本如下
AliPlayerWidgetData(
videoUrl: "https://example.com/video.mp4",
coverUrl: "https://example.com/cover.jpg",
videoTitle: "Sample Video",
sceneType: SceneType.vod,
);SceneType屬性
枚舉值 | 說明 |
vod | 點播情境,適用於常規視頻播放,支援所有播放控制功能。 |
live | 直播情境,適用於即時直播流播放,不支援進度拖拽、快進/快退、倍速播放等時間軸相關操作。 |
listPlayer | 列表播放情境,適用於視頻列表中的播放器,如資訊流、短視頻列表等。不支援垂直手勢(音量/亮度調節)。 |
restricted | 受限播放情境,適用於教育培訓、考試監控等需要限制播放控制的情境,不支援進度拖拽、快進/快退、倍速播放等時間軸相關操作。 |
minimal | 最小化播放情境,適用於裝飾性視頻、嵌入式播放器、自訂UI覆蓋等。僅展示純淨視頻畫面,隱藏所有UI元素(包括封面、字幕、控制介面等),支援完全自訂UI需求。 |
樣本如下:
_controller = AliPlayerWidgetController(context);
// 設定播放器組件資料
final data = AliPlayerWidgetData(
sceneType: SceneType.vod
);
_controller.configure(data);自訂功能
浮層組件
通過 overlays 參數,您可以輕鬆地在播放器上疊加自訂 UI 組件。例如,添加點贊、評論、分享按鈕等。
AliPlayerWidget(
_controller,
overlays: [
Positioned(
right: 16,
bottom: 80,
child: Column(
children: [
IconButton(icon: Icon(Icons.favorite), onPressed: () {}),
IconButton(icon: Icon(Icons.comment), onPressed: () {}),
IconButton(icon: Icon(Icons.share), onPressed: () {}),
],
),
),
],
);常用介面
AliPlayerWidget 提供了一系列對外介面,方便開發人員直接控制播放器的行為。這些介面通過 AliPlayerWidgetController 暴露,支援播放控制、狀態查詢、資料更新等功能。以下是一些常用的對外介面及其使用情境:
配置與初始化
名稱 | 功能描述 |
configure | 配置播放器資料來源並初始化播放器。 |
prepare | 準備播放器(手動調用準備流程)。 |
播放控制
名稱 | 功能描述 |
play | 開始播放視頻。 |
pause | 暫停播放。 |
stop | 停止播放並重設播放器。 |
seek | 跳轉到指定的播放位置。 |
togglePlayState | 切換播放狀態(播放/暫停)。 |
replay | 重新播放視頻(通常用於播放完成後重新開始)。 |
播放屬性設定
名稱 | 功能描述 |
setSpeed | 設定播放速度。 |
setVolume | 設定音量。 |
setVolumeWithDelta | 根據增量調整音量。 |
setBrightness | 設定螢幕亮度。 |
setBrightnessWithDelta | 根據增量調整螢幕亮度。 |
setLoop | 設定是否迴圈播放。 |
setMute | 設定是否靜音。 |
setMirrorMode | 設定鏡像模式(如水平鏡像、垂直鏡像等)。 |
setRotateMode | 設定旋轉角度(如 90°、180° 等)。 |
setScaleMode | 設定渲染填充模式(如展開、裁剪等)。 |
selectTrack | 切換播放清晰度。 |
其它設定
名稱 | 功能描述 |
requestThumbnailBitmap | 請求指定時間點的縮圖。 |
clearCaches | 清除播放器緩衝(包括視頻緩衝和圖片緩衝)。 |
getWidgetVersion | 擷取當前 Flutter Widget 的版本號碼。 |
進階功能
插槽(Slot)系統
概述AliPlayerWidget提供靈活的插槽系統,支援對播放器介面進行細粒度定製。開發人員可自由組合或替換各UI組件,實現品牌化、情境化或極簡風格的播放體驗。
插槽類型
內建以下核心互動地區插槽:
類型 | 功能 | 預設顯示 |
playerSurface | 播放器視圖插槽,視頻內容渲染(不建議自訂)。 | 是 |
topBar | 頂部欄插槽(含返回按鈕/標題/設定按鈕)。 | 是 |
bottomBar | 底部欄插槽(含播放控制/進度條/全屏按鈕)。 | 是 |
playControl | 播放控制插槽,手勢控制地區。 | 是 |
coverImage | 封面圖插槽,視頻載入前顯示封面圖。 | 是(有條件) |
playState | 播放狀態插槽(如錯誤資訊)。 | 是(有條件) |
centerDisplay | 中心顯示插槽,手勢操作時顯示音量、亮度等。 | 是(有條件) |
seekThumbnail | seek縮圖插槽,進度條拖動時預覽縮圖。 | 是(有條件) |
subtitle | 字幕插槽,視頻字幕顯示。 | 是(有條件) |
settingMenu | 設定菜單插槽,播放器設定選項。 | 是(minimal情境除外) |
overlays | 浮層插槽,用於添加自訂浮層。 | 否 |
請勿修改
playerSurface插槽(播放器視圖),其負責視頻渲染核心功能,修改可能導致播放異常。有條件指僅在特定狀態或配置下生效。
使用預設介面
不配置插槽構建器時,預設載入完整UI,適用於標準播放情境。
Widget _buildPlayWidget() {
return AliPlayerWidget(_controller);
}自訂部分插槽
按需覆蓋指定組件,其餘保持預設,可以減少維護成本。
AliPlayerWidget(
controller,
slotBuilders: {
SlotType.topBar: (context) => MyAppTopBar(title: '我的視訊'),
SlotType.bottomBar: (context) => MyCustomControls(),
},
)完全自訂插槽
AliPlayerWidget(
controller,
slotBuilders: {
SlotType.topBar: (context) => CustomTop(),
SlotType.bottomBar: (context) => CustomBottom(),
SlotType.playControl: (context) => GestureHandler(),
SlotType.coverImage: (context) => BrandCover(),
SlotType.playState: (context) => ErrorOverlay(),
SlotType.centerDisplay: (context) => VolumeIndicator(),
SlotType.seekThumbnail: (context) => PreviewThumb(),
SlotType.subtitle: (context) => SubtitleView(),
SlotType.settingMenu: (context) => MySettings(),
SlotType.overlays: (context) => [AdBanner(), Watermark()],
},
)隱藏特定插槽
將插槽值置為null即可隱藏對應地區。
AliPlayerWidget(
controller,
slotBuilders: {
SlotType.topBar: null, // 隱藏頂部欄
SlotType.settingMenu: null, // 隱藏設定菜單
SlotType.centerDisplay: null, // 禁用手勢反饋提示
},
)完整樣本如下:
// Hide top and bottom bars for a clean look
// 隱藏頂部和底部欄,使介面更簡潔
AliPlayerWidget(controller, slotBuilders: {
SlotType.topBar: null,
SlotType.bottomBar: null,
});
// Add custom business overlay
// 添加自訂商業疊加層
AliPlayerWidget(controller, slotBuilders: {
SlotType.overlays: (context) => MyLikeShareButtons(),
});
// Fully branded UI
// 完全品牌化的使用者介面
AliPlayerWidget(controller, slotBuilders: {
SlotType.topBar: (context) => MyAppTopBar(),
SlotType.bottomBar: (context) => MyAppBottomBar(),
SlotType.settingMenu: null, // hide settings
});事件通知
AliPlayerWidgetController 提供了一系列 ValueNotifier,用於即時通知播放器的狀態變化和使用者操作。以下是一些常用的 notifier 及其用途:
常用 Notifier 概覽
播放狀態管理
名稱 | 功能描述 |
playStateNotifier | 用於監聽播放狀態的變化(如播放、暫停、停止等)。 |
playErrorNotifier | 監聽播放過程中發生的錯誤資訊,提供錯誤碼和錯誤描述。 |
播放進度管理
名稱 | 功能描述 |
currentPositionNotifier | 即時更新當前播放進度(單位:毫秒)。 |
bufferedPositionNotifier | 跟蹤視頻的緩衝進度,協助使用者瞭解已緩衝的內容約制。 |
totalDurationNotifier | 提供視頻的總時間長度資訊,便於計算播放進度百分比或顯示總時間長度。 |
音量與亮度控制
Notifier | 功能描述 |
volumeNotifier | 監聽音量變化,支援動態調整音量大小(範圍通常為 0.0 到 1.0)。 |
brightnessNotifier | 監聽螢幕亮度變化,允許使用者根據環境光線調整亮度(範圍通常為 0.0 到 1.0)。 |
清晰度與縮圖
Notifier | 功能描述 |
currentTrackInfoNotifier | 跟蹤當前視頻清晰度資訊的變化(如標清、高清、超清等),並提供切換後的清晰度詳情。 |
thumbnailNotifier | 監聽縮圖載入狀態,確保在拖動進度條時能夠即時顯示對應的縮圖預覽。 |
視頻下載與截圖
Notifier | 功能描述 |
snapFileStateNotifier | 跟蹤當前截圖路徑狀態,在 |
downloadStateNotifier | 跟蹤視頻下載狀態,僅支援vidAuth/vidSts類型資料,判斷視頻是否下載成功。 |
使用方法
通過 ValueListenableBuilder 監聽 notifier 的變化,可以即時更新 UI 或執行邏輯。樣本如下:
// 監聽播放錯誤
ValueListenableBuilder<Map<int?, String?>?>(
valueListenable: _controller.playErrorNotifier,
builder: (context, error, _) {
if (error != null) {
final errorCode = error.keys.firstOrNull;
final errorMsg = error.values.firstOrNull;
return Text("播放錯誤: [$errorCode] $errorMsg");
}
return SizedBox.shrink();
},
);功能特性
多情境適配
支援點播、直播、列表播放及全屏播放等多種情境。
豐富的功能集
基礎功能:提供播放控制、設定面板、封面圖顯示、清晰度切換等核心功能,滿足常規視頻播放需求。
手勢控制:支援亮度、音量和播放進度的手勢調節,操作直觀便捷,提升使用者體驗。
靈活的 UI 定製
浮層支援:支援自訂浮層組件,擴充性強,允許開發人員實現如廣告、彈幕等複雜功能。
模組化設計:內建頂部欄、底部欄、設定面板等可複用的 UI 組件,方便開發人員按需定製。
全屏適配:自動適配橫豎屏切換,確保在不同裝置上的最佳顯示效果。
事件與狀態管理
即時狀態監控:提供播放狀態、視頻尺寸、緩衝進度等即時資料更新,便於開發人員實現動態互動。
事件回調機制:提供全面的播放器事件監聽,包括播放開始、暫停、完成等狀態管理,方便開發人員處理各種播放情境。
日誌與調試支援:內建詳細的日誌系統,便於問題排查和效能最佳化。
核心優勢
通過簡單的 API 呼叫,開發人員可以快速整合高品質的視頻播放功能,顯著降低開發成本。無論是基礎的播放控制,還是複雜的互動情境(如手勢調節、浮層疊加),AliPlayerWidget 都能輕鬆應對,協助開發人員構建流暢且高效的使用者體驗。
簡單易用
通過簡單的 API 呼叫即可實現複雜的視頻播放功能,快速整合到 Flutter 專案中。
靈活可擴充
模組化設計,支援多種自訂選項,方便開發人員根據需求進行定製。
自動適配不同螢幕尺寸和解析度,確保一致的使用者體驗。
高效能與穩定性
基於阿里雲播放器 SDK,提供低延遲、高穩定性的視頻播放體驗。
最佳化的架構設計,通過輕量化組件、非同步載入和事件驅動模型,確保高效運行與流暢使用者體驗。
跨平台支援
充分利用 Flutter 的跨平台特性,支援 Android 和 iOS 平台,一次開發即可實現雙端運行。
注意事項
資源釋放
在頁面銷毀時,請務必調用 AliPlayerWidgetController.destroy() 方法以釋放播放器資源。
網路許可權
確保應用已配置必要的網路許可權,以便載入線上視頻。
縮圖支援
如果需要使用縮圖功能,請確保提供了有效縮圖地址。
調試與最佳化
建議在開發過程中開啟日誌功能,便於排查問題。同時,注意最佳化浮層組件的效能,避免影響播放流暢性。
常見問題
更多關於使用阿里雲播放器 SDK 的常見問題及修複建議,請參見播放器常見問題匯總。