首页 > 解决方案 > 尝试在颤振的 youtube_extractor 中调用 group(0) 为 null

问题描述

我打算制作一个 youtube 视频和 mp3 下载应用程序,为此我尝试在颤振中使用 youtube_extractor 实现。**这是代码**

 bool _isProcessed = false;
  String _videoDownloadUrl;
  String _audioDownloadUrl;

  var extractor = YouTubeExtractor();

  TextEditingController _youtubeEditingController = TextEditingController();

  void _getDownloadLink() async {
    String youtubeUrl = _youtubeEditingController.text;
    if (youtubeUrl.isNotEmpty) {
      
      youtubeUrl =
          youtubeUrl.replaceAll("https://www.youtube.com/watch?v=", "");

      youtubeUrl = youtubeUrl.replaceAll("https://youtu.be/", "");
      print(youtubeUrl); 

      var audioUrlInfo = await extractor.getMediaStreamsAsync(youtubeUrl);

      _audioDownloadUrl = audioUrlInfo.audio.first.url; // getting the audio url
      print(_audioDownloadUrl);

      var videoUrlInfo = await extractor.getMediaStreamsAsync(youtubeUrl);

      _videoDownloadUrl = videoUrlInfo.muxed.first.url;
      print(_videoDownloadUrl);

      setState(() {
        _isProcessed = true;
      });
    }
  }

但是我遇到了一些错误

 Receiver: null
E/flutter (13883): Tried calling: group(0)
E/flutter (13883): #0      Object.noSuchMethod  (dart:core-patch/object_patch.dart:51:5))
E/flutter (13883): #1      YouTubeExtractor._getVideoPlayerContextAsync 
package:youtube_extractor/youtube_extractor.dart:228
E/flutter (13883): <asynchronous suspension>
E/flutter (13883): #2      YouTubeExtractor.getMediaStreamsAsync 
package:youtube_extractor/youtube_extractor.dart:38
E/flutter (13883): #3      _YTDownloadManagerState._getDownloadLink 
package:bollywood_beats/…/YoutubeDownloader/YTDownloadManager.dart:29 

and so on

标签: flutterdartyoutube-apiflutter-layoutflutter-dependencies

解决方案


youtube_extractor它不再更新,但我们可以找到更好的替换包。将此包替换为youtube_explode_dart,这样您就可以获得相同的结果。

我刚刚在下面更新了您的代码。

bool _isProcessed = false;
String _videoDownloadUrl;
String _audioDownloadUrl;

final extractor = YoutubeExplode();

final TextEditingController _youtubeEditingController = TextEditingController();

Future<void> _getDownloadLink() async {
  String youtubeUrl = _youtubeEditingController.text;
  if (youtubeUrl.isNotEmpty) {
    youtubeUrl = youtubeUrl.replaceAll('https://www.youtube.com/watch?v=', '');

    youtubeUrl = youtubeUrl.replaceAll('https://youtu.be/', '');
    print(youtubeUrl);

    final streamManifest = await extractor.videos.streamsClient.getManifest(youtubeUrl);

    final audioStreamInfo = streamManifest.audioOnly.withHighestBitrate();
    _audioDownloadUrl = audioStreamInfo.url.toString();
    print(_audioDownloadUrl);

    final videoStreamInfo = streamManifest.muxed.withHighestBitrate();
    _videoDownloadUrl = videoStreamInfo.url.toString();
    print(_videoDownloadUrl);

    setState(() {
      _isProcessed = true;
    });
  }
}


推荐阅读