实时音视频云

  • 异步回调

    最近更新时间:2018-09-28 11:31:01

    1、房间回调接口 QNRTCRoom::QNRTCRoomListener

    主要是房间管理和通知的异步回调,由 QNRTCRoom::SetRoomListener 进行配置。

    此接口非线程安全的,正确调用时机为在 JoinRoom 之前和 LeaveRoom 之后,中间不要修改。

    1.1、用户加入房间的回调

    // JoinRoom 加入房间的异步操作结果通知
    // @param error_code_ 为执行结果,为 0 表示加入房间成功,其它请参考错误码列表
    // @param error_str_ 为加入房间失败时,对失败原因的描述,成功时为空字符串
    // @param suer_date_vec_ 当加入房间成功时,在此房间内已有的用户信息列表
    virtual void OnJoinResult(int error_code_, const std::string& error_str_,
                    const UserDataInfoVec& user_data_vec_) = 0;
    

    用户信息 UserDataInfo 的定义:

    typedef struct _TUserDataInfo
    {
        std::string user_id;                    // 房间内用户 ID
        bool        audio_published = false;    // 音频是否已发布
        bool        video_published = false;    // 视频是否已发布
        bool        audio_mute      = false;    // 是否静默了音频
        bool        video_mute      = false;    // 是否静默了视频
    }UserDataInfo;
    
    typedef std::vector<UserDataInfo>   UserDataInfoVec;
    

    1.2、房间状态变化的回调

    // 房间网络状态变化通知
    // @brief 网络断开时,SDK 内部会自动进行重连,每次重连时,会通过此接口回调通知 rs_reconnecting 状态
    // @param status_ 房间当前的网络状态
    virtual void OnStateChanged(RoomState status_) = 0;
    

    房间状态 RoomState 定义:

    enum RoomState
    {
        rs_idle,            // 空闲状态,未连接
        rs_connecting,      // 连接中
        rs_connected,       // 已连接
        rs_reconnecting,    // 连接断开,并在自动重连中
    };
    

    1.3、发布本地音视频回调

    // @param error_code_ Publish 方法执行结果,0 为成功,其它请参考错误码列表
    // @param error_str_ error_code_ 非 0 时,用于错误描述字符串
    virtual void OnLocalPublishResult(int error_code_, const std::string& error_str_) = 0;
    

    1.4、远端用户加入/离开房间的回调

    • 远端用户加入房间的回调
    // @param user_id_ 远端用户在此房间内的唯一标识
    // @param user_data_ 用户自定义数据字符串,暂为空
    virtual void OnRemoteUserJoin(const std::string& user_id_, const std::string& user_data_) = 0;
    
    • 远端用户离开房间的回调
    // @param user_id_ 远端用户在此房间内的唯一标识
    // @param error_code_ 用户离开房间的原因,0 为主动离开,其它请参考错误码列表,一般为被踢出房间,即 Err_Kickout_Of_Room : 10006
    virtual void OnRemoteUserLeave(const std::string& user_id_, int error_code_) = 0;
    

    1.5、远端用户发布/取消发布音视频的回调

    • 远端用户发布音视频的回调
    // @param user_id_ 远端用户在此房间内的唯一标识
    // @param enable_audio_ 此用户是否发布了音频
    // @param enable_video_ 此用户是否发布了视频
    virtual void OnRemotePublish(const std::string& user_id_, bool enable_audio_, bool enable_video_) = 0;
    
    • 远端用户取消发布音视频的回调
    virtual void OnRemoteUnPublish(const std::string& user_id_) = 0;
    

    1.6、订阅远端用户的回调

    • 订阅远端用户的回调
    // Subscribe 方法执行结果
    // @param user_id_ 远端用户在此房间内的唯一标识
    // @param error_code_ 0 为成功,其它请参考错误码列表
    // @param error_str_ error_code_ 非 0 时,用于错误描述字符串
    virtual void OnSubscribeResult(const std::string& user_id_, int error_code_, const std::string& error_str_) = 0;
    

    1.7、远端用户音/视频 Mute 状态的回调

    • 远端用户静默(或取消静默)了其音、视频流
    // @param user_id_ 远端用户在此房间内的唯一标识
    // @param mute_audio_ 用户是否静默了音频
    // @param mute_video_ 用户是否静默了视频
    virtual void OnRemoteStreamMute(const std::string& user_id_, const bool mute_audio_, bool mute_video_) = 0;
    

    1.8、踢人回调

    本地调用 KickoutUser 方法的执行结果通知,此操作需要 admin 权限

    // KickoutUser 方法执行结果
    // @param user_id_ 远端用户在此房间内的唯一标识
    // @param error_code_ 0 为成功,其它请参考错误码列表
    // @param error_str_ error_code_ 非 0 时,用于错误描述字符串
    virtual void OnKickoutResultconst std::string& user_id_,
                    int error_code_, const std::string& error_str_) = 0;
    

    1.9、SDK 运行过程中的错误回调

    SDK 运行过程中发生错误会通过该方法回调,具体错误码的定义可以参阅 qn_rtc_errorcode.h 文件

    // @param error_code_ 错误码
    // @param error_str_ error_code_ 非 0 时,用于错误描述字符串
    virtual void OnError(int error_code_, const std::string& error_str_) = 0;
    

    所有错误码可参考:错误码列表

    1.10、统计信息的回调

    // 通话质量统计信息回调,可通过 EnableStatisticCallback 进行设置
    virtual void OnStatisticsUpdated(const StatisticsReport& statistics_) = 0;
    

    设置统计信息回调时间间隔的方法

    virtual void EnableStatisticCallback(int period_second_ = 5) = 0;
    

    2、视频回调接口 QNRTCVideo::QNRTCVideoListener

    2.1、视频 YUV 数据回调

    // 订阅远端用户后的视频数据回调接口
    // @param raw_data_ 指向 YUV 数据的内存地址
    // @param data_len_ raw_data_ 数据长度,单位:Byte
    // @param video_type_ 导出的数据格式,一般为 kI420,即:YUV420P
    // @param user_id_ 数据所属用户 ID
    virtual void OnVideoFrame(
        const unsigned char* raw_data_, 
        int data_len_, 
        qiniu::VideoCaptureType video_type_, 
        const std::string& user_id_
    ) = 0;
    
    // 本地预览时的数据回调接口
    // @param raw_data_ 指向 YUV 数据的内存地址
    // @param data_len_ raw_data_ 数据长度,单位:Byte
    // @param width_ 宽度
    // @param height_ 高度
    // @param video_type_ 视频格式,一般为 kI420,即:YUV420P
    virtual void OnVideoFramePreview(
            const unsigned char* raw_data_,
            int data_len_,
            int width_,
            int height_,
            qiniu::VideoCaptureType video_type_
    ) {};
    

    本地预览、发布,订阅远端用户视频流的原始视频流数据的回调,一般为 YUV420P 格式;

    2.2、视频设备插拔状态的回调

    virtual void OnVideoDeviceStateChanged(VideoDeviceState device_state_, const std::string& device_name_) = 0;
    

    视频设备仅监控当前已打开的设备;如果在用户正在预览、发布的过程中,插拔了此设备,则必须重新开启预览、发布,才能恢复正常的工作。

    3、音频回调接口 QNRTCAudio::QNRTCAudioListener

    3.1、连麦音频 PCM 数据回调

    // @param audio_data_ 音频 PCM 数据
    // @param bits_per_sample_ 采样位深
    // @param sample_rate_ 采样率
    // @param number_of_channels_ 声道数
    // @param number_of_frames_ 采样点数
    // @param user_id_ 数据所属用户 ID
    virtual void OnAudioPCMFrame(const void* audio_data_, int bits_per_sample_,
                    int sample_rate_, size_t number_of_channels_, 
                    size_t number_of_frames_, const std::string& user_id_) = 0;
    

    3.2、音频设备状态变化的回调

    // @param device_state_ 音频设备状态
    // @param device_guid_ 设备唯一标识:GUID
    virtual void OnAudioDeviceStateChanged(
                    AudioDeviceState device_state_, const std::string& device_guid_) = 0;
    

    监控系统中所有的音频输入、输出设备的插拔状态;

    以上内容是否对您有帮助?
  • Icon free helper
    Close