react-native-video@5.1.1 Android端onProgress事件不触发问题求助
问题排查与解决方案
- 确认安卓端使用ExoPlayer内核
react-native-video v5.1.1版本默认搭载的安卓原生MediaPlayer内核对MIUI系统的适配性较差,极易出现进度回调丢失的问题。可在项目配置中切换为ExoPlayer内核:- 在
android/gradle.properties文件中添加配置exoplayerVersion=2.13.2 - 在
android/app/build.gradle的依赖项中,将react-native-video的引入替换为ExoPlayer变体:
implementation "com.brentvatne.react:react-native-video-exoplayer:5.1.1" - 在
- 调整进度回调间隔参数
组件默认的progressUpdateInterval为250ms,MIUI系统的进程调度策略会拦截高频率的非系统回调,可主动调大该参数,在Video组件上添加progressUpdateInterval={1000}即可设置为每1秒回调一次进度。 - 检查MIUI系统权限与限制
- 关闭对应App的省电优化:进入设置-电池与性能-省电优化,找到你的应用后设置为「无限制」
- 确认应用已获取媒体播放相关权限,无后台播放限制
- 验证视频源兼容性
当前使用的是代理生成的视频地址,可替换为公共可直接访问的标准MP4地址测试,如果替换后回调正常,则说明代理返回的视频流缺少必要的metadata信息,导致播放器无法计算进度。
修改后代码示例
const handleOnProgress = (data) => { console.tron.log('on Progress', data) } ... <Video source={{ uri: convertToProxyURL(additionalInformation?.sourceUrl) }} poster={additionalInformation?.thumbnailUrl} style={styles.video} posterResizeMode="cover" resizeMode="cover" controls paused={paused} // 新增回调间隔配置 progressUpdateInterval={1000} onLoad={handleOnLoad} onPlaybackRateChange={handleVideoChange} onProgress={handleOnProgress} onSeek={handleSeek} onFullscreenPlayerWillPresent={handleFullScreenMode} onError={handleOnError} />
内容的提问来源于stack exchange,提问作者Ernanni
相关产品推荐
相关产品推荐

