大量更新
This commit is contained in:
12
999-部署模板/视频流媒体-helm-2604/Chart.yaml
Normal file
12
999-部署模板/视频流媒体-helm-2604/Chart.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
apiVersion: v2
|
||||
name: cmii-live-services
|
||||
description: to k8s by cmii live
|
||||
type: application
|
||||
version: 1.0.0
|
||||
appVersion: "5.8.0"
|
||||
keywords:
|
||||
- live-stream
|
||||
- gb28181
|
||||
- video
|
||||
maintainers:
|
||||
- name: hujiaxin@sinontt.com
|
||||
228
999-部署模板/视频流媒体-helm-2604/deploy.sh
Normal file
228
999-部署模板/视频流媒体-helm-2604/deploy.sh
Normal file
@@ -0,0 +1,228 @@
|
||||
#!/bin/bash
|
||||
|
||||
# CMII Live Services (Merged) Helm 部署脚本
|
||||
# 特性: WVP + ZLM + ZLM-OSS 合并部署,使用 HostNetwork 模式访问
|
||||
# live-op | live-proxy | live-helper node port 模式访问
|
||||
# ============================说明=====================================
|
||||
# 如果你不需要使用此脚本文件,直接使用 helm install/upgrade ${release_name} . -n ${namespace_name} 启动
|
||||
# 或者 kubectl apply -f templates/** 创建
|
||||
# =====================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# 配置变量 (***配置namespace & releaseName)
|
||||
RELEASE_NAME="helm-live"
|
||||
NAMESPACE="uavcloud-live-test"
|
||||
CHART_PATH="$(cd "$(dirname "$0")" && pwd)"
|
||||
VALUES_FILE="${CHART_PATH}/values.yaml"
|
||||
|
||||
# 颜色输出
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo_info() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
echo_warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
echo_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
echo_step() {
|
||||
echo -e "${BLUE}[STEP]${NC} $1"
|
||||
}
|
||||
|
||||
# 检查前置条件
|
||||
check_prerequisites() {
|
||||
echo_step "检查前置条件..."
|
||||
|
||||
# 检查 kubectl
|
||||
if ! command -v kubectl &> /dev/null; then
|
||||
echo_error "kubectl 未安装,请先安装 kubectl"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 helm
|
||||
if ! command -v helm &> /dev/null; then
|
||||
echo_error "helm 未安装,请先安装 helm 3.x"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查 Kubernetes 连接
|
||||
if ! kubectl cluster-info &> /dev/null; then
|
||||
echo_error "无法连接到 Kubernetes 集群,请检查 kubeconfig 配置"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo_info "前置条件检查通过"
|
||||
}
|
||||
|
||||
# 创建命名空间
|
||||
create_namespace() {
|
||||
echo_step "创建命名空间: ${NAMESPACE}"
|
||||
kubectl create namespace ${NAMESPACE} --dry-run=client -o yaml | kubectl apply -f -
|
||||
}
|
||||
|
||||
# 验证配置文件
|
||||
validate_config() {
|
||||
echo_step "验证配置文件..."
|
||||
|
||||
if [ ! -f "${VALUES_FILE}" ]; then
|
||||
echo_error "配置文件不存在: ${VALUES_FILE}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查必要配置 - 外部依赖必须填写
|
||||
for field in "external.database.host" "external.redis.host" "external.minio.endpoint" "external.rabbitmq.host"; do
|
||||
if grep -q "${field}: \"\"" "${VALUES_FILE}" || grep -q "${field}: ''" "${VALUES_FILE}"; then
|
||||
echo_error "请在 values.yaml 中配置 ${field}"
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
echo_info "配置文件验证通过"
|
||||
}
|
||||
|
||||
# 渲染模板(用于调试)
|
||||
render_templates() {
|
||||
echo_step "渲染 Helm 模板..."
|
||||
helm template ${RELEASE_NAME} "${CHART_PATH}" -n ${NAMESPACE} -f "${VALUES_FILE}" > /tmp/rendered-merged.yaml
|
||||
echo_info "模板已渲染到: /tmp/rendered-merged.yaml"
|
||||
}
|
||||
|
||||
# 安装或升级
|
||||
install_or_upgrade() {
|
||||
echo_step "部署服务..."
|
||||
|
||||
# 检查是否已存在 release
|
||||
if helm status ${RELEASE_NAME} -n ${NAMESPACE} &> /dev/null; then
|
||||
echo_info "检测到已存在的 release,执行升级..."
|
||||
helm upgrade ${RELEASE_NAME} "${CHART_PATH}" \
|
||||
--namespace "${NAMESPACE}" \
|
||||
--values "${VALUES_FILE}" \
|
||||
--timeout 10m
|
||||
else
|
||||
echo_info "执行全新安装..."
|
||||
helm install "${RELEASE_NAME}" "${CHART_PATH}" \
|
||||
--namespace "${NAMESPACE}" \
|
||||
--values "${VALUES_FILE}" \
|
||||
--timeout 10m \
|
||||
--create-namespace
|
||||
fi
|
||||
|
||||
echo_info "部署完成!"
|
||||
}
|
||||
|
||||
# 等待 Pod 就绪
|
||||
wait_for_pods() {
|
||||
echo_step "等待 Pod 就绪..."
|
||||
|
||||
echo_info "等待 Media Suite Pod (包含 WVP + ZLM + ZLM-OSS)..."
|
||||
kubectl wait --for=condition=ready pod \
|
||||
-l app=media-suite \
|
||||
-n "${NAMESPACE}" \
|
||||
--timeout=600s || {
|
||||
echo_warn "Media Suite Pod 可能未就绪,请手动检查"
|
||||
}
|
||||
|
||||
echo_info "等待其他服务 Pod..."
|
||||
kubectl wait --for=condition=ready pod \
|
||||
-l release="${RELEASE_NAME}" \
|
||||
-n "${NAMESPACE}" \
|
||||
--timeout=300s || {
|
||||
echo_warn "部分 Pod 可能未就绪,请手动检查"
|
||||
}
|
||||
}
|
||||
|
||||
# 显示状态
|
||||
show_status() {
|
||||
echo_step "服务状态:"
|
||||
echo ""
|
||||
helm status "${RELEASE_NAME}" -n "${NAMESPACE}"
|
||||
echo ""
|
||||
echo_info "Pod 列表:"
|
||||
kubectl get pods -n "${NAMESPACE}" -l release="${RELEASE_NAME}"
|
||||
echo ""
|
||||
echo_info "Service 列表:"
|
||||
kubectl get svc -n "${NAMESPACE}" -l release="${RELEASE_NAME}"
|
||||
echo ""
|
||||
|
||||
# 获取节点 IP
|
||||
NODE_IP=$(kubectl get nodes -o jsonpath='{.items[0].status.addresses[?(@.type=="InternalIP")].address}' 2>/dev/null || echo "<NODE_IP>")
|
||||
|
||||
echo ""
|
||||
echo_info "========================================="
|
||||
echo_info "服务访问地址"
|
||||
echo_info "========================================="
|
||||
echo_info "Media Suite (HostNetwork 模式):"
|
||||
echo " WVP HTTP: http://${NODE_IP}:$(grep 'http:' "${VALUES_FILE}" | head -1 | awk '{print $2}')"
|
||||
echo " WVP SIP: ${NODE_IP}:$(grep 'sip:' "${VALUES_FILE}" | head -1 | awk '{print $2}')/UDP"
|
||||
echo " ZLM HTTP: http://${NODE_IP}:$(grep 'http:' "${VALUES_FILE}" | head -1 | awk '{print $2}')"
|
||||
echo " ZLM RTMP: rtmp://${NODE_IP}:$(grep 'rtmp:' "${VALUES_FILE}" | head -1 | awk '{print $2}')"
|
||||
echo " ZLM RTSP: rtsp://${NODE_IP}:$(grep 'rtsp:' "${VALUES_FILE}" | head -1 | awk '{print $2}')"
|
||||
echo " ZLM-OSS: http://${NODE_IP}:$(grep 'port:' "${VALUES_FILE}" | grep -A1 'zlmOss' | tail -1 | awk '{print $2}')"
|
||||
echo ""
|
||||
echo_info "其他服务 (NodePort 模式):"
|
||||
echo " Live Operator: http://${NODE_IP}:$(grep 'liveOpNodePort' "${VALUES_FILE}" | awk '{print $2}')"
|
||||
echo " Live Proxy: http://${NODE_IP}:$(grep 'liveProxyNodePort' "${VALUES_FILE}" | awk '{print $2}')"
|
||||
echo " Live Helper: http://${NODE_IP}:$(grep 'liveHelperNodePort' "${VALUES_FILE}" | awk '{print $2}')"
|
||||
}
|
||||
|
||||
# 显示日志查看命令
|
||||
show_log_commands() {
|
||||
echo ""
|
||||
echo_info "========================================="
|
||||
echo_info "日志查看命令"
|
||||
echo_info "========================================="
|
||||
echo_info "Media Suite 容器日志:"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-media-suite -n ${NAMESPACE} -c wvp"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-media-suite -n ${NAMESPACE} -c zlm"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-media-suite -n ${NAMESPACE} -c zlm-oss"
|
||||
echo ""
|
||||
echo_info "其他服务日志:"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-live-op -n ${NAMESPACE}"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-live-proxy -n ${NAMESPACE}"
|
||||
echo " kubectl logs -f deployment/${RELEASE_NAME}-live-helper -n ${NAMESPACE}"
|
||||
}
|
||||
|
||||
# 显示卸载命令
|
||||
show_uninstall_command() {
|
||||
echo ""
|
||||
echo_info "========================================="
|
||||
echo_info "卸载命令"
|
||||
echo_info "========================================="
|
||||
echo " helm uninstall ${RELEASE_NAME} -n ${NAMESPACE}"
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
echo_info "========================================="
|
||||
echo_info "CMII Live Services (Merged) Helm 部署"
|
||||
echo_info "WVP + ZLM + ZLM-OSS 合并部署模式"
|
||||
echo_info "========================================="
|
||||
echo ""
|
||||
|
||||
check_prerequisites
|
||||
validate_config
|
||||
create_namespace
|
||||
install_or_upgrade
|
||||
wait_for_pods
|
||||
show_status
|
||||
show_log_commands
|
||||
show_uninstall_command
|
||||
|
||||
echo ""
|
||||
echo_info "========================================="
|
||||
echo_info "部署完成!"
|
||||
echo_info "========================================="
|
||||
}
|
||||
|
||||
# 执行主函数
|
||||
main "$@"
|
||||
230
999-部署模板/视频流媒体-helm-2604/sql-init/live-op-init.sql
Normal file
230
999-部署模板/视频流媒体-helm-2604/sql-init/live-op-init.sql
Normal file
@@ -0,0 +1,230 @@
|
||||
# live_operator_init
|
||||
CREATE DATABASE IF NOT EXISTS `cmii_live_operator`;
|
||||
USE `cmii_live_operator`;
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_gb_catalog
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_gb_catalog`;
|
||||
CREATE TABLE `live_gb_catalog` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
|
||||
`scope_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'scope id',
|
||||
`create_scope_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'create scope id',
|
||||
`device_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'wvp device_id',
|
||||
`type` tinyint(1) NULL DEFAULT NULL COMMENT 'region or group',
|
||||
`parent_id` bigint(0) NULL DEFAULT NULL COMMENT 'sys parent catalog',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_gb_parent_platform
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_gb_parent_platform`;
|
||||
CREATE TABLE `live_gb_parent_platform` (
|
||||
`id` bigint(0) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id',
|
||||
`platform_id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'parentId',
|
||||
`scope_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'company scope permission id',
|
||||
`shared` tinyint(1) NULL DEFAULT 0 COMMENT 'is read',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `id`(`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_gb_sub_platform
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_gb_sub_platform`;
|
||||
CREATE TABLE `live_gb_sub_platform` (
|
||||
`platform_id` int(0) NOT NULL AUTO_INCREMENT,
|
||||
`platform_name` varchar(96) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`platform_gb_id` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`platform_gb_domain` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`platform_ip` varchar(96) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`platform_port_sip` int(0) NOT NULL,
|
||||
`platform_port_rtmp` int(0) NOT NULL,
|
||||
`platform_port_rtsp` int(0) NULL DEFAULT NULL,
|
||||
`platform_port_srt` int(0) NULL DEFAULT NULL,
|
||||
`platform_port_http` int(0) NULL DEFAULT NULL,
|
||||
`use_https` tinyint(1) NULL DEFAULT NULL,
|
||||
`platform_secret` varchar(96) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`company_id` int(0) NOT NULL,
|
||||
`shared` tinyint(1) NULL DEFAULT 0,
|
||||
PRIMARY KEY (`platform_id`) USING BTREE,
|
||||
UNIQUE INDEX `uniq_gb_id`(`platform_gb_id`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_hub
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_hub`;
|
||||
CREATE TABLE `live_hub` (
|
||||
`id` int(0) NOT NULL AUTO_INCREMENT,
|
||||
`hub` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`dvr` int(0) NOT NULL DEFAULT 0 COMMENT 'days for reserve, 0 for disable',
|
||||
`pub` tinyint(0) NOT NULL DEFAULT 1 COMMENT '0: private; 1: pub play only; 2 pub push only; 3: pub all',
|
||||
`active` tinyint(0) NOT NULL DEFAULT 1 COMMENT '1 yes, 0 no',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uniq_hub`(`hub`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_platform_proxy
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_platform_proxy`;
|
||||
CREATE TABLE `live_platform_proxy` (
|
||||
`platform_id` int(0) NOT NULL AUTO_INCREMENT,
|
||||
`platform_name` varchar(96) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`platform_gb_id` char(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`platform_gb_domain` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`platform_ip` varchar(96) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`platform_port_sip` int(0) NOT NULL,
|
||||
`platform_port_rtmp` int(0) NOT NULL,
|
||||
`platform_port_rtsp` int(0) NULL DEFAULT NULL,
|
||||
`platform_port_srt` int(0) NULL DEFAULT NULL,
|
||||
`platform_port_http` int(0) NULL DEFAULT NULL,
|
||||
`use_https` tinyint(1) NULL DEFAULT NULL,
|
||||
`platform_secret` varchar(96) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`scope_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
|
||||
`shared` tinyint(1) NULL DEFAULT 0,
|
||||
`type` tinyint(1) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`platform_id`) USING BTREE,
|
||||
UNIQUE INDEX `uniq_gb_id`(`platform_gb_id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_record
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_record`;
|
||||
CREATE TABLE `live_record` (
|
||||
`id` int(0) NOT NULL AUTO_INCREMENT,
|
||||
`record_uuid` CHAR(32) NOT NULL COMMENT '业务对外唯一ID,UUID32字符串',
|
||||
`hub` varchar(48) NOT NULL,
|
||||
`stream` varchar(128) NOT NULL,
|
||||
`time_begin` datetime(3) NOT NULL,
|
||||
`time_end` datetime(3) NULL DEFAULT NULL,
|
||||
`size` bigint(0) NOT NULL,
|
||||
`status` tinyint(0) NOT NULL COMMENT '0-ok; 1-trash; 2-deleted; 3-live(完成部分上传,本段记录还未结束,仍在直播中); 4-init(上传首个切片)',
|
||||
`thumbnail_uuid` CHAR(32) NULL DEFAULT NULL,
|
||||
`thumbnail_bucket` varchar(48) NULL DEFAULT NULL,
|
||||
`thumbnail_path` varchar(128) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE INDEX `uniq_record_uuid` (`record_uuid`),
|
||||
UNIQUE INDEX `uniq_hub_stream_time` (`hub`, `stream`, `time_begin`),
|
||||
INDEX `idx_hub_stream_status` (`hub`, `stream`, `status`, `time_begin`),
|
||||
INDEX `idx_time_begin` (`time_begin`)
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_segment
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_segment`;
|
||||
CREATE TABLE `live_segment` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT,
|
||||
`file_uuid` CHAR(32) NOT NULL,
|
||||
`size` bigint(0) NOT NULL,
|
||||
`time_begin` datetime(3) NOT NULL,
|
||||
`time_end` datetime(3) NOT NULL,
|
||||
`status` tinyint(0) NOT NULL COMMENT '0-ok; 1-trash; 2-deleted; 3-uploading',
|
||||
`hub` varchar(48) NOT NULL,
|
||||
`stream` varchar(128) NOT NULL,
|
||||
`type` varchar(12) NOT NULL,
|
||||
`bucket` varchar(32) NOT NULL,
|
||||
`filename` varchar(128) NOT NULL,
|
||||
`record_uuid` CHAR(32) NOT NULL COMMENT '推流记录id',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE INDEX `uniq_file_uuid` (`file_uuid`),
|
||||
UNIQUE INDEX `uniq_hub_stream_time` (`hub`, `stream`, `time_begin`),
|
||||
INDEX `idx_hub_stream_status` (`hub`, `stream`, `status`, `time_begin`),
|
||||
INDEX `idx_time_begin` (`time_begin`),
|
||||
INDEX `idx_record_uuid` (`record_uuid`)
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_stream
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_stream`;
|
||||
CREATE TABLE `live_stream` (
|
||||
`id` char(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '0',
|
||||
`hub` varchar(48) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`stream` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
|
||||
`dvr` int(0) NULL DEFAULT NULL COMMENT 'days for reserve, 0 for disable, null for inherit',
|
||||
`pub` tinyint(0) NOT NULL DEFAULT 4 COMMENT '0: private; 1: pub play only; 2 pub push only; 3: pub all; 4: inherit',
|
||||
`active` tinyint(0) NOT NULL DEFAULT 2 COMMENT '2 for inherit',
|
||||
`activated_after` bigint(0) NULL DEFAULT NULL COMMENT 'sign effective time',
|
||||
`metadata` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'business json',
|
||||
`gb_name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'gb_name',
|
||||
`gb_enabled` tinyint(1) NULL DEFAULT NULL COMMENT '1 enabled ; 0 disabled',
|
||||
`platform_proxy_id` bigint(0) NULL DEFAULT NULL COMMENT 'proxy id',
|
||||
`scope_id` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'scope',
|
||||
`gb_device_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 'gb_id',
|
||||
`stream_push_id` int(0) NULL DEFAULT NULL COMMENT 'stream push id',
|
||||
`gb_id` int(0) NULL DEFAULT NULL COMMENT 'gb id',
|
||||
`pushing` tinyint(1) NULL DEFAULT NULL COMMENT '1 true 0 false',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `uniq_stream`(`hub`, `stream`) USING BTREE
|
||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_token
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_token`;
|
||||
CREATE TABLE `live_token` (
|
||||
`id` int(0) NOT NULL AUTO_INCREMENT COMMENT 'id',
|
||||
`access_key` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'ak',
|
||||
`secret_key` varchar(24) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'sk',
|
||||
`active` tinyint(1) NOT NULL DEFAULT 1 COMMENT '1 yes, 0 no',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for monitor_metric
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `monitor_metric`;
|
||||
CREATE TABLE `monitor_metric` (
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '指标数据id',
|
||||
`metric_type` tinyint(1) NULL DEFAULT NULL COMMENT '指标类型',
|
||||
`data` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '指标值(存储的是字符串、可能是json)',
|
||||
`time` datetime(0) NULL DEFAULT NULL COMMENT '对应节点时间',
|
||||
`create_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '新增时间',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
INDEX `idx_metric_time`(`metric_type`, `time`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 0 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for live_config
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `live_config`;
|
||||
CREATE TABLE `live_config` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'id',
|
||||
`k` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'key',
|
||||
`v` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci COMMENT 'value',
|
||||
`prefix` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT 'name',
|
||||
`remark` varchar(30) DEFAULT NULL COMMENT 'remark',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='配置表';
|
||||
|
||||
-- ----------------------------
|
||||
-- live_hub data init
|
||||
-- ----------------------------
|
||||
INSERT INTO `live_hub`
|
||||
VALUES (1, '__default_', 0, 1, 1);
|
||||
INSERT INTO `live_hub`
|
||||
VALUES (2, 'live', 60, 1, 1);
|
||||
INSERT INTO `live_hub`
|
||||
VALUES (3, 'temp', 0, 1, 1);
|
||||
INSERT INTO `live_hub`
|
||||
VALUES (4, 'pub', 0, 3, 1);
|
||||
|
||||
-- ----------------------------
|
||||
-- live_token data init
|
||||
-- ----------------------------
|
||||
INSERT INTO `live_token`
|
||||
VALUES (1, '2a4052005cee', '3d13c615112649e9b2e5f1f1', 1);
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
|
||||
|
||||
|
||||
135
999-部署模板/视频流媒体-helm-2604/sql-init/live-proxy-init.sql
Normal file
135
999-部署模板/视频流媒体-helm-2604/sql-init/live-proxy-init.sql
Normal file
@@ -0,0 +1,135 @@
|
||||
CREATE DATABASE IF NOT EXISTS cmii_live_proxy;
|
||||
use cmii_live_proxy;
|
||||
SET NAMES utf8mb4;
|
||||
SET FOREIGN_KEY_CHECKS = 0;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for proxy_task
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `proxy_task`;
|
||||
CREATE TABLE `proxy_task`
|
||||
(
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '任务id',
|
||||
`template_id` bigint(0) NOT NULL COMMENT '关联模板',
|
||||
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '任务名',
|
||||
`create_at` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||
`update_at` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
|
||||
`params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '填充参数',
|
||||
`state` tinyint(1) NOT NULL DEFAULT 1 COMMENT '执行状态\r\n(1、待定 2、执行中 3、异常 4、暂停)',
|
||||
`uuid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '123456' COMMENT '唯一标识(和process绑定)',
|
||||
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态',
|
||||
`execution_time` datetime(0) NULL DEFAULT NULL COMMENT '执行时间',
|
||||
`sustain_time` bigint(0) NULL DEFAULT NULL COMMENT '持续时间',
|
||||
`retry_count` int(0) NULL DEFAULT 0 COMMENT '重试次数',
|
||||
`process_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '进程id(最新)',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB
|
||||
AUTO_INCREMENT = 8
|
||||
CHARACTER SET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT = '任务表'
|
||||
ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for proxy_task_log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `proxy_task_log`;
|
||||
CREATE TABLE `proxy_task_log`
|
||||
(
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '日志id',
|
||||
`content` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '日志',
|
||||
`task_id` bigint(0) NULL DEFAULT NULL COMMENT '任务id',
|
||||
`process_id` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '进程id',
|
||||
`create_at` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||
`update_at` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
|
||||
`uuid` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '唯一码',
|
||||
`is_new` tinyint(1) NOT NULL COMMENT '是否最新进程',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB
|
||||
AUTO_INCREMENT = 4076
|
||||
CHARACTER SET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT = '任务日志表'
|
||||
ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for proxy_template
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `proxy_template`;
|
||||
CREATE TABLE `proxy_template`
|
||||
(
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '模板id',
|
||||
`create_at` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||
`update_at` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
|
||||
`ffmpeg_type` tinyint(1) NOT NULL DEFAULT 1 COMMENT '执行类型:1 ffmpeg 2 ffprobe 3 ffplay',
|
||||
`command` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '模板数组',
|
||||
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '模板名称',
|
||||
`status` tinyint(1) NULL DEFAULT 1 COMMENT '状态',
|
||||
`placeholder_count` bigint(0) NULL DEFAULT NULL COMMENT '占位参数个数',
|
||||
`operator_type` tinyint(1) NULL DEFAULT 1 COMMENT '执行类型:1 任务操作 2 文件操作',
|
||||
`alias` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '别名',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB
|
||||
AUTO_INCREMENT = 10
|
||||
CHARACTER SET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT = '模板表'
|
||||
ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for proxy_video_dest_file
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `proxy_video_dest_file`;
|
||||
CREATE TABLE `proxy_video_dest_file`
|
||||
(
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '转换文件',
|
||||
`create_at` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||
`update_at` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
|
||||
`template_id` bigint(0) NULL DEFAULT NULL COMMENT '模板id',
|
||||
`params` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '转换参数',
|
||||
`path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '转换地址',
|
||||
`uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件uri',
|
||||
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件url',
|
||||
`size` bigint(0) NULL DEFAULT NULL COMMENT '文件大小',
|
||||
`src_file_type` tinyint(1) NULL DEFAULT NULL COMMENT '源文件选择类型(1 本地 2网络)',
|
||||
`src_file_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '源文件地址(如果为本地文件就是id)',
|
||||
`mime_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件转换扩展类型',
|
||||
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件名',
|
||||
`state` tinyint(1) NOT NULL DEFAULT 0 COMMENT '执行状态\r\n(1、待定 2、执行中 3、异常 4、结束)',
|
||||
`uuid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '唯一码',
|
||||
`process_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '进程id',
|
||||
`log` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL COMMENT '执行日志',
|
||||
`parent_path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父文件目录',
|
||||
`path_uuid` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '父文件目录uuid',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB
|
||||
AUTO_INCREMENT = 22
|
||||
CHARACTER SET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT = '操作文件表'
|
||||
ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for proxy_video_src_file
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `proxy_video_src_file`;
|
||||
CREATE TABLE `proxy_video_src_file`
|
||||
(
|
||||
`id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT '文件id',
|
||||
`create_at` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
|
||||
`update_at` datetime(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
|
||||
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件名',
|
||||
`uri` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件请求uri',
|
||||
`path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件路径',
|
||||
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件全路径url',
|
||||
`mime_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '文件类型',
|
||||
`size` bigint(0) NULL DEFAULT NULL COMMENT '文件大小',
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB
|
||||
AUTO_INCREMENT = 15
|
||||
CHARACTER SET = utf8mb4
|
||||
COLLATE = utf8mb4_unicode_ci COMMENT = '视频源文件表'
|
||||
ROW_FORMAT = Dynamic;
|
||||
|
||||
-- ----------------------------
|
||||
-- proxy_template init data
|
||||
-- ----------------------------
|
||||
INSERT INTO `proxy_template` VALUES (1, '2026-03-30 15:11:59', '2026-03-30 15:12:50', 1, '-re -f lavfi -i testsrc=duration=86400:size=1280x720:rate=30 -c:v libx264 -preset ultrafast -tune zerolatency -profile baseline -g 30 -keyint_min 30 -sc_threshold 0 -pix_fmt yuv420p -f flv %s', '流媒体底座测试推流', 1, 1, 1, 'proxy_live_stream');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
576
999-部署模板/视频流媒体-helm-2604/sql-init/wvp-init.sql
Normal file
576
999-部署模板/视频流媒体-helm-2604/sql-init/wvp-init.sql
Normal file
@@ -0,0 +1,576 @@
|
||||
CREATE DATABASE IF NOT EXISTS `wvp`;
|
||||
USE `wvp`;
|
||||
|
||||
/*建表*/
|
||||
-- 存储国标设备的基础信息及在线状态
|
||||
drop table IF EXISTS wvp_device;
|
||||
create table IF NOT EXISTS wvp_device
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
device_id character varying(50) not null COMMENT '国标设备编号',
|
||||
name character varying(255) COMMENT '设备名称',
|
||||
manufacturer character varying(255) COMMENT '设备厂商',
|
||||
model character varying(255) COMMENT '设备型号',
|
||||
firmware character varying(255) COMMENT '固件版本号',
|
||||
transport character varying(50) COMMENT '信令传输协议(TCP/UDP)',
|
||||
stream_mode character varying(50) COMMENT '拉流方式(主动/被动)',
|
||||
on_line bool default false COMMENT '在线状态',
|
||||
register_time character varying(50) COMMENT '注册时间',
|
||||
keepalive_time character varying(50) COMMENT '最近心跳时间',
|
||||
ip character varying(50) COMMENT '设备IP地址',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
update_time character varying(50) COMMENT '更新时间',
|
||||
port integer COMMENT '信令端口',
|
||||
expires integer COMMENT '注册有效期',
|
||||
subscribe_cycle_for_catalog integer DEFAULT 0 COMMENT '目录订阅周期',
|
||||
subscribe_cycle_for_mobile_position integer DEFAULT 0 COMMENT '移动位置订阅周期',
|
||||
mobile_position_submission_interval integer DEFAULT 5 COMMENT '移动位置上报间隔',
|
||||
subscribe_cycle_for_alarm integer DEFAULT 0 COMMENT '报警订阅周期',
|
||||
host_address character varying(50) COMMENT '设备域名/主机地址',
|
||||
charset character varying(50) COMMENT '信令字符集',
|
||||
ssrc_check bool default false COMMENT '是否校验SSRC',
|
||||
geo_coord_sys character varying(50) COMMENT '坐标系类型',
|
||||
media_server_id character varying(50) default 'auto' COMMENT '绑定的流媒体服务ID',
|
||||
custom_name character varying(255) COMMENT '自定义显示名称',
|
||||
sdp_ip character varying(50) COMMENT 'SDP中携带的IP',
|
||||
local_ip character varying(50) COMMENT '本地局域网IP',
|
||||
password character varying(255) COMMENT '设备鉴权密码',
|
||||
as_message_channel bool default false COMMENT '是否作为消息通道',
|
||||
heart_beat_interval integer COMMENT '心跳间隔',
|
||||
heart_beat_count integer COMMENT '心跳失败次数',
|
||||
position_capability integer COMMENT '定位能力标识',
|
||||
broadcast_push_after_ack bool default false COMMENT 'ACK后是否自动推流',
|
||||
server_id character varying(50) COMMENT '所属信令服务器ID',
|
||||
constraint uk_device_device unique (device_id)
|
||||
);
|
||||
|
||||
-- 记录各设备上报的报警信息
|
||||
drop table IF EXISTS wvp_device_alarm;
|
||||
create table IF NOT EXISTS wvp_device_alarm
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
device_id character varying(50) not null COMMENT '国标设备ID',
|
||||
channel_id character varying(50) not null COMMENT '报警关联的通道ID',
|
||||
alarm_priority character varying(50) COMMENT '报警级别',
|
||||
alarm_method character varying(50) COMMENT '报警方式(视频/语音等)',
|
||||
alarm_time character varying(50) COMMENT '报警发生时间',
|
||||
alarm_description character varying(255) COMMENT '报警描述',
|
||||
longitude double precision COMMENT '报警经度',
|
||||
latitude double precision COMMENT '报警纬度',
|
||||
alarm_type character varying(50) COMMENT '报警类型',
|
||||
create_time character varying(50) not null COMMENT '数据入库时间'
|
||||
);
|
||||
|
||||
-- 存储移动位置订阅上报的数据
|
||||
drop table IF EXISTS wvp_device_mobile_position;
|
||||
create table IF NOT EXISTS wvp_device_mobile_position
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
device_id character varying(50) not null COMMENT '设备ID',
|
||||
channel_id character varying(50) not null COMMENT '通道ID',
|
||||
device_name character varying(255) COMMENT '设备名称',
|
||||
time character varying(50) COMMENT '上报时间',
|
||||
longitude double precision COMMENT '经度',
|
||||
latitude double precision COMMENT '纬度',
|
||||
altitude double precision COMMENT '海拔',
|
||||
speed double precision COMMENT '速度',
|
||||
direction double precision COMMENT '方向角',
|
||||
report_source character varying(50) COMMENT '上报来源',
|
||||
create_time character varying(50) COMMENT '入库时间'
|
||||
);
|
||||
|
||||
-- 保存设备下的通道信息以及扩展属性
|
||||
drop table IF EXISTS wvp_device_channel;
|
||||
create table IF NOT EXISTS wvp_device_channel
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
device_id character varying(50) COMMENT '所属设备ID',
|
||||
name character varying(255) COMMENT '通道名称',
|
||||
manufacturer character varying(50) COMMENT '厂商',
|
||||
model character varying(50) COMMENT '型号',
|
||||
owner character varying(50) COMMENT '归属单位',
|
||||
civil_code character varying(50) COMMENT '行政区划代码',
|
||||
block character varying(50) COMMENT '区域/小区编号',
|
||||
address character varying(50) COMMENT '安装地址',
|
||||
parental integer COMMENT '是否有子节点',
|
||||
parent_id character varying(50) COMMENT '父级通道ID',
|
||||
safety_way integer COMMENT '安全防范等级',
|
||||
register_way integer COMMENT '注册方式',
|
||||
cert_num character varying(50) COMMENT '证书编号',
|
||||
certifiable integer COMMENT '是否可认证',
|
||||
err_code integer COMMENT '故障状态码',
|
||||
end_time character varying(50) COMMENT '服务截止时间',
|
||||
secrecy integer COMMENT '保密级别',
|
||||
ip_address character varying(50) COMMENT '设备IP地址',
|
||||
port integer COMMENT '设备端口',
|
||||
password character varying(255) COMMENT '访问密码',
|
||||
status character varying(50) COMMENT '在线状态',
|
||||
longitude double precision COMMENT '经度',
|
||||
latitude double precision COMMENT '纬度',
|
||||
ptz_type integer COMMENT '云台类型',
|
||||
position_type integer COMMENT '点位类型',
|
||||
room_type integer COMMENT '房间类型',
|
||||
use_type integer COMMENT '使用性质',
|
||||
supply_light_type integer COMMENT '补光方式',
|
||||
direction_type integer COMMENT '朝向',
|
||||
resolution character varying(255) COMMENT '分辨率',
|
||||
business_group_id character varying(255) COMMENT '业务分组ID',
|
||||
download_speed character varying(255) COMMENT '下载/码流速率',
|
||||
svc_space_support_mod integer COMMENT '空域SVC能力',
|
||||
svc_time_support_mode integer COMMENT '时域SVC能力',
|
||||
create_time character varying(50) not null COMMENT '创建时间',
|
||||
update_time character varying(50) not null COMMENT '更新时间',
|
||||
sub_count integer COMMENT '子节点数量',
|
||||
stream_id character varying(255) COMMENT '绑定的流ID',
|
||||
has_audio bool default false COMMENT '是否有音频',
|
||||
gps_time character varying(50) COMMENT 'GPS定位时间',
|
||||
stream_identification character varying(50) COMMENT '流标识',
|
||||
channel_type int default 0 not null COMMENT '通道类型',
|
||||
map_level int default 0 COMMENT '地图层级',
|
||||
gb_device_id character varying(50) COMMENT 'GB内的设备ID',
|
||||
gb_name character varying(255) COMMENT 'GB上报的名称',
|
||||
gb_manufacturer character varying(255) COMMENT 'GB厂商',
|
||||
gb_model character varying(255) COMMENT 'GB型号',
|
||||
gb_owner character varying(255) COMMENT 'GB归属',
|
||||
gb_civil_code character varying(255) COMMENT 'GB行政区划',
|
||||
gb_block character varying(255) COMMENT 'GB区域',
|
||||
gb_address character varying(255) COMMENT 'GB地址',
|
||||
gb_parental integer COMMENT 'GB子节点标识',
|
||||
gb_parent_id character varying(255) COMMENT 'GB父通道',
|
||||
gb_safety_way integer COMMENT 'GB安全防范',
|
||||
gb_register_way integer COMMENT 'GB注册方式',
|
||||
gb_cert_num character varying(50) COMMENT 'GB证书编号',
|
||||
gb_certifiable integer COMMENT 'GB认证标志',
|
||||
gb_err_code integer COMMENT 'GB错误码',
|
||||
gb_end_time character varying(50) COMMENT 'GB截止时间',
|
||||
gb_secrecy integer COMMENT 'GB保密级别',
|
||||
gb_ip_address character varying(50) COMMENT 'GB IP',
|
||||
gb_port integer COMMENT 'GB端口',
|
||||
gb_password character varying(50) COMMENT 'GB接入密码',
|
||||
gb_status character varying(50) COMMENT 'GB状态',
|
||||
gb_longitude double COMMENT 'GB经度',
|
||||
gb_latitude double COMMENT 'GB纬度',
|
||||
gb_business_group_id character varying(50) COMMENT 'GB业务分组',
|
||||
gb_ptz_type integer COMMENT 'GB云台类型',
|
||||
gb_position_type integer COMMENT 'GB点位类型',
|
||||
gb_room_type integer COMMENT 'GB房间类型',
|
||||
gb_use_type integer COMMENT 'GB用途',
|
||||
gb_supply_light_type integer COMMENT 'GB补光',
|
||||
gb_direction_type integer COMMENT 'GB朝向',
|
||||
gb_resolution character varying(255) COMMENT 'GB分辨率',
|
||||
gb_download_speed character varying(255) COMMENT 'GB码流速率',
|
||||
gb_svc_space_support_mod integer COMMENT 'GB空域SVC',
|
||||
gb_svc_time_support_mode integer COMMENT 'GB时域SVC',
|
||||
record_plan_id integer COMMENT '绑定的录像计划ID',
|
||||
data_type integer not null COMMENT '数据类型标识',
|
||||
data_device_id integer not null COMMENT '数据来源设备主键',
|
||||
gps_speed double precision COMMENT 'GPS速度',
|
||||
gps_altitude double precision COMMENT 'GPS海拔',
|
||||
gps_direction double precision COMMENT 'GPS方向',
|
||||
enable_broadcast integer default 0 COMMENT '是否支持广播',
|
||||
index (data_type),
|
||||
index (data_device_id),
|
||||
constraint uk_wvp_unique_channel unique (gb_device_id)
|
||||
);
|
||||
|
||||
-- 媒体服务器(如 ZLM)节点信息
|
||||
drop table IF EXISTS wvp_media_server;
|
||||
create table IF NOT EXISTS wvp_media_server
|
||||
(
|
||||
id character varying(255) primary key COMMENT '媒体服务器ID',
|
||||
ip character varying(50) COMMENT '服务器IP',
|
||||
hook_ip character varying(50) COMMENT 'hook回调IP',
|
||||
sdp_ip character varying(50) COMMENT 'SDP中使用的IP',
|
||||
stream_ip character varying(50) COMMENT '推流使用的IP',
|
||||
http_port integer COMMENT 'HTTP端口',
|
||||
http_ssl_port integer COMMENT 'HTTPS端口',
|
||||
rtmp_port integer COMMENT 'RTMP端口',
|
||||
rtmp_ssl_port integer COMMENT 'RTMPS端口',
|
||||
rtp_proxy_port integer COMMENT 'RTP代理端口',
|
||||
rtsp_port integer COMMENT 'RTSP端口',
|
||||
rtsp_ssl_port integer COMMENT 'RTSPS端口',
|
||||
flv_port integer COMMENT 'FLV端口',
|
||||
flv_ssl_port integer COMMENT 'FLV HTTPS端口',
|
||||
mp4_port integer COMMENT 'MP4点播端口',
|
||||
mp4_ssl_port integer COMMENT 'MP4 HTTPS端口',
|
||||
ws_flv_port integer COMMENT 'WS-FLV端口',
|
||||
ws_flv_ssl_port integer COMMENT 'WS-FLV HTTPS端口',
|
||||
jtt_proxy_port integer COMMENT 'JT/T代理端口',
|
||||
auto_config bool default false COMMENT '是否自动配置',
|
||||
secret character varying(50) COMMENT 'ZLM校验密钥',
|
||||
type character varying(50) default 'zlm' COMMENT '节点类型',
|
||||
rtp_enable bool default false COMMENT '是否开启RTP',
|
||||
rtp_port_range character varying(50) COMMENT 'RTP端口范围',
|
||||
send_rtp_port_range character varying(50) COMMENT '发送RTP端口范围',
|
||||
record_assist_port integer COMMENT '录像辅助端口',
|
||||
default_server bool default false COMMENT '是否默认节点',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
update_time character varying(50) COMMENT '更新时间',
|
||||
hook_alive_interval integer COMMENT 'hook心跳间隔',
|
||||
record_path character varying(255) COMMENT '录像目录',
|
||||
record_day integer default 7 COMMENT '录像保留天数',
|
||||
transcode_suffix character varying(255) COMMENT '转码指令后缀',
|
||||
server_id character varying(50) COMMENT '对应信令服务器ID',
|
||||
constraint uk_media_server_unique_ip_http_port unique (ip, http_port, server_id)
|
||||
);
|
||||
|
||||
-- 上级国标平台注册信息
|
||||
drop table IF EXISTS wvp_platform;
|
||||
create table IF NOT EXISTS wvp_platform
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
enable bool default false COMMENT '是否启用该平台注册',
|
||||
name character varying(255) COMMENT '平台名称',
|
||||
server_gb_id character varying(50) COMMENT '上级平台国标编码',
|
||||
server_gb_domain character varying(50) COMMENT '上级平台域编码',
|
||||
server_ip character varying(50) COMMENT '上级平台IP',
|
||||
server_port integer COMMENT '上级平台注册端口',
|
||||
device_gb_id character varying(50) COMMENT '本平台向上注册的国标编码',
|
||||
device_ip character varying(50) COMMENT '本平台信令IP',
|
||||
device_port character varying(50) COMMENT '本平台信令端口',
|
||||
username character varying(255) COMMENT '注册用户名',
|
||||
password character varying(50) COMMENT '注册密码',
|
||||
expires character varying(50) COMMENT '注册有效期',
|
||||
keep_timeout character varying(50) COMMENT '心跳超时时间',
|
||||
transport character varying(50) COMMENT '传输协议(UDP/TCP)',
|
||||
civil_code character varying(50) COMMENT '行政区划代码',
|
||||
manufacturer character varying(255) COMMENT '厂商',
|
||||
model character varying(255) COMMENT '型号',
|
||||
address character varying(255) COMMENT '地址',
|
||||
character_set character varying(50) COMMENT '字符集',
|
||||
ptz bool default false COMMENT '是否支持PTZ',
|
||||
rtcp bool default false COMMENT '是否开启RTCP',
|
||||
status bool default false COMMENT '注册状态',
|
||||
catalog_group integer COMMENT '目录分组方式',
|
||||
register_way integer COMMENT '注册方式',
|
||||
secrecy integer COMMENT '保密级别',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
update_time character varying(50) COMMENT '更新时间',
|
||||
as_message_channel bool default false COMMENT '是否作为消息通道',
|
||||
catalog_with_platform integer default 1 COMMENT '是否推送平台目录',
|
||||
catalog_with_group integer default 1 COMMENT '是否推送分组目录',
|
||||
catalog_with_region integer default 1 COMMENT '是否推送区域目录',
|
||||
auto_push_channel bool default true COMMENT '是否自动推送通道',
|
||||
send_stream_ip character varying(50) COMMENT '推流时使用的IP',
|
||||
server_id character varying(50) COMMENT '对应信令服务器ID',
|
||||
constraint uk_platform_unique_server_gb_id unique (server_gb_id)
|
||||
);
|
||||
|
||||
-- 国标平台下发的通道映射关系
|
||||
drop table IF EXISTS wvp_platform_channel;
|
||||
create table IF NOT EXISTS wvp_platform_channel
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
platform_id integer COMMENT '平台ID',
|
||||
device_channel_id integer COMMENT '本地通道表主键',
|
||||
custom_device_id character varying(50) COMMENT '自定义国标编码',
|
||||
custom_name character varying(255) COMMENT '自定义名称',
|
||||
custom_manufacturer character varying(50) COMMENT '自定义厂商',
|
||||
custom_model character varying(50) COMMENT '自定义型号',
|
||||
custom_owner character varying(50) COMMENT '自定义归属',
|
||||
custom_civil_code character varying(50) COMMENT '自定义行政区划',
|
||||
custom_block character varying(50) COMMENT '自定义区域',
|
||||
custom_address character varying(50) COMMENT '自定义地址',
|
||||
custom_parental integer COMMENT '自定义父/子标识',
|
||||
custom_parent_id character varying(50) COMMENT '自定义父节点',
|
||||
custom_safety_way integer COMMENT '自定义安全防范',
|
||||
custom_register_way integer COMMENT '自定义注册方式',
|
||||
custom_cert_num character varying(50) COMMENT '自定义证书编号',
|
||||
custom_certifiable integer COMMENT '自定义可认证标志',
|
||||
custom_err_code integer COMMENT '自定义错误码',
|
||||
custom_end_time character varying(50) COMMENT '自定义截止时间',
|
||||
custom_secrecy integer COMMENT '自定义保密级别',
|
||||
custom_ip_address character varying(50) COMMENT '自定义IP',
|
||||
custom_port integer COMMENT '自定义端口',
|
||||
custom_password character varying(255) COMMENT '自定义密码',
|
||||
custom_status character varying(50) COMMENT '自定义状态',
|
||||
custom_longitude double precision COMMENT '自定义经度',
|
||||
custom_latitude double precision COMMENT '自定义纬度',
|
||||
custom_ptz_type integer COMMENT '自定义云台类型',
|
||||
custom_position_type integer COMMENT '自定义点位类型',
|
||||
custom_room_type integer COMMENT '自定义房间类型',
|
||||
custom_use_type integer COMMENT '自定义用途',
|
||||
custom_supply_light_type integer COMMENT '自定义补光',
|
||||
custom_direction_type integer COMMENT '自定义朝向',
|
||||
custom_resolution character varying(255) COMMENT '自定义分辨率',
|
||||
custom_business_group_id character varying(255) COMMENT '自定义业务分组',
|
||||
custom_download_speed character varying(255) COMMENT '自定义码流速率',
|
||||
custom_svc_space_support_mod integer COMMENT '自定义空域SVC',
|
||||
custom_svc_time_support_mode integer COMMENT '自定义时域SVC',
|
||||
constraint uk_platform_gb_channel_platform_id_catalog_id_device_channel_id unique (platform_id, device_channel_id),
|
||||
constraint uk_platform_gb_channel_device_id unique (custom_device_id)
|
||||
);
|
||||
|
||||
-- 平台与分组(行政区划/组织)关系
|
||||
drop table IF EXISTS wvp_platform_group;
|
||||
create table IF NOT EXISTS wvp_platform_group
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
platform_id integer COMMENT '平台ID',
|
||||
group_id integer COMMENT '分组ID',
|
||||
constraint uk_wvp_platform_group_platform_id_group_id unique (platform_id, group_id)
|
||||
);
|
||||
|
||||
-- 平台与区域关系
|
||||
drop table IF EXISTS wvp_platform_region;
|
||||
create table IF NOT EXISTS wvp_platform_region
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
platform_id integer COMMENT '平台ID',
|
||||
region_id integer COMMENT '区域ID',
|
||||
constraint uk_wvp_platform_region_platform_id_group_id unique (platform_id, region_id)
|
||||
);
|
||||
|
||||
-- 拉流代理/转推配置
|
||||
drop table IF EXISTS wvp_stream_proxy;
|
||||
create table IF NOT EXISTS wvp_stream_proxy
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
type character varying(50) COMMENT '代理类型(拉流/推流)',
|
||||
app character varying(255) COMMENT '应用名',
|
||||
stream character varying(255) COMMENT '流ID',
|
||||
src_url character varying(255) COMMENT '源地址',
|
||||
timeout integer COMMENT '拉流超时时间',
|
||||
ffmpeg_cmd_key character varying(255) COMMENT 'FFmpeg命令模板键',
|
||||
rtsp_type character varying(50) COMMENT 'RTSP拉流方式',
|
||||
media_server_id character varying(50) COMMENT '指定媒体服务器ID',
|
||||
enable_audio bool default false COMMENT '是否启用音频',
|
||||
enable_mp4 bool default false COMMENT '是否录制MP4',
|
||||
pulling bool default false COMMENT '当前是否在拉流',
|
||||
enable bool default false COMMENT '是否启用该代理',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
name character varying(255) COMMENT '代理名称',
|
||||
update_time character varying(50) COMMENT '更新时间',
|
||||
stream_key character varying(255) COMMENT '唯一流标识',
|
||||
server_id character varying(50) COMMENT '信令服务器ID',
|
||||
enable_disable_none_reader bool default false COMMENT '是否无人观看时自动停流',
|
||||
relates_media_server_id character varying(50) COMMENT '关联的媒体服务器ID',
|
||||
constraint uk_stream_proxy_app_stream unique (app, stream)
|
||||
);
|
||||
|
||||
-- 推流会话记录
|
||||
drop table IF EXISTS wvp_stream_push;
|
||||
create table IF NOT EXISTS wvp_stream_push
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
app character varying(255) COMMENT '应用名',
|
||||
stream character varying(255) COMMENT '流ID',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
media_server_id character varying(50) COMMENT '推流所在媒体服务器',
|
||||
server_id character varying(50) COMMENT '信令服务器ID',
|
||||
push_time character varying(50) COMMENT '推流开始时间',
|
||||
status bool default false COMMENT '推流状态',
|
||||
update_time character varying(50) COMMENT '更新时间',
|
||||
pushing bool default false COMMENT '是否正在推流',
|
||||
self bool default false COMMENT '是否本地发起',
|
||||
start_offline_push bool default true COMMENT '是否离线后自动重推',
|
||||
constraint uk_stream_push_app_stream unique (app, stream)
|
||||
);
|
||||
|
||||
-- 云端录像记录
|
||||
drop table IF EXISTS wvp_cloud_record;
|
||||
create table IF NOT EXISTS wvp_cloud_record
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
app character varying(255) COMMENT '应用名',
|
||||
stream character varying(255) COMMENT '流ID',
|
||||
call_id character varying(255) COMMENT '会话ID',
|
||||
start_time bigint COMMENT '录像开始时间',
|
||||
end_time bigint COMMENT '录像结束时间',
|
||||
media_server_id character varying(50) COMMENT '媒体服务器ID',
|
||||
server_id character varying(50) COMMENT '信令服务器ID',
|
||||
file_name character varying(255) COMMENT '文件名',
|
||||
folder character varying(500) COMMENT '目录',
|
||||
file_path character varying(500) COMMENT '完整路径',
|
||||
collect bool default false COMMENT '是否收藏',
|
||||
file_size bigint COMMENT '文件大小',
|
||||
time_len double precision COMMENT '时长'
|
||||
);
|
||||
|
||||
-- 平台用户信息
|
||||
drop table IF EXISTS wvp_user;
|
||||
create table IF NOT EXISTS wvp_user
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
username character varying(255) COMMENT '用户名',
|
||||
password character varying(255) COMMENT '密码(MD5)',
|
||||
role_id integer COMMENT '角色ID',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
update_time character varying(50) COMMENT '更新时间',
|
||||
push_key character varying(50) COMMENT '推送密钥',
|
||||
constraint uk_user_username unique (username)
|
||||
);
|
||||
|
||||
-- 用户角色信息
|
||||
drop table IF EXISTS wvp_user_role;
|
||||
create table IF NOT EXISTS wvp_user_role
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
name character varying(50) COMMENT '角色名称',
|
||||
authority character varying(50) COMMENT '权限标识',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
update_time character varying(50) COMMENT '更新时间'
|
||||
);
|
||||
|
||||
|
||||
drop table IF EXISTS wvp_user_api_key;
|
||||
create table IF NOT EXISTS wvp_user_api_key
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
user_id bigint COMMENT '关联用户ID',
|
||||
app character varying(255) COMMENT '应用标识',
|
||||
api_key text COMMENT 'API Key',
|
||||
expired_at bigint COMMENT '过期时间戳',
|
||||
remark character varying(255) COMMENT '备注',
|
||||
enable bool default true COMMENT '是否启用',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
update_time character varying(50) COMMENT '更新时间'
|
||||
);
|
||||
|
||||
|
||||
/*初始数据*/
|
||||
-- 初始化管理员账号,账号admin 密码admin(MD5加密后)
|
||||
INSERT INTO wvp_user
|
||||
VALUES (1, 'admin', '21232f297a57a5a743894a0e4a801fc3', 1, '2021-04-13 14:14:57', '2021-04-13 14:14:57',
|
||||
'3e80d1762a324d5b0ff636e0bd16f1e3');
|
||||
-- 初始化管理员角色
|
||||
INSERT INTO wvp_user_role
|
||||
VALUES (1, 'admin', '0', '2021-04-13 14:14:57', '2021-04-13 14:14:57');
|
||||
|
||||
-- 通用分组表,存储行业或组织结构
|
||||
drop table IF EXISTS wvp_common_group;
|
||||
create table IF NOT EXISTS wvp_common_group
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
device_id varchar(50) NOT NULL COMMENT '分组对应的平台或设备ID',
|
||||
name varchar(255) NOT NULL COMMENT '分组名称',
|
||||
parent_id int COMMENT '父级分组ID',
|
||||
parent_device_id varchar(50) DEFAULT NULL COMMENT '父级分组对应的设备ID',
|
||||
business_group varchar(50) NOT NULL COMMENT '业务分组编码',
|
||||
create_time varchar(50) NOT NULL COMMENT '创建时间',
|
||||
update_time varchar(50) NOT NULL COMMENT '更新时间',
|
||||
civil_code varchar(50) default null COMMENT '行政区划代码',
|
||||
alias varchar(255) default null COMMENT '别名',
|
||||
constraint uk_common_group_device_platform unique (device_id)
|
||||
);
|
||||
|
||||
-- 通用行政区域表
|
||||
drop table IF EXISTS wvp_common_region;
|
||||
create table IF NOT EXISTS wvp_common_region
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
device_id varchar(50) NOT NULL COMMENT '区域对应的平台或设备ID',
|
||||
name varchar(255) NOT NULL COMMENT '区域名称',
|
||||
parent_id int COMMENT '父级区域ID',
|
||||
parent_device_id varchar(50) DEFAULT NULL COMMENT '父级区域的设备ID',
|
||||
create_time varchar(50) NOT NULL COMMENT '创建时间',
|
||||
update_time varchar(50) NOT NULL COMMENT '更新时间',
|
||||
constraint uk_common_region_device_id unique (device_id)
|
||||
);
|
||||
|
||||
-- 录像计划基础信息
|
||||
drop table IF EXISTS wvp_record_plan;
|
||||
create table IF NOT EXISTS wvp_record_plan
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
snap bool default false COMMENT '是否抓图计划',
|
||||
name varchar(255) NOT NULL COMMENT '计划名称',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
update_time character varying(50) COMMENT '更新时间'
|
||||
);
|
||||
|
||||
-- 录像计划条目表
|
||||
drop table IF EXISTS wvp_record_plan_item;
|
||||
create table IF NOT EXISTS wvp_record_plan_item
|
||||
(
|
||||
id serial primary key COMMENT '主键ID',
|
||||
start int COMMENT '开始时间(分钟)',
|
||||
stop int COMMENT '结束时间(分钟)',
|
||||
week_day int COMMENT '星期(0-6)',
|
||||
plan_id int COMMENT '所属录像计划ID',
|
||||
create_time character varying(50) COMMENT '创建时间',
|
||||
update_time character varying(50) COMMENT '更新时间'
|
||||
);
|
||||
|
||||
-- 交通部 JT/T 1076 终端信息
|
||||
drop table IF EXISTS wvp_jt_terminal;
|
||||
create table IF NOT EXISTS wvp_jt_terminal (
|
||||
id serial primary key COMMENT '主键ID',
|
||||
phone_number character varying(50) COMMENT '终端SIM卡号',
|
||||
terminal_id character varying(50) COMMENT '终端设备ID',
|
||||
province_id character varying(50) COMMENT '所在省份ID',
|
||||
province_text character varying(100) COMMENT '所在省份名称',
|
||||
city_id character varying(50) COMMENT '所在城市ID',
|
||||
city_text character varying(100) COMMENT '所在城市名称',
|
||||
maker_id character varying(50) COMMENT '厂商ID',
|
||||
model character varying(50) COMMENT '终端型号',
|
||||
plate_color character varying(50) COMMENT '车牌颜色',
|
||||
plate_no character varying(50) COMMENT '车牌号码',
|
||||
longitude double precision COMMENT '经度',
|
||||
latitude double precision COMMENT '纬度',
|
||||
status bool default false COMMENT '在线状态',
|
||||
register_time character varying(50) default null COMMENT '注册时间',
|
||||
update_time character varying(50) not null COMMENT '更新时间',
|
||||
create_time character varying(50) not null COMMENT '创建时间',
|
||||
geo_coord_sys character varying(50) COMMENT '坐标系',
|
||||
media_server_id character varying(50) default 'auto' COMMENT '媒体服务器ID',
|
||||
sdp_ip character varying(50) COMMENT 'SDP IP',
|
||||
constraint uk_jt_device_id_device_id unique (id, phone_number)
|
||||
);
|
||||
|
||||
-- 交通部 JT/T 1076 通道信息
|
||||
drop table IF EXISTS wvp_jt_channel;
|
||||
create table IF NOT EXISTS wvp_jt_channel (
|
||||
id serial primary key COMMENT '主键ID',
|
||||
terminal_db_id integer COMMENT '所属终端记录ID',
|
||||
channel_id integer COMMENT '通道号',
|
||||
has_audio bool default false COMMENT '是否有音频',
|
||||
name character varying(255) COMMENT '通道名称',
|
||||
update_time character varying(50) not null COMMENT '更新时间',
|
||||
create_time character varying(50) not null COMMENT '创建时间',
|
||||
constraint uk_jt_channel_id_device_id unique (terminal_db_id, channel_id)
|
||||
);
|
||||
|
||||
drop table IF EXISTS wvp_jt_terminal;
|
||||
create table IF NOT EXISTS wvp_jt_terminal (
|
||||
id serial primary key,
|
||||
phone_number character varying(50),
|
||||
terminal_id character varying(50),
|
||||
province_id character varying(50),
|
||||
province_text character varying(100),
|
||||
city_id character varying(50),
|
||||
city_text character varying(100),
|
||||
maker_id character varying(50),
|
||||
model character varying(50),
|
||||
plate_color character varying(50),
|
||||
plate_no character varying(50),
|
||||
longitude double precision,
|
||||
latitude double precision,
|
||||
status bool default false,
|
||||
register_time character varying(50) default null,
|
||||
update_time character varying(50) not null,
|
||||
create_time character varying(50) not null,
|
||||
geo_coord_sys character varying(50),
|
||||
media_server_id character varying(50) default 'auto',
|
||||
sdp_ip character varying(50),
|
||||
constraint uk_jt_device_id_device_id unique (id, phone_number)
|
||||
);
|
||||
|
||||
drop table IF EXISTS wvp_jt_channel;
|
||||
create table IF NOT EXISTS wvp_jt_channel (
|
||||
id serial primary key,
|
||||
terminal_db_id integer,
|
||||
channel_id integer,
|
||||
has_audio bool default false,
|
||||
name character varying(255),
|
||||
update_time character varying(50) not null,
|
||||
create_time character varying(50) not null,
|
||||
constraint uk_jt_channel_id_device_id unique (terminal_db_id, channel_id)
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
41
999-部署模板/视频流媒体-helm-2604/templates/NOTES.txt
Normal file
41
999-部署模板/视频流媒体-helm-2604/templates/NOTES.txt
Normal file
@@ -0,0 +1,41 @@
|
||||
1. 获取应用的 URL:
|
||||
NOTE: It may take a few minutes for all pods to be ready.
|
||||
|
||||
查看 Pod 状态:
|
||||
kubectl get pods -n {{ .Release.Namespace }} -l release={{ .Release.Name }}
|
||||
|
||||
2. Media Suite (WVP + ZLM + ZLM-OSS) 使用 HostNetwork 模式访问nodeIp+端口:
|
||||
- WVP HTTP: http://{{.Values.mediaSuite.nodeIP}}:{{ .Values.wvp.ports.http }}
|
||||
- WVP SIP: {{.Values.mediaSuite.nodeIP}}:{{ .Values.wvp.ports.sip }}/UDP
|
||||
- ZLM HTTP: http://{{.Values.mediaSuite.nodeIP}}:{{ .Values.zlm.ports.http }}
|
||||
- ZLM HTTPS: https://{{.Values.mediaSuite.nodeIP}}:{{ .Values.zlm.ports.https }}
|
||||
- ZLM RTMP: rtmp://{{.Values.mediaSuite.nodeIP}}:{{ .Values.zlm.ports.rtmp }}
|
||||
- ZLM RTSP: rtsp://{{.Values.mediaSuite.nodeIP}}:{{ .Values.zlm.ports.rtsp }}
|
||||
- ZLM WebRTC: webrtc://{{.Values.mediaSuite.nodeIP}}:{{ .Values.zlm.ports.webrtc }}
|
||||
- ZLM SRT: srt://{{.Values.mediaSuite.nodeIP}}:{{ .Values.zlm.ports.srt }}
|
||||
- ZLM-OSS: http://{{.Values.mediaSuite.nodeIP}}:{{ .Values.zlmOss.port }}
|
||||
|
||||
3. Live Operator:
|
||||
- URL: http://<NODE_IP>:{{ .Values.network.liveOpNodePort }}
|
||||
|
||||
4. Live Proxy:
|
||||
- URL: http://<NODE_IP>:{{ .Values.network.liveProxyNodePort }}
|
||||
|
||||
5. Live Helper:
|
||||
- URL: http://<NODE_IP>:{{ .Values.network.liveHelperNodePort }}
|
||||
|
||||
6. 查看日志:
|
||||
# Media Suite (所有容器)
|
||||
kubectl logs -f deployment/{{ .Release.Name }}-media-suite -n {{ .Release.Namespace }} -c wvp
|
||||
kubectl logs -f deployment/{{ .Release.Name }}-media-suite -n {{ .Release.Namespace }} -c zlm
|
||||
kubectl logs -f deployment/{{ .Release.Name }}-media-suite -n {{ .Release.Namespace }} -c zlm-oss
|
||||
|
||||
# Live Operator
|
||||
kubectl logs -f deployment/{{ .Release.Name }}-live-op -n {{ .Release.Namespace }}
|
||||
# Live Proxy
|
||||
kubectl logs -f deployment/{{ .Release.Name }}-live-proxy -n {{ .Release.Namespace }}
|
||||
# Live Helper
|
||||
kubectl logs -f deployment/{{ .Release.Name }}-live-helper -n {{ .Release.Namespace }}
|
||||
|
||||
7. 卸载:
|
||||
helm uninstall {{ .Release.Name }} -n {{ .Release.Namespace }}
|
||||
13
999-部署模板/视频流媒体-helm-2604/templates/harborsecret.yaml
Normal file
13
999-部署模板/视频流媒体-helm-2604/templates/harborsecret.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
{{- if .Values.images.secretName }}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: {{ .Values.images.secretName }}
|
||||
namespace: {{ .Release.Namespace }}
|
||||
labels:
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
type: kubernetes.io/dockerconfigjson
|
||||
data:
|
||||
.dockerconfigjson: {{ .Values.images.dockerConfigJson }}
|
||||
{{- end }}
|
||||
@@ -0,0 +1,22 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-live-helper-config
|
||||
labels:
|
||||
app: live-helper
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
data:
|
||||
config.yaml: |
|
||||
app:
|
||||
port: {{ .Values.liveHelper.port }}
|
||||
workers: 4
|
||||
log:
|
||||
level: INFO
|
||||
|
||||
client:
|
||||
zlm: "http://{{ .Release.Name }}-zlm:{{ .Values.zlm.ports.http }}"
|
||||
|
||||
downloader:
|
||||
allow_domains: {{ .Values.liveHelper.allowDownload }}
|
||||
@@ -0,0 +1,65 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-live-helper
|
||||
labels:
|
||||
app: live-helper
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
replicas: {{ .Values.liveHelper.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: live-helper
|
||||
release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: live-helper
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
containers:
|
||||
- name: live-helper
|
||||
image: "{{ .Values.images.liveHelper.repository }}:{{ .Values.images.liveHelper.tag }}"
|
||||
imagePullPolicy: {{ .Values.images.liveHelper.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.liveHelper.port }}
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: ALLOW_DOWNLOAD
|
||||
value: "{{ .Values.liveHelper.allowDownload }}"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /cmii/live-helper/config.yaml
|
||||
subPath: config.yaml
|
||||
resources:
|
||||
{{- toYaml .Values.liveHelper.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-live-helper-config
|
||||
imagePullSecrets:
|
||||
- name: {{ .Values.images.secretName }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-live-helper
|
||||
labels:
|
||||
app: live-helper
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.liveHelper.port }}
|
||||
targetPort: http
|
||||
nodePort: {{ .Values.network.liveHelperNodePort }}
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: live-helper
|
||||
release: {{ .Release.Name }}
|
||||
86
999-部署模板/视频流媒体-helm-2604/templates/live-op-configmap.yaml
Normal file
86
999-部署模板/视频流媒体-helm-2604/templates/live-op-configmap.yaml
Normal file
@@ -0,0 +1,86 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-live-op-config
|
||||
labels:
|
||||
app: live-op
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
data:
|
||||
application.yaml: |
|
||||
debug: false
|
||||
server:
|
||||
port: {{ .Values.liveOp.port }}
|
||||
|
||||
spring:
|
||||
web:
|
||||
resources:
|
||||
static-locations: classpath:/static/
|
||||
main:
|
||||
allow-bean-definition-overriding: true
|
||||
allow-circular-references: true
|
||||
application:
|
||||
name: cmii-live-operator
|
||||
thymeleaf:
|
||||
check-template-location: false
|
||||
cache: false
|
||||
platform:
|
||||
info:
|
||||
name: cmii-live-operator
|
||||
description: cmii-live-operator
|
||||
version: 5.8.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://{{ .Values.external.database.host }}:{{ .Values.external.database.port }}/{{ .Values.databases.liveOp }}?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
|
||||
username: {{ .Values.external.database.username }}
|
||||
password: {{ .Values.external.database.password }}
|
||||
druid:
|
||||
initial-size: 10
|
||||
min-idle: 5
|
||||
max-active: 20
|
||||
max-wait: 60000
|
||||
time-between-eviction-runs-millis: 60000
|
||||
min-evictable-idle-time-millis: 300000
|
||||
validation-query: SELECT 1
|
||||
test-while-idle: true
|
||||
test-on-borrow: false
|
||||
test-on-return: false
|
||||
use-ping-method: false
|
||||
keep-alive: true
|
||||
redis:
|
||||
host: {{ .Values.external.redis.host }}
|
||||
port: {{ .Values.external.redis.port }}
|
||||
database: {{ .Values.redis.liveOpDb }}
|
||||
password: {{ .Values.external.redis.password }}
|
||||
|
||||
live:
|
||||
sync:
|
||||
pool:
|
||||
monitor:
|
||||
enabled: false
|
||||
core: 10
|
||||
max: 20
|
||||
queue: 1
|
||||
keepalive: 20
|
||||
|
||||
logging:
|
||||
config: classpath:logback-operator.xml
|
||||
level:
|
||||
root: info
|
||||
com.cmii.live.op.mapper: info
|
||||
|
||||
mybatis-plus:
|
||||
global-config:
|
||||
banner: false
|
||||
|
||||
knife4j:
|
||||
enable: true
|
||||
97
999-部署模板/视频流媒体-helm-2604/templates/live-op-deployment.yaml
Normal file
97
999-部署模板/视频流媒体-helm-2604/templates/live-op-deployment.yaml
Normal file
@@ -0,0 +1,97 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-live-op
|
||||
labels:
|
||||
app: live-op
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
replicas: {{ .Values.liveOp.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: live-op
|
||||
release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: live-op
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
containers:
|
||||
- name: live-op
|
||||
image: "{{ .Values.images.liveOp.repository }}:{{ .Values.images.liveOp.tag }}"
|
||||
imagePullPolicy: {{ .Values.images.liveOp.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.liveOp.port }}
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: LIVE_IP_PUBLIC
|
||||
value: "{{ .Values.mediaSuite.nodeIP }}"
|
||||
- name: LIVE_IP_PRIVATE
|
||||
value: "{{ .Values.mediaSuite.nodeIP }}"
|
||||
- name: LIVE_OP_PORT_HTTP
|
||||
value: "{{ .Values.liveOp.port }}"
|
||||
- name: LIVE_WVP_PORT_HTTP
|
||||
value: "{{ .Values.wvp.ports.http }}"
|
||||
- name: LIVE_ZLM_PORT_HTTP
|
||||
value: "{{ .Values.zlm.ports.http }}"
|
||||
- name: LIVE_ZLM_PORT_HTTPS
|
||||
value: "{{ .Values.zlm.ports.https }}"
|
||||
- name: LIVE_ZLM_PORT_RTMP
|
||||
value: "{{ .Values.zlm.ports.rtmp }}"
|
||||
- name: LIVE_ZLM_PORT_RTSP
|
||||
value: "{{ .Values.zlm.ports.rtsp }}"
|
||||
- name: LIVE_ZLM_PORT_SRT
|
||||
value: "{{ .Values.zlm.ports.srt }}"
|
||||
- name: LIVE_ZLM_API_PASSWD
|
||||
value: "{{ .Values.zlm.apiPasswd }}"
|
||||
- name: OSS_ENDPOINT
|
||||
value: "{{ .Values.external.minio.endpoint }}"
|
||||
- name: OSS_AK
|
||||
value: "{{ .Values.external.minio.accessKey }}"
|
||||
- name: OSS_SK
|
||||
value: "{{ .Values.external.minio.secretKey }}"
|
||||
- name: RABBITMQ_HOST
|
||||
value: "{{ .Values.external.rabbitmq.host }}"
|
||||
- name: RABBITMQ_USERNAME
|
||||
value: "{{ .Values.external.rabbitmq.username }}"
|
||||
- name: RABBITMQ_PASSWORD
|
||||
value: "{{ .Values.external.rabbitmq.password }}"
|
||||
- name: RABBITMQ_PORT
|
||||
value: "{{ .Values.external.rabbitmq.port }}"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /cmii/application.yaml
|
||||
subPath: application.yaml
|
||||
resources:
|
||||
{{- toYaml .Values.liveOp.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-live-op-config
|
||||
imagePullSecrets:
|
||||
- name: {{ .Values.images.secretName }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-live-op
|
||||
labels:
|
||||
app: live-op
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.liveOp.port }}
|
||||
targetPort: http
|
||||
nodePort: {{ .Values.network.liveOpNodePort }}
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: live-op
|
||||
release: {{ .Release.Name }}
|
||||
102
999-部署模板/视频流媒体-helm-2604/templates/live-proxy-configmap.yaml
Normal file
102
999-部署模板/视频流媒体-helm-2604/templates/live-proxy-configmap.yaml
Normal file
@@ -0,0 +1,102 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: {{ .Release.Name }}-live-proxy-config
|
||||
labels:
|
||||
app: live-proxy
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
data:
|
||||
application.yaml: |
|
||||
server:
|
||||
port: {{ .Values.liveProxy.port }}
|
||||
|
||||
live:
|
||||
proxy:
|
||||
ffmpeg:
|
||||
ffmpeg-path: /usr/bin/ffmpeg
|
||||
ffprobe-path: /usr/bin/ffprobe
|
||||
ffplay-path: /usr/bin/ffplay
|
||||
check-win-pid: tasklist /FI "PID eq %s " /FO LIST
|
||||
check-unix-pid: ps -p %s
|
||||
os-name: windows
|
||||
upload:
|
||||
path: /proxy/uploads
|
||||
src-all-size: 4294967296
|
||||
dest-all-size: 4294967296
|
||||
ws:
|
||||
url: "{{ .Values.mediaSuite.nodeIP }}:{{ .Values.network.liveProxyNodePort }}"
|
||||
minio:
|
||||
endpoint: {{ .Values.external.minio.endpoint }}
|
||||
access-key: {{ .Values.external.minio.accessKey }}
|
||||
secret-key: {{ .Values.external.minio.secretKey }}
|
||||
bucket-name: ilm-detect
|
||||
|
||||
spring:
|
||||
platform:
|
||||
info:
|
||||
name: cmii-live-proxy
|
||||
description: ffmpeg服务小工具
|
||||
version: 1.0.3
|
||||
scanPackage: com.cmii.live.proxy.web.controller
|
||||
profiles:
|
||||
active: local
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
mvc:
|
||||
pathmatch:
|
||||
matching-strategy: ANT_PATH_MATCHER
|
||||
thymeleaf:
|
||||
check-template-location: false
|
||||
cache: false
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: 1024MB
|
||||
max-request-size: 1024MB
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
druid:
|
||||
url: jdbc:mysql://{{ .Values.external.database.host }}:{{ .Values.external.database.port }}/{{ .Values.databases.proxy }}?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
|
||||
username: {{ .Values.external.database.username }}
|
||||
password: {{ .Values.external.database.password }}
|
||||
initial-size: 5
|
||||
min-idle: 5
|
||||
max-active: 20
|
||||
max-wait: 60000
|
||||
time-between-eviction-runs-millis: 60000
|
||||
min-evictable-idle-time-millis: 300000
|
||||
max-evictable-idle-time-millis: 600000
|
||||
validation-query: SELECT 1
|
||||
test-while-idle: true
|
||||
test-on-borrow: false
|
||||
test-on-return: false
|
||||
filters: stat,wall,slf4j
|
||||
connection-properties: connectTimeout=10000;socketTimeout=30000
|
||||
redis:
|
||||
host: {{ .Values.external.redis.host }}
|
||||
port: {{ .Values.external.redis.port }}
|
||||
password: {{ .Values.external.redis.password }}
|
||||
database: {{ .Values.redis.proxyDb }}
|
||||
timeout: 10s
|
||||
lettuce:
|
||||
pool:
|
||||
min-idle: 0
|
||||
max-idle: 10
|
||||
max-active: 10
|
||||
max-wait: -1ms
|
||||
|
||||
springdoc:
|
||||
api-docs:
|
||||
enabled: true
|
||||
swagger-ui:
|
||||
enabled: true
|
||||
|
||||
mybatis-plus:
|
||||
global-config:
|
||||
banner: false
|
||||
|
||||
logging:
|
||||
config: classpath:logback-proxy.xml
|
||||
level:
|
||||
com.cmii.live.proxy.web.mapper: info
|
||||
@@ -0,0 +1,81 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-live-proxy
|
||||
labels:
|
||||
app: live-proxy
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
replicas: {{ .Values.liveProxy.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: live-proxy
|
||||
release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: live-proxy
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
containers:
|
||||
- name: live-proxy
|
||||
image: "{{ .Values.images.liveProxy.repository }}:{{ .Values.images.liveProxy.tag }}"
|
||||
imagePullPolicy: {{ .Values.images.liveProxy.pullPolicy }}
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: {{ .Values.liveProxy.port }}
|
||||
protocol: TCP
|
||||
env:
|
||||
- name: LIVE_IP_PRIVATE
|
||||
value: "{{ .Values.mediaSuite.nodeIP }}"
|
||||
- name: LIVE_ZLM_PORT_HTTP
|
||||
value: "{{ .Values.zlm.ports.http }}"
|
||||
- name: LIVE_ZLM_PORT_HTTPS
|
||||
value: "{{ .Values.zlm.ports.https }}"
|
||||
- name: LIVE_ZLM_PORT_RTMP
|
||||
value: "{{ .Values.zlm.ports.rtmp }}"
|
||||
- name: LIVE_ZLM_PORT_RTSP
|
||||
value: "{{ .Values.zlm.ports.rtsp }}"
|
||||
- name: LIVE_OP_PORT_HTTP
|
||||
value: "{{ .Values.network.liveOpNodePort }}"
|
||||
volumeMounts:
|
||||
- name: config
|
||||
mountPath: /proxy/application.yaml
|
||||
subPath: application.yaml
|
||||
- name: shared-data
|
||||
mountPath: /cmii/uploads
|
||||
subPath: uploads
|
||||
resources:
|
||||
{{- toYaml .Values.liveProxy.resources | nindent 12 }}
|
||||
volumes:
|
||||
- name: config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-live-proxy-config
|
||||
- name: shared-data
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .Release.Name }}-shared-data-pvc
|
||||
imagePullSecrets:
|
||||
- name: {{ .Values.images.secretName }}
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-live-proxy
|
||||
labels:
|
||||
app: live-proxy
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
type: NodePort
|
||||
ports:
|
||||
- name: http
|
||||
port: {{ .Values.liveProxy.port }}
|
||||
targetPort: http
|
||||
nodePort: {{ .Values.network.liveProxyNodePort }}
|
||||
protocol: TCP
|
||||
selector:
|
||||
app: live-proxy
|
||||
release: {{ .Release.Name }}
|
||||
156
999-部署模板/视频流媒体-helm-2604/templates/media-suite-deployment.yaml
Normal file
156
999-部署模板/视频流媒体-helm-2604/templates/media-suite-deployment.yaml
Normal file
@@ -0,0 +1,156 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-media-suite
|
||||
labels:
|
||||
app: media-suite
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
replicas: {{ .Values.mediaSuite.replicaCount }}
|
||||
selector:
|
||||
matchLabels:
|
||||
app: media-suite
|
||||
release: {{ .Release.Name }}
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: media-suite
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
hostNetwork: true
|
||||
dnsPolicy: ClusterFirstWithHostNet
|
||||
# 配置到固定node上
|
||||
nodeSelector:
|
||||
{{- range $key, $value := .Values.mediaSuite.nodeSelector }}
|
||||
{{ $key }}: {{ $value | quote }}
|
||||
{{- end }}
|
||||
containers:
|
||||
# WVP Container
|
||||
- name: wvp
|
||||
image: "{{ .Values.images.wvp.repository }}:{{ .Values.images.wvp.tag }}"
|
||||
imagePullPolicy: {{ .Values.images.wvp.pullPolicy }}
|
||||
ports:
|
||||
- name: wvp-http
|
||||
containerPort: {{ .Values.wvp.ports.http }}
|
||||
hostPort: {{ .Values.wvp.ports.http }}
|
||||
protocol: TCP
|
||||
- name: wvp-sip
|
||||
containerPort: {{ .Values.wvp.ports.sip }}
|
||||
hostPort: {{ .Values.wvp.ports.sip }}
|
||||
protocol: UDP
|
||||
env:
|
||||
- name: TZ
|
||||
value: "Asia/Shanghai"
|
||||
- name: NODE_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.hostIP
|
||||
- name: POD_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.hostIP
|
||||
volumeMounts:
|
||||
- name: wvp-config
|
||||
mountPath: /home/koisi/wvp.yaml
|
||||
subPath: application.yaml
|
||||
resources:
|
||||
{{- toYaml .Values.wvp.resources | nindent 12 }}
|
||||
# ZLM Container
|
||||
- name: zlm
|
||||
image: "{{ .Values.images.zlm.repository }}:{{ .Values.images.zlm.tag }}"
|
||||
imagePullPolicy: {{ .Values.images.zlm.pullPolicy }}
|
||||
ports:
|
||||
- name: zlm-http
|
||||
containerPort: {{ .Values.zlm.ports.http }}
|
||||
hostPort: {{ .Values.zlm.ports.http }}
|
||||
protocol: TCP
|
||||
- name: zlm-https
|
||||
containerPort: {{ .Values.zlm.ports.https }}
|
||||
hostPort: {{ .Values.zlm.ports.https }}
|
||||
protocol: TCP
|
||||
- name: zlm-rtmp
|
||||
containerPort: {{ .Values.zlm.ports.rtmp }}
|
||||
hostPort: {{ .Values.zlm.ports.rtmp }}
|
||||
protocol: TCP
|
||||
- name: zlm-rtsp
|
||||
containerPort: {{ .Values.zlm.ports.rtsp }}
|
||||
hostPort: {{ .Values.zlm.ports.rtsp }}
|
||||
protocol: TCP
|
||||
- name: zlm-webrtc-tcp
|
||||
containerPort: {{ .Values.zlm.ports.webrtc }}
|
||||
hostPort: {{ .Values.zlm.ports.webrtc }}
|
||||
protocol: TCP
|
||||
- name: zlm-webrtc-udp
|
||||
containerPort: {{ .Values.zlm.ports.webrtc }}
|
||||
hostPort: {{ .Values.zlm.ports.webrtc }}
|
||||
protocol: UDP
|
||||
- name: zlm-srt
|
||||
containerPort: {{ .Values.zlm.ports.srt }}
|
||||
hostPort: {{ .Values.zlm.ports.srt }}
|
||||
protocol: TCP
|
||||
- name: zlm-rtp-proxy
|
||||
containerPort: {{ .Values.zlm.ports.rtpProxy }}
|
||||
hostPort: {{ .Values.zlm.ports.rtpProxy }}
|
||||
protocol: UDP
|
||||
{{- range $i := untilStep (int .Values.zlm.ports.rtpMin) (int (add1 .Values.zlm.ports.rtpMax)) 1 }}
|
||||
- name: zlm-rtp-{{ $i }}
|
||||
containerPort: {{ $i }}
|
||||
hostPort: {{ $i }}
|
||||
protocol: UDP
|
||||
{{- end }}
|
||||
env:
|
||||
- name: TZ
|
||||
value: "Asia/Shanghai"
|
||||
- name: NODE_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.hostIP
|
||||
- name: POD_IP
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: status.hostIP
|
||||
volumeMounts:
|
||||
- name: zlm-config
|
||||
mountPath: /home/koisi/zlm.ini
|
||||
subPath: zlm.ini
|
||||
- name: shared-data
|
||||
mountPath: /home/koisi/zlm/www/zlm/hls
|
||||
subPath: hls
|
||||
resources:
|
||||
{{- toYaml .Values.zlm.resources | nindent 12 }}
|
||||
# ZLM-OSS Container
|
||||
- name: zlm-oss
|
||||
image: "{{ .Values.images.zlmOss.repository }}:{{ .Values.images.zlmOss.tag }}"
|
||||
imagePullPolicy: {{ .Values.images.zlmOss.pullPolicy }}
|
||||
ports:
|
||||
- name: zlm-oss-http
|
||||
containerPort: {{ .Values.zlmOss.port }}
|
||||
hostPort: {{ .Values.zlmOss.port }}
|
||||
protocol: TCP
|
||||
volumeMounts:
|
||||
- name: zlm-oss-config
|
||||
mountPath: /cmii/oss-adaptor/boot/config.yaml
|
||||
subPath: config.yaml
|
||||
- name: shared-data
|
||||
mountPath: /cmii/share/hls
|
||||
subPath: hls
|
||||
resources:
|
||||
{{- toYaml .Values.zlmOss.resources | nindent 12 }}
|
||||
|
||||
volumes:
|
||||
- name: wvp-config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-wvp-config
|
||||
- name: zlm-config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-zlm-config
|
||||
- name: zlm-oss-config
|
||||
configMap:
|
||||
name: {{ .Release.Name }}-zlm-oss-config
|
||||
- name: shared-data
|
||||
persistentVolumeClaim:
|
||||
claimName: {{ .Release.Name }}-shared-data-pvc
|
||||
imagePullSecrets:
|
||||
- name: {{ .Values.images.secretName }}
|
||||
19
999-部署模板/视频流媒体-helm-2604/templates/pvc.yaml
Normal file
19
999-部署模板/视频流媒体-helm-2604/templates/pvc.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
# 单个共享 PVC,通过 subPath 区分不同服务的数据
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-shared-data-pvc
|
||||
labels:
|
||||
app: media-suite
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteMany
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
||||
{{- if .Values.persistence.shared.storageClass }}
|
||||
storageClassName: {{ .Values.persistence.shared.storageClass }}
|
||||
{{- end }}
|
||||
96
999-部署模板/视频流媒体-helm-2604/templates/wvp-configmap.yaml
Normal file
96
999-部署模板/视频流媒体-helm-2604/templates/wvp-configmap.yaml
Normal file
@@ -0,0 +1,96 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-wvp-config
|
||||
labels:
|
||||
app: wvp
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
data:
|
||||
application.yaml: |
|
||||
spring:
|
||||
cache:
|
||||
type: redis
|
||||
thymeleaf:
|
||||
cache: false
|
||||
mvc:
|
||||
async:
|
||||
request-timeout: 20000
|
||||
servlet:
|
||||
multipart:
|
||||
max-file-size: 10MB
|
||||
max-request-size: 100MB
|
||||
data:
|
||||
redis:
|
||||
host: {{ .Values.external.redis.host }}
|
||||
port: {{ .Values.external.redis.port }}
|
||||
database: {{ .Values.redis.wvpDb }}
|
||||
password: {{ .Values.external.redis.password }}
|
||||
timeout: 10000
|
||||
datasource:
|
||||
type: com.zaxxer.hikari.HikariDataSource
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
url: jdbc:mysql://{{ .Values.external.database.host }}:{{ .Values.external.database.port }}/{{ .Values.databases.wvp }}?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
|
||||
username: {{ .Values.external.database.username }}
|
||||
password: {{ .Values.external.database.password }}
|
||||
|
||||
server:
|
||||
port: {{ .Values.wvp.ports.http }}
|
||||
ssl:
|
||||
enabled: false
|
||||
|
||||
sip:
|
||||
ip: ${NODE_IP}
|
||||
show-ip: ${NODE_IP}
|
||||
port: {{ .Values.wvp.ports.sip }}
|
||||
domain: {{ .Values.wvp.sip.domain }}
|
||||
id: "{{ .Values.wvp.sip.id }}"
|
||||
password: {{ .Values.zlm.apiPasswd }}
|
||||
register-time-interval: 60
|
||||
ptz-speed: 50
|
||||
keepalliveToOnline: true
|
||||
alarm: true
|
||||
timeout: 1000
|
||||
|
||||
media:
|
||||
id: {{ .Values.zlm.nodeId }}
|
||||
ip: 127.0.0.1
|
||||
http-port: {{ .Values.zlm.ports.http }}
|
||||
http-ssl-port: 0
|
||||
flv-port: {{ .Values.zlm.ports.http }}
|
||||
flv-ssl-port: {{ .Values.zlm.ports.https }}
|
||||
ws-flv-port: {{ .Values.zlm.ports.http }}
|
||||
ws-flv-ssl-port: {{ .Values.zlm.ports.https }}
|
||||
rtp-proxy-port: {{ .Values.zlm.ports.http }}
|
||||
rtmp-port: {{ .Values.zlm.ports.https }}
|
||||
rtmp-ssl-port: 0
|
||||
rtsp-port: {{ .Values.zlm.ports.rtsp }}
|
||||
rtsp-ssl-port: 0
|
||||
auto-config: false
|
||||
secret: {{ .Values.zlm.apiPasswd }}
|
||||
rtp:
|
||||
enable: true
|
||||
port-range: {{ .Values.zlm.ports.rtpMin }},{{ .Values.zlm.ports.rtpMax }}
|
||||
send-port-range: 30800,30990
|
||||
record-path: /opt/media/bin/www/record/
|
||||
record-day: 7
|
||||
record-assist-port: 0
|
||||
|
||||
user-settings:
|
||||
auto-apply-play: true
|
||||
play-timeout: 30000
|
||||
wait-track: false
|
||||
record-push-live: false
|
||||
record-sip: true
|
||||
stream-on-demand: true
|
||||
interface-authentication: true
|
||||
broadcast-for-platform: TCP-PASSIVE
|
||||
push-stream-after-ack: true
|
||||
send-to-platforms-when-id-lost: true
|
||||
interface-authentication-excludes:
|
||||
- /api/**
|
||||
push-authority: true
|
||||
|
||||
logging:
|
||||
config: classpath:logback-spring.xml
|
||||
211
999-部署模板/视频流媒体-helm-2604/templates/zlm-configmap.yaml
Normal file
211
999-部署模板/视频流媒体-helm-2604/templates/zlm-configmap.yaml
Normal file
@@ -0,0 +1,211 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-zlm-config
|
||||
labels:
|
||||
app: zlm
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
data:
|
||||
zlm.ini: |
|
||||
[api]
|
||||
apiDebug = 0
|
||||
secret = {{ .Values.zlm.apiPasswd }}
|
||||
snapRoot = ./www/snap/
|
||||
defaultSnap = ./www/logo.png
|
||||
downloadRoot = ./www
|
||||
|
||||
[ffmpeg]
|
||||
bin = /usr/bin/ffmpeg
|
||||
cmd = %s -re -i %s -c:a aac -strict -2 -ar 44100 -ab 48k -c:v libx264 -f flv %s
|
||||
log = ./ffmpeg/ffmpeg.log
|
||||
restart_sec = 0
|
||||
snap = %s -rtsp_transport tcp -i %s -y -f mjpeg -frames:v 1 %s
|
||||
|
||||
[protocol]
|
||||
modify_stamp = 2
|
||||
enable_audio = 1
|
||||
add_mute_audio = 0
|
||||
auto_close = 0
|
||||
continue_push_ms = 3000
|
||||
paced_sender_ms = 0
|
||||
enable_hls = 1
|
||||
enable_hls_fmp4 = 0
|
||||
enable_rtmp = 1
|
||||
enable_ts = 1
|
||||
enable_fmp4 = 1
|
||||
enable_rtsp = 1
|
||||
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 = 0
|
||||
fmp4_demand = 0
|
||||
|
||||
[general]
|
||||
enableVhost = 0
|
||||
flowThreshold = 1024
|
||||
enable_ffmpeg_log = 0
|
||||
listen_ip = ::
|
||||
maxStreamWaitMS = 0
|
||||
streamNoneReaderDelayMS = 120000
|
||||
resetWhenRePlay = 1
|
||||
mergeWriteMS = 0
|
||||
mediaServerId = {{ .Values.zlm.nodeId }}
|
||||
wait_audio_track_data_ms = 1000
|
||||
wait_track_ready_ms = 8000
|
||||
wait_add_track_ms = 2000
|
||||
unready_frame_cache = 96
|
||||
check_nvidia_dev = 1
|
||||
broadcast_player_count_changed = 0
|
||||
|
||||
[hls]
|
||||
fileBufSize = 65536
|
||||
segDur = 10
|
||||
segNum = 3
|
||||
segDelay = 0
|
||||
segRetain = 5
|
||||
broadcastRecordTs = 1
|
||||
deleteDelaySec = 10
|
||||
segKeep = 0
|
||||
fastRegister = 0
|
||||
|
||||
[hook]
|
||||
enable = 1
|
||||
on_flow_report =
|
||||
on_http_access =
|
||||
# ZLM → Live Operator
|
||||
on_play = http://{{ .Release.Name }}-live-op:{{ .Values.liveOp.port }}/hooks/on_play
|
||||
on_publish = http://{{ .Release.Name }}-live-op:{{ .Values.liveOp.port }}/hooks/on_push
|
||||
on_stream_changed = http://{{ .Release.Name }}-live-op:{{ .Values.liveOp.port }}/hooks/on_stream_changed
|
||||
|
||||
# ZLM → WVP
|
||||
on_stream_none_reader = http://127.0.0.1:{{ .Values.wvp.ports.http }}/index/hook/on_stream_none_reader
|
||||
on_stream_not_found = http://127.0.0.1:{{ .Values.wvp.ports.http }}/index/hook/on_stream_not_found
|
||||
on_rtp_server_timeout = http://127.0.0.1:{{ .Values.wvp.ports.http }}/index/hook/on_rtp_server_timeout
|
||||
on_send_rtp_stopped = http://127.0.0.1:{{ .Values.wvp.ports.http }}/index/hook/on_send_rtp_stopped
|
||||
on_server_started = http://127.0.0.1:{{ .Values.wvp.ports.http }}/index/hook/on_server_started
|
||||
on_server_keepalive = http://127.0.0.1:{{ .Values.wvp.ports.http }}/index/hook/on_server_keepalive
|
||||
on_record_mp4 = http://127.0.0.1:{{ .Values.wvp.ports.http }}/index/hook/on_record_mp4
|
||||
|
||||
on_server_exited =
|
||||
on_rtsp_auth =
|
||||
on_rtsp_realm =
|
||||
on_shell_login =
|
||||
# ZLM → ZLM OSS
|
||||
on_record_ts = http://127.0.0.1:{{ .Values.zlmOss.port }}/hooks/on_record_ts
|
||||
stream_changed_schemas = rtsp/rtmp/fmp4/ts/hls/hls.fmp4
|
||||
timeoutSec = 30
|
||||
alive_interval = 10.0
|
||||
retry = 1
|
||||
retry_delay = 3.0
|
||||
|
||||
[cluster]
|
||||
origin_url =
|
||||
timeout_sec = 15
|
||||
retry_count = 3
|
||||
|
||||
[http]
|
||||
port = {{ .Values.zlm.ports.http }}
|
||||
sslport = {{ .Values.zlm.ports.https }}
|
||||
charSet = utf-8
|
||||
keepAliveSecond = 30
|
||||
maxReqSize = 40960
|
||||
notFound = <html><head><title>404 Not Found</title></head><body><div>404 Not Found</div></body></html>
|
||||
rootPath = ./www
|
||||
sendBufSize = 65536
|
||||
dirMenu = 1
|
||||
virtualPath =
|
||||
forbidCacheSuffix =
|
||||
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
|
||||
|
||||
[multicast]
|
||||
addrMax = 239.255.255.255
|
||||
addrMin = 239.0.0.0
|
||||
udpTTL = 64
|
||||
|
||||
[record]
|
||||
appName = record
|
||||
fileBufSize = 65536
|
||||
sampleMS = 500
|
||||
fastStart = 0
|
||||
fileRepeat = 0
|
||||
enableFmp4 = 0
|
||||
|
||||
[rtmp]
|
||||
port = {{ .Values.zlm.ports.rtmp }}
|
||||
sslport = 0
|
||||
handshakeSecond = 15
|
||||
keepAliveSecond = 15
|
||||
directProxy = 1
|
||||
enhanced = 0
|
||||
|
||||
[rtp]
|
||||
audioMtuSize = 600
|
||||
videoMtuSize = 1400
|
||||
rtpMaxSize = 10
|
||||
lowLatency = 0
|
||||
h264_stap_a = 1
|
||||
|
||||
[rtp_proxy]
|
||||
port = {{ .Values.zlm.ports.rtpProxy }}
|
||||
port_range = {{ .Values.zlm.ports.rtpMin }}-{{ .Values.zlm.ports.rtpMax }}
|
||||
dumpDir =
|
||||
timeoutSec = 5
|
||||
h264_pt = 98
|
||||
h265_pt = 99
|
||||
ps_pt = 96
|
||||
opus_pt = 100
|
||||
gop_cache = 1
|
||||
rtp_g711_dur_ms = 100
|
||||
udp_recv_socket_buffer = 4194304
|
||||
|
||||
[rtc]
|
||||
bfilter=0
|
||||
datachannel_echo=0
|
||||
maxRtpCacheMS=5000
|
||||
maxRtpCacheSize=2048
|
||||
externIP = $(NODE_IP)
|
||||
port = {{ .Values.zlm.ports.webrtc }}
|
||||
tcpPort = {{ .Values.zlm.ports.webrtc }}
|
||||
timeoutSec = 30
|
||||
rembBitRate = 0
|
||||
preferredCodecA = PCMA,PCMU,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 = 3000
|
||||
nackMaxCount = 15
|
||||
nackIntervalRatio = 1.0
|
||||
nackRtpSize = 8
|
||||
|
||||
[srt]
|
||||
port = {{ .Values.zlm.ports.srt }}
|
||||
timeoutSec = 5
|
||||
latencyMul = 4
|
||||
pktBufSize = 8192
|
||||
passPhrase=
|
||||
|
||||
[rtsp]
|
||||
port = {{ .Values.zlm.ports.rtsp }}
|
||||
sslport = 0
|
||||
authBasic = 0
|
||||
directProxy = 1
|
||||
handshakeSecond = 15
|
||||
keepAliveSecond = 15
|
||||
lowLatency = 1
|
||||
rtpTransportType = -1
|
||||
|
||||
[shell]
|
||||
maxReqSize = 1024
|
||||
port = 0
|
||||
83
999-部署模板/视频流媒体-helm-2604/templates/zlm-oss-configmap.yaml
Normal file
83
999-部署模板/视频流媒体-helm-2604/templates/zlm-oss-configmap.yaml
Normal file
@@ -0,0 +1,83 @@
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
namespace: {{ .Release.Namespace }}
|
||||
name: {{ .Release.Name }}-zlm-oss-config
|
||||
labels:
|
||||
app: media-suite
|
||||
chart: {{ .Chart.Name }}-{{ .Chart.Version }}
|
||||
release: {{ .Release.Name }}
|
||||
data:
|
||||
config.yaml: |
|
||||
app:
|
||||
env: default
|
||||
listen:
|
||||
host: 0.0.0.0
|
||||
port: {{ .Values.zlmOss.port }}
|
||||
|
||||
workers: 4
|
||||
thread_pool: 8
|
||||
|
||||
log:
|
||||
level: INFO
|
||||
onfile_logger_interval: 10
|
||||
backup_on_fails: true
|
||||
skip_on_initializing_seconds: 4
|
||||
skip_hubs: "Hangar, ai-5g-a"
|
||||
file_dir:
|
||||
shared: "/cmii/share/hls"
|
||||
backup: "/cmii/backup"
|
||||
debug:
|
||||
save_all: false
|
||||
save_to: "UASMS"
|
||||
max_duration: 120
|
||||
|
||||
minio:
|
||||
endpoint: "{{ .Values.external.minio.endpoint }}"
|
||||
access_key: "{{ .Values.external.minio.accessKey }}"
|
||||
secret_key: "{{ .Values.external.minio.secretKey }}"
|
||||
mysql:
|
||||
host: {{ .Values.external.database.host }}
|
||||
port: {{ .Values.external.database.port }}
|
||||
username: {{ .Values.external.database.username }}
|
||||
password: {{ .Values.external.database.password }}
|
||||
redis:
|
||||
host: {{ .Values.external.redis.host }}
|
||||
port: {{ .Values.external.redis.port }}
|
||||
database: {{ .Values.redis.zlmOssDb }}
|
||||
password: {{ .Values.external.redis.password }}
|
||||
rabbitmq:
|
||||
host: {{ .Values.external.rabbitmq.host }}
|
||||
port: {{ .Values.external.rabbitmq.port }}
|
||||
username: {{ .Values.external.rabbitmq.username }}
|
||||
password: {{ .Values.external.rabbitmq.password }}
|
||||
|
||||
platforms:
|
||||
live_op:
|
||||
db_schema: "{{ .Values.databases.liveOp }}"
|
||||
|
||||
old_cmlc:
|
||||
cloud_live: "{{ .Values.external.cloudLive }}"
|
||||
quota: false
|
||||
oss_bucket: "ilm-detect"
|
||||
meta:
|
||||
src_id: "1323096648758464518"
|
||||
user_id: 0
|
||||
company_id: 0
|
||||
|
||||
uasms:
|
||||
scope_prefix: "UASMS"
|
||||
oss_bucket: "ilm-detect"
|
||||
meta:
|
||||
src_id: "1323096648758464523"
|
||||
platform: "REGULATOR"
|
||||
user_id: 0
|
||||
|
||||
lite:
|
||||
scope_prefix: "LITE"
|
||||
oss_bucket: "ilm-detect"
|
||||
routing_key: "sky.live.video"
|
||||
meta:
|
||||
src_id: "1111111112222222222"
|
||||
platform: "LITE"
|
||||
user_id: 0
|
||||
185
999-部署模板/视频流媒体-helm-2604/values.yaml
Normal file
185
999-部署模板/视频流媒体-helm-2604/values.yaml
Normal file
@@ -0,0 +1,185 @@
|
||||
# 镜像配置
|
||||
images:
|
||||
secretName: harborsecret
|
||||
# Harbor Docker Config JSON (Base64 编码)
|
||||
# cat ~/.docker/config.json | base64 -w 0
|
||||
dockerConfigJson: "ewoJImF1dGhzIjogewoJCSJoYXJib3IuY2RjeXkuY29tLmNuIjogewoJCQkiYXV0aCI6ICJjbUZrTURKZlpISnZibVU2UkhKdmJtVkFNVEl6TkE9PSIKCQl9Cgl9Cn0="
|
||||
|
||||
zlm:
|
||||
repository: 镜像仓库/cmii/zlm
|
||||
tag: v2.7.5
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
wvp:
|
||||
repository: 镜像仓库/cmii/wvp
|
||||
tag: v2.7.4
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
liveOp:
|
||||
repository: 镜像仓库/cmii/cmii-live-operator
|
||||
tag: v5.8.0
|
||||
pullPolicy: Always
|
||||
|
||||
zlmOss:
|
||||
repository: 镜像仓库/cmii/zlm-oss-adaptor
|
||||
tag: v2.7.5
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
liveHelper:
|
||||
repository: 镜像仓库/cmii/cmii-hls-downloader
|
||||
tag: v2.7.4
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
liveProxy:
|
||||
repository: 镜像仓库/cmii/cmii-live-proxy
|
||||
tag: v1.0.3
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# 网络配置
|
||||
network:
|
||||
# HostNetwork 使用容器端口 (zlm | zlm-oss | wvp)
|
||||
# NodePort (live-op|live-proxy|live-helper) default nodePort port
|
||||
liveOpNodePort: 37086
|
||||
liveProxyNodePort: 37081
|
||||
liveHelperNodePort: 37080
|
||||
|
||||
# Media Suite 配置 (WVP + ZLM + ZLM-OSS 合并部署)
|
||||
mediaSuite:
|
||||
replicaCount: 1
|
||||
# 固定部署的节点 IP(用于 HostNetwork 模式)
|
||||
# 其他服务通过此 IP 访问 Media Suite
|
||||
nodeIP: "固定主机内网IP"
|
||||
# 设置固定节点IP的标签 亲和性
|
||||
nodeSelector:
|
||||
kubernetes.io/hostname: "固定主机hostname"
|
||||
|
||||
# ZLM 配置
|
||||
zlm:
|
||||
apiPasswd: "035c7GB5cc"
|
||||
nodeId: "koisi_gb_228"
|
||||
ports:
|
||||
http: 7088
|
||||
https: 7089
|
||||
rtmp: 7935
|
||||
rtsp: 7554
|
||||
webrtc: 7090
|
||||
srt: 7556
|
||||
rtpProxy: 7100
|
||||
rtpMin: 7200
|
||||
rtpMax: 7250
|
||||
resources:
|
||||
limits:
|
||||
cpu: "2"
|
||||
memory: "4Gi"
|
||||
requests:
|
||||
cpu: "2"
|
||||
memory: "2Gi"
|
||||
|
||||
# WVP 配置
|
||||
wvp:
|
||||
ports:
|
||||
http: 7082
|
||||
sip: 7060
|
||||
sip:
|
||||
domain: "5101000049"
|
||||
id: "51010000492000000228"
|
||||
resources:
|
||||
limits:
|
||||
cpu: "2"
|
||||
memory: "4Gi"
|
||||
requests:
|
||||
cpu: "1"
|
||||
memory: "2Gi"
|
||||
|
||||
# Live Operator 配置
|
||||
liveOp:
|
||||
port: 7086
|
||||
replicaCount: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: "2"
|
||||
memory: "2Gi"
|
||||
requests:
|
||||
cpu: "1"
|
||||
memory: "1Gi"
|
||||
|
||||
# ZLM OSS 配置
|
||||
zlmOss:
|
||||
port: 7084
|
||||
resources:
|
||||
limits:
|
||||
cpu: "2"
|
||||
memory: "2Gi"
|
||||
requests:
|
||||
cpu: "1"
|
||||
memory: "1Gi"
|
||||
|
||||
# Live Helper 配置
|
||||
liveHelper:
|
||||
port: 7080
|
||||
allowDownload: "all"
|
||||
replicaCount: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
memory: "1Gi"
|
||||
requests:
|
||||
cpu: "500m"
|
||||
memory: "512Mi"
|
||||
|
||||
# Live Proxy 配置
|
||||
liveProxy:
|
||||
port: 7081
|
||||
replicaCount: 1
|
||||
resources:
|
||||
limits:
|
||||
cpu: "1"
|
||||
memory: "2Gi"
|
||||
requests:
|
||||
cpu: "1"
|
||||
memory: "1Gi"
|
||||
|
||||
# mysql | redis | minio | rabbitmq | cloudLive 配置
|
||||
external:
|
||||
database:
|
||||
host: "helm-mysql"
|
||||
port: "3306"
|
||||
username: "k8s_admin"
|
||||
password: "fP#UaH6qQ3)8"
|
||||
|
||||
redis:
|
||||
host: "helm-redis-master"
|
||||
port: "6379"
|
||||
password: "Mcache@4522"
|
||||
|
||||
minio:
|
||||
endpoint: "http://helm-minio:9000"
|
||||
accessKey: "cmii"
|
||||
secretKey: "B#923fC7mk"
|
||||
|
||||
rabbitmq:
|
||||
host: "helm-rabbitmq"
|
||||
port: "5672"
|
||||
username: "admin"
|
||||
password: "nYcRN91r._hj"
|
||||
|
||||
cloudLive: "cmii-uav-cloud-live"
|
||||
|
||||
# 数据库名称
|
||||
databases:
|
||||
liveOp: cmii_live_operator
|
||||
wvp: wvp
|
||||
proxy: cmii_live_proxy
|
||||
|
||||
# Redis DB 索引
|
||||
redis:
|
||||
liveOpDb: 1
|
||||
zlmOssDb: 1
|
||||
wvpDb: 2
|
||||
proxyDb: 3
|
||||
|
||||
# 持久化存储配置
|
||||
persistence:
|
||||
shared:
|
||||
# 单个共享 PVC,固定 10Gi
|
||||
storageClass: "nfs-prod-distribute"
|
||||
230
999-部署模板/视频流媒体-helm-2604/启动文档.md
Normal file
230
999-部署模板/视频流媒体-helm-2604/启动文档.md
Normal file
@@ -0,0 +1,230 @@
|
||||
# CMII Live Services - Merged 部署文档
|
||||
|
||||
## 概述
|
||||
|
||||
- **Media Suite**: WVP + ZLM + ZLM-OSS 三个容器合并部署在一个 Pod 中
|
||||
- **网络模式**: HostNetwork (直接使用宿主机网络)
|
||||
- **共享存储**: ZLM 和 ZLM-OSS 共享 HLS 数据卷
|
||||
- **其他服务**: Live Operator、Live Proxy、Live Helper 独立部署 使用 NodePort 暴露
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
merge/
|
||||
├── Chart.yaml # Helm Chart 元数据
|
||||
├── values.yaml # 配置文件
|
||||
├── deploy.sh # 一键部署脚本
|
||||
└── templates/
|
||||
├── media-suite-deployment.yaml # Media Suite (WVP+ZLM+ZLM-OSS)
|
||||
├── live-op-deployment.yaml # Live Operator
|
||||
├── live-proxy-deployment.yaml # Live Proxy
|
||||
├── live-helper-deployment.yaml # Live Helper
|
||||
├── wvp-configmap.yaml # WVP 配置
|
||||
├── zlm-configmap.yaml # ZLM 配置
|
||||
├── zlm-oss-configmap.yaml # ZLM-OSS 配置
|
||||
├── live-op-configmap.yaml # Live Operator 配置
|
||||
├── live-proxy-configmap.yaml # Live Proxy 配置
|
||||
├── live-helper-configmap.yaml # Live Helper 配置
|
||||
├── pvc.yaml # 持久化存储
|
||||
├── harborsecret.yaml # 镜像拉取密钥
|
||||
└── NOTES.txt # 部署提示
|
||||
```
|
||||
|
||||
## 当前服务前置
|
||||
|
||||
- Kubernetes 集群 (1.30.14)
|
||||
- Helm (3.20.2)
|
||||
- kubectl
|
||||
- NFS StorageClass (用于 HLS 数据共享存储)
|
||||
- 外部服务: MySQL、Redis、MinIO、RabbitMQ
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 修改配置
|
||||
|
||||
编辑 `values.yaml` 文件,根据实际情况修改:
|
||||
|
||||
```yaml
|
||||
# 镜像配置
|
||||
images:
|
||||
zlm:
|
||||
repository: your-registry/zlm
|
||||
tag: v2.7.5
|
||||
wvp:
|
||||
repository: your-registry/wvp
|
||||
tag: v2.7.4
|
||||
# ... 其他镜像配置
|
||||
|
||||
# 外部依赖配置
|
||||
external:
|
||||
database:
|
||||
host: "your-mysql-host"
|
||||
port: "3306"
|
||||
username: "root"
|
||||
password: "your-password"
|
||||
redis:
|
||||
host: "your-redis-host"
|
||||
port: "6379"
|
||||
password: "your-password"
|
||||
minio:
|
||||
endpoint: "http://your-minio-host:9000"
|
||||
accessKey: "your-access-key"
|
||||
secretKey: "your-secret-key"
|
||||
rabbitmq:
|
||||
host: "your-rabbitmq-host"
|
||||
port: "5672"
|
||||
username: "admin"
|
||||
password: "your-password"
|
||||
|
||||
# 持久化存储
|
||||
persistence:
|
||||
zlm:
|
||||
hls:
|
||||
storageClass: "your-nfs-storage-class"
|
||||
```
|
||||
|
||||
### 2. 配置 Harbor 镜像密钥 (可选)
|
||||
|
||||
如果使用私有镜像仓库,需要配置镜像拉取密钥:
|
||||
|
||||
```bash
|
||||
# 生成 Docker Config JSON 的 Base64 编码
|
||||
cat ~/.docker/config.json | base64 -w 0
|
||||
|
||||
# 将输出粘贴到 values.yaml 中
|
||||
images:
|
||||
dockerConfigJson: "eyJhdXRocyI6..."
|
||||
```
|
||||
|
||||
### 3. 执行部署
|
||||
|
||||
```bash
|
||||
# 赋予执行权限
|
||||
chmod +x deploy.sh
|
||||
|
||||
# 执行部署
|
||||
./deploy.sh
|
||||
```
|
||||
|
||||
部署脚本会自动:
|
||||
|
||||
- 检查前置条件
|
||||
- 验证配置文件
|
||||
- 创建命名空间
|
||||
- 安装/升级 Helm Release
|
||||
- 等待 Pod 就绪
|
||||
- 显示服务状态和访问地址
|
||||
|
||||
### 4. 验证部署
|
||||
|
||||
```bash
|
||||
# 查看 Pod 状态
|
||||
kubectl get pods -n uavcloud-live-test
|
||||
|
||||
# 查看服务状态
|
||||
kubectl get svc -n uavcloud-live-test
|
||||
|
||||
# 查看 Media Suite 日志
|
||||
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c zlm
|
||||
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c wvp
|
||||
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c zlm-oss
|
||||
```
|
||||
|
||||
```text
|
||||
下面的内容为运维内容,按需查看即可 =================================================================================
|
||||
```
|
||||
|
||||
## 服务访问
|
||||
|
||||
### Media Suite (HostNetwork 模式)
|
||||
|
||||
使用宿主机 IP 直接访问:
|
||||
|
||||
| 服务 | 协议 | 端口 | 示例 |
|
||||
|------------|--------|------|-------------------------|
|
||||
| WVP HTTP | HTTP | 7082 | http://<NODE_IP>:7082 |
|
||||
| WVP SIP | UDP | 7060 | <NODE_IP>:7060 |
|
||||
| ZLM HTTP | HTTP | 7088 | http://<NODE_IP>:7088 |
|
||||
| ZLM HTTPS | HTTPS | 7089 | https://<NODE_IP>:7089 |
|
||||
| ZLM RTMP | RTMP | 7935 | rtmp://<NODE_IP>:7935 |
|
||||
| ZLM RTSP | RTSP | 7554 | rtsp://<NODE_IP>:7554 |
|
||||
| ZLM WebRTC | WebRTC | 7090 | webrtc://<NODE_IP>:7090 |
|
||||
| ZLM SRT | SRT | 7556 | srt://<NODE_IP>:7556 |
|
||||
| ZLM-OSS | HTTP | 7084 | http://<NODE_IP>:7084 |
|
||||
|
||||
### 其他服务 (NodePort 模式)
|
||||
|
||||
| 服务 | 端口 | 示例 |
|
||||
|---------------|-------|------------------------|
|
||||
| Live Operator | 37086 | http://<NODE_IP>:37086 |
|
||||
| Live Proxy | 37081 | http://<NODE_IP>:37081 |
|
||||
| Live Helper | 37080 | http://<NODE_IP>:37080 |
|
||||
|
||||
### 容器间通信
|
||||
|
||||
由于使用 HostNetwork 和同 Pod 部署,容器间通过 `127.0.0.1` 通信:
|
||||
|
||||
- WVP → ZLM: `http://127.0.0.1:7088`
|
||||
- ZLM → WVP Hooks: `http://127.0.0.1:7082`
|
||||
- ZLM → ZLM-OSS Hooks: `http://127.0.0.1:7084`
|
||||
|
||||
### 共享存储
|
||||
|
||||
ZLM 和 ZLM-OSS 挂载同一个 PVC:
|
||||
|
||||
- ZLM: `/home/koisi/zlm/www/zlm/hls`
|
||||
- ZLM-OSS: `/cmii/share/hls`
|
||||
|
||||
## 运维操作
|
||||
|
||||
### 查看日志
|
||||
|
||||
```bash
|
||||
# Media Suite - WVP
|
||||
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c wvp
|
||||
|
||||
# Media Suite - ZLM
|
||||
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c zlm
|
||||
|
||||
# Media Suite - ZLM-OSS
|
||||
kubectl logs -f deployment/helm-live-media-suite -n uavcloud-live-test -c zlm-oss
|
||||
|
||||
# Live Operator
|
||||
kubectl logs -f deployment/helm-live-live-op -n uavcloud-live-test
|
||||
```
|
||||
|
||||
### 进入容器
|
||||
|
||||
```bash
|
||||
# 进入 ZLM 容器
|
||||
kubectl exec -it deployment/helm-live-media-suite -n uavcloud-live-test -c zlm -- bash
|
||||
|
||||
# 进入 WVP 容器
|
||||
kubectl exec -it deployment/helm-live-media-suite -n uavcloud-live-test -c wvp -- bash
|
||||
```
|
||||
|
||||
### 升级服务
|
||||
|
||||
```bash
|
||||
# 修改 values.yaml 后执行升级
|
||||
helm upgrade helm-live ./merge -n uavcloud-live-test -f values.yaml
|
||||
|
||||
# 或使用部署脚本
|
||||
bash deploy.sh
|
||||
```
|
||||
|
||||
### 回滚
|
||||
|
||||
```bash
|
||||
# 查看历史版本
|
||||
helm history helm-live -n uavcloud-live-test
|
||||
|
||||
# 回滚到指定版本
|
||||
helm rollback helm-live <REVISION> -n uavcloud-live-test
|
||||
```
|
||||
|
||||
### 卸载
|
||||
|
||||
```bash
|
||||
helm uninstall helm-live -n uavcloud-live-test
|
||||
```
|
||||
Reference in New Issue
Block a user