大量更新

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=36.133.66.183
LIVE_IP_PRIVATE=192.168.1.6
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=31935
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=8088
## live-op, oss 访问 → MinIO
OSS_ENDPOINT=http://192.168.1.6: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.1.3: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/zlm:v2.7.3
LIVE_IMAGE_ZLM_OSS=harbor.cdcyy.com.cn/cmii/cmii-zlm-oss-adaptor:v2.7.3-light
LIVE_IMAGE_LIVE_OP=harbor.cdcyy.com.cn/cmii/cmii-live-operator:v5.7.0

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.1.3}
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://36.133.66.183:31935"
rtsp: "rtsp://${LIVE_IP_PUBLIC}:${LIVE_ZLM_PORT_RTSP}"
srt: "srt://${LIVE_IP_PUBLIC}:${LIVE_ZLM_PORT_HTTP}"
flv: "http://36.133.66.183:8088/zlm/flv"
hls: "http://36.133.66.183:8088/zlm/hls"
rtc: "http://36.133.66.183:8088/zlm/webrtc"
whip: "http://36.133.66.183:8088/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:8088/404"
on-play:
- "http://127.0.0.1:8088/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:8088"
# 查询业务信息(公司、用户), 存储配额
cloud_live: "http://192.168.34.245:32046"
minio:
endpoint: "http://192.168.1.6:39000"
access_key: "cmii"
secret_key: "B#923fC7mk"
with_meta: true
bucket_light: "ilm-detect"
bucket_uavms: "ilm-detect"
mysql:
host: 192.168.1.3
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.1.3
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:8088/hooks/on_play
on_publish = http://127.0.0.1:8088/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 = 36.133.66.183
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,74 @@
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.1.3
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