首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤振:我需要干净的方式来使用youtube_explode_dart包来保存视频

颤振:我需要干净的方式来使用youtube_explode_dart包来保存视频
EN

Stack Overflow用户
提问于 2022-04-20 18:26:45
回答 1查看 138关注 0票数 0

我使用这个包:

youtube_explode_dart

我找到了一种下载视频的方法

代码语言:javascript
运行
复制
  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清单添加了所有权限。

任何人都可以帮助我:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-20 20:01:54

原因可能是您使用path_provider函数"getApplicationDocumentsDirectory()“来存储文件。通过将上述函数替换为"getExternalStorageDirectory()“,您将能够将文件存储在外部目录中,以显示在图片库中。如果这不起作用,您也可以使用这个插件:https://pub.dev/packages/gallery_saver

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71944516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档