Android 进阶功能

本文介绍的是音视频通话 API 在 Android 中的进阶功能。

设置音视频通话或纯音频通话

设置纯音频通话,在 初始化 engine 时,按如下方法配置 publishConfig

publishConfig = new PublishConfig();
  • 纯音频通话

    publishConfig.videoSource = VIDEO_SOURCE_NULL;
    publishConfig.audioSource = AUDIO_SOURCE_MIC;
  • 视频通话

    publishConfig.videoSource = VIDEO_SOURCE_CAMERA;
    publishConfig.audioSource = AUDIO_SOURCE_MIC;

动态调整分辨率

在通话成功建立后,可按如下方法动态调整本端发送的分辨率:

public void updateVideoProfile( VideoProfile videoProfile, int maxBitrate )

其中:

  • videoProfile 设置为新配置的分辨率配置。

  • maxBitrate 设置为新配置的码率,0 为使用默认值。

通话质量监控

在通话成功建立后,监听以下两个回调,可以实时获取当前视频通话质量:

void onStatisticDebugInfo( StatisticInfoForDebug infoForDebug, FeedInfo feedInfo ); //获取通话过程调试信息
void onRealTimeStatisticInfo( RealTimeStatisticReport report, FeedInfo feedInfo );  //获取实时监控信息

其中 feedInfo 为对应流的信息,包括对端和本端。

网络变化监控

在通话成功建立后,监听以下回调,获取带宽信息:

void onBandwidthImportanceChangeNotify( boolean isLow, double currentBandwidth, FeedInfo feedInfo ); //带宽不足通知

带宽过低会通过 isLow 通知,如果带宽过低,可能会断开或者通话质量差。

屏幕共享

开启屏幕共享功能,按如下设置后,可实现在视频通话的同时共享屏幕。

  1. 初始化 engine 时,不能配置自动发布,但是可以配置自动订阅。即:

    rtcEngine.setAutoPublishSubscribe( autoPublish, autoSubscribe );

    其中:

    • autoPublish 必须为 false

    • autoSubscribe 无特殊限制。

  2. 初始化后,在 创建或加入房间 后,调用:

    publishConfig = new PublishConfig();
    publishConfig.videoSource = VIDEO_SOURCE_SCREEN;
    rtcEngine.publish( publishConfig );

截屏功能

在通话建立后,需要截屏,可以通过以下方法进行截屏:

public void snapshot( FeedInfo info )

其中 feedInfo 为对应截屏的流信息。

截屏结果通过以下方法进行回调:

void onSnapShotComplete( Bitmap image, FeedInfo feedInfo ); //截屏图像回调

自定义推流

开启自定义推流。

  1. 与屏幕共享相同,在 初始化 engine 时,不能配置自动发布,但是可以配置自动订阅。即:

    rtcEngine.setAutoPublishSubscribe( autoPublish, autoSubscribe );

    其中:

    • autoPublish 必须为 false

    • autoSubscribe 无特殊限制。

  2. 创建或加入房间 后,调用:

    publishConfig = new PublishConfig();
    publishConfig.videoSource = VIDEO_SOURCE_CUSTOM;
    rtcEngine.publish( publishConfig );
  3. 在发布成功之后,通过以下方法的结果不断的输入图像数据:

    public void pushCustomVideoData(byte[] bytes, int width, int height, int rotation ) //自定义推流数据,目前仅支持 nv21 格式数据

本地预览

如果需要在未进入视频通话时,提前开启预览,可以在 初始化 engine 后调用以下方法开启摄像头预览:

public void startCameraPreview()

预览的 view 可以参考 监听本端和对端的 view