大量更新
This commit is contained in:
42
72-202602-绵阳飞服/as_lite/as_lite/.env
Normal file
42
72-202602-绵阳飞服/as_lite/as_lite/.env
Normal 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
|
||||
62
72-202602-绵阳飞服/as_lite/as_lite/conf/DataCommitter.py
Normal file
62
72-202602-绵阳飞服/as_lite/as_lite/conf/DataCommitter.py
Normal 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()
|
||||
)
|
||||
|
||||
91
72-202602-绵阳飞服/as_lite/as_lite/conf/live-op.yaml
Normal file
91
72-202602-绵阳飞服/as_lite/as_lite/conf/live-op.yaml
Normal 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
|
||||
62
72-202602-绵阳飞服/as_lite/as_lite/conf/zlm-oss.yaml
Normal file
62
72-202602-绵阳飞服/as_lite/as_lite/conf/zlm-oss.yaml
Normal 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"
|
||||
217
72-202602-绵阳飞服/as_lite/as_lite/conf/zlm.envsubst.ini
Normal file
217
72-202602-绵阳飞服/as_lite/as_lite/conf/zlm.envsubst.ini
Normal 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 打包时,低延迟开关,默认关闭(为0),h264存在一帧多个slice(NAL)的情况,在这种情况下,如果开启可能会导致画面花屏
|
||||
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
|
||||
217
72-202602-绵阳飞服/as_lite/as_lite/conf/zlm.ini
Normal file
217
72-202602-绵阳飞服/as_lite/as_lite/conf/zlm.ini
Normal 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 打包时,低延迟开关,默认关闭(为0),h264存在一帧多个slice(NAL)的情况,在这种情况下,如果开启可能会导致画面花屏
|
||||
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
|
||||
74
72-202602-绵阳飞服/as_lite/as_lite/docker-compose.yaml
Normal file
74
72-202602-绵阳飞服/as_lite/as_lite/docker-compose.yaml
Normal 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
|
||||
|
||||
Reference in New Issue
Block a user