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
上次更新: 8/27/2024, 7:32:11 PM