为满足用户将视频会议录制到本地的需求,小鱼SDK为您提供了本地录制方式。(支持版本:v3.3及以上 )
本地录制:会议中所有人都可以发起录制,每个人的录制互不干扰,会议结束后,录制文件存储在录制发起人的本地
/// 开始本地录制
/// - Parameters:
/// - bizId: 唯一ID标识
/// - recordType: 本地录制类型
/// - recordMode: 本地录制模式
/// - resolution: 分辨率
/// - toUpload: 是否上传(暂不支持)
/// - rbInfo: SDK预留信息(暂不可用)
- (void)startLocalRecord:(NSString <em>)bizId
recordType:(XYLocalRecordType)recordType
recordMode:(XYLocalRecordMode)recordMode
resolution:(XYVideoResolution)resolution
toUpload:(BOOL)toUpload
rbInfo:(XYRecordBusinessInfo </em>)rbInfo;
/// 停止本地录制
/// - Parameter bizId: 唯一ID标识
- (void)stopLocalRecord:(NSString <em>)bizId;
/// 更新本地录制布局
/// - Parameter layout: 布局信息
- (void)updateLocalRecordLayout:(XYRecordLayout </em>)layout;
/// 设置本地录制路径
/// - Parameters:
/// - localStorePath: 存储路径
/// - localResourcePath: 资源文件路径
- (void)setRecordingsFilePath:(NSString <em>)localStorePath
localResourcePath:(NSString </em>)localResourcePath;
/// 清除保存的本地录制文件
- (void)clearUpStore;
/// 移除正在进行的本地录制
/// - Parameter records: 本地录制对象数组
- (void)removeRecordings:(NSArray<XYLocalRecording <em>> </em>)records;
/// 本地录制状态变化
/// - Parameters:
/// - isInRecord: 是否在录制
/// - bizId: 唯一ID标识
- (void)xyLinkSDKOnLocalRecordStatusChanged:(BOOL)isInRecord
bizId:(NSString <em>)bizId;
/// 本地录制结果
/// - Parameters:
/// - isSuccess: 是否成功
/// - code: 本地录制错误码
/// - filePath: 存储路径
/// - bizId: 唯一ID标识
- (void)xyLinkSDKOnLocalRecordResult:(BOOL)isSuccess
code:(XYLocalRecordCode)code
filePath:(NSString </em>)filePath
bizId:(NSString <em>)bizId;
/// 本地录制数据库变化
/// - Parameter records: 本地录制对象数组
- (void)xyLinkSDKOnLocalRecordDbChanged:(NSArray<XYLocalRecording </em>> *)records;
/// 本地录制设置存储路径错误回调
/// - Parameter error: 错误码
- (void)xyLinkSDKOnLocalRecordFilePathError:(XYLocalRecordFilePathError)error;
/// 本地录制文件处理完毕回调
/// - Parameter fileName: 文件存储路径
- (void)xyLinkSDKOnLocalRecordFileReady:(NSString *)fileName;
基础流程 | 方法 ---|--- 设置录制文件存储和资源文件路径 | setRecordingsFilePath:localResourcePath: 开始录制 | startLocalRecord:recordType:recordMode:resolution:toUpload:rbInfo: 本地录制状态变化回调 | xyLinkSDKOnLocalRecordStatusChanged:bizId: 更新录制布局(会中layout有变化需及时调用) | updateLocalRecordLayout: 本地录制数据库变化回调 | xyLinkSDKOnLocalRecordDbChanged: 停止录制 | stopLocalRecord: 本地录制结果回调 | xyLinkSDKOnLocalRecordResult:code:filePath:bizId:
// 本地录制错误码
typedef NS_ENUM(NSUInteger, XYLocalRecordCode) {
XYLocalRecordCode_OK,
XYLocalRecordCode_NotSupport, // 不支持本地录制
XYLocalRecordCode_NoInCall, // 未在会议
XYLocalRecordCode_NoSpace, // 存储空间不足
XYLocalRecordCode_AlreadyInRecord, // 已经在录制中
XYLocalRecordCode_Unkonwn
};
// 本地录制类型
typedef NS_ENUM(NSUInteger, XYLocalRecordType) {
XYLocalRecordType_NonCall, // 预留位(暂不支持)
XYLocalRecordType_Call // 会中录制,退会后自动停止录制
};
// 本地录制模式
typedef NS_ENUM(NSUInteger, XYLocalRecordMode) {
XYLocalRecordMode_Film, // 电影模式
XYLocalRecordMode_Resources, // 资源模式(暂不支持)
XYLocalRecordMode_LayoutMux // (暂不支持)
};
// 视频分辨率 : 16/9
typedef NS_ENUM(NSUInteger, XYVideoResolution) {
XYVideoResolution_90P, /<em> 90P(暂不支持) </em>/
XYVideoResolution_180P, /<em> 180P 有效帧率:15fps </em>/
XYVideoResolution_360P, /<em> 360P 有效帧率:15fps|30fps </em>/
XYVideoResolution_720P, /<em> 720P 有效帧率:15fps|30fps </em>/
XYVideoResolution_1080P, /<em> 1080P 有效帧率:15fps|30fps|60fps </em>/
XYVideoResolution_4K, /<em> 4K 有效帧率:30fps </em>/
XYVideoResolution_Unknown
};
@interface XYRecordLayout : NSObject
@property (nonatomic, assign) int canvasAspectWidth; // 画布宽度
@property (nonatomic, assign) int canvasAspectHeight; // 画布高度
@property (nonatomic, copy) NSArray<XYRecordLayoutElement <em>> </em>elements; // 窗口列表
@end
@interface XYRecordLayoutElement : NSObject
@property (nonatomic, strong) XYVideoSourceInfo <em>sourceInfo; // 视频源信息
@property (nonatomic, copy) NSString </em>displayName; // 显示名称
@property (nonatomic, assign) BOOL isVideoReceived; // 视频是否接收
@property (nonatomic, assign) BOOL isAudioMute; // 音频是否mute
@property (nonatomic, assign) float left; // 坐标 均为在canvas 中的比例
@property (nonatomic, assign) float top; // 同上
@property (nonatomic, assign) float width; // 同上
@property (nonatomic, assign) float height; // 同上
@property (nonatomic, assign) BOOL active; // 是否为当前发言者(YES显示蓝框)
@end
@interface XYVideoSource : NSObject
@property (nonatomic, copy) NSString <em>sourceId;
@property (nonatomic, assign) int channelId;
@end
@interface XYVideoSourceInfo : XYVideoSource
@property (nonatomic, assign) BOOL bLocalVideoSource; // 是否本地视频源
@property (nonatomic, assign) BOOL bContent; // 是否为共享
@end
@interface XYLocalRecording : NSObject
@property (nonatomic, assign) NSInteger recordId; // database record id
@property (nonatomic, assign) NSInteger fileSize;
@property (nonatomic, assign) NSInteger sequenceId;
@property (nonatomic, assign) NSInteger needUpload;
@property (nonatomic, assign) NSInteger isLastFile;
@property (nonatomic, copy) NSString </em>eventId; // classId or meetingId
@property (nonatomic, copy) NSString <em>title;
@property (nonatomic, copy) NSString </em>speaker;
@property (nonatomic, copy) NSString <em>confNumber;
@property (nonatomic, copy) NSString </em>recordingId;
@property (nonatomic, copy) NSString *recordingFiles;
@property (nonatomic, assign) long long timeStamp;
@en