实时音视频云

  • 异步回调

    最近更新时间:2018-07-05 16:24:08

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

    主要是房间管理和通知的异步回调。

    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;
    

    错误码列表如下:

    QNRTCErrorDomain 错误码 功能
    Err_Token_Error 10001 token 错误
    Err_Token_Expired 10002 token 过期
    Err_Room_INSTANCE_Closed 10003 房间实例关闭
    Err_ReconnToken_Error 10004 重连 token 错误
    Err_Room_Closed 10005 房间已关闭
    Err_Kickout_Of_Room 10006 房间内踢人失败
    Err_Room_Full 10011 房间已满
    Err_ROOM_Not_Exist 10012 房间不存在
    Err_User_Not_Exist 10021 用户不存在
    Err_User_Already_Exist 10022 用户已存在
    Err_Publish_Stream_Not_Exist 10031 流不存在
    Err_Publish_Stream_Info_Not_Match 10032 流信息不匹配
    Err_Publish_Stream_Already_exist 10033 流已存在
    Err_Publish_Stream_Not_Ready 10034 流未完成
    Err_Subscribe_Stream_Not_Exist 10041 订阅不存在流
    Err_Subscribe_Stream_Info_Not_Match 10042 订阅不匹配信息流
    Err_Subscribe_Stream_Already_Exist 10043 订阅已订阅的流
    Err_Cannot_Subscribe_Self 10044 无法订阅自己
    Err_No_Permission 10051 未许可
    Err_Server_Unavailable 10052 服务不可用
    Err_Invalid_Parameters 11000 参数错误
    Err_Internal_Null_Pointer 11001 sdk 内部空指针
    Err_Cannot_Destroy_In_Self_Thread 11005 不可在自己的线程中释放自己
    Err_Cannot_Change_When_Using 11006 采集中不可更改设备
    Err_Failed_Set_Recorder_Device 11007 设置录音设备失败
    Err_Failed_Set_Communication_Recorder_Device 11008 设置交互采集设备失败
    Err_Failed_Set_Playout_Device 11009 设置普通音频输出设备失败
    Err_Failed_Set_Communication_Playout_Device 11010 设置音频通信输出设备失败
    Err_Failed_Get_Volume 11011 获取输入或输出设备音量失败
    Err_Failed_Set_volume 11012 设置输入或输出设备音量失败
    Err_Playout_Mute_Failed 11013 音频输出设备静音失败
    Err_Recorder_Mute_Failed 11014 音频输入设备静音失败
    Err_Operator_Failed 11015 操作失败
    Err_Room_Already_Joined 11016 已进入房间
    Err_Network_Disconnect 11017 网络失去连接
    Err_No_This_User 11018 无该用户
    Err_No_This_User_Stream_Info 11019 无该用户流信息
    Err_Device_Busy 11020 设备繁忙
    Err_Device_Open_Failed 11021 设备打开失败
    Err_No_This_Device 11022 不存在该设备
    Err_Already_Published 11023 已发布
    Err_Already_UnPublished 11024 已取消发布
    Err_No_Publish_Record 11025 本地无发布记录
    Err_Already_Subscribed 11026 已订阅或正在订阅
    Err_Stream_ConnId_Empty 11027 订阅流时,流 ID 或 Conn ID 为空
    Err_Already_UnSubscribed 11028 已取消订阅或正在取消订阅
    Err_Decode_RoomToken_Failed 11029 解码 room token 失败
    Err_Parse_Json_Failed 11030 解析 json 字符串失败
    Err_Parse_Json_RoomName_Failed 11031 解析 json 字符串获取房间名失败
    Err_Parse_Json_UserId_Failed 11032 解析 json 字符串获取用户 id 失败
    Err_Parse_Json_AppId_Failed 11033 解析 json 字符串获取 appId 失败
    Err_Request_Access_Token_Failed 11034 请求 Access Token 失败
    Err_Parse_Access_Token_Failed 11035 解析 Access Token 失败
    Err_Parse_Room_Server_Address_Failed 11036 解析房间服务地址失败
    Err_Get_AccessToken_Timeout 11040 请求获取 Access Token 超时
    Err_VideoCapture_Not_Running 11050 视频采集模块未启动

    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;
    

    本地预览、发布,订阅远端用户视频流的原始视频流数据的回调,一般为 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;
    

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

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