我使用这个包:
youtube_explode_dart
我找到了一种下载视频的方法
Future<void> downloadVideo(id) async {
var permisson = await Permission.storage.request();
if (permisson.isGranted) {
//download video
if (_urlTextFieldController.text != '') {
setState(() => _downloading = true);
//download video
setState(() => progress = 0);
var _youtubeExplode = YoutubeExplode();
//get video metadata
var video = await _youtubeExplode.videos.get(id);
var manifest =
await _youtubeExplode.videos.streamsClient.getManifest(id);
var streams = manifest.muxed.withHighestBitrate();
var audio = streams;
var audioStream = _youtubeExplode.videos.streamsClient.get(audio);
//create a directory
Directory appDocDir = await getApplicationDocumentsDirectory();
String appDocPath = appDocDir.path;
var file = File('$appDocPath/${video.id}');
//delete file if exists
if (file.existsSync()) {
file.deleteSync();
}
var output = file.openWrite(mode: FileMode.writeOnlyAppend);
var size = audio.size.totalBytes;
var count = 0;
await for (final data in audioStream) {
// Keep track of the current downloaded data.
count += data.length;
// Calculate the current progress.
double val = ((count / size));
var msg = '${video.title} Downloaded to $appDocPath/${video.id}';
for (val; val == 1.0; val++) {
ScaffoldMessenger.of(context)
.showSnackBar(SnackBar(content: Text(msg)));
}
setState(() => progress = val);
// Write to file.
output.add(data);
}
} else {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(content: Text('add youtube video url first!')));
setState(() => _downloading = false);
}
} else {
await Permission.storage.request();
}
}
当该方法完成时,Scaffold发送消息,视频wad下载了,但我在图库或本地存储中找不到该视频
我使用真正的设备Android,我向Android清单添加了所有权限。
任何人都可以帮助我:
发布于 2022-04-20 20:01:54
原因可能是您使用path_provider函数"getApplicationDocumentsDirectory()“来存储文件。通过将上述函数替换为"getExternalStorageDirectory()“,您将能够将文件存储在外部目录中,以显示在图片库中。如果这不起作用,您也可以使用这个插件:https://pub.dev/packages/gallery_saver
https://stackoverflow.com/questions/71944516
复制相似问题