flutter - 尝试在颤振的 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
解决方案
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;
});
}
}
推荐阅读
- javascript - 如何通过使用纯 JavaScript 选中复选框来显示表格?
- javascript - 子组件未定义
- c++ - C/C++ 内存模型是否允许相同字节的不同粒度的原子?
- c++ - 函数的特化。指针类型名和字符串之间的区别?
- postgresql - PostgreSQL,试图将日期列从 csv 文件复制到表的列
- reactjs - 在modal中打开一个新的modal并关闭上一个
- sqlite - 如何模拟变量、循环和串联以在 SQLite 中协同工作?
- azure - 对于 AKS 入口,letsencrypt 证书请求失败
- python - 遍历嵌套的 Dictionary 对象并获取 Python 中特定对象的值
- excel - 结合循环和 if 语句