React Native中FFmpeg命令执行完成后uploadVideo未执行,如何触发完成回调
解决FFmpeg-kit合成后uploadVideo未执行的问题
排查方向
- 先确认FFmpeg命令是否执行成功:当前代码仅打印返回码但无错误详情,无法判断是命令失败还是逻辑问题。
- 检查
executeAsync的回调逻辑:确保正确捕获会话完成事件,覆盖所有可能的返回状态。
修正后的代码
const burnVideoAsync = async (inputVideo: string, inputImage: string, outputVideo: string) => { try { const session = await FFmpegKit.executeAsync( `-y -i ${inputVideo} -i ${inputImage} -filter_complex "[1:v]scale=50:200[ovr1];[0:v][ovr1]overlay=5:5:enable='between(t\\,0\\,50)'" -c:a copy ${outputVideo}` ); const returnCode = await session.getReturnCode(); console.log('FFmpeg执行返回码:', returnCode); // 打印完整日志,快速定位命令执行问题 const outputLogs = await session.getAllLogs(); console.log('FFmpeg输出日志:', outputLogs.map(log => log.getMessage()).join('\n')); if (ReturnCode.isSuccess(returnCode)) { console.log('视频合成成功,启动上传'); uploadVideo(outputVideo); } else if (ReturnCode.isCancel(returnCode)) { console.log('FFmpeg任务被取消'); } else { console.error('视频合成失败,错误码:', returnCode); // 可在此添加失败后的兜底处理 } } catch (error) { console.error('FFmpeg执行出现异常:', error); } };
关键调整点
- 改用
async/await语法,简化逻辑同时捕获执行过程中的异常。 - 增加完整日志输出:打印FFmpeg所有运行日志,能快速排查命令语法错误、文件路径无效等问题。
- 修正滤镜命令语法:将filter_complex内的分隔符改为分号
;,避免潜在的解析异常。 - 覆盖异常场景:捕获
executeAsync可能抛出的Promise异常,避免流程静默中断。
额外检查项
- 确认
inputVideo、inputImage、outputVideo的路径合法性(比如Android的文件权限、iOS的沙箱路径)。 - 本地验证FFmpeg命令:把生成的命令复制到电脑终端执行,排除命令本身的逻辑错误。
内容的提问来源于stack exchange,提问作者sandulasanth-7
相关产品推荐
相关产品推荐

