背景
透明視頻動(dòng)畫是目前比較流行的實(shí)現(xiàn)動(dòng)畫的一種, 大廠也相繼開源自己的框架,最終我們選中騰訊vap,它支持了Android瞬内、IOS角钩、Web,為我們封裝flutter_vap提供了天然的便利烹棉,并且它提供了將幀圖片生成帶alpha通道視頻的工具阳仔,這簡直太贊了忧陪。
VAP(Video Animation Player)是企鵝電競開發(fā),用于播放酷炫動(dòng)畫的實(shí)現(xiàn)方案近范。
- 相比Webp, Apng動(dòng)圖方案嘶摊,具有高壓縮率(素材更小)、硬件解碼(解碼更快)的優(yōu)點(diǎn)
- 相比Lottie评矩,能實(shí)現(xiàn)更復(fù)雜的動(dòng)畫效果(比如粒子特效)
預(yù)覽
安裝
flutter_vap: ${last_version}
使用
- 播放本地視頻
import 'package:flutter_vap/flutter_vap.dart';
/// return: play error: {"status": "failure", "errorMsg": ""}
/// play complete: {"status": "complete"}
Future<Map<dynamic, dynamic>> _playFile(String path) async {
if (path == null) {
return null;
}
var res = await VapController.playPath(path);
if (res["status"] == "failure") {
showToast(res["errorMsg"]);
}
return res;
}
- 播放asset視頻
Future<Map<dynamic, dynamic>> _playAsset(String asset) async {
if (asset == null) {
return null;
}
var res = await VapController.playAsset(asset);
if (res["status"] == "failure") {
showToast(res["errorMsg"]);
}
return res;
}
- 停止播放
VapController.stop()
- 隊(duì)列播放
_queuePlay() async {
// 模擬多個(gè)地方同時(shí)調(diào)用播放,使得隊(duì)列執(zhí)行播放叶堆。
QueueUtil.get("vapQueue").addTask(() => VapController.playPath(downloadPathList[0]));
QueueUtil.get("vapQueue").addTask(() => VapController.playPath(downloadPathList[1]));
}
- 取消隊(duì)列播放
QueueUtil.get("vapQueue").cancelTask();