Flutter使用youtube_explode_dart包提示streamManifest未定义如何解决
youtube_explode_dart streamManifest 未定义问题解决方法
你遇到的报错是因为官方文档的示例省略了获取streamManifest的前置逻辑,完整的使用流程如下:
完整可运行代码示例
// 1. 先导入依赖包 import 'package:youtube_explode_dart/youtube_explode_dart.dart'; void getStreamResource() async { // 2. 初始化YoutubeExplode客户端实例 final yt = YoutubeExplode(); try { // 3. 替换为实际需要解析的Youtube视频ID const targetVideoId = '替换为你的视频ID'; // 4. 请求获取流清单,这里声明的就是你缺失的streamManifest变量 final streamManifest = await yt.videos.streamsClient.getManifest(targetVideoId); // 官方示例代码补充定义后可正常运行 // 获取最高质量的混合音视频流 var muxedStreamInfo = streamManifest.muxed.withHighestVideoQuality(); // 获取最高比特率的纯音频流,适配音乐流媒体场景 var audioStreamInfo = streamManifest.audioOnly.withHighestBitrate(); // 获取最高质量的MP4纯视频流 var mp4VideoStreamList = streamManifest.videoOnly.where((e) => e.container == Container.mp4); } finally { // 调用结束后关闭客户端释放资源 yt.close(); } }
额外注意事项
- 音乐流媒体场景可直接取用
audioStreamInfo.url获取可直接播放的音频流地址,你可以将该地址对应资源上传到Firebase Storage做后续分发处理 - 官方示例存在两处可修正问题:
- 第三行示例代码语法错误,原代码开头
var streamInfo.videoOnly写法有误,需要先声明变量再调用属性 - 原代码中
Container未指定具体枚举值,需要补全为Container.mp4等实际需要的容器类型
- 第三行示例代码语法错误,原代码开头
- 所有网络请求方法均为异步操作,调用时必须加
await关键字
内容的提问来源于stack exchange,提问作者Programmerz
相关产品推荐
相关产品推荐

