//
//  RTCXPlayerModel.h
//  RTCXMedia
//
//  Created by Apple on 2024/9/10.
//

#import <Foundation/Foundation.h>
#import <RTCXMedia/RTCXPlayerEnumDef.h>

NS_ASSUME_NONNULL_BEGIN

@interface RTCXPlayerModel : NSObject

@end
//
typedef NS_ENUM(NSInteger, AIRTCScaleType) {
    AIRTCScaleTypeNormal = 0,     // contents scaled to fit with fixed aspect
    AIRTCScaleTypeFitCenter = 1,  // contents scaled to fit with fixed aspect. remainder is transparent
    AIRTCScaleTypeCenterCrop = 2, // contents scaled to fill with fixed aspect. some portion of content may be clipped.
};
// 设备支持能力选项
typedef NS_ENUM(NSInteger, RTCXDeviceSupportAbility) {
    RTCXDeviceSupportAbility_p2p = 1,     // 支持 rtc-p2p
    RTCXDeviceSupportAbility_cms  = 2,  // 支持rtc-cms
    RTCXDeviceSupportAbility_rtmp = 3,  // 支持rtmp推流
    RTCXDeviceSupportAbility_directStorage = 4,  // 支持直存
    RTCXDeviceSupportAbility_recordingPlan = 5,  // 支持录制计划
    RTCXDeviceSupportAbility_scheduledPowerOffPlan = 6,  // 支持定时关机计划
    RTCXDeviceSupportAbility_dataCompress = 7,  // 支持接收和返回压缩数据
    RTCXDeviceSupportAbility_dianyun = 8,  // 支持点云
    RTCXDeviceSupportAbility_dataChannel = 9,  // 支持dataChannel
    RTCXDeviceSupportAbility_p2pTalk = 10,  // 支持P2P对讲
    RTCXDeviceSupportAbility_mqtt = 11,  // 支持mqtt
    RTCXDeviceSupportAbility_multiLensStream = 12,  // 支持多目CMS合流，云录像合流
    RTCXDeviceSupportAbility_kcp = 13,  // 支持kcp
};

@interface RTCXPlayInfo : NSObject
// 设备型号 如：xLeWcoelZbyOePbJludl 必选
@property (nonatomic, copy) NSString *productKey;
// 设备序列号SN 如：TEST20240820002 必选
@property (nonatomic, copy) NSString *deviceName;
// 平台为设备颁发的ID，设备的唯一标识符 必选
@property (nonatomic, copy) NSString *iotId;
// 设备镜头ID 0、1、2 ... 可选
@property (nonatomic, strong) NSNumber *lensId;
// 码流类型，0：主码流； 1：辅码流；2、3、...：其他码流，默认为0
@property (nonatomic, assign) int streamType;
// 是否回调点云数据，默认NO（当需要回调点云数据时可设置YES，并通过- (void)onPlayerDianyunData:(const uint8_t *)data size:(int32_t)size代理方法监听回调）
@property (nonatomic, assign) BOOL isDianyun;
// 是否禁用音频流，默认NO（当不需要音频流时可设置YES,禁用音频流视频播放将不会带声音）
@property (nonatomic, assign) BOOL disableAudioStream;
// 是否使用外部渲染器，默认NO (当需要回调原始编码数据流，用于外部渲染器时，可设置YES，并通过onPlayerEncodedVideoData:size:codecType:timestamp:utcTime:和onPlayerEncodedAudioData:size:codecType:timestamp:sampleRate:channelNum:代理方法监听音视频编码数据回调，此时播放器将不会渲染视频画面)
@property (nonatomic, assign) BOOL externalRenderer;
// 设备属性值字典，可选
@property (nonatomic, strong) NSDictionary *propertyMap;
// 设备套餐信息，可选
@property (nonatomic, strong) NSDictionary *cloudServicesDic;
// 设备类型 0：普通设备；1：专属版设备；2：AP设备；默认0，可选
@property (nonatomic, assign) NSInteger deviceType;
// 是否禁止播放器渲染视频画面，（如果设置YES，播放器将不会渲染视频画面，仅通过onPlayerNativeVideoFrameBuffer：回调native解码数据；此时播放器的截图、渲染效果（缩放、旋转、手势、填充等）功能将失效，需要上层自行实现；默认NO
@property (nonatomic, assign) BOOL nativeExternalOnly;
// 是否禁用视频流，默认NO（如果设备只推音频流，不推视频流时，需要设置该参数为YES）
@property (nonatomic, assign) BOOL disableVideoStream;
// 是否录制静音，默认NO（如果设置YES，当操作边播边录时，App设置了播放静音，录制下来的视频也会静音，否则如果App设置了播放非静音，录制下来的视频也会非静音）
@property (nonatomic, assign) BOOL recordMute;
// 是否同时播放多镜头，默认NO，如果多镜头同时播放时（同时显示多个镜头的播放窗口），必须设置该参数为YES
@property (nonatomic, assign) BOOL multiLensPlay;
// 视频画面缩放类型，默认AIRTCScaleTypeNormal，可选
@property (nonatomic, assign) AIRTCScaleType scaleType;

- (BOOL)isSupportDeviceAbility:(RTCXDeviceSupportAbility)supportAbility;
@end

@interface RTCXPlaybackInfo : NSObject
// startTime 起始时间戳(秒) start = end时一直播下去
@property (nonatomic, assign) NSTimeInterval startTime;
// endTime  结束时间戳(秒) start = end时一直播下去
@property (nonatomic, assign) NSTimeInterval endTime;
// 回放类型
@property (nonatomic, assign) IOTPlaybackType playbackType;
// SD卡文件名，SD卡文件播放时，需要传此参数，可选
@property (nonatomic, copy) NSString *sdFileName;
// SD卡文件开始时间戳(秒)，SD卡文件播放时，需要传此参数，可选
@property (nonatomic, assign) NSTimeInterval sdFileStartTime;
// 网关子设备productKey，如：跨镜头播放子设备时，需要设置该参数， 可选
@property (nonatomic, copy) NSString *subProductKey;
// 网关子设备deviceName，如：跨镜头播放子设备时，需要设置该参数， 可选
@property (nonatomic, copy) NSString *subDeviceName;
// 网关子设备lensId，如：跨镜头播放子设备时，需要设置该参数， 可选
@property (nonatomic, copy) NSNumber *subLensId;
// 扩展信息，如：跨镜头播放子设备时，需要设置子设备列表信息， 可选
@property (nonatomic, copy) NSString *subExtInfo;
@end

@interface RTCXAudioVideoTalkConfig : NSObject
/**
 是否音频通话
 */
@property (nonatomic, assign) BOOL audioTalk;
/**
 是否视频通话
 */
@property (nonatomic, assign) BOOL videoTalk;
/**
 设置视频通话分辨率 width
 */
@property (nonatomic, assign) int videoResolutionRatioWidth;
/**
 设置视频通话分辨率 height
 */
@property (nonatomic, assign) int videoResolutionRatioHeight;
/**
 设置视频通话帧率
 */
@property (nonatomic, assign) int videoFps;
/**
 获取视频通话码率
 */
@property (nonatomic, assign) int videoMaxBitrate;

@end
NS_ASSUME_NONNULL_END
