//
//  RTCXPlayerDelegate.h
//  LinkvisualMedia
//
//  Created by Apple on 2024/8/26.
//

#import <Foundation/Foundation.h>
#import <RTCXMedia/RTCXPlayerInterface.h>
NS_ASSUME_NONNULL_BEGIN

@protocol RTCXPlayerDelegate <NSObject>
/**
 player播放状态回调

 @param playState player状态（RTCXCameraPlayerState）
 @param code player错误码
 */
- (void)onPlayStateChanged:(RTCXCameraPlayerState)playState code:(int)code;

@optional
/**
 视频录制回调

 @param currentTime 回调当前录制时间
 @param filePath 回调数据路径（filePath可能回调多次，每次收到filePath时，App可以保存数据）
 @param stopped 录制是否完全结束
 @param error 视频录制错误
 */
- (void)onPlayerMp4Record:(NSInteger)currentTime filePath:(NSString *)filePath stopped:(BOOL)stopped error:(NSError *)error;
/**
 当打开player全链路日志开关时，数据返回

 @param data 返回的数据
 */
- (void)onPlayerDataCollection:(NSString *)data;
/**
 video size 更新回调

 @param size 宽、高
 */
- (void)onPlayFrameChanged:(CGSize)size;
/**
 播放trace回调（可统计耗时）

 @param playTrace 播放trace（IOTPlayTraces）
 @param tempstime trace发生时间点
 @param msg 显示消息
 */
- (void)onPlayTracesChanged:(IOTPlayTraces)playTrace time:(NSInteger)tempstime message:(nullable NSString *)msg;
/**
 点云数据回调

 @param data 点云数据
 @param size 数据大小
 */
- (void)onPlayerDianyunData:(const uint8_t *)data size:(int32_t)size;
/**
 编码视频数据回调，当初始化播放器时设置入参RTCXPlayInfo.externalRenderer = YES，才会有该回调

 @param data 编码数据
 @param size 数据大小
 @param codecType 编码类型， 0：none；1：H264；2：H265； 3：max；
 @param timestamp 时间戳（单位：毫秒）
 @param utcTime utc时间（单位：毫秒）
 */
- (void)onPlayerEncodedVideoData:(const uint8_t *)data size:(int32_t)size codecType:(int32_t)codecType timestamp:(uint64_t)timestamp utcTime:(int64_t)utcTime;
/**
 编码音频数据回调，当初始化播放器时设置入参RTCXPlayInfo.externalRenderer = YES，才会有该回调

 @param data 编码数据
 @param size 数据大小
 @param codecType 编码类型，0：none；1：aac；2：pcm_alaw； 3：pcm_mulaw；4：g726；5：opus；6：max；
 @param timestamp 时间戳（单位：毫秒）
 @param sampleRate 采样率
 @param channelNum 通道数
 */
- (void)onPlayerEncodedAudioData:(const uint8_t *)data size:(int32_t)size codecType:(int32_t)codecType timestamp:(uint64_t)timestamp sampleRate:(int32_t)sampleRate channelNum:(int32_t)channelNum;
/**
 自定义数据SEI(如：追踪区域)回调

 @param data 编码数据
 @param size 数据大小
 */
- (void)onPlayerCustomData:(const uint8_t *)data size:(int32_t)size;
/**
  播放器解码帧数据回调（非外部渲染时回调）
 */
- (void)onPlayerNativeVideoFrameBuffer:(CVPixelBufferRef)pixelBufferRef;
/**
 播放器当前播放时间、镜头ID、设备deviceName回调
 
 @param currentTime 当前播放时间戳
 @param lensId 镜头ID
 @param deviceName 设备deviceName
 */
- (void)onPlayerCurrentTime:(long long)currentTime lensId:(int )lensId deviceName:(NSString *)deviceName;
@end

NS_ASSUME_NONNULL_END
