回调函数

本文对引擎创建的会话相关的回调函数进行说明。

会话控制

其中包含发起人创建房间、发布音视频流、订阅方加入房间等回调通知。

    /**
     *  会话控制,每次通话对应一个会话
     *  用于创建房间,加入房间、发布、订阅等操作,只有加入或者创建房间成功,才会分配合法的 sessionId
     *  对于房间创建者,典型流程是:CreateRoom -> Publish -> FeedAudio/FeedVideo -> LeaveRoom,后续有人加入再做 Subscribe
     *  对于房间加入者,典型流程是:JoinRoom -> Subscribe -> LeaveRoom,当然,JoinRoom 以后也可以做 Publish
     *  另外还支持通过 SendMessage 接口发送文本消息到对端,peers 存放接收方的 uid 列表
     **/
    struct MRtcSession {
        MRtcSession() {};
        virtual ~MRtcSession() {};
        virtual void CreateRoom(const CreatRoomParam& createParam) = 0;
        virtual void JoinRoom(const JoinRoomParam& joinParam) = 0;
        virtual void Publish(const PublishParam& pubParam) = 0;
        virtual void Subscribe(const SubscribeParam& subParam) = 0;
        virtual void FeedAudio(const RtcAudioData& audio) = 0;
        virtual void FeedVideo(const RtcVideoData& video) = 0;
        virtual void SendText(const std::string& text,const std::list<std::string> peers) = 0;
        virtual void LeaveRoom() = 0;
        virtual std::string GetSessionId() = 0;
        virtual void ClearAudio() = 0;              //清除音频队列数据,实现打断机器人说话的功能
        virtual int32_t AudioQueueSize() = 0;       //查看音频队列大小,一定程度上可以判断机器人说的话是不是发送完毕了
     virtual void StartRecord() = 0;
    };

会话监听器

音视频流发布成功、加入方订阅成功等事件均会触发相应的回调通知。

    /**
     *  会话监听器,可以侦听会话中产生的一些事件,比如发布成功,订阅成功等
     *  当有新的发布者加入或者离开会话,会得到通知,告知该发布者的一些信息,包括使用的流 ID、用户 ID 等
     *  如果订阅了某个发布者的流数据,那么还会收到其相应的音视频数据
     **/
    struct MRtcSessionListener {
        MRtcSessionListener() {};
        virtual ~MRtcSessionListener(){};
        virtual void OnSessionEvent(RtcEvent event) = 0;
        virtual void OnNewPublisher(StreamInfo info) = 0;
        virtual void OnStreamGone(StreamInfo info) = 0;
        virtual void OnNewSubscriber(StreamInfo info) = 0;
        virtual void OnMixedAudio(const RtcAudioData& audio){}                        //混音后的音频数据,该接口保留,两人场景下没有用到
        virtual void OnAudio(const RtcAudioData& audio,const std::string& streamId) = 0;
        virtual void OnVideo(const RtcVideoData& video,const std::string& streamId) = 0;
        virtual void OnText(const RtcTextData& text) = 0;

        //H264-NALU 对接的场景下,需要反馈一些信息 给到编码器做实时调节
        virtual void OnKeyFrameRequest() {}
        virtual void OnEncoderQosRequest(const MRtcEncoderQosParams& params) {}

        //通知有人进入房间,主要是确保 2 人都在房间以后,再启动录制,业务不需要录制则不需要关注该回调
        virtual void OnNewJoiner(UserInfo user) {}
    };