Flutter BetterPlayer包播放本地.m3u8文件报错问题咨询
你遇到的两个报错分别对应两个核心问题:
No host specified in URI报错是因为你使用BetterPlayerDataSourceType.file类型加载本地m3u8的同时传入了网络请求用的headers,触发了BetterPlayer内部的网络请求解析逻辑,把本地文件路径当做网络URL解析自然找不到host。CoreMediaErrorDomain Code=-12865报错是因为两个原因:一是你错误将点播资源标记为了直播流;二是播放器无法正常获取m3u8指定的AES-128解密密钥。
解决步骤
- 修正数据源配置:给本地m3u8路径加上
file://协议头,同时将数据源类型改为BetterPlayerDataSourceType.network,并且把liveStream参数改为false(你的m3u8末尾有#EXT-X-ENDLIST标记,属于已结束的点播资源,不是直播流),修正后的代码如下:
var dataSource = BetterPlayerDataSource( BetterPlayerDataSourceType.network, // 给本地路径拼接file协议头 "file:///var/mobile/Containers/Data/Application/B0391873-25D4-471A-AB13-05D5FF8701F9/Documents/content.publicId/test.m3u8", subtitles: null, headers: {"cookie":"COOKIE_FOR_AWS_CLOUDFRONT_ACCESS"}, liveStream: false );
- 确认鉴权配置有效性:你配置的cookie需要同时具备解密密钥地址、ts分片地址的访问权限,否则播放器无法拉取密钥和解密视频分片,就会触发CoreMedia层面的报错。
- 可选调试方案:如果修改后仍然无法播放,可以开启BetterPlayer的日志开关,查看具体是拉取m3u8、请求密钥还是拉取分片环节出现问题:
BetterPlayerConfiguration config = BetterPlayerConfiguration( logEnabled: true, );
内容的提问来源于stack exchange,提问作者david omu
相关产品推荐
相关产品推荐

