|
|
||
|---|---|---|
| Example | ||
| SellyCloudSDK | ||
| .DS_Store | ||
| LICENSE | ||
| README.md | ||
| SellyCloudSDK.podspec | ||
| _Pods.xcodeproj | ||
| output.mp3 | ||
README.md
SellyRTC iOS SDK 接入文档
本文档介绍如何使用 SellyRTCSession 快速集成一对一或多人音视频通话功能,包括:
- Session 创建与基础通话流程
- 本地 / 远端画面渲染
- 音视频控制与通话路由
- 屏幕分享与外部视频源推流
- 自定义消息、统计与 Token 机制
- 连接状态与事件回调
📑 目录
🔧 准备工作
- 集成 SellyRTC.framework
- 引入头文件:
#import <SellyCloudSDK/SellyCloudManager.h>
- 在真机运行(摄像头/麦克风需要硬件支持)
🚀 快速开始
1. 创建 Session
/// @param isP2p YES 表示一对一通话(P2P 直连),NO 表示多人通话(房间 / 会议模式)
///
/// P2P 模式(YES):
/// - 点对点直连,端到端延迟更低
/// - 适合普通一对一音视频通话
self.session = [[SellyRTCSession alloc] initWithType:YES];
self.session.delegate = self;
2. 设置本地和远端画布
SellyRtcVideoCanvas *local = [SellyRtcVideoCanvas new];
local.view = self.localView;
[self.session setLocalCanvas:local];
SellyRtcVideoCanvas *remote = [SellyRtcVideoCanvas new];
remote.view = self.remoteView;
remote.userId = @"remoteUserId";
[self.session setRemoteCanvas:remote];
3. 配置视频参数(可选)
SellyRTCVideoConfiguration *config = [SellyRTCVideoConfiguration defaultConfig];
config.width = 720;
config.height = 1280;
config.frameRate = 24;
self.session.videoConfig = config;
4. 打开本地预览
[self.session startPreview];
关闭:
[self.session stopPreview];
5. 加入频道(开始通话)
[self.session startWithChannelId:@"room_123" token:@"your-token"];
6. 结束通话
[self.session end];
🎛 常用功能
开关本地视频
[self.session enableLocalVideo:YES];
[self.session enableLocalVideo:NO];
开关本地音频
[self.session enableLocalAudio:NO];
[self.session enableLocalAudio:YES];
切换摄像头
[self.session switchCamera];
静音远端
[self.session muteRemoteAudioStream:@"remoteUser" mute:YES];
音频输出(听筒/扬声器)
[self.session setAudioOutput:AVAudioSessionPortOverrideSpeaker];
发送自定义消息
[self.session sendMessage:@"hello" completion:^(NSError *error) {}];
更新 Token
[self.session renewToken:newToken];
🖥 屏幕分享与外部视频源
开启屏幕分享
[self.session startScreenCapture];
屏幕分享状态回调:
- (void)rtcSession:(SellyRTCSession *)session onScreenShareStatusChanged:(SellyScreenShareState)state {}
外部推流(自定义采集)
[self.session enableLocalVideo:YES];
[self.session pushExternalVideoFrame:pixelBuffer];
常用于游戏画面/ReplayKit 输出/第三方渲染等。
🎥 视频帧前后处理
本地采集前处理(美颜/滤镜等)
- (CVPixelBufferRef)rtcSession:(SellyRTCSession *)session onCaptureVideoFrame:(CVPixelBufferRef)pixelBuffer {
return pixelBuffer;
}
远端渲染前处理(做 AI/贴纸/录像)
- (BOOL)rtcSession:(SellyRTCSession *)session onRenderVideoFrame:(SellyRTCVideoFrame *)videoFrame userId:(NSString *)userId {
return YES;
}
📡 事件回调(Delegate)
通话严重错误
- (void)rtcSession:(SellyRTCSession *)session onError:(NSError *)error {}
远端音视频开关
- (void)rtcSession:(SellyRTCSession *)s videoEnabled:(BOOL)enabled userId:(NSString *)userId {}
自定义消息
- (void)rtcSession:(SellyRTCSession *)s didReceiveMessage:(NSString *)msg userId:(NSString *)uid {}
流级连接状态
- (void)rtcSession:(SellyRTCSession *)s connectionStateChanged:(SellyRTCConnectState)state userId:(NSString *)uid {}
会话级连接状态
- (void)rtcSession:(SellyRTCSession *)s onRoomConnectionStateChanged:(SellyRoomConnectionState)state {}
用户加入/离开
- (void)rtcSession:(SellyRTCSession *)s onUserJoined:(NSString *)uid {}
- (void)rtcSession:(SellyRTCSession *)s onUserLeave:(NSString *)uid {}
通话时长
- (void)rtcSession:(SellyRTCSession *)s onDuration:(NSInteger)duration {}
Token 回调
- (void)rtcSession:(SellyRTCSession *)s tokenWillExpire:(NSString *)token {}
- (void)rtcSession:(SellyRTCSession *)s tokenExpired:(NSString *)token {}
屏幕分享状态
- (void)rtcSession:(SellyRTCSession *)s onScreenShareStatusChanged:(SellyScreenShareState)state {}
📊 通话统计
- (void)rtcSession:(SellyRTCSession *)s onStats:(SellyRTCP2pStats *)stats userId:(NSString *)uid {}
🔑 Token 过期机制
- Token 将在 60 秒前 触发
tokenWillExpire - Token 过期后通话继续,但重连会失败
- 请及时调用
renewToken:
🌐 连接状态说明
connectionState 可读取当前房间状态:
- Disconnected
- Connecting
- Connected
- Reconnecting
❓ 常见问题 FAQ
Q:远端画面不显示怎么办?
检查:
- 是否设置了正确的
remoteCanvas.userId - 是否 addSubview 到界面
- 是否在 onUserJoined 后调用 setRemoteCanvas
Q:如何实现摄像头与屏幕分享切换?
- 开启摄像头 → enableLocalVideo:YES
- 开启屏幕分享 → startScreenCapture
- 收到屏幕分享结束 → 恢复摄像头