import type { TrafficControlFocusOnMode, ZegoGeoFenceType, ZegoStreamRelayCDNInfo, ZegoWebPublishOption, PublisherVideoEncoderChangedCallBack, ZegoWebPlayOption } from '../../code/zh/ZegoExpressEntity.web'; import { WebRTCCenterServerSignal } from '../webrtc/modules/webrtcCenterServerSignal'; import { StreamInfo, User, ENUM_LOG_LEVEL, E_CLIENT_TYPE, QualityGrade, ResourceMode } from './zego.entity'; export declare enum ZegoFencing { CN = 2, NA = 3, EU = 4, AS = 5, IN = 6, NCN = 7 } export declare enum ZegoSEIType { /** * 采用 SEI (nalu type = 6,payload type = 243) 类型打包,此类型是 SEI 标准未规定的类型,跟视频编码器或者视频文件中的 SEI 不存在冲突性,用户不需要根据 SEI 的内容做过滤。 * SDK 默认发送 SEI 采用此种类型 */ ZegoDefined = 0, /** * 采用 SEI (nalu type = 6,payload type = 5) 类型打包,H.264 标准对于此类型有规定的格式:startcode + nalu type(6) + payload type(5) + len + pay load(uuid + context)+ trailing bits; * 因为视频编码器自身会产生 payload type 为 5 的 SEI,或者使用视频文件推流时,视频文件中也可能存在这样的 SEI,所以使用此类型时,用户把 uuid + context 当作一段 buffer 塞给次媒体的发送接口; * 此时为了区别视频编码器自身产生的 SEI, App 在发送此类型 SEI 时,可以填写业务特定的uuid(uuid长度为16字节),接收方使用SDK 解析payload type为 5的SEI时,会根据设置的过滤字符串过滤出 uuid相符的 SEI 抛给业务,如果没有设置过滤字符串,SDK会把所有收到的SEI都抛给业务方; * uuid过滤字符串设置接口,setSEIConfig设置的uuid过滤字符串。 */ UserUnregister = 1 } export declare const enum SessionType { Publish = 0, Play = 1, NetProb = 2 } export interface WebConfig { nickName?: string; logLevel?: ENUM_LOG_LEVEL; logUrl?: string; remoteLogLevel?: ENUM_LOG_LEVEL; debug?: boolean; qualityInterval?: number; userUpdate?: boolean; } export interface ParamsExt { keyframe_intv?: number; min_play_buf_level_ms?: number; tc_type?: number; video_content_type?: number; sei_filter_pass?: number; client_class_type?: number; video_stream_type?: number; zg_proxy?: number; coturn_internal?: number; auto_switch_turn_type?: number; ktv_device_delay?: number; sync_ntp?: number; play_jitter_level?: number; tc_focuson_mode?: TrafficControlFocusOnMode; tc_min_video_kbps?: number; proto_flags?: number; adaptive_switch?: number; adaptive_template_id_list?: string; enable_vid_clock_rate_est?: number; req_poster_type?: number; } export interface WebListener { roomStreamUpdate: (roomID: string, updateType: 'DELETE' | 'ADD', streamList: StreamInfo[], extendedData: string) => void; streamExtraInfoUpdate: (roomID: string, streamList: { streamID: string; user: User; extraInfo: string; }[]) => void; playerStateUpdate: (result: { streamID: string; state: 'PLAYING' | 'NO_PLAY' | 'PLAY_REQUESTING'; errorCode: number; extendedData: string; }) => void; publisherStateUpdate: (result: { streamID: string; state: 'PUBLISHING' | 'NO_PUBLISH' | 'PUBLISH_REQUESTING'; errorCode: number; extendedData: string; }) => void; screenSharingEnded: (stream: MediaStream) => void; publishQualityUpdate: (streamID: string, publishStats: WebPublishStats) => void; playQualityUpdate: (streamID: string, playStats: WebPlayStats) => void; remoteCameraStatusUpdate: (streamID: string, status: 'OPEN' | 'MUTE') => void; remoteMicStatusUpdate: (streamID: string, status: 'OPEN' | 'MUTE') => void; soundLevelUpdate: (soundLevelList: Array<{ streamID: string; soundLevel: number; type: string; }>) => void; capturedSoundLevelUpdate: (level: number) => void; videoDeviceStateChanged: (updateType: 'DELETE' | 'ADD', deviceInfo: Device) => void; audioDeviceStateChanged: (updateType: 'DELETE' | 'ADD', deviceType: 'Input' | 'Output', deviceInfo: Device) => void; deviceError: (errorCode: number, deviceName: string) => void; receiveRealTimeSequentialData: (byte: ArrayBuffer, dataLength: number, streamID: string) => void; /** * 收到远端流的 SEI 内容 * 拉流成功后,当远端流调用 sendSEI 后,本端会收到此回调。 * 若只拉纯音频流,将收不到推流端发送的 SEI 信息。 * @param streamID 拉流的流 ID * @param data SEI 内容 */ playerRecvSEI: (streamID: string, data: Uint8Array) => void; beautyEffectError: (stream: MediaStream, errorCode: number, extendedData: string) => void; backgroundEffectError: (stream: MediaStream, errorCode: number, extendedData: string) => void; exceptionUpdate: (stream: MediaStream, eventData: ExceptionData) => void; networkQuality: (userID: string, upstreamQuality: QualityGrade, downstreamQuality: QualityGrade) => void; mixerSoundLevelUpdate: (soundLevels: Map) => void; autoMixerSoundLevelUpdate: (soundLevels: Map) => void; mixerRelayCDNStateUpdate: (taskID: string, infoList: Array) => void; recvExperimentalAPI: (content: Record) => void; playerVideoTrackUpdate: (streamID: string, track: MediaStreamTrack) => void; playerAudioTrackUpdate: (streamID: string, track: MediaStreamTrack) => void; publisherVideoEncoderChanged: PublisherVideoEncoderChangedCallBack; } export type webPublishOption = Omit & { videoCodec?: ZegoVideoCodec; forceSynchronousNetworkTime?: 0 | 1; cdnUrl?: string; setDeviceDelayByUser?: number; audioBitRate?: number; }; export type webPlayOption = Omit & { resourceMode?: ResourceMode; videoCodec?: ZegoVideoCodec; }; export interface Geo { type: ZegoGeoFenceType; areaList: number[]; } export interface MediaDescriptionParams { type?: number; sdp?: string; miniSdp?: Uint8Array; keyframe_intv?: number; min_play_buf_level_ms?: number; paramsExt?: ParamsExt; } export interface CreateSessionWithSdpOptions { seq: number; type: SessionType; mode: number; streamId: string; videoInfo?: { [key: string]: any; }; strAuthParam: string; sdp?: string; miniSdp?: Uint8Array; serverHost: string; playBufLevel?: number; params: string; paramsExt: ParamsExt; roomID: string; geo: Geo; transCodecID?: number; transCodecSuffix?: string; ipV6Prefer?: number; } export interface DispatchGwNodesParams { type: SessionType; streamID: string; geo: Geo; transCodecID?: number; transCodecSuffix?: string; ipV6Prefer: number; } export interface CreateSessionParams { type: SessionType; mode: number; streamID: string; strAuthParam: string; serverHost: string; params: string; roomID: string; geo: Geo; transCodecID?: number; transCodecSuffix?: string; ipV6Prefer: number; } interface CapabilityError { name?: string; message?: string; } export interface CapabilityDetection { webRTC: boolean; customCapture: boolean; camera: boolean; microphone: boolean; videoCodec: { H264: boolean; H265: boolean; VP8: boolean; VP9: boolean; }; screenSharing: boolean; errInfo: { webRTC?: CapabilityError; customCapture?: CapabilityError; camera?: CapabilityError; microphone?: CapabilityError; extendedDate?: string; }; } export interface CapabilityDetectionSingle { result: boolean; errInfo: { webRTC?: CapabilityError; customCapture?: CapabilityError; camera?: CapabilityError; microphone?: CapabilityError; extendedDate?: string; }; } export interface SupportVideoCodeSucCall { (rtcCodec: { webRTC: boolean; H264: boolean; VP8: boolean; VP9: boolean; H265: boolean; }, error?: any): void; } export type SupportVideoType = "VP8" | "H264" | "H265"; export declare const ERROR_CODES: { ROOM_SESSION_ID_ERR: number; FETCH_TRANS_UNKNOWN_CHANNEL: number; FETCH_TRANS_UNKNOWN_TYPE: number; FETCH_TRANS_WRONG_SEQ: number; }; export interface DataStatisticsItemEvent { event: string; event_time: number; time_consumed?: number; msg_ext?: { [index: string]: string | number; }; } export interface DataStatisticsItem { event_time: number; time_consumed: number; error: number; message: string; events: DataStatisticsItemEvent[]; seq?: number; event_id?: string; msg_ext?: any; itemtype?: string; event?: string; client_type?: E_CLIENT_TYPE; } export interface DataStatistics { [index: string]: DataStatisticsItem; } export interface TurnSecret { turn_username: string; turn_auth_key: string; } export declare enum ENUM_SIGNAL_STATE { disconnected = 0, connecting = 1, connected = 2 } export declare enum ENUM_PROBE_STATE { tryProbe = 0, probed = 2 } export declare enum HandleTrackType { replaceNew = 0, changeResolution = 1 } export interface SignalConfig { path: string; query: string; encode?: boolean; messageType?: number; } export interface UpdateVideoInfo { width?: number; height?: number; frameRate?: number; bitRate?: number; startBitrate?: 'default' | 'target'; minBitrate?: number; keyFrameInterval?: number; channelCount?: number; audioBitrate?: number; contentHint?: string; } export declare const STREAM_DELETE_REASON: any; export interface PublishQualityInfo { stream_id: string; session_id: number; video_width: number; video_height: number; infos: Array; room_id: string; evnvironment: number; room_session_id: number; resource_type: ResourceType; ipv4?: number; ipv6?: string; } declare enum ResourceType { UNKNOWN = 0, CDN = 1, RTC = 2, L3 = 3 } export interface PlayQualityInfo { stream_id: string; session_id: number; video_width: number; video_height: number; infos: Array; room_id: string; room_session_id: number; resource_type: ResourceType; ipv4?: number; ipv6?: string; } export interface PublishInfo { audio_bitrate: number; video_bitrate: number; video_capture_fps?: number; video_network_fps?: number; uplink_plr?: number; rtt?: number; audio_network_fps?: number; captured_sound_level?: number; audio_codec_name?: string; audio_FPS?: number; audio_input_level?: number; audio_level?: number; audio_mute_state?: string; audio_packets_lost?: number; audio_packets_lost_rate?: number; audio_quality?: number; audio_target_bitrate?: number; codec_implementation_name?: string; current_round_trip_time?: number; video_target_FPS?: number; video_transfer_FPS?: number; goog_actual_enc_bitrate?: number; goog_available_send_bandwidth?: number; goog_bandwidth_limited_resolution?: boolean; goog_cpu_limited_resolution?: boolean; goog_frame_height_input?: number; goog_frame_width_input?: number; goog_retransmit_bitrate?: number; goog_target_enc_bitrate?: number; muted?: boolean; nack_count?: number; volume?: number; paused?: boolean; pli_count?: number; sampling_rate?: number; send_level?: number; sink_id?: string; total_round_trip_time?: number; video_codec_name?: string; video_mute_state?: string; video_packets_lost?: number; video_packets_lost_rate?: number; video_quality?: number; video_target_bitrate?: number; sample_time_offset?: number; } export interface PlayInfo { audio_bitrate?: number; video_bitrate?: number; video_network_fps?: number; audio_break_count?: number; video_break_count?: number; downlink_plr?: number; peer_to_peer_plr: number; peer_to_peer_delay: number; audio_network_fps?: number; audio_break_duration?: number; video_break_duration?: number; audio_break_rate?: number; video_break_rate?: number; audio_break_cancel?: number; video_break_cancel?: number; rtt?: number; rendered_sound_level?: number; audio_break_cancel_duration?: number; video_break_cancel_duration?: number; audio_decode_time?: number; video_decode_time?: number; real_sampling_interval?: number; mos?: number; video_frames_decoded?: number; video_frames_dropped?: number; nack_count?: number; pli_count?: number; total_round_trip_time?: number; audio_codec_name?: string; audio_level?: number; audio_packets_lost?: number; audio_packets_lost_rate?: number; sampling_rate?: number; audio_quality?: number; video_quality?: number; video_transfer_FPS?: number; video_packets_lost?: number; video_packets_lost_rate?: number; video_codec_name?: string; goog_available_send_band_width?: string; codec_implementation_name?: string; video_mute_state?: string; audio_mute_state?: string; muted?: boolean; paused?: boolean; sink_id?: string; audio_jitter?: number; sample_time_offset?: number; } export interface CandidateStats { candidateType?: string; networkType?: string; relatedAddress?: string; relayProtocol?: string; url?: string; } export type CandidateStatsKey = keyof CandidateStats; export declare const MINIUM_HEARTBEAT_INTERVAL = 3000; export declare const SERVER_ERROR_CODE = 10000; export declare const ICE_DISCONNECT_MAX_TIME = 15000; export interface WaitingInfo { streamID: string; success: Function; error: Function | undefined; } export interface ChargeInfo { is_publishing?: number; play_stream_resolution_infos?: Array; play_max_audio_bitrate?: number; play_l3_max_audio_bitrate?: number; play_l3_stream_resolution_infos?: { video_width: number; video_height: number; count: number; }[]; no_playing?: number; } export interface ResolutionInfo { video_width: number; video_height: number; count: number; } export interface ChargeInfos { timestamp_offset_begin: number; timestamp_offset_end: number; timestamp_diff_flag: number; timestamp_diff: number; room_id: string; infos: Array; } export interface ResolutionInfo { video_width: number; video_height: number; count: number; } export declare enum UpdateQualityType { publish_quality = 0, play_quality = 1, charge = 2 } export declare enum QUALITYLEVEL { low = 1, stantard = 2, hight = 3, custome = 4 } export interface MediaStreamConstraints { audio?: boolean; audioInput?: string; video?: boolean; facingMode?: 'user' | 'environment'; videoInput?: string; videoQuality?: QUALITYLEVEL; externalCapture?: boolean; height?: number | ConstraintExtend; frameRate?: number | ConstraintExtend; width?: number | ConstraintExtend; bitRate?: number; bitrate?: number; audioBitrate?: number; externalMediaStream?: MediaStream; noiseSuppression?: boolean; autoGainControl?: boolean; echoCancellation?: boolean; mediaSource?: 'screen' | 'application' | 'window'; screen?: boolean; source?: HTMLElement | MediaStream; channelCount?: 1 | 2; startBitrate?: 'default' | 'target'; minBitrate?: number; sourceID?: string; videoOptimizationMode?: 'default' | 'motion' | 'detail'; keyFrameInterval?: number; } export interface ConstraintExtend { exact?: number; ideal?: number; max?: number; min?: number; } export interface CameraConstraints { audio?: boolean; audioInput?: string; video?: boolean; height?: number | ConstraintExtend; frameRate?: number | ConstraintExtend; width?: number | ConstraintExtend; bitRate?: number; bitrate?: number; startBitrate?: 'default' | 'target'; minBitrate?: number; audioBitrate?: number; facingMode?: string; videoInput?: string; videoQuality?: QUALITYLEVEL; channelCount?: number; ANS?: boolean; AGC?: boolean; AEC?: boolean; videoOptimizationMode?: 'default' | 'motion' | 'detail'; keyFrameInterval?: number; } export type ScreenConstrains = { audio?: boolean; videoQuality?: 1 | 2 | 3 | 4; bitRate?: number; bitrate?: number; frameRate?: number | ConstraintExtend; width?: number | ConstraintExtend; height?: number | ConstraintExtend; sourceID?: string; videoOptimizationMode?: 'default' | 'motion' | 'detail'; startBitrate?: 'default' | 'target'; minBitrate?: number; captureElement?: HTMLElement; audioBitrate?: number; keyFrameInterval?: number; } | boolean; export type CustomConstrains = { source: HTMLMediaElement | MediaStream; bitRate?: number; bitrate?: number; audioBitrate?: number; channelCount?: number; videoOptimizationMode?: 'default' | 'motion' | 'detail'; keyFrameInterval?: number; }; export interface Constraints { camera?: CameraConstraints; screen?: ScreenConstrains; custom?: CustomConstrains; } export interface ZegoStreamOptions { autoCapture?: boolean; autoPlay?: boolean; captureView?: HTMLElement; view?: HTMLElement; multiplacePreview?: boolean; videoBitrate?: number | { bitrate?: number; startBitrate?: 'default' | 'target'; minBitrate?: number; }; audioBitrate?: number; camera?: { video?: boolean | ZegoCaptureCamera; audio?: boolean | ZegoCaptureMicrophone; }; screen?: { video?: boolean | ZegoCaptureScreenVideo; audio?: boolean | ZegoCaptureScreenAudio; }; custom?: { video?: ZegoCustomVideo; audio?: ZegoCustomAudio; }; } export interface ZegoCaptureMicrophone { input?: string; channelCount?: 1 | 2; ANS?: boolean; AGC?: boolean; AEC?: boolean; } export interface ZegoCaptureCamera { input?: string; quality?: 1 | 2 | 3 | 4; facingMode?: 'user' | 'environment'; width?: number | ConstraintExtend; height?: number | ConstraintExtend; frameRate?: number | ConstraintExtend; optimizationMode?: 'default' | 'motion' | 'detail'; keyFrameInterval?: number; } export interface ZegoCaptureScreenVideo { quality?: 1 | 2 | 3 | 4; width?: number | ConstraintExtend; height?: number | ConstraintExtend; frameRate?: number | ConstraintExtend; optimizationMode?: 'default' | 'motion' | 'detail'; /** * 指定屏幕共享画面 ID , 仅限chrome 内核浏览器使用 */ sourceID?: string; keyFrameInterval?: number; captureElement?: HTMLElement; } export interface ZegoCaptureScreenAudio { ANS?: boolean; AGC?: boolean; AEC?: boolean; } export interface ZegoCustomAudio { /** * 第三方源,