跳到主要内容
版本:3.4.0

Streaming服务的布署和维护

安装包和许可文件

流媒体服务交付时,将提供一个安装包文件和一个许可文件。

安装包文件为streaming-release-x.x.x.zip(其中x.x.x为版本号)压缩包文件。压缩包内包含以下文件:

文件名说明
config/application.yml配置文件1
config/config.json配置文件2
config/trusted-clients.json信任客户端表数据文件
start.sh程序启动脚本文件
streaming.serviceStreaming服务的systemd服务单元文件
streaming-x.x.x.jar流媒体服务Jar包(其中x.x.x为版本号)

许可文件为streaming-cert.json,此文件另行交付。

程序的安装

本文假设:

  • 操作系统为Ubuntu Server 20.04,并已经完成一般性操作系统环境的准备
  • 域名为:n11.gratour.info,按下文配置时,应改为实际的域名
  • 操作系统用户名为:streaming,按下文配置时,应改为实际的用户名
  • Java使用JDK版本,安装在/opt/jdk-11

程序端口规划

Streaming服务需要在以下端口监听(均为TCP协议),部分只在本机内内部使用,部分需要开放内网访问,部分需要开放外网访问。 对于需要外网访问的端口,本文假设外网端口和内网端口一致。

默认端口号本机内部监听内网访问需求外网访问需求用途
1973Y本地数据库端口(内部使用)
2000YY流媒体服务API接口端口及HLS发布端口(https)
2001YY流媒体服务API服务对接端口(https),供集成应用或 Micro-GNSS服务使用
2002Y终端JT/T 1078端口(实时,2013)
2003Y终端JT/T 1078端口(回放,2013)
2004Y终端JT/T 1078端口(实时,2019)
2005Y终端JT/T 1078端口(回放,2019)
2006YYFLV-HTTPS 发布端口(https)
2007YYFLV-HTTP 发布端口(实时)
2008YYFLV-HTTP 发布端口(回放)
2009YYFLV-Websocket 发布端口 (wss)

目录规划

  • /opt/strm-fs目录:用于Streaming服务和Micro-GNSS服务存储服务端音视频转储文件、附件等文件
  • /opt/strm目录:用于安装Streaming服务
  • /opt/certs目录:用于存放域名的SSL证书文件,此目录应可为服务执行用户(本文假设为streaming)读取

创建这两个目录并将目录属主改为规划的运行用户(本文假设为streaming):

sudo mkdir /opt/strm
sudo chown streaming:streaming /opt/strm
sudo mkdir /opt/strm-fs
sudo chown streaming:streaming /opt/strm-fs

安装 Streaming 服务程序

  1. 解压压缩包文件到/opt/streaming目录:
unzip streaming-release-x.x.x.zip -d /opt/strm
  1. 修改/opt/strm/start.sh文件中的JAVA_HOME变量的赋值(下图第一个黄色荧光部分) ,使之符合实际Java的安装路径(此处安装的是JDK版),并将最后一行的命令行的jar文件路径改为实际的文件路径( 下图第二个黄色荧光部分):
#!/bin/bash
export JAVA_HOME=/opt/jdk-11
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
java -Djava.net.preferIPv4Stack=true -jar /opt/strm/streaming-3.4.1.jar
  1. /opt/strm/start.sh添加可执行属性:
chmod +x start.sh
  1. 修改/opt/strm/streaming.service文件中的WorkingDirectory属性,使之符合Streaming服务实际的安装目录; 修改User属性为执行服务的用户的用户名;修改ExecStart属性中的黄色荧光部分,改为start.sh文件的实际路径:
[Unit]
Description=GT Streaming Service
After=network.target
StartLimitIntervalSec=0

[Service]
Type=simple
WorkingDirectory=/opt/streaming
Restart=always
RestartSec=5
User=streaming
ExecStart=/bin/bash /opt/streaming/start.sh

[Install]
WantedBy=multi-user.target
  1. /opt/strm/streaming.service复制到/etc/systemd/system目录下,并激活(enable)服务(但先不要启动,因为后面还有一些配置要完成):
sudo cp /opt/strm/streaming.service /etc/systemd/system/
sudo systemctl enable streaming
  1. 将域名的JKS格式的SSL证书文件复制到某个streaming用户可读取的目录,这里假设为/opt/certs目录
  2. 修改/opt/strm/config/application.yml文件:
    • 修改server.port属性的值为流媒体服务API接口端口的端口号;
    • 修改server.private-port属性的值为内部接口端口的端口号;
    • 修改server.ssl.key-store属性的值设为域名SSL证书文件的文件路径;
    • 修改server.ssl.key-store-password属性的值为证书文件的密码;
    • 修改server.ssl.key-alias属性的值为密钥别名。
server:
port: 2000
private-port: 2001
ssl:
key-store-type: JKS
key-store: "/opt/certs/xxx.jks"
key-store-password: "xxxxxx"
key-alias: alias-key
enabled: true
  1. 将许可文件streaming-cert.json文件复制到/opt/strm/config目录下(不要修改此文件的内容)
  2. 根据下表说明,按实际情况和/或需要修改/opt/strm/config/config.json文件:

文件的初始内容大致如下:

{
"instanceId": "strm.1",
"db": {
"dataPath": "/opt/strm/data",
"listenPort": 1973,
"user": "sa",
"pwd": "",
"strmLogCleanupCron": "0 0 1 * * *",
"strmStatCron": "0 40 1 * * *"
},
"externalAddr": "n11.gratour.info",
"endPoint": {
"port2013": {
"livePort": 2002,
"replayPort": 2003
},
"port2019": {
"livePort": 2004,
"replayPort": 2005,
"autoDetectProto": true
}
},
"publisher": {
"livePort": 2006,
"liveHttpPort": 2007,
"replayHttpPort": 2008,
"websocketPort": 2009,
"hls": {
"tmpDir": "/opt/strm-fs/hls",
"fragmentIntv": 1,
"fragmentCount": 10
}
},
"storage": {
"storePath": "/opt/strm-fs/strm",
"cleanup": {
"enabled": true,
"cron": "0 0 2 * * *",
"keepDays": 7
}
},
"options": {}
}

文件中的各属性说明如下:

属性名数据类型修改说明
instanceId字符串实例ID;可分配任意要可见ASCII字符;如果整个系统中(即使不在同一台机器上)有多个Streaming服务实例,则应分配不同的ID给每个实例
db.dataPath字符串本地数据存储文件目录;一般为Streaming服务的安装目录下的data子目录;必须为服务执行用户可读写的目录;如果目录不存在,则服务在启动时将创建该目录
db.listenPort整数本地数据库的服务监听端口,内部使用,只要不与操作系统中的其它服务的端口号冲突即可
db.user字符串本地数据库用户名,默认为sa不要修改
db.pwd字符串本地数据库密码,默认为空字符串,不要修改
db.strmLogCleanupCron字符串执行流媒体日志记录自动清理的 Spring CRON 调度时间表达式,服务将依照此表达式定义的时间执行周期性的日志记录清理工作
db.strmStatCron字符串执行流媒体活动统计的 Spring CRON 调度时间表达式,服务将依照此表达式定义的时间执行周期性的隔日统计工作
externalAddr字符串外部地址,应填写服务器的域名
endPoint.port2013.livePort整数JT/T 1078协议终端实时码流接收端口(短终端识别号);此端口要求外网访问
endPoint.port2013.replayPort整数JT/T 1078协议终端回放码流接收端口(短终端识别号);此端口要求外网访问
endPoint.port2019.livePort整数JT/T 1078协议终端实时码流接收端口(长终端识别号);此端口要求外网访问
endPoint.port2019.replayPort整数JT/T 1078协议终端回放码流接收端口(长终端识别号);此端口要求外网访问
endPoint.port2019.audoDetectProto布尔值JT/T 1078协议终端回放码流接收端口(长终端识别号)是否启用同时自动适应短终端识别号
publisher.livePort整数FLV-HTTPS实时播放端口;此端口要求外网访问,否则只能内网播放
publisher.liveHttpPort整数FLV-HTTP实时播放端口;此端口要求外网访问,否则只能内网播放,主要服务政府平台
publisher.replayHttpPort整数FLV-HTTP回放播放端口;此端口要求外网访问,否则只能内网播放,主要服务政府平台
publisher.websocketPort整数FLV-Websocket端口;此端口要求外网访问,否则只能内网播放
publisher.hls.tmpDir字符串音视频HLS转码的临时文件存储目录;可设置到/opt/strm-fshls子目录,或/tmp/hls,必须为服务执行用户可读写的目录;目录不存在时,服务将在启动时创建此目录
storage.storePath字符串服务端音视频转储文件存储目录;一般为/opt/strm-fsstrm子目录,必须为服务执行用户可读写的目录;目录不存在时,服务将在启动时创建此目录
storage.cleanup.enabled布尔值是否执行服务端音视频转储文件自动清理;一般应设为true
storage.cleanup.cron字符串服务端音视频转储文件自动清理 Spring CRON 调度时间表达式请务必将自动清理工作安排在每天凌晨2点之后,在0点至2点之间执行统计可能导致统计不准确;服务将依照此表达式定义的时间执行周期性的音视频转储文件清理工作
storage.cleanup.keepDays整数执行服务端音视频转储文件自动清理时,保留的最近转储文件的天数;转储时间在此天数内的文件不会被清理掉;应大于0
  1. /opt/strm/config/trusted-client.json文件中的clients[0].password 属性的值修改为一个随机密码(不要使用文件中已有密码),建议生成长度为12个或以上的字母数字字符组成的密码。Micro-GNSS 服务将使用此密码访问安全敏感的接口。
{
"clients": [
{
"username": "gnss-1",
"password": "Jc4xrpsIX2c2PGSm",
"privs": [
"config", "strm"
]
}
]
}
  1. 根据前述端口需求,设置好防火墙和端口映射

  2. 启动服务

sudo systemctl start streaming

日常维护

服务的启动、停止、重启

  1. 启动Streaming服务可执行:
sudo systemctl start streaming
  1. 停止Streaming服务可执行:
sudo systemctl stop streaming
  1. 重启Streaming服务可执行:
sudo systemctl restart streaming

SSL证书更换

  1. 将jks的格式证书上传到服务器的某个目录
  2. 修改 config/application.yml 文件中的 server.ssl.key-store ,使之指向新的证书文件,修改server.ssl.key-store-password, 改为新的证书密码
  3. 重启服务

日志文件

日志文件为服务安装目录(本文为opt/strm)下的log子目录下的strm.log文件。