实时音视频之toy_rtc(3)——接口定义

收包接口

 用来从网络上接收数据包

  • 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;
	};
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值