收包接口
用来从网络上接收数据包
- on_recv_media_data:收到媒体数据包的时候调用
- on_recv_signalling:收到信令包的时候调用
// 包接收器
class IPacketReceiver {
public:
virtual ~IPacketReceiver() {}
virtual void on_recv_media_data(const uint8_t* data,
size_t size) = 0;
virtual void on_recv_signalling(const uint8_t* data,
size_t size) = 0;
};
发送接口
用来发送数据包
- start:启动
- stop:停止
- send_media:发送媒体数据
- send_signalling:发送信令
// 传输模块
class ITransport {
public:
ITransport(toy::IPacketReceiver* receiver) {}
virtual ~ITransport() {}
virtual bool start(const RtcConfig& config) = 0;
virtual void stop() = 0;
virtual void send_media(uint32_t uid,
const uint8_t* data,
size_t size) = 0;
virtual void send_signalling(uint32_t uid,
const uint8_t* data,
size_t size) = 0;
};
视频编码后的回调接口
视频编码完成之后可以调用这个接口,把数据传输到下一个模块
- on_encoded_video:编码完成之后调用
class VideoEncodedCallback {
public:
virtual ~VideoEncodedCallback() {}
virtual void on_encoded_video(uint32_t frame_id,
uint8_t frame_type,
uint32_t time_stamp,
uint8_t* data, size_t len) = 0;
};
音频编码后的回调接口
音频编码完成之后可以调用这个接口,把数据传输到下一个模块
- on_encoded_audio:编码完成之后调用
class AudioEncodedCallback {
public:
virtual ~AudioEncodedCallback() {}
virtual void on_encoded_audio(uint32_t frame_id,
uint16_t sample_rate,
uint16_t frame_size_ms,
uint8_t channels,
uint32_t timestamp,
uint8_t* data,
size_t len) = 0;
};
视频输出接口
视频的渲染模块可以继承该接口,实现渲染功能
- on_recv_video:收到视频帧的时候调用
class IVideoSink {
public:
virtual ~IVideoSink() {}
virtual void on_recv_video(uint32_t id,
uint8_t media_type,
uint32_t frame_id,
uint32_t time_stamp,// send timestamp
const uint8_t* data,
size_t len) = 0;
};
音频输出接口
音频的播放模块可以继承该接口,实现播放功能
- on_recv_audio:收到音频帧的时候调用
class IAudioSink {
public:
virtual ~IAudioSink() {}
virtual void on_recv_audio(toy::AudioEncodedFrame& frame) = 0;
virtual void on_recv_audio(std::shared_ptr<uint8_t> pcm_frame, size_t pcm_size) = 0;
};
视频源
代表一个视频数据源,视频数据从这里获取
- start:启动
- stop:停止
- configure:配置参数
- on_network_update:网络状态更新
- force_keyframe:请求关键帧
- register_previous_encode_callback:注册编码前处理接口
class IVideoSource {
public:
IVideoSource(toy::VideoEncodedCallback* cb) {}
virtual ~IVideoSource() {}
virtual bool start() = 0;
virtual void stop() = 0;
virtual void configure(const toy::VideoEncoderSetting& setting) = 0;
virtual void on_network_update(uint32_t bitrate_bps) = 0;
virtual void force_keyframe() = 0;
virtual void register_previous_encode_callback(toy::IVideoPreviousEncodeCallback* cb) = 0;
};
音频源
代表一个音频数据源,音频数据从这里获取
- start:启动
- stop:停止
- configure:配置参数
- on_network_update:网络状态更新
- register_previous_encode_callback:注册编码前处理接口
class IAudioSource {
public:
IAudioSource(toy::RtcEngine* engine,toy::IAudioEncodedCallback* cb) {}
virtual ~IAudioSource() {}
virtual bool start() = 0;
virtual void stop() = 0;
virtual void configure(const toy::AudioEncoderSetting& setting) = 0;
virtual void on_network_update(uint32_t bitrate_bps) = 0;
virtual void register_previous_encode_callback(toy::IAudioPreviousEncodeCallback* cb) = 0;
};
视频编码前处理接口
可以在这里做一些图像增强、去噪、美颜什么的
- on_frame:收到一个视频帧的时候调用
class IVideoPreviousEncodeCallback {
public:
virtual ~IVideoPreviousEncodeCallback() {}
virtual void on_frame(toy::VideoRawFrame& frame) = 0;
};
音频编码前处理接口
可以在这里做一些回声消除等音频前处理
- on_frame:收到一个音频帧的时候调用
class IAudioPreviousEncodeCallback {
public:
virtual ~IAudioPreviousEncodeCallback() {}
virtual void on_frame(toy::AudioRawFrame& frame) = 0;
};
关键帧请求接口
某些情况下丢包太多,必须要请求关键帧才能组帧解码
- request_keyframe:请求一个关键帧
class IRequestKeyframeCallback {
public:
virtual ~IRequestKeyframeCallback() {}
virtual void request_keyframe() = 0;
};
业务接口
用来处理各种业务,例如登录回调等等
- on_login:登录回调
- on_logout:登出回调
- on_join_room:加入房间回调
- on_leave_room:离开房间回调
- on_user_join:对方加入回调
- on_user_leave:对方离开回调
- on_network_update:网络状态回调
class IEngineSink {
public:
IEngineSink(toy::RtcEngine* engine) {}
virtual ~IEngineSink() {}
virtual void on_login(uint8_t err_code) = 0;
virtual void on_logout() = 0;
virtual void on_join_room(uint8_t err_code) = 0;
virtual void on_leave_room() = 0;
virtual void on_user_join(uint32_t uid) = 0;
virtual void on_user_leave(uint32_t uid) = 0;
virtual void on_network_update(uint32_t bitrate_bps) = 0;
};
引擎接口
它表示一个rtc引擎
- get_default_config:获取默认参数
- initialize:初始化
- uninitialize:清理
- login:登录
- logout:登出
- join_room:加入房间
- leave_room:离开房间
- start_video:启动视频
- stop_video:停止视频
- start_audio:启动音频
- stop_audio:停止音频
- subscribe_video:订阅视频(未实现)
- unsubscribe_video:取消订阅音频(未实现)
- subscribe_audio:订阅音频(未实现)
- unsubscribe_audio:取消订阅音频(未实现)
class RtcEngine :
public AudioEncodedCallback,
public VideoEncodedCallback,
public IPacketReceiver
{
public:
static void get_default_config(RtcConfig* config);
virtual ~RtcEngine() {}
virtual bool initialize(
const RtcConfig& conf,
const RtcUserInfo& my_info,
toy::IVideoSource* video_source,
toy::IVideoSink* video_sink,
toy::IAudioSource* audio_source,
toy::IAudioSink* audio_sink,
toy::ITransport* transport,
toy::IEngineSink* engine_sink) = 0;
virtual void uninitialize() = 0;
virtual void on_encoded_video(
uint32_t frame_id,
uint8_t frame_type,
uint32_t time_stamp,
uint8_t* data, size_t len) = 0;
virtual void on_encoded_audio(uint32_t frame_id,
uint16_t sample_rate,
uint16_t frame_size_ms,
uint8_t channels,
uint32_t timestamp,
uint8_t* data,
size_t len) = 0;
virtual void on_recv_media_data(
const uint8_t* data,
size_t size) = 0;
virtual void on_recv_signalling(
const uint8_t* data,
size_t size) = 0;
virtual void login() = 0;
virtual void logout() = 0;
virtual void join_room(uint32_t room_id) = 0;
virtual void leave_room() = 0;
virtual void start_video() = 0;
virtual void stop_video() = 0;
virtual void start_audio() = 0;
virtual void stop_audio() = 0;
virtual void subscribe_video(uint32_t user_id) = 0;
virtual void unsubscribe_video(uint32_t user_id) = 0;
virtual void subscribe_audio(uint32_t user_id) = 0;
virtual void unsubscribe_audio(uint32_t user_id) = 0;
};