大量更新

This commit is contained in:
zeaslity
2026-05-19 14:28:44 +08:00
parent a8f6bda703
commit 9fc3372fa3
5299 changed files with 423176 additions and 426690 deletions

View File

@@ -0,0 +1,42 @@
##### 流媒体服务所有组件部署在同一台服务器上配置项中IP的值都从下面两个变量获取 #####
## PUBLIC: 外部设备、平台 访问 wvp, zlm 时使用的IP。
## PRIVATE: 内部各组件相互访问时候用的IP。
LIVE_IP_PUBLIC=120.205.80.23
LIVE_IP_PRIVATE=192.168.5.41
LIVE_ZLM_API_PASSWD=035c7GB5cc
LIVE_ZLM_NODE_ID=koisi_gb_216
LIVE_ZLM_PORT_HTTP=7088
LIVE_ZLM_PORT_HTTPS=7089
LIVE_ZLM_PORT_RTMP=51935
LIVE_ZLM_PORT_RTSP=554
LIVE_ZLM_PORT_WEBRTC=57090
LIVE_ZLM_PORT_SRT=7556
LIVE_ZLM_PORT_RTP_PROXY=7100
LIVE_ZLM_PORT_RTP_MIN=30100
LIVE_ZLM_PORT_RTP_MAX=30150
############################ Begin: live-op & oss ############################
## live-op 的http端口
LIVE_OP_PORT_HTTP=9019
## live-op, oss 访问 → MinIO
OSS_ENDPOINT=http://192.168.5.41:39000
OSS_AK=cmii
OSS_SK=B#923fC7mk
CLOUD_LIVE=http://192.168.34.245:32046
## live-op: 数据库默认使用中移凌云的redis和wvp共用本地自带的。
## wvp: 数据库和redis都用本地自带的。
LIVE_OP_DB_ENDPOINT=192.168.5.41:33306
LIVE_OP_DB_USERNAME=k8s_admin
LIVE_OP_DB_PASSWORD=fP#UaH6qQ3)8
LIVE_OP_DB_DATABASE=cmii_live_srs_op
############################ End: live-op & oss ############################
LIVE_IMAGE_ZLM=harbor.cdcyy.com.cn/cmii/cmlc-live/v2.7.5-arm
LIVE_IMAGE_ZLM_OSS=harbor.cdcyy.com.cn/cmii/cmii-zlm-oss-adaptor:v2.7.5-arm
LIVE_IMAGE_LIVE_OP=harbor.cdcyy.com.cn/cmii/cmii-live-operator:v5.8.0-arm

View File

@@ -0,0 +1,62 @@
from typing import Optional
from loguru import logger
from boot.config import CONFIG
from core.beans.enum.UploadStatus import UploadStatus
from core.beans.po.FilePO import FilePO
from core.dao.MysqlRecord import LiveOpRecord, IoTRecord
from core.dao.RabbitMQClient import RabbitMQClient, VideoStreamInfo
from core.pattern.singleton import singleton
@singleton
class DataCommitter:
rabbit: Optional[RabbitMQClient]
def __init__(self):
self.rabbit = RabbitMQClient() if CONFIG.app.modules.light or CONFIG.app.modules.uavms else None
def save_to_db(self, po: FilePO) -> bool:
if CONFIG.app.modules.cmlc:
r = LiveOpRecord(
hub=po.app, stream=po.stream, type="ts", status=UploadStatus.SUCCESS,
fileid=po.uuid, filename=po.relative_path, size=po.size,
time_begin=po.begin, time_end=po.end
).save(force_insert=True)
if r != 1:
logger.error(f"Failed to save LiveOpRecord to DB: {po.filename}, ret: {r}.")
return False
if CONFIG.app.modules.uavms:
r = IoTRecord(
ts_file_name=po.relative_path, start_time=po.begin, end_time=po.end,
file_size=po.size, device_id=po.stream_id, id=po.uuid,
file_type="video", ref_id=po.ref_id, ext_json="{}",
user_id=CONFIG.app.mysql.iot_default_biz_user, ai_object=None,
).save(force_insert=True)
if r != 1:
logger.error(f"Failed to save IoTRecord to DB: {po.filename}, ret: {r}.")
return False
if CONFIG.app.modules.light:
start_timestamp = int(po.begin.timestamp() * 1000)
end_timestamp = int( po.end.timestamp() * 1000)
info = VideoStreamInfo(
start_time=start_timestamp, duration=end_timestamp - start_timestamp,
stream_id=po.stream_id, hub=po.app, stream=po.stream, file_id=po.uuid,
md5=None, name=po.relative_path, type="ts", url=None,
size=po.size, engine_type="zlm"
)
self.rabbit.send(info.to_json())
return True
@staticmethod
def failed_to_sync_to_cloud_live(po: FilePO):
(
LiveOpRecord
.update(status=UploadStatus.FAILED_TO_SYNC_TO_CLOUD_LIVE)
.where(LiveOpRecord.fileid==po.uuid)
.execute()
)

View File

@@ -0,0 +1,91 @@
debug: false
server:
port: ${LIVE_OP_PORT_HTTP}
spring:
application:
name: cmii-live-operator
platform:
info:
name: cmii-live-operator
description: cmii-live-operator
version: 5.7.0
scanPackage: com.cmii.live.op
jackson:
time-zone: GMT+8
mvc:
pathmatch:
matching-strategy: ANT_PATH_MATCHER
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://${LIVE_OP_DB_ENDPOINT:192.168.34.228:3306}/${LIVE_OP_DB_DATABASE}?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: ${LIVE_OP_DB_USERNAME:koisi}
password: ${LIVE_OP_DB_PASSWORD:poi.1122}
redis:
host: ${LIVE_OP_REDIS_HOST:192.168.5.41}
port: ${LIVE_OP_REDIS_PORT:6379}
database: ${LIVE_OP_REDIS_DB:6}
password: ${LIVE_OP_REDIS_PASSWD:koisi}
druid:
mysql:
usePingMethod: false
opentracing:
jaeger:
enabled: false
live:
engine:
type: zlm
endpoint: "http://${LIVE_IP_PRIVATE}:${LIVE_ZLM_PORT_HTTP}"
secret-key: ${LIVE_ZLM_API_PASSWD:035c7GB5cc}
wvp: "http://${LIVE_IP_PRIVATE}:${LIVE_WVP_PORT_HTTP}"
rtcPreferTcp: false
proto:
rtmp: "rtmp://120.205.80.23:31935"
rtsp: "rtsp://${LIVE_IP_PUBLIC}:${LIVE_ZLM_PORT_RTSP}"
srt: "srt://${LIVE_IP_PUBLIC}:${LIVE_ZLM_PORT_HTTP}"
flv: "http://120.205.80.23:9019/zlm/flv"
hls: "http://120.205.80.23:9019/zlm/hls"
rtc: "http://120.205.80.23:9019/zlm/webrtc"
whip: "http://120.205.80.23:9019/zlm/whip"
replay: "http://${LIVE_IP_PRIVATE}:${LIVE_OP_PORT_HTTP}"
hls:
max-ts: 200
interval-ms: 6000
minio:
endpoint: ${OSS_ENDPOINT}
access-key: ${OSS_AK}
secret-key: ${OSS_SK}
bucket: "live-srs-hls"
hook:
on-push:
- "http://127.0.0.1:9019/404"
on-play:
- "http://127.0.0.1:9019/404"
sync:
onStart: false
pool:
core: 8
max: 12
queue: 0
keepalive: 20
interval:
sync: 6000
elect: 8
keepalive: 20
heartbeat: 8
logging:
level:
root: info
com.cmii.live.op.mapper: info

View File

@@ -0,0 +1,62 @@
app:
env: default
listen:
host: 0.0.0.0
port: 7081
thread_pool: 12
file_dir:
shared: "/cmii/share/hls"
backup: "/cmii/backup"
log:
path: "/cmii/logs"
# TRACE DEBUG INFO WARNING ERROR
level: INFO
modules:
# 是否对接老的行业平台, 中移凌云
cmlc: false
# 是否对接监管平台: 报送封面
uavms: false
# 是否对接轻量化平台: 报送RabbitMQ信息
light: true
# 是否开启配额管理, 关闭可以忽略配额
quota: false
# 是否在MinIO异常时, 将文件移到备份目录, 需要正确配置 app.file_dir.backup, 并确保有足够空间
backup: true
# 是否开启调试模式: 即所有文件都录制
debug: false
client:
# 查询是否需要存储
live_op: "http://gb-live-op:9019"
# 查询业务信息(公司、用户), 存储配额
cloud_live: "http://192.168.34.245:32046"
minio:
endpoint: "http://192.168.5.141:39000"
access_key: "cmii"
secret_key: "B#923fC7mk"
with_meta: true
bucket_light: "ilm-detect"
bucket_uavms: "ilm-detect"
mysql:
host: 192.168.5.41
port: 33306
username: k8s_admin
password: fP#UaH6qQ3)8
live_op_db: "cmii_live_srs_op"
live_op_table: "live_segment"
iot_db: "uav_iot_dispatcher"
iot_table: "cmii_uav_video_storage_management"
iot_cache_table: "cmii_uav_video_cache_storage"
# 目前监管系统用户体系不完善但是素材仓库文件需要关联用户ID
iot_default_biz_user: "233"
# 对接轻量化平台
rabbitmq:
host: 192.168.5.41
port: 35672
username: admin
password: nYcRN91r._hj
routing_key: "sky.live.video"

View File

@@ -0,0 +1,217 @@
[api]
apiDebug = 0
secret = ${LIVE_ZLM_API_PASSWD}
snapRoot = ./www/snap/
defaultSnap = ./www/logo.png
downloadRoot = ./www
[ffmpeg]
bin = /usr/bin/ffmpeg
cmd = %s -stream_loop -1 -re -i %s -c:a copy -c:v copy -f flv %s
snap = %s -i %s -y -f mjpeg -frames:v 1 -an %s
log = ./ffmpeg/ffmpeg.log
restart_sec = 0
[protocol]
modify_stamp = 2
enable_audio = 0
add_mute_audio = 0
# auto_close = 0, 通过 hook:on_none_reader 决定是否关闭流。
# =1 不触发 hook 回调,而是将直接关闭流。
auto_close = 0
#推流断开后可以在超时时间内重新连接上继续推流,这样播放器会接着播放。
continue_push_ms = 4000
#平滑发送定时器间隔单位毫秒置0则关闭开启后影响cpu性能同时增加内存
paced_sender_ms = 0
enable_hls = 1
enable_hls_fmp4 = 0
enable_rtmp = 1
enable_ts = 1
enable_fmp4 = 0
# rtsp -> webrtc
enable_rtsp = 1
#是否开启MP4录制
enable_mp4 = 0
mp4_as_player = 0
mp4_max_second = 3600
mp4_save_path = ./www
hls_save_path = ./www/zlm/hls
hls_demand = 0
rtsp_demand = 0
rtmp_demand = 0
ts_demand = 1
fmp4_demand = 1
[general]
enableVhost = 0
flowThreshold = 1024
#如果在这个时间内,该流注册成功,那么会立即返回播放器播放成功
#否则返回播放器未找到该流,该机制的目的是可以先播放再推流
maxStreamWaitMS = 0
#某个流无人观看时触发hook.on_stream_none_reader事件的最大等待时间单位毫秒
streamNoneReaderDelayMS = 120000
resetWhenRePlay = 1
#低延迟模式
mergeWriteMS = 0
mediaServerId = ${LIVE_ZLM_NODE_ID}
wait_track_ready_ms = 8000
wait_add_track_ms = 2000
unready_frame_cache = 96
broadcast_player_count_changed = 0
[hls]
fileBufSize = 65536
segDur = 10
segNum = 10
segDelay = 0
segRetain = 5000
broadcastRecordTs = 0
deleteDelaySec = 20
segKeep = 0
fastRegister = 1
[hook]
enable = 1
on_flow_report =
on_http_access =
on_play = http://${LIVE_IP_PRIVATE}:${LIVE_OP_PORT_HTTP}/hooks/on_play
on_publish = http://${LIVE_IP_PRIVATE}:${LIVE_OP_PORT_HTTP}/hooks/on_push
on_stream_changed = http://${LIVE_IP_PRIVATE}:${LIVE_WVP_PORT_HTTP}/index/hook/on_stream_changed
on_stream_none_reader = http://${LIVE_IP_PRIVATE}:${LIVE_WVP_PORT_HTTP}/index/hook/on_stream_none_reader
on_stream_not_found = http://${LIVE_IP_PRIVATE}:${LIVE_WVP_PORT_HTTP}/index/hook/on_stream_not_found
on_rtp_server_timeout = http://${LIVE_IP_PRIVATE}:${LIVE_WVP_PORT_HTTP}/index/hook/on_rtp_server_timeout
on_send_rtp_stopped = http://${LIVE_IP_PRIVATE}:${LIVE_WVP_PORT_HTTP}/index/hook/on_send_rtp_stopped
on_server_started = http://${LIVE_IP_PRIVATE}:${LIVE_WVP_PORT_HTTP}/index/hook/on_server_started
on_server_keepalive = http://${LIVE_IP_PRIVATE}:${LIVE_WVP_PORT_HTTP}/index/hook/on_server_keepalive
on_server_exited =
# 置空,使用统一的 on_play 鉴权
on_rtsp_auth =
on_rtsp_realm =
on_shell_login =
on_record_mp4 =
on_record_ts =
stream_changed_schemas = rtsp/rtmp/fmp4/ts/hls/hls.fmp4
timeoutSec = 10
alive_interval = 10.0
retry = 1
retry_delay = 4.0
[cluster]
origin_url =
timeout_sec = 15
retry_count = 3
[http]
port = ${LIVE_ZLM_PORT_HTTP}
# 置 0关闭。
# docker-compose 端口不能为0
# 故使用 docker-compose + .env 部署时,不能关闭。
sslport = ${LIVE_ZLM_PORT_HTTPS}
charSet = utf-8
keepAliveSecond = 20
maxReqSize = 40960
notFound = <html> <head><title>404 Not Found</title></head> <body><div>404 Not Found</div></body> </html>
rootPath = ./www
sendBufSize = 65536
dirMenu = 0
virtualPath =
forbidCacheSuffix =
forwarded_ip_header =
allow_cross_domains = 1
allow_ip_range = ::1,127.0.0.1,172.1.0.0-172.31.255.255,192.168.0.0-192.168.255.255,10.0.0.0-10.255.255.255,20.0.0.0-20.255.255.255,50.0.0.0-50.255.255.255
[multicast]
addrMax = 239.255.255.255
addrMin = 239.0.0.0
udpTTL = 64
[record]
appName = record
fileBufSize = 65536
sampleMS = 1000
fastStart = 0
fileRepeat = 0
enableFmp4 = 0
[rtmp]
port = ${LIVE_ZLM_PORT_RTMP}
sslport = 0
handshakeSecond = 8
keepAliveSecond = 8
directProxy = 0
enhanced = 0
[rtp]
audioMtuSize = 480
videoMtuSize = 1400
rtpMaxSize = 10
# rtp 打包时低延迟开关默认关闭为0h264存在一帧多个sliceNAL的情况在这种情况下如果开启可能会导致画面花屏
lowLatency = 0
# 1兼容webrtc; 0兼容老的rtsp设备
h264_stap_a = 1
[rtp_proxy]
port = ${LIVE_ZLM_PORT_RTP_PROXY}
port_range = ${LIVE_ZLM_PORT_RTP_MIN}-${LIVE_ZLM_PORT_RTP_MAX}
dumpDir =
timeoutSec = 8
h264_pt = 98
h265_pt = 99
ps_pt = 96
opus_pt = 100
gop_cache = 0
rtp_g711_dur_ms = 100
#4*1024*1024=4196304
udp_recv_socket_buffer = 4194304
[rtc]
# 可以使用 ',' 提供多个 IP 。
externIP = ${LIVE_IP_PUBLIC}
port = ${LIVE_ZLM_PORT_WEBRTC}
tcpPort = ${LIVE_ZLM_PORT_WEBRTC}
timeoutSec = 8
rembBitRate = 0
preferredCodecA = PCMU,PCMA,opus,mpeg4-generic
preferredCodecV = H264,H265,AV1,VP9,VP8
start_bitrate = 0
max_bitrate = 0
min_bitrate = 0
maxNackMS = 4000
rtpCacheCheckInterval = 96
nackMaxSize = 2048
nackMaxMS = 4000
nackMaxCount = 12
nackIntervalRatio = 1.0
nackRtpSize = 8
[srt]
port = ${LIVE_ZLM_PORT_SRT}
timeoutSec = 4
latencyMul = 4
pktBufSize = 8192
[rtsp]
port = ${LIVE_ZLM_PORT_RTSP}
sslport = 0
authBasic = 0
directProxy = 0
handshakeSecond = 8
keepAliveSecond = 8
lowLatency = 1
rtpTransportType = -1
[shell]
maxReqSize = 1024
port = 0

View File

@@ -0,0 +1,217 @@
[api]
apiDebug = 0
secret = 035c7GB5cc
snapRoot = ./www/snap/
defaultSnap = ./www/logo.png
downloadRoot = ./www
[ffmpeg]
bin = /usr/bin/ffmpeg
cmd = %s -stream_loop -1 -re -i %s -c:a copy -c:v copy -f flv %s
snap = %s -i %s -y -f mjpeg -frames:v 1 -an %s
log = ./ffmpeg/ffmpeg.log
restart_sec = 0
[protocol]
modify_stamp = 2
enable_audio = 0
add_mute_audio = 0
# auto_close = 0, 通过 hook:on_none_reader 决定是否关闭流。
# =1 不触发 hook 回调,而是将直接关闭流。
auto_close = 0
#推流断开后可以在超时时间内重新连接上继续推流,这样播放器会接着播放。
continue_push_ms = 4000
#平滑发送定时器间隔单位毫秒置0则关闭开启后影响cpu性能同时增加内存
paced_sender_ms = 0
enable_hls = 1
enable_hls_fmp4 = 0
enable_rtmp = 1
enable_ts = 1
enable_fmp4 = 0
# rtsp -> webrtc
enable_rtsp = 1
#是否开启MP4录制
enable_mp4 = 0
mp4_as_player = 0
mp4_max_second = 3600
mp4_save_path = ./www
hls_save_path = ./www/zlm/hls
hls_demand = 0
rtsp_demand = 0
rtmp_demand = 0
ts_demand = 1
fmp4_demand = 1
[general]
enableVhost = 0
flowThreshold = 1024
#如果在这个时间内,该流注册成功,那么会立即返回播放器播放成功
#否则返回播放器未找到该流,该机制的目的是可以先播放再推流
maxStreamWaitMS = 0
#某个流无人观看时触发hook.on_stream_none_reader事件的最大等待时间单位毫秒
streamNoneReaderDelayMS = 120000
resetWhenRePlay = 1
#低延迟模式
mergeWriteMS = 0
mediaServerId = koisi_gb_228
wait_track_ready_ms = 8000
wait_add_track_ms = 2000
unready_frame_cache = 96
broadcast_player_count_changed = 0
[hls]
fileBufSize = 65536
segDur = 10
segNum = 10
segDelay = 0
segRetain = 5000
broadcastRecordTs = 1
deleteDelaySec = 20
segKeep = 0
fastRegister = 1
[hook]
enable = 1
on_flow_report =
on_http_access =
on_play = http://127.0.0.1:9019/hooks/on_play
on_publish = http://127.0.0.1:9019/hooks/on_push
on_stream_changed =
on_stream_none_reader =
on_stream_not_found =
on_rtp_server_timeout =
on_send_rtp_stopped =
on_server_started =
on_server_keepalive =
on_server_exited =
# 置空,使用统一的 on_play 鉴权
on_rtsp_auth =
on_rtsp_realm =
on_shell_login =
on_record_mp4 =
on_record_ts = http://127.0.0.1:7081/hooks/on_record_ts
stream_changed_schemas = rtsp/rtmp/fmp4/ts/hls/hls.fmp4
timeoutSec = 10
alive_interval = 10.0
retry = 1
retry_delay = 4.0
[cluster]
origin_url =
timeout_sec = 15
retry_count = 3
[http]
port = 7088
# 置 0关闭。
# docker-compose 端口不能为0
# 故使用 docker-compose + .env 部署时,不能关闭。
sslport = 7089
charSet = utf-8
keepAliveSecond = 20
maxReqSize = 40960
notFound = <html> <head><title>404 Not Found</title></head> <body><div>404 Not Found</div></body> </html>
rootPath = ./www
sendBufSize = 65536
dirMenu = 0
virtualPath =
forbidCacheSuffix =
forwarded_ip_header =
allow_cross_domains = 1
allow_ip_range = ::1,127.0.0.1,172.1.0.0-172.31.255.255,192.168.0.0-192.168.255.255,10.0.0.0-10.255.255.255,20.0.0.0-20.255.255.255,50.0.0.0-50.255.255.255
[multicast]
addrMax = 239.255.255.255
addrMin = 239.0.0.0
udpTTL = 64
[record]
appName = record
fileBufSize = 65536
sampleMS = 1000
fastStart = 0
fileRepeat = 0
enableFmp4 = 0
[rtmp]
port = 31935
sslport = 0
handshakeSecond = 8
keepAliveSecond = 8
directProxy = 0
enhanced = 0
[rtp]
audioMtuSize = 480
videoMtuSize = 1400
rtpMaxSize = 10
# rtp 打包时低延迟开关默认关闭为0h264存在一帧多个sliceNAL的情况在这种情况下如果开启可能会导致画面花屏
lowLatency = 0
# 1兼容webrtc; 0兼容老的rtsp设备
h264_stap_a = 1
[rtp_proxy]
port = 7100
port_range = 30100-30150
dumpDir =
timeoutSec = 8
h264_pt = 98
h265_pt = 99
ps_pt = 96
opus_pt = 100
gop_cache = 0
rtp_g711_dur_ms = 100
#4*1024*1024=4196304
udp_recv_socket_buffer = 4194304
[rtc]
# 可以使用 ',' 提供多个 IP 。
externIP = 120.205.80.23
port = 30090
tcpPort = 30090
timeoutSec = 8
rembBitRate = 0
preferredCodecA = PCMU,PCMA,opus,mpeg4-generic
preferredCodecV = H264,H265,AV1,VP9,VP8
start_bitrate = 0
max_bitrate = 0
min_bitrate = 0
maxNackMS = 4000
rtpCacheCheckInterval = 96
nackMaxSize = 2048
nackMaxMS = 4000
nackMaxCount = 12
nackIntervalRatio = 1.0
nackRtpSize = 8
[srt]
port = 7556
timeoutSec = 4
latencyMul = 4
pktBufSize = 8192
[rtsp]
port = 554
sslport = 0
authBasic = 0
directProxy = 0
handshakeSecond = 8
keepAliveSecond = 8
lowLatency = 1
rtpTransportType = -1
[shell]
maxReqSize = 1024
port = 0

View File

@@ -0,0 +1,75 @@
version: '2.4'
services:
gb-zlm:
image: ${LIVE_IMAGE_ZLM}
restart: always
container_name: gb-zlm
network_mode: host
volumes:
- "./conf/zlm.ini:/home/koisi/zlm.ini"
- "./data/zlm/hls:/home/koisi/zlm/www/zlm/hls"
environment:
TZ: "Asia/Shanghai"
gb-zlm-oss:
image: ${LIVE_IMAGE_ZLM_OSS}
restart: always
container_name: gb-zlm-oss
privileged: true
cpus: 2.0
networks:
- gb28181_net
ports:
- "7081:7081"
volumes:
- "./data/zlm/hls:/cmii/share/hls"
- "./conf/zlm-oss.yaml:/cmii/oss-adaptor/boot/config.yaml"
- "./conf/DataCommitter.py:/cmii/oss-adaptor/core/dao/DataCommitter.py"
gb-live-op:
image: ${LIVE_IMAGE_LIVE_OP}
restart: always
container_name: gb-live-op
networks:
- gb28181_net
ports:
- "${LIVE_OP_PORT_HTTP}:${LIVE_OP_PORT_HTTP}"
volumes:
- "./conf/live-op.yaml:/cmii/bootstrap.yaml"
environment:
LIVE_IP_PUBLIC: ${LIVE_IP_PUBLIC}
LIVE_IP_PRIVATE: ${LIVE_IP_PRIVATE}
LIVE_OP_PORT_HTTP: ${LIVE_OP_PORT_HTTP}
LIVE_WVP_PORT_HTTP: ${LIVE_WVP_PORT_HTTP}
LIVE_OP_REDIS_HOST: 192.168.5.41
LIVE_OP_REDIS_PORT: 36379
LIVE_OP_REDIS_PASSWD: Mcache@4522
LIVE_OP_REDIS_DB: 6
LIVE_OP_DB_ENDPOINT: ${LIVE_OP_DB_ENDPOINT}
LIVE_OP_DB_USERNAME: ${LIVE_OP_DB_USERNAME}
LIVE_OP_DB_PASSWORD: ${LIVE_OP_DB_PASSWORD}
LIVE_OP_DB_DATABASE: ${LIVE_OP_DB_DATABASE}
LIVE_ZLM_PORT_HTTP: ${LIVE_ZLM_PORT_HTTP}
LIVE_ZLM_PORT_HTTPS: ${LIVE_ZLM_PORT_HTTPS}
LIVE_ZLM_PORT_RTMP: ${LIVE_ZLM_PORT_RTMP}
LIVE_ZLM_PORT_RTSP: ${LIVE_ZLM_PORT_RTSP}
LIVE_ZLM_PORT_SRT: ${LIVE_ZLM_PORT_SRT}
LIVE_ZLM_API_PASSWD: ${LIVE_ZLM_API_PASSWD}
OSS_ENDPOINT: ${OSS_ENDPOINT}
OSS_AK: ${OSS_AK}
OSS_SK: ${OSS_SK}
CLOUD_LIVE: ${CLOUD_LIVE}
networks:
gb28181_net:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.5.14.0/24

View File

@@ -0,0 +1,191 @@
spring:
cache:
type: none
mvc:
pathmatch:
matching-strategy: ant_path_matcher
platform:
info:
name: AI原子能力
description: AI原子能力
version: 6.2.0
datasource:
dynamic:
primary: uav_ai_core
datasource:
uav_ai_core:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://helm-mysql:3306/uav_ai_core?characterEncoding=UTF-8&useSSL=true&zeroDateTimeBehavior=convertToNull&&allowMultiQueries=true&serverTimezone=GMT%2B8
username: k8s_admin
password: fP#UaH6qQ3)8
redis:
host: helm-redis-master
port: 6379
database: 0
password: Mcache@4522
redisson:
model: SINGLE
single-server-config:
address: helm-redis-master:6379
database: 0
password: Mcache@4522
rabbitmq:
host: helm-rabbitmq
port: 5672
username: admin
password: nYcRN91r._hj
virtual-host: /
server:
compression:
enabled: true
min-response-size: 1024
mime-types: text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
springdoc:
api-docs:
version: openapi_3_1
group-configs:
- group: common
display-name: 公共能力
paths-to-match:
- /cmii/**
- group: regulator
display-name: 管理端
paths-to-match:
- /regulator/**
- group: all
display-name: 所有的服务能力
paths-to-match:
- /**
override-with-generic-response: true
info:
title: AI原子能力
description: AI原子能力
version: 6.2.0
com:
cmii:
chinamobile:
request:
mapping:
scan:
register-request-mapping: true
group: regulator
logging:
level:
com.cmii.chinamobile: info
minio:
srcId: 1323096648758464519
mqtt:
single:
host: tcp://helm-emqxs:1883
hosts: tcp://helm-emqxs:1883
username: cmlc
password: odD8#Ve7.B
hosts: tcp://helm-emqxs:1883
host: tcp://helm-emqxs:1883
username: cmlc
password: odD8#Ve7.B
qos: 1
connectionTimeout: 10
keepAliveInterval: 20
gzipPayload: false
#消息发布者clientId
publishClientId: ai_core
#消息订阅者clientId
subscribeClientId: ai_core_subscribe
ai:
core:
srcId: 1323096648758464519
ware:
defaultTenant: zjcxy
cityCode: 510100
projCode: demo
printMqttSendMsg: true
printHttpReceiveMsg: true
printMqttReceiveMsg: true
closeLightMqtt: false
cacheWithRedis: false
closePublishStandardMqtt: true
closePublishImageRecord: false
callbackUrl: https://www.demo.uavcmlc.com/uas/api/community/aicore/client/aiware/order/reportAiRecord
tenants:
zjcxy:
# host: https://cxy-stg-soul.vimvp.cn:50920
host: https://soul.gateway.zjcloud.com:50443
path: /uvsg-ai/order/cdfk
ak: 332d17324133bae0
sk: faa05b2072fc4ab881124eef62013066
guochuang:
host: http://api.tools.liandanlu.cn:50000
path: /005
ak: 1b59cfdb4e2d8d0d
sk: e5e5644f41354be8a4acb27e9b1ff37b
yitong:
host: http://183.6.114.147:6007
path:
ak: 1b59cfdb4e2d8d0d
sk: e5e5644f41354be8a4acb27e9b1ff37b
# zyly:
# host: http://192.168.75.14:2334
# path: /uvsg-ai/order/cdfk
# ak: 1b59cfdb4e2d8d0d
# sk: e5e5644f41354be8a4acb27e9b1ff37b
cyy1:
host: http://192.168.36.49:2333
path: /uvsg-ai/order/cdfk
ak: 1b59cfdb4e2d8d0d
sk: e5e5644f41354be8a4acb27e9b1ff37b
cyy2:
host: http://192.168.36.49:2334
path: /uvsg-ai/order/cdfk
ak: 1b59cfdb4e2d8d0d
sk: e5e5644f41354be8a4acb27e9b1ff37b
cyy3:
host: http://192.168.36.49:2335
path: /uvsg-ai/order/cdfk
ak: 1b59cfdb4e2d8d0d
sk: e5e5644f41354be8a4acb27e9b1ff37b
cyy4:
host: http://192.168.36.49:2336
path: /uvsg-ai/order/cdfk
ak: 1b59cfdb4e2d8d0d
sk: e5e5644f41354be8a4acb27e9b1ff37b
qjb:
host: http://uav.qjb1000.com:57893
path: /uvsg-ai/order/cdfk
ak: 1b59cfdb4e2d8d0d
sk: e5e5644f41354be8a4acb27e9b1ff37b
zylybig:
host: http://192.168.35.51:6526
path: /uvsg-ai/order/cdfk
ak: 1b59cfdb4e2d8d0d
sk: e5e5644f41354be8a4acb27e9b1ff37b
# jsj1:
# host: http://183.47.59.221:20197
# path: /uvsg-ai/order/cdfk
# ak: abc
# sk: axxxx
# jsj2:
# host: http://183.47.59.221:20198
# path: /uvsg-ai/order/cdfk
# ak: abc
# sk: axxxx
# jsj3:
# host: http://183.47.59.221:20199
# path: /uvsg-ai/order/cdfk
# ak: abc
# sk: axxxx
# jsj4:
# host: http://183.47.59.221:20194
# path: /uvsg-ai/order/cdfk
# ak: abc
# sk: axxxx
# yanfa2:
# host: http://192.168.75.21:8000
# path: /uvsg-ai/order/cdfk
# ak: 1b59cfdb4e2d8d0d
# sk: e5e5644f41354be8a4acb27e9b1ff37b
#宜通
video:
process:
getUrl: http://192.168.9.4:8088/api/v2/segments/info/batch?type=2

View File

@@ -0,0 +1,194 @@
kind: Deployment
apiVersion: apps/v1
metadata:
name: cmii-uav-ai-core
namespace: xj-aks-uav-260304
labels:
app.kubernetes.io/app-version: 6.2.0
app.kubernetes.io/managed-by: octopus
cmii.app: cmii-uav-ai-core
cmii.type: backend
octopus/control: backend-app-1.0.0
spec:
replicas: 1
selector:
matchLabels:
cmii.app: cmii-uav-ai-core
cmii.type: backend
template:
metadata:
labels:
cmii.app: cmii-uav-ai-core
cmii.type: backend
spec:
volumes:
- name: nfs-backend-log-volume
persistentVolumeClaim:
claimName: nfs-backend-log-pvc
containers:
- name: cmii-uav-ai-core
image: 192.168.5.41:8033/cmii/cmii-uav-ai-core:2.0.0-2026033101-arm
ports:
- name: pod-port
containerPort: 8080
protocol: TCP
env:
- name: K8S_NAMESPACE
value: xj-aks-uav-260304
- name: APPLICATION_NAME
value: cmii-uav-ai-core
- name: CUST_JAVA_OPTS
value: '-Xms200m -Xmx1500m -Dlog4j2.formatMsgNoLookups=true'
- name: NACOS_REGISTRY
value: helm-nacos.cqejpt.svc.cluster.local:8848
- name: NACOS_DISCOVERY_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.podIP
- name: NACOS_DISCOVERY_PORT
value: '8080'
- name: BIZ_CONFIG_GROUP
value: 6.2.0
- name: SYS_CONFIG_GROUP
value: 6.2.0
- name: IMAGE_VERSION
value: 6.2.0
- name: NACOS_USERNAME
value: developer
- name: NACOS_PASSWORD
value: Deve@9128201
- name: POD_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
- name: NODE_NAME
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: spec.nodeName
- name: NODE_IP
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: status.hostIP
- name: LIMIT_CPU
valueFrom:
resourceFieldRef:
containerName: cmii-uav-ai-core
resource: limits.cpu
divisor: '0'
- name: LIMIT_MEMORY
valueFrom:
resourceFieldRef:
containerName: cmii-uav-ai-core
resource: limits.memory
divisor: '0'
- name: REQUEST_CPU
valueFrom:
resourceFieldRef:
containerName: cmii-uav-ai-core
resource: requests.cpu
divisor: '0'
- name: REQUEST_MEMORY
valueFrom:
resourceFieldRef:
containerName: cmii-uav-ai-core
resource: requests.memory
divisor: '0'
resources:
limits:
cpu: '2'
memory: 3Gi
requests:
cpu: 300m
memory: 512Mi
volumeMounts:
- name: nfs-backend-log-volume
mountPath: /cmii/logs
subPath: uavcloud-devflight/cmii-uav-ai-core
livenessProbe:
httpGet:
path: /cmii/health
port: pod-port
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
periodSeconds: 20
successThreshold: 1
failureThreshold: 3
readinessProbe:
httpGet:
path: /cmii/health
port: pod-port
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
periodSeconds: 20
successThreshold: 1
failureThreshold: 3
startupProbe:
httpGet:
path: /cmii/health
port: pod-port
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 3
periodSeconds: 20
successThreshold: 1
failureThreshold: 5
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: Always
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
securityContext: {}
imagePullSecrets:
- name: harborsecret
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: uavcloud.env
operator: In
values:
- yuansong
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
---
kind: Service
apiVersion: v1
metadata:
name: cmii-uav-ai-core
namespace: xj-aks-uav-260304
labels:
app.kubernetes.io/app-version: 6.2.0
app.kubernetes.io/managed-by: octopus
cmii.app: cmii-uav-ai-core
cmii.type: backend
octopus/control: backend-app-1.0.0
spec:
ports:
- name: backend-tcp
protocol: TCP
port: 8080
targetPort: 8080
selector:
cmii.app: cmii-uav-ai-core
cmii.type: backend
type: ClusterIP