IOS SDK #
UPRTCClient #
@interface UPRTCClient : NSObject
/**
@brief 初始化
@param appId 项目唯一标示
@param appKey 应用唯一标示
*/
+ (void) initializedWithAppId:(NSString*)appId appKey:(NSString*)appKey;
/**
@brief 清理
*/
+ (void) cleanup;
/**
@brief 日志开关
*/
+ (void) logEnable:(BOOL)enable;
/**
@brief 获得所有摄像头
*/
+ (NSArray<UCameraInfo*>*) cameraDevices;
/**
@brief 设置事件委托
@param delegate 委托
*/
- (void) setDelegate:(id<UPRTCClientDelegate>) delegate;
/**
@brief 获得编码能力
@param kind 编码类型 audio or video
@return 编码器信息
*/
- (NSArray<NSDictionary*>*) codecCapability:(NSString*)kind;
/**
@brief 加入房间
@param serverUrl 房间地址
@param roomId 房间ID
@param peerId 用户ID
*/
- (void) joinRoom:(NSString*) serverUrl roomId:(NSString*) roomId peerId:(NSString*) peerId;
/**
@brief 创建摄像头预览
@param camera 摄像头信息
*/
- (UCameraPreview*) cameraPreview:(UCameraInfo*) camera;
/**
@brief 创建摄像头Track
@param camera 摄像头信息
@param codec 参照 codecCapability可在其返回中选择任意video编码器,可选
@param codecOptions 参照共同 CodecOptions选择视频相关属性设置,可选
@param encodings rtp编码参数,可选
@return 用户媒体Track对象
*/
- (UPRTCPeerTrack*) openCamera:(UCameraInfo*) camera codec:(NSDictionary* _Nullable) codec codecOptions:(NSDictionary* _Nullable) codecOptions encodings:(NSArray<URtpEncodingParameters*>* _Nullable) encodings;
- (UPRTCPeerTrack*) openCamera:(UCameraInfo*) camera;
/**
@brief 通过摄像机预览,创建摄像头Track
@param cameraPreview 摄像机预览对象
@param codec 参照 codecCapability可在其返回中选择任意video编码器,可选
@param codecOptions 参照共同 CodecOptions选择视频相关属性设置,可选
@param encodings rtp编码参数,可选
@return 用户媒体Track对象
*/
- (UPRTCPeerTrack*) openCameraWithPreview:(UCameraPreview*) cameraPreview codec:(NSDictionary* _Nullable) codec codecOptions:(NSDictionary* _Nullable) codecOptions encodings:(NSArray<URtpEncodingParameters*>* _Nullable) encodings;
- (UPRTCPeerTrack*) openCameraWithPreview:(UCameraPreview*) cameraPreview;
/**
@brief 切换摄像头
@param camera 摄像头信息
@return 用户媒体Track对象
*/
- (UPRTCPeerTrack*) switchCamera:(UCameraInfo*) camera;
/**
@brief 关闭摄像头
*/
- (void) closeCamera;
/**
@brief 设置摄像头采集拦截Delegate
*/
- (void) setCameraCapturerDelegate:(id<UCameraCapturerDelegate>) delegate;
/**
@brief 打开麦克风
@param constraints 音频条件/约束
@param codec 参照 codecCapability可在其返回中选择任意audio编码器,可选
@param codecOptions 参照共同 CodecOptions选择音频相关属性设置,可选
*/
- (UPRTCPeerTrack*) openMicWithConstraints:(UAudioConstraints * _Nullable)constraints codec:(NSDictionary* _Nullable)codec codecOptions:(NSDictionary* _Nullable) codecOptions;
- (UPRTCPeerTrack*) openMicWithCodec:(NSDictionary* _Nullable) codec codecOptions:(NSDictionary* _Nullable) codecOptions;
- (UPRTCPeerTrack*) openMic;
/**
@brief 关闭麦克风
*/
- (void) closeMic;
/**
@brief 分享屏幕
@param extensionBundleId 扩展进程的BundleId [参照](https://uprtc.cmcim.com/doc/client/demo.html#屏幕分享) 2.
*/
- (void) shareScreen:(NSString*) extensionBundleId;
/**
@brief 停止屏幕
*/
- (void) stopShareScreen;
/**
@brief 是否在分享屏幕
*/
- (BOOL) isSharingScreen;
/**
@brief 发送房间内消息
@param data 消息内容
*/
- (void) sendMessage:(NSDictionary*)data;
/**
@brief 设置最大比特率
@param bitrate 最大比特率
*/
- (void) setMaxBitrate:(int)bitrate;
/**
@brief 离开房间
*/
- (void) exitRoom;
/**
* @brief 是否加入房间
* @return
*/
- (BOOL) isJoined;
/**
* @brief 是否具有生产媒体的能力,例如主播有,观众没有
* @return
*/
- (BOOL) mediaEnable;
@end
UPRTCClientDelegate #
@protocol UPRTCClientDelegate
@required
/**
@brief 加入房间
@param code 0 表示成功
*/
- (void) onRoomJoined:(int) code;
/**
@brief 成员加入到房间
@param peerId 成员ID
*/
- (void) onPeerJoined:(NSString*) peerId;
/**
@brief 成员从房间离开
@param peerId 成员ID
*/
- (void) onPeerExited:(NSString*) peerId;
/**
@brief 房间成员的媒体加入
@param peerTrack 房间成员媒体对象
*/
- (void) onPeerMediaJoined:(UPRTCPeerTrack*) peerTrack;
/**
@brief 房间成员的媒体离开
@param peerTrack 房间成员媒体对象
*/
- (void) onPeerMediaExited:(UPRTCPeerTrack*) peerTrack;
/**
@brief 接收房间消息
@param msg 消息内容
*/
- (void) onMessage:(NSString*) msg;
/**
@brief 用户在房间中可生产媒体
@param kind 可生产媒体的种类,audio或video,如果是video表示也可以输出audio
*/
- (void) onMediaEnable:(NSString*) kind;
/**
@brief 用户在房间中不可生产媒体
*/
- (void) onMediaDisable;
/**
@brief track分数有变化时回调,注意:当回调的是自己分享屏幕的分数时peerTrack为空(IOS分享屏幕和应用不在同一个进程,无法获取peerTrack对象)
@param peerTrack 分数变化的Track
@param score 分数对象
*/
- (void) onTrackScoreChange:(UPRTCPeerTrack* _Nullable) peerTrack score: (UPeerTrackScore* _Nonnull) score;
/**
@brief 房间总人数,只在直播时有效
@param num 人数
*/
- (void) onPeerTotalNum:(int) num;
/**
@brief 分享屏幕状态监听
@param options 分享屏幕参数
*/
- (void) onSharingScreen:(UShareScreenOptions*) options;
/**
@brief 用户离开房间
*/
- (void) onRoomExited;
@end
UPRTCPeerTrack #
#define UPRTC_KIND_VIDEO @"video"
#define UPRTC_KIND_AUDIO @"audio"
#define UPRTC_DEVICE_CAMERA @"camera"
#define UPRTC_DEVICE_MIC @"mic"
#define UPRTC_DEVICE_DESKTOP @"desktop"
#define UPRTC_DEVICE_FILE @"file"
typedef enum {
USCALE_ASPECT_FIT,
USCALE_ASPECT_FILL,
} UScaleType;
@interface UPRTCPeerTrack : NSObject
/**
@brief 取得UPRTCPeerTrack唯一标示
*/
@property (nonatomic, strong, readonly) NSString* id_;
/**
@brief Peer唯一标示
*/
@property (nonatomic, strong, readonly) NSString* peerId;
/**
@brief 媒体种类
*/
@property (nonatomic, strong, readonly) NSString* kind;
/**
@brief 媒体设备类型,参照上面的宏定义,例如 UPRTC_DEVICE_CAMERA
*/
@property (nonatomic, strong, readonly) NSString* deviceType;
/**
@brief 媒体设备名称
*/
@property (nonatomic, strong, readonly) NSString* deviceName;
/**
@brief 媒体设备ID
*/
@property (nonatomic, strong, readonly) NSString* deviceId;
/**
@brief 视频分辨率
*/
@property (nonatomic, assign, readonly) CGSize resolution;
/**
@brief 视频旋转角度
*/
@property (nonatomic, assign, readonly) int rotation;
/**
@brief 是否是自己的媒体Track,也可理解为是否是本地媒体Track
*/
@property (nonatomic, assign, readonly) BOOL isMe;
/**
* @brief Track是否已经关闭
*/
@property (nonatomic, assign, readonly) BOOL isClosed;
/**
* @brief Track是否被暂停
*/
@property (nonatomic, assign, readonly) BOOL isPaused;
/**
* @brief Track是否在播放
*/
@property (nonatomic, assign, readonly) BOOL isPlaying;
/**
* @brief 渲染缩放类型,播放后也可设置
*/
@property (nonatomic, assign) UScaleType scaleType;
/**
* @brief 是否镜像渲染,播放后也可设置
*/
@property (nonatomic, assign) BOOL mirror;
/**
* @brief 分数对象
*/
@property (nonatomic, strong, readonly) UPeerTrackScore* score;
/**
* @brief 最大空间层
*/
@property (nonatomic, assign, readonly) int maxSpatialLayer;
/**
* @brief 最大时间层
*/
@property (nonatomic, assign, readonly) int maxTemporalLayer;
/**
* @brief 播放视图, videoView是调用startPlay传递的参数view
*/
@property (nonatomic, weak, readonly) UIView* videoView;
/**
@brief 开始播放,视频必须指定view,音频无需指定任何参数,但指定也不会报错(仍然能播放音频)
@param view 父视图
@param type 缩放类型,默认USCALE_ASPECT_FIT
@param mirror 是否镜像显示
*/
- (void) startPlay:(UIView*)view scaleType:(UScaleType) type mirror:(BOOL) mirror;
- (void) startPlay:(UIView*)view scaleType:(UScaleType) type;
- (void) startPlay:(UIView*)view;
- (void) startPlay;
/**
@brief 开始播放,自定义渲染,对视频有效
@param delegate 视频帧回调,在回调中拿到帧数据进行渲染
*/
- (void) startPlayWithRendererDelegate:(id<UPRTCVideoRendererDelegate>)delegate;
/**
@brief 开始播放,并监听音频分贝,对音频有效
@param delegate 分贝回调
@param interval 回调时间间隔,单位毫秒
*/
- (void) startPlayWithDecibelDelegate:(id<UPRTCAudioDecibelDelegate>)delegate interval:(int)interval;
/**
@brief 停止播放
停止播放会先暂停,再移除渲染画面,音频的停止和暂停同效果,stop之后可再调用start。
本地麦克风和摄像头生成的PeerTrack,需要调用对应的关闭方法彻底停止,关闭后无法再调用start。
*/
- (void) stop;
/**
* @brief 暂停
*/
- (void) pause;
/**
* @brief 恢复
*/
- (void) resume;
/**
@brief 设置期望空间和时间层,视频有效
@param spatialLayer 空间层
@param temporalLayer 时间层
*/
- (void) setPlayPreferredSpatialLayer:(int)spatialLayer temporalLayer:(int)temporalLayer;
/**
@brief 打开/关闭track分数监听,打开后会立即回调onTrackScoreChange
@param enable true打开,false关闭
*/
- (void) setScoreChangeListenEnable:(BOOL) enable;
@end
UCameraInfo #
@interface UCameraInfo : NSObject
/**
@brief 构造函数
*/
- (id) initWithDevice:(AVCaptureDevice*)device;
/**
@brief 设备
*/
@property(nonatomic, strong, readonly) AVCaptureDevice* device;
/**
@brief 摄像头唯一标示/设备唯一标示
*/
@property(nonatomic, strong, readonly) NSString *uniqueID;
/**
@brief 摄像头名称/设备名
*/
@property(nonatomic, strong, readonly) NSString *name;
/**
@brief 摄像头支持的采集格式
*/
@property(nonatomic, strong, readonly) NSArray<AVCaptureDeviceFormat*> *formats;
/**
@brief 是否是前置摄像头
*/
@property(nonatomic, assign, readonly) BOOL isFont;
/**
@brief 目标采集格式
*/
@property(nonatomic, strong) AVCaptureDeviceFormat *targetFormat;
@end
UCameraPreview #
@interface UCameraPreview : NSObject
// 播放预览画面,参数参照 UPRTCPeerTrack startPlay
- (void) startPlay:(UIView*)view scaleType:(UScaleType) type mirror:(BOOL) mirror;
// 停止播放
- (void) stop;
@end
UCameraCapturerDelegate #
摄像机采集帧拦截处理,例如:美颜滤镜处理
@protocol UCameraCapturerDelegate
@required
/**
* @brief 处理捕获的视频帧
* @param frame webrtc视频帧
* @return 处理后的帧
*/
- (RTCVideoFrame*) didCaptureVideoFrame: (RTCVideoFrame*)frame;
@end
URtpEncodingParameters #
@interface URtpEncodingParameters : NSObject
/**
@brief 是否可用
*/
@property(nonatomic, assign) BOOL isActive;
/**
@brief 最大比特率
*/
@property(nonatomic, copy, nullable) NSNumber *maxBitrateBps;
/**
@brief 最小比特率
*/
@property(nonatomic, copy, nullable) NSNumber *minBitrateBps;
/**
@brief 最大帧率
*/
@property(nonatomic, copy, nullable) NSNumber *maxFramerate;
/**
@brief 时间层数
*/
@property(nonatomic, copy, nullable) NSNumber *numTemporalLayers;
/**
@brief 分辨率缩放比
*/
@property(nonatomic, copy, nullable) NSNumber *scaleResolutionDownBy;
@end
UAudioConstraints #
回声消除,自动增益,降噪等,建议使用默认即可,无需特殊设置
@interface UAudioConstraints : NSObject
//(注释举例,其他雷同)
/**
@brief 回声消除是否可用
@param enable 是否可用,默认开启
@param mandatory 是否强制开启,设置为YES如果系统不支持会出错
*/
- (void) echoCancellationEnable:(BOOL) enable mandatory:(BOOL) mandatory;
- (void) autoGainControlEnable:(BOOL) enable mandatory:(BOOL) mandatory;
- (void) experimentalAutoGainControlEnable:(BOOL) enable mandatory:(BOOL) mandatory;
- (void) noiseSuppressionEnable:(BOOL) enable mandatory:(BOOL) mandatory;
- (void) experimentalNoiseSuppressionEnable:(BOOL) enable mandatory:(BOOL) mandatory;
- (void) highpassFilterEnable:(BOOL) enable mandatory:(BOOL) mandatory;
- (void) typingNoiseDetectionEnable:(BOOL) enable mandatory:(BOOL) mandatory;
- (void) audioMirroringEnable:(BOOL) enable mandatory:(BOOL) mandatory;
- (void) audioNetworkAdaptorConfigEnable:(BOOL) enable mandatory:(BOOL) mandatory;
@end
UShareScreenOptions #
分享屏幕状态
typedef NS_ENUM(NSInteger, UShareScreenState) {
// 初始状态,无状态
UShareScreenState_None,
// 系统已经接收到分享屏幕的请求,准备启动扩展进程
UShareScreenState_READY,
// 分享屏幕扩展进程已经启动
UShareScreenState_START,
// 分享屏幕进程已经和服务器建立RTC连接
UShareScreenState_CONNECTED,
// 分享屏幕结束
UShareScreenState_END
};
@interface UShareScreenOptions : NSObject
// 采集宽,默认屏宽
@property(nonatomic, assign) int width;
// 采集高,默认屏高
@property(nonatomic, assign) int height;
// 采集帧率,默认40
@property(nonatomic, assign) int fps;
// 编码器,vp8或者h264
@property(nonatomic, strong) NSString* codec;
// 扩展进程的BundleId,必须赋值
@property(nonatomic, strong) NSString* extensionBundleId;
// 是否开启分数监听,等同于setScoreChangeListenEnable
@property(nonatomic, assign) BOOL scoreObservedEnable;
@end
UShareScreenHandler #
分享屏幕扩展Handler
@interface UShareScreenHandler : NSObject
- (void)broadcastStartedWithSetupInfo:(NSDictionary<NSString *,NSObject *> *)setupInfo;
- (void)broadcastPaused;
- (void)broadcastResumed;
- (void)broadcastFinished;
- (void)processSampleBuffer:(CMSampleBufferRef)sampleBuffer withType:(RPSampleBufferType)sampleBufferType API_AVAILABLE(ios(10.0));
@end
UPRTCVideoRendererDelegate #
// 以下两个方法二选一实现
@protocol UPRTCVideoRendererDelegate
@optional
/**
* @brief 渲染帧
* @param frame webrtc视频帧
*/
- (void)onRenderFrame:(RTCVideoFrame*)frame peerTrack:(UPRTCPeerTrack*)track;
/**
* @brief 渲染buffer。可用于画中画
* @param sampleBuffer 视频Buffer
*/
- (void)onRenderSampleBuffer:(CMSampleBufferRef)sampleBuffer peerTrack:(UPRTCPeerTrack*)track;
@end
UPRTCAudioDecibelDelegate #
@class UPRTCPeerTrack;
@protocol UPRTCAudioDecibelDelegate
@required
// db 0 ~ 100
- (void)onDecibel:(double)db peerTrack:(UPRTCPeerTrack*)track;
@end
UPeerTrackScore #
@interface UPeerTrackScore : NSObject
// 媒体的设备类型,参照上UPRTCPeerTrack里的宏定义,例如 UPRTC_DEVICE_CAMERA
@property(nonatomic, strong) NSString* deviceType;
// 分数,自己->服务端的网络分数
@property(nonatomic, assign) int score;
// 远程分数/对方分数,Track所有者/生产者->服务端的网络分数,对自己生产的Track无效
@property(nonatomic, assign) int remoteScore;
// 当Track使用分层编码(多路RTP流),代表每一路RTP流分数。
@property(nonatomic, strong) NSArray<USimulcastScore*>* scores;
@end
USimulcastScore #
RTP流分数
@interface USimulcastScore : NSObject
// 多路RTP流的索引,表示分数是哪一路rtp流的
@property(nonatomic, assign) int index;
// RTP同步源标识
@property(nonatomic, assign) int ssrc;
// rtp id
@property(nonatomic, strong) NSString* rid;
// 分数
@property(nonatomic, assign) int score;
@end