发布和订阅
发布和订阅操作一定要在登录房间成功后才能操作成功,否则直接返回失败,且不再通过异步回调通知。
发布/取消发布
- 发布本地音/视频流
// 发布音、视频 Track,此方法为异步方法,仅当返回 0 时才会触发 on_publish_tracks_result 回调
// @param tracks 音视频 Track 指针数组
// @param tracks_count tracks 指针数组中元素个数
// @return 0:成功;其它请参考错误码列表
int qn_rtc_publish(QNRtcTrackInfo* tracks[], size_t tracks_count);
发布操作需在加入房间成功的前提下进行,否则发布将失败;同时此方法为异步方法,当返回 0 时,其发布结果在
on_publish_tracks_result
进行通知,错误码请参考错误码列表;
- 导入视频 H.264 Nalu 数据
Linux SDK 默认没有内置视频编码器,发布成功后,数据源来自于 APP 上层的实时导入。
// 仅在发布成功后调用才生效
// @param nalus_ptr QNRtcH264Nal 指针数组
// @param nalus_size nalus_ptr 中数组元素个数
// @param is_key_frame 会否是关键帧,1:是; 0:否;sps 和 pps 也要置为 1
// @return 0:成功; 其它请参考错误码列表
int qn_rtc_input_h264_frame(QNRtcH264Nal** nalus_ptr, size_t nalus_size, unsigned char is_key_frame);
SDK 内部会根据 REMB 通过
on_encoder_adjust_setting
实时通知 APP 层调整编码器帧率和码率。
- 取消发布本地音/视频流
// 取消发布音、视频 Track,此方法为同步方法
// @param tracks_id 音视频 Track id 指针数组
// @param tracks_count tracks_id 指针数组中元素个数
// @return 0:成功;其它请参考错误码列表
int qn_rtc_unpublish(char* tracks_id[], size_t tracks_id_count);
此方法为同步方法,没有异步回调通知接口;
静默本地音/视频
静默操作仅导致送往远端的音频静音、视频黑屏,但并不会停止发布数据流,且静默操作没有记忆操作,下次发布时恢复正常。
- 静默本地已发布音频流
// 静默本地已发布音频 Track,静默后,远端将产生静音效果
// @param mute_flag 是否静默本地音频 track, 1 or 0
// @return 0:成功;其它请参考错误码列表
int qn_rtc_mute_audio(int mute_flag);
- 静默本地已发布视频流
// 静默本地已发布视频 Track,静默后,远端看到的为黑屏
// @param track_id 本地视频 track id
// @param mute_flag 是否静默本地视频 track
// @return 0:成功;其它请参考错误码列表
int qn_rtc_mute_video(char* track_id, int mute_flag);
订阅/取消订阅
- 订阅远端用户的音/视频
// 订阅远端已发布的音、视频 Track,此方法为异步方法,仅当返回 0 时才会触发 on_subscribe_tracks_result 回调
// @param tracks 音视频 Track 指针数组
// @param tracks_count tracks 指针数组中元素个数
// @return 0:成功;其它请参考错误码列表
int qn_rtc_subscribe(QNRtcTrackInfo* tracks[], size_t tracks_count);
- 取消订阅远端用户的音/视频
// 取消订阅音、视频 Track,此方法为同步方法
// @param tracks_id 音视频 Track id 指针数组
// @param tracks_count tracks_id 指针数组中元素个数
// @return 0:成功;其它请参考错误码列表
int qn_rtc_unsubscribe(char* tracks_id[], size_t tracks_id_count);