fijkplayer是一款開源免費的Flutter視頻播放器,fijkplayer 使用 ijkplayer 作為播放器內(nèi)核。ijkplayer 使用 ffmpeg 進行音視頻解封裝和解碼,同時添加了 Android 和 iOS 平臺特有的硬件加速解碼能力。
安裝步驟:
新建 Flutter App 項目
終端輸入以下命令,新建一個名為 playerapp 的 Flutter App 項目。
$ flutter create -t app playerapp
命令運行結(jié)束后,F(xiàn)lutter 會給我們?nèi)缦绿崾尽?/p>
In order to run your application, type: $ cd playerapp $ flutter run Your application code is in playerapp/lib/main.dart.
連接上手機設(shè)備(或者打開 Android 模擬器),并且使用 flutter doctor 命令檢查設(shè)備是否連接成功。
$ flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, v1.7.8+hotfix.4, on Mac OS X 10.14.3 18D109, locale zh-Hans-CN) [✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3) [✓] Xcode - develop for iOS and macOS (Xcode 10.3) [✓] iOS tools - develop for iOS devices [✓] Android Studio (version 3.4) [✓] IntelliJ IDEA Ultimate Edition (version 2019.1.2) [✓] VS Code (version 1.36.1) [✓] Connected device (1 available) • No issues found!
在 flutter doctor 命令的輸出中,至少應(yīng)該含有 [✓] Connected device (1 available)
安裝 fijkplayer 依賴
進入上一步中創(chuàng)建的目錄 playerapp 中,編輯其中的文件 pubspec.yaml ,增加依賴 fijkplayer: ^0.0.7
dependencies: flutter: sdk: flutter + fijkplayer: ^0.0.7
然后在 playerapp 目錄中運行如下命令安裝依賴,等待命令成功完成。
$ flutter pub get --verbose
驗證依賴安裝
安裝完 fijkplayer 之后我們先驗證一下,確保安裝正確。
編輯 lib/main.dart 文件,在開頭加入如下行,引入 fijkplayer。
import 'package:fijkplayer/fijkplayer.dart';
然后分別編譯 ios 和 android 項目,確保 build 成功
$ flutter build apk $ flutter build ios --no-codesign
如果 build apk 時太久時間沒有輸出,可以先在 android 目錄運行 ./gradlew 檢查 gradle 環(huán)境是否正確。
播放器狀態(tài):
idle 閑置狀態(tài),剛完成構(gòu)造的 FijkPlayer 處于此狀態(tài)。
此狀態(tài)下播放器占用少量內(nèi)存,無額外線程啟動。
idle 狀態(tài)只能通過 setDataSource 轉(zhuǎn)換為 initialized 狀態(tài)
initialized 初始化完成狀態(tài),和 idle 狀態(tài)相比,僅是多了輸入媒體數(shù)據(jù)源的信息。 同樣無額外線程打開。
asyncPreparing 異步準(zhǔn)備狀態(tài),在 initialized 狀態(tài)調(diào)用 prepareAsync 到達此狀態(tài)。
這不是一個穩(wěn)定狀態(tài),此狀態(tài)等待特定任務(wù)完成后自動轉(zhuǎn)化為 prepared 狀態(tài)。
這一狀態(tài)的主要準(zhǔn)備工作是 探測媒體文件類型,打開媒體文件,打開解碼器以及新建解碼線程,新建數(shù)據(jù) read 線程,打開音頻輸出設(shè)備,新建視頻輸出線程等。
prepared asyncPreparing 完成指定任務(wù)后自動轉(zhuǎn)化為此狀態(tài)。
此狀態(tài)下已經(jīng)緩沖并解碼了一部分音視頻數(shù)據(jù),可以隨時進行播放。
started 媒體(視頻、音頻)正在播放中。
paused 媒體(視頻、音頻)播放暫停。
completed 媒體(視頻、音頻)播放完成。 可重新從頭開始播放。
stopped 播放器各種線程占用資源都已經(jīng)釋放。 音頻設(shè)備關(guān)閉。
end 播放器中所有需要手動釋放的內(nèi)存都釋放完成。
處于此狀態(tài)的播放器只能等待垃圾回收進行內(nèi)存釋放。