You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Agora SDK开发Android视频通话应用时无法获取原始视频帧问题求助

解决Agora SDK lib-raw-data无法捕获视频帧回调的问题

我仔细看了你的代码和问题描述,视频通话功能正常但onCaptureVideoFrame和onRenderVideoFrame始终没有触发回调,核心问题是你没有将MediaDataObserverPlugin和创建的RtcEngine实例绑定,这是使用lib-raw-data插件时很容易遗漏的关键步骤。下面是具体的修复方案和排查点:

1. 修复核心问题:绑定插件与RtcEngine

你的代码里只是初始化了MediaDataObserverPlugin,但没有让它和mRtcEngine建立关联,插件无法从引擎中拿到帧数据,自然不会触发回调。

你需要修改initializeEngine方法,在创建RtcEngine后立即绑定插件:

private void initializeEngine() {
    try {
        mRtcEngine = RtcEngine.create(getBaseContext(), getString(R.string.agora_app_id), mRtcHandler);
        // 新增:将插件与RtcEngine实例绑定
        mediaDataObserverPlugin = MediaDataObserverPlugin.the();
        mediaDataObserverPlugin.setRtcEngine(mRtcEngine);
    } catch (Exception e) {
        Log.e("Agora", Log.getStackTraceString(e));
        throw new RuntimeException("Check rtc sdk init fatal error - " + Log.getStackTraceString(e));
    }
}

同时调整joinChannel方法的顺序,移除重复的插件初始化,确保先配置观察者再加入频道:

private void joinChannel() {
    String token = "<access token>";
    if (TextUtils.isEmpty(token)) {
        token = null;
    }
    mRtcEngine.setChannelProfile(Constants.CHANNEL_PROFILE_COMMUNICATION);
    
    // 先设置观察者和预处理回调,再加入频道
    mediaDataObserverPlugin.addVideoObserver(this);
    MediaPreProcessing.setCallback(mediaDataObserverPlugin);
    MediaPreProcessing.setVideoCaptureByteBuffer(mediaDataObserverPlugin.byteBufferCapture);
    
    mRtcEngine.joinChannel(token, "channel1", "", 0);
}

2. 其他需要检查的细节

  • 资源释放要彻底:在onDestroy方法中添加插件的资源释放,避免内存泄漏:
@Override
protected void onDestroy() {
    super.onDestroy();
    if (!mCallEnd) {
        leaveChannel();
    }
    // 新增:解除插件与RtcEngine的绑定
    if (mediaDataObserverPlugin != null) {
        mediaDataObserverPlugin.setRtcEngine(null);
    }
    RtcEngine.destroy();
}
  • 确保版本匹配:你的Agora SDK版本是3.3.1,要保证lib-raw-data模块的版本和SDK完全一致,版本不兼容会导致插件无法正常工作。

  • 视频配置兼容性:你的视频编码配置(640x360、15fps)是标准格式,插件默认支持YUV420帧格式,这部分无需额外调整。

3. 验证修复效果

修改完成后重新运行应用,发起视频通话后查看Logcat,如果能看到onCaptureVideoFrame called和onRenderVideoFrame called的日志,说明回调已经正常触发了。

内容的提问来源于stack exchange,提问作者Dines G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 15:54:09