Expo-av的Video组件安卓运行正常但iOS端无法渲染问题求助
用户使用的expo-av Video组件代码如下:
<Video style={{ height: height / 3, width }} source={{ uri: "http://192.168.3.151:8000/videos/5YcCctaAhUpPBmUj9WmjwoVWlm2SiE8dCMjJatOw.mp4", }} useNativeControls resizeMode="contain" isLooping shouldPlay />
解决方法
配置iOS ATS安全策略例外
iOS默认禁止所有未加密的HTTP请求,你当前使用的视频URI为HTTP协议的局域网地址,会被系统直接拦截无法加载。
在Expo项目的app.json/app.config.js中添加如下配置:{ "expo": { "ios": { "infoPlist": { "NSAppTransportSecurity": { // 开发环境可临时开启允许任意HTTP请求,生产环境建议替换为HTTPS或单独配置域名例外 "NSAllowsArbitraryLoads": true } } } } }配置完成后需要重新编译开发客户端,或重新执行
expo prebuild生效。
生产环境建议关闭任意HTTP请求权限,单独为你的服务IP配置例外:"NSAppTransportSecurity": { "NSExceptionDomains": { "192.168.3.151": { "NSExceptionAllowsInsecureHTTPLoads": true, "NSIncludesSubdomains": true } } }检查视频编码格式
iOS原生播放器对视频编码的兼容性要求比安卓严格,仅支持H.264编码的MP4文件、音频轨为AAC编码,如果你的视频使用了其他编码格式,就会出现安卓可播iOS无法渲染的问题。你可以将视频转码为H.264+AAC编码的MP4格式后再测试。补充必要权限声明
部分版本的expo-av在iOS端加载带音频的视频时,需要声明麦克风权限才能正常加载,你可以在上述ios.infoPlist配置中追加权限声明:"NSMicrophoneUsageDescription": "需要访问麦克风以播放视频音频"排查资源访问问题
你可以先将视频URI替换为公开的HTTPS协议H.264编码测试视频,排除是本地局域网资源访问限制的问题。
内容的提问来源于stack exchange,提问作者Dana Allam
相关产品推荐
相关产品推荐

