You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

94 lines
4.9 KiB

package com.inspect.nvr.hik.vo;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
/** 海康实时预览所需的 FFmpeg、媒体网关和超时配置。 */
@Data
@Component
public class HikNvrLiveStreamConfigVo {
/** FFmpeg 可执行文件路径。 */
@Value("${hik.playback.hls.ffmpeg-path:C:/tools/ffmpeg/bin/ffmpeg.exe}")
private String ffmpegPath = "C:/tools/ffmpeg/bin/ffmpeg.exe";
/** ZLMediaKit RTMP 基础地址。 */
@Value("${hik.playback.hls.rtmp-base-url:rtmp://127.0.0.1:1935}")
private String rtmpBaseUrl = "rtmp://127.0.0.1:1935";
/** ZLMediaKit HTTP/HLS 基础地址。 */
@Value("${hik.playback.hls.http-base-url:http://127.0.0.1:18081}")
private String httpBaseUrl = "http://127.0.0.1:18081";
/** 服务端访问 ZLMediaKit HTTP API 的基础地址。 */
@Value("${hik.playback.hls.api-base-url:http://127.0.0.1:18081}")
private String apiBaseUrl = "http://127.0.0.1:18081";
/** ZLMediaKit API 密钥,仅用于服务端就绪探测。 */
@Value("${hik.playback.hls.api-secret:}")
private String apiSecret = "";
/** 实时流启动探测超时时间。现场实测流注册需 2~4 秒,网络闪断后更慢,默认 10 秒。 */
@Value("${hik.playback.live.startup-timeout-millis:10000}")
private long startupTimeoutMillis = 10000L;
/** 同一 NVR 相邻 RTSP 握手的最小间隔。 */
@Value("${hik.playback.live.start-spacing-millis:600}")
private long startSpacingMillis = 600L;
/** 每台 NVR 等待起流的最大任务数,不含正在执行的任务。 */
@Value("${hik.playback.live.max-start-queue-size:8}")
private int maxStartQueueSize = 8;
/** 单次 ZLMediaKit API 连接和读取超时时间。 */
@Value("${hik.playback.live.zlm-api-timeout-millis:300}")
private int zlmApiTimeoutMillis = 300;
/**
* 单路实时流在返回失败前的最大尝试次数。
*
* <p>现场实测:NVR 在 SETUP 阶段返回 500 后,同一 RTSP 地址稍后单独拉取可以成功,
* 说明这类拒绝是瞬时可恢复的,因此允许有限次退避重试。</p>
*/
@Value("${hik.playback.live.max-attempts:3}")
private int maxAttempts = 3;
/** 设备端拒绝后重试前等待设备释放上一次 RTSP 会话的基础时长。 */
@Value("${hik.playback.live.retry-release-wait-millis:1500}")
private long retryReleaseWaitMillis = 1500L;
/** 重试前等待设备释放会话的时长上限。 */
@Value("${hik.playback.live.retry-release-wait-max-millis:5000}")
private long retryReleaseWaitMaxMillis = 5000L;
/** 停流时等待 FFmpeg 优雅退出(发送 RTSP TEARDOWN)的最长时间。 */
@Value("${hik.playback.live.stop-grace-millis:2000}")
private long stopGraceMillis = 2000L;
/** 单台 NVR 允许同时播放的实时流上限,0 表示不限制。 */
@Value("${hik.playback.live.max-sessions-per-nvr:8}")
private int maxSessionsPerNvr = 8;
/** 是否回收长时间无人观看的实时流。 */
@Value("${hik.playback.live.idle-reap-enabled:true}")
private boolean idleReapEnabled = true;
/** 无人观看多少毫秒后回收实时流。 */
@Value("${hik.playback.live.idle-reader-timeout-millis:600000}")
private long idleReaderTimeoutMillis = 600000L;
/**
* 实时预览是否优先直连摄像机取流。
*
* <p>CVR(中心存储)等设备的远程转发额度很小,直连摄像机可以避开该瓶颈;直连不可达或
* 鉴权失败时会自动回退到原有的 IVS/NVR 取流路径。</p>
*/
@Value("${hik.playback.live.prefer-camera-direct:true}")
private boolean preferCameraDirect = true;
/** 直连摄像机使用的 RTSP 端口。 */
@Value("${hik.playback.live.camera-rtsp-port:554}")
private int cameraRtspPort = 554;
/** 直连摄像机使用的账号;为空时沿用所属 NVR 的数据库账号。 */
@Value("${hik.playback.live.camera-username:}")
private String cameraUsername = "";
/** 直连摄像机使用的密码;为空时沿用所属 NVR 的数据库密码。 */
@Value("${hik.playback.live.camera-password:}")
private String cameraPassword = "";
/** 直连摄像机 RTSP 端口连通性探测超时时间。 */
@Value("${hik.playback.live.camera-probe-timeout-millis:500}")
private int cameraProbeTimeoutMillis = 500;
/**
* 同一 IP 多通道相机的相机内通道分配顺序。
*
* <p>{@code asc}(默认)按平台通道编码升序分配 1..N,{@code desc} 反向。
* 双光谱相机优先按名称判断镜头(热成像/测温 → 相机通道 1,可见光 → 2),
* 名称无法区分时才使用本顺序;现场若发现两个镜头画面互换,改成 {@code desc} 即可。</p>
*/
@Value("${hik.playback.live.camera-channel-order:asc}")
private String cameraChannelOrder = "asc";
}