自定义视频采集

更新时间: 2024/03/15 17:22:16

NERTC SDK 提供自定义视频采集功能,帮助您向 SDK 提供自定义的视频输入源数据,并由 SDK 进行编码推流。本文档为您介绍如何通过 SetExternalVideoSourcePushExternalVideoFrame 方法实现自定义视频采集功能。

功能描述

一般情况下,App 采用默认设备采集视频数据,通常是本设备的摄像头模块。但在部分场景下可能需要使用自定义的视频源,例如:

  • 由第三方美颜 SDK 负责视频数据采集和视频数据的前处理,NERTC 负责视频数据编码和云端推流。
  • 某些视频采集设备被系统独占。为避免与其它业务产生冲突,需要灵活的设备管理策略。例如,直播过程中需要录制短视频。
  • 需要使用外部视频源,即非摄像头采集的数据,例如播放本地视频文件、屏幕共享、游戏直播等。

基于以上场景,NERTC SDK 支持使用自定义的视频源,以实现您在实际业务场景中的相关需求。

注意事项

自定义视频采集场景中,您需要自行管理视频数据的采集和处理。

配置步骤

NERTC SDK 目前提供 Push 数据源的方式实现自定义的视频源。Push 方式下,SDK 会根据设置的视频 Profile 对数据源进行裁剪或缩放,来达到发送目标分辨率,同时视频的帧率由数据源自身控制。

参考如下步骤,在您的项目中通过 Push 方式实现自定义视频源功能:

  1. 调用 SetExternalVideoSource 方法,设置 enabled 参数为 true 开启外部视频源数据输入。
  2. 调用 EnableLocalVideo 方法,设置 enabled 参数为 true 开启本地视频采集。

    如果已经开启了本地视频采集,会自动切换到外部设备采集,不需要再次调用 EnableLocalVideo 方法。

  3. 指定外部采集设备后,您需要自行管理视频数据采集和处理。
  4. 完成视频数据处理后,请再调用 PushExternalVideoFrame 方法,通过 frame 参数传入外部视频帧的数据信息,将视频数据发送给 SDK 进行后续操作。

    为满足实际使用需求,您可以在将视频数据发送回 SDK 前,通过 RtcExternalVideoFrame 修改视频数据。比如,设置 rotation 为 180,使视频帧顺时针旋转 180 度。

示例代码

C++//开始外部视频数据
private void setExternalVideoSource()
{
    //开启外部视频输入
    int result = rtcEngine.SetExternalVideoSource(true);
    if (result != (int)RtcErrorCode.kNERtcNoError)
    {
        //失败
    }
    //打开视频
    rtcEngine.EnableLocalVideo(true);
}
private void pushExternalVideoFrame()
{
    IntPtr buffer = IntPtr.Zero; //视频帧指针,需要传入实际数据
    uint frameWidth = 0;//需要实际图片宽度
    uint frameHeight = 0; //需要实际图片高度
    RtcVideoRotation rotation = RtcVideoRotation.kNERtcVideoRotation0;//需要传入图像实际的旋转角度
    ulong frameTimestamp = 0;//需要传入实际视频帧时间戳
    var frame = new RtcExternalVideoFrame
    {
        format = RtcVideoType.kNERtcVideoTypeI420,//以I420为例
        buffer = buffer,
        width = frameWidth,
        height = frameHeight,
        timestamp = frameTimestamp,
        rotation = rotation
    };

    int result = rtcEngine.PushExternalVideoFrame(frame);
    if (result != (int)RtcErrorCode.kNERtcNoError)
    {
        //失败
    }
}

API 参考

方法 功能描述
SetDevice 指定特定外部视频采集设备
EnableLocalVideo 开启或关闭本地视频采集
SetExternalVideoSource 开启外部视频源数据输入
PushExternalVideoFrame 推送外部视频数据帧
此文档是否对你有帮助?
有帮助
去反馈
  • 功能描述
  • 注意事项
  • 配置步骤
  • 示例代码
  • API 参考