1 SDK调用步骤
1 初始化
agora::rtc::IRtcEngine* m_rtcEngine = createAgoraRtcEngine();
//从IRtcEngineEventHandler派生,事件回调
std::unique_ptr<agora::rtc::IRtcEngineEventHandler> m_eventHandler = new AgoraRtcEngineEvent(*this);
agora::rtc::RtcEngineContext context;
context.eventHandler = m_eventHandler.get();
context.appId = APPID;
m_rtcEngine->initialize(context);
2 设置参数:场景、角色、编码参数
//channelType: 通信、直播、游戏
m_rtcEngine->setChannelProfile(channelType);
//roleType:主播—发送和接收,观众—接收
m_rtcEngine->setClientRole(roleType);
VideoEncoderConfiguration vec;
宽高、帧率、码率、orientation--手机摄像头横屏竖屏,是否镜像,degradationPreference编码降级偏好
m_rtcEngine->setVideoEncoderConfiguration(vec);
3 进入房间
m_rtcEngine->startPreview();
//uid是自己的user id,
m_rtcEngine->joinChannel(key.toUtf8().data(), channel.toUtf8().data(), nullptr, uid);
int joinChannel(const char* token, const char* channelId, const char* info, uid_t uid)
token作用:用户鉴权?
4 显示本地自己视频
VideoCanvas vc;
vc.uid = 0;
vc.view = hVideoWnd; //句柄
vc.renderMode = renderType;
m_rtcEngine->setupLocalVideo(vc);
nRet = m_rtcEngine->startPreview();
5 显示远端视频
VideoCanvas vc;
vc.uid = uid;//区分不同用户
m_rtcEngine->setupRemoteVideo(vc);
6 离开房间
m_rtcEngine->stopPreview();
m_rtcEngine->leaveChannel();
7 释放资源
m_rtcEngine->release();

图是声网官网的。
2 核心事件
//一般是自己joinChannel成功后的回调
void onJoinChannelSuccess(const char* channel, uid_t uid, int elapsed)
//其它用户加入房间的回调,记录uid
void onUserJoined(uid_t uid, int elapsed)
3 视频帧回调
agora::util::AutoPtr<agora::media::IMediaEngine> mediaEngine;
mediaEngine.queryInterface(m_rtcEngine, agora::AGORA_IID_MEDIA_ENGINE);
agora::media::IVideoFrameObserver videoFrameObserver;
nRet = mediaEngine->registerVideoFrameObserver(videoFrameObserver);
//自己摄像头的视频帧YUV回调,直接渲染,不用按高拷贝 ?
bool onCaptureVideoFrame(VideoFrame& videoFrame)
//远端用户YUV回调,uid区分不同用户
bool onRenderVideoFrame(unsigned int uid, VideoFrame& videoFrame)
void onFirstRemoteVideoFrame(uid_t uid, int width, int height, int elapsed)
4 音频参数设置、相关函数
//参1 Sets the sample rate, bitrate, encoding mode, and the number of channels
//参2 场景
int setAudioProfile(AUDIO_PROFILE_TYPE profile, AUDIO_SCENARIO_TYPE scenario)
//调节麦克风采集音量
int adjustRecordingSignalVolume(int volume)
//uid是onUserJoined回调函数获得的
int adjustUserPlaybackSignalVolume(unsigned int uid, int volume)
//取消/恢复发布本地音频流
int muteLocalAudioStream(bool mute);
//取消/恢复指定远端用户的音频流
int muteRemoteAudioStream(uid_t uid, bool mute);
522

被折叠的 条评论
为什么被折叠?



