如何解决Flutter better_player:如何从本地资产文件夹播放视频
问) 有谁知道如何使用 Better_player 在本地为 iOS 和 Android 引用文件?
我找不到用他们的文档来做这件事的方法,我知道可以用内部的 Flutter VideoPlayer 插件来完成,但我想改用 Better_player。
这适用于标准视频插件:
_videoController = VideoPlayerController.asset('assets/intro.mp4');
例如在 /assets/intro.mp4
的项目根目录中加载视频我已经用 better_player 试过了,但没有找到文件:
BetterPlayerDataSource betterPlayerDataSource = BetterPlayerDataSource(
BetterPlayerDataSourceType.file,"assets/sample.mp4");
解决方法
我的例子:
videoPage.dart
import 'package:better_player/better_player.dart';
import 'package:better_player_example/utils.dart';
import 'package:flutter/material.dart';
return Scaffold(
appBar: AppBar(
title: Text("better player example"),),body: Column(
children: [
FutureBuilder<String>(
future: Utils.getFileUrl("testvideo.mp4"),builder: (BuildContext context,AsyncSnapshot<String> snapshot) {
if (snapshot.data != null) {
return BetterPlayer.file(snapshot.data!);
} else {
return const SizedBox();
}
},)
],);
utils.dart
import 'package:path_provider/path_provider.dart';
class Utils {
static Future<String> getFileUrl(String fileName) async {
final directory = await getApplicationDocumentsDirectory();
return "${directory.path}/$fileName";
}
}
,
所以首先我必须将文件复制到 ApplicationDocuments
目录
void _copyAssetToLocal() async {
try {
var content = await rootBundle.load("assets/intro.mp4");
final directory = await getApplicationDocumentsDirectory();
var file = File("${directory.path}/intro.mp4");
file.writeAsBytesSync(content.buffer.asUint8List());
_loadIntroVideo(file.path);
} catch (e) {
print("crap");
}
}
然后我可以从刚刚创建的新 fullPath
加载它。
void _loadIntroVideo(String fullPath) {
var config = BetterPlayerConfiguration(
fit: BoxFit.cover,autoPlay: true,fullScreenByDefault: false,// ...
);
BetterPlayerDataSource betterPlayerDataSource =
BetterPlayerDataSource(BetterPlayerDataSourceType.file,fullPath);
// etc
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。