#ifndef WEBRTCPUSH_CONFIG_H
#define WEBRTCPUSH_CONFIG_H

/*
 * WEBRTCPUSH_USE_MPP — 推流方式（与 Chromium 浏览器互斥，共用 thread_open_browser 线程）
 *   0：走 Chromium 浏览器推流（opencamsh，原有逻辑）
 *   1：走 libdatachannel 原生推流（摄像头 → MPP/x264 → libdatachannel）
 *
 * 原生分支：v4l2 采集 → mpph264enc（或 x264enc 回退）→ libdatachannel 发送。
 */
#define WEBRTCPUSH_USE_MPP 0

/* 正常固定 24fps；弱网以降码率为主，后续若启用动态帧率也不得低于 22fps。 */
#define WEBRTCPUSH_H264_FPS 24
#define WEBRTCPUSH_H264_MIN_FPS 22
#define WEBRTCPUSH_H264_GOP (WEBRTCPUSH_H264_FPS * 3)  /* 3s; PLI 按需请求 IDR，减少 I 帧码率尖峰 */

/*
 * 与 gst_webrtc_pipeline / jywy 浏览器推流对齐的码率策略。
 * 首屏先用 900kbps，不像 1.4Mbps 那样猛冲，也不要低到一进来就糊。
 * RTCP REMB 只作为码率趋势，下降也做阶梯平滑，避免 MPP 动态切码率时卡顿。
 */
#define WEBRTCPUSH_INITIAL_BITRATE 900000U
#define WEBRTCPUSH_MIN_BITRATE 500000U
#define WEBRTCPUSH_MAX_BITRATE 2800000U
#define WEBRTCPUSH_REMB_UTIL_PERCENT 80U
#define WEBRTCPUSH_REMB_DOWN_MIN_STEP 100000U
#define WEBRTCPUSH_REMB_DOWN_CONFIRMATIONS 4U
#define WEBRTCPUSH_REMB_SEVERE_PERCENT 65U
#define WEBRTCPUSH_BITRATE_RAMP_UP_MS 2500U
#define WEBRTCPUSH_BITRATE_RAMP_DOWN_MS 1500U
#define WEBRTCPUSH_REMB_DOWN_STEP_PERCENT 15U
#define WEBRTCPUSH_REMB_DOWN_STEP_MIN_BPS 80000U
#define WEBRTCPUSH_REMB_DOWN_STEP_MAX_BPS 180000U
#define WEBRTCPUSH_PACING_HEADROOM_PERCENT 140U
#define WEBRTCPUSH_PACING_INTERVAL_MS 5U
#define WEBRTCPUSH_PACING_MAX_BITRATE 4000000U
#define WEBRTCPUSH_PACING_MAX_QUEUE_MS 250U
#define WEBRTCPUSH_PACING_GUARD_COOLDOWN_MS 2000U
/* 首个/刚恢复的 IDR 允许短暂排队，避免首屏关键帧刚发出就被清队列 */
#define WEBRTCPUSH_PACING_IDR_GRACE_MS 800U
/* pacing 清队列后，若近期已有 IDR，不要反复强制 IDR 造成 I 帧风暴 */
#define WEBRTCPUSH_PACING_RESYNC_IDR_MS 5000U

/* RTP 分片与 NACK（MTU=1200，留 SRTP/DTLS/FU 余量） */
#define WEBRTCPUSH_RTP_MAX_FRAGMENT 1050U
#define WEBRTCPUSH_NACK_PACKETS 512U

/* PLI/IDR 节流：避免频繁 force-key-unit 拉高瞬时码率 */
#define WEBRTCPUSH_PLI_IDR_THROTTLE_MS 500U

/* 周期性推流指标日志间隔 */
#define WEBRTCPUSH_STATS_LOG_INTERVAL_MS 8000U

/* 连续发送失败退避与上限 */
#define WEBRTCPUSH_SEND_FAIL_RESET 30U

/* H.264 Baseline@L3.1，兼容性最好 */
#define WEBRTCPUSH_H264_PROFILE_LEVEL_ID "42e01f"

/* 拉帧线程与发送线程之间的有界队列（leaky，满则丢最旧帧） */
#define WEBRTCPUSH_SEND_QUEUE_DEPTH 1U

/* 管道缓冲：运动场景需适度缓存，过低易 pull timeout / 糊屏 */
#define WEBRTCPUSH_MPP_PRE_ENC_BUFFERS 1   /* 编码前 leaky，低延迟 */
#define WEBRTCPUSH_MPP_POST_ENC_BUFFERS 1  /* 编码后保留 AU */
#define WEBRTCPUSH_APPSINK_MAX_BUFFERS 1

/* MJPEG 解压：1=GStreamer CPU jpegdec 优先；0=mppjpegdec 优先 */
#define WEBRTCPUSH_MJPEG_CPU_DECODE 1

/* MPP 码控收紧：低 REMB 时实际 H264 不能长期高于目标太多 */
#define WEBRTCPUSH_MPP_BPS_MIN_PERCENT 60U
#define WEBRTCPUSH_MPP_BPS_MAX_PERCENT 102U
#define WEBRTCPUSH_MPP_BPS_MIN_FLOOR 200000U
#define WEBRTCPUSH_MPP_QP_MAX 48
#define WEBRTCPUSH_MPP_QP_MAX_I 48
#define WEBRTCPUSH_MPP_QP_MIN 18
#define WEBRTCPUSH_MPP_QP_MIN_I 18
#define WEBRTCPUSH_MPP_MIN_FORCE_KEY_UNIT_NS 2000000000ULL

/* 视频采集：auto | /dev/videoN | test（videotestsrc 测试图案） */
#define WEBRTCPUSH_VIDEO_DEVICE "auto"

/*
 * 麦克风采集（仅上行推流到手机，与车机喇叭播放 audioplay/tts 无关）。
 * 留空表示不推音频；hw:X,Y 运行时会转为 plughw:X,Y，并优先经 Pulse 的 input 源采集。
 */
#define WEBRTCPUSH_ALSA_DEVICE "auto"

/* Opus 音频编码参数（上行麦克风推流） */
#define WEBRTCPUSH_OPUS_BITRATE 64000U
#define WEBRTCPUSH_OPUS_CLOCKRATE 48000U
#define WEBRTCPUSH_OPUS_CHANNELS 1
#define WEBRTCPUSH_AUDIO_QUEUE_DEPTH 8U

/* 音频播放（手机->设备）：ALSA 喇叭设备 */
#define WEBRTCPUSH_AUDIO_PLAYBACK_DEVICE "plughw:2,0"

/* 后端音量控制接口 */
#define WEBRTCPUSH_VOLUME_API_BASE "https://fcrs-api.yd-ss.com/api/drive/use/status/"
#define WEBRTCPUSH_VOLUME_INTERVAL_SEC 3
#define WEBRTCPUSH_VOLUME_DEFAULT 0.5


/*
 * 设备侧 DataChannel（myDataChannel）与手机 createDataChannel('init') 争用 SCTP，
 * 易触发 sctpenc association error 并导致管道闪断/进程崩溃。仅推流可不建。
 */
#define WEBRTCPUSH_ENABLE_DATACHANNEL 0

/* WebRTC 信令 WebSocket 主机（路径 /websocket?dev=设备号） */
#define WEBRTCPUSH_SIGNAL_HOST "signal.yd-ss.com"

#define WEBRTCPUSH_DEBUG 0

#endif
