在ZLMediaKit容器中部署wvp-pro-assist

1. 安装openjdk

安装方式参考ZLMediakit 容器中安装open jdk 11

2. 进入到ZLMediaKit容器中创建辅助录像程序的工作文件夹

#进入到zlmediakit容器
docker exec -it zlmediakit /bin/bash
#创建文件夹, 用于存放上传的assist.jar和配置文件application-dev.yml
mkdir -p /home/wvpassist
#创建assist配置文件中的record目录,其实就是ZLMediaKit默认录像文件目录
mkdir -p /opt/media/bin/www/record

3.修改application-dev.yml配置文件

完整的配置文件地址:点击查看

主要修改redis和userSettings部分路径

spring:
# REDIS数据库配置
redis:
# [必须修改] Redis服务器IP, REDIS安装在本机的,使用127.0.0.1
# 在安装wvp-pro的docker文件中配置了redis,这里填写宿主机IP
host: 192.168.182.131
# [必须修改] 端口号,wvp-pro的docker文件中配置了redis映射端口16379
port: 16379
# [可选] 数据库 DB
database: 8
# [可选] 访问密码,若你的redis服务器没有设置密码,就不需要用密码去连接
password: root
# [可选] 超时时间
timeout: 10000
# [根据业务需求配置]
userSettings:
# [必选 ] zlm配置的录像路径
record: /opt/media/bin/www/record/
# [可选 ] 录像保存时长(单位: 天)每天晚12点自动对过期文件执行清理
recordDay: 7
# [可选 ] 录像下载合成临时文件保存时长, 不配置默认取值recordDay(单位: 天)每天晚12点自动对过期文件执行清理
# recordTempDay: 7
# [必选 ] ffmpeg路径,再ZLMediaKit镜像中默认安装了FFmpeg这里直接使用
ffmpeg: /usr/bin/ffmpeg
# [必选 ] ffprobe路径, 一般安装ffmpeg就会自带, 一般跟ffmpeg在同一目录,用于查询文件的信息
ffprobe: /usr/bin/ffprobe
# [可选 ] 限制 ffmpeg 合并文件使用的线程数,间接限制cpu使用率, 默认2 限制到50%
threads: 2

4.上传文件

可执行jar包下载:点击下载

#进入到刚才创建用于存放jar和配置文件的目录
cd /home/wvpassist
#输入下面的指令的上传,如果提示没有该指令,按照提示安装lrzsz即可。
rz

上传也可以用其他工具上传,不局限于lrzsz

5.拷贝文件

拷贝辅助录像程序的jar文件到ZLMediaKit容器中

sudo docker cp /home/wvpassist/assist.jar zlmediakit:/home/wvpassist/assist.jar

拷贝辅助录像程序的配置文件到ZLMediaKit容器中

sudo docker cp /home/wvpassist/application-dev.yml zlmediakit:/home/wvpassist/

6.启动辅助录像程序

#进入到zlmediakit容器
docker exec -it zlmediakit /bin/bash
#进入服务录像程序目录
cd /home/wvpassist/
#启动服务录像程序
nohup java -Xmx512m -Xms256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/wvpassist/heapdump/ -Djava.security.egd=file:/dev/./urandom -jar /home/wvpassist/assist.jar --spring.config.location=/home/wvpassist/application-dev.yml > /dev/null 2>&1 &

上面启动参数比较多,主要是正对jvm坐了一些参数限定,并且指定jar运行的配置文件。nohup中指定其日志输出到/dev/null及不输出日志,因为wvp-assist会输出log文件。

7.查看日志输出

#进入到服务录像程序的工作目录
cd /home/wvpassist/logs
#使用tail命令查看日志输出
tail -f wvp.log

8.提交镜像

即保存我们在镜像中做的更改

#首先退出ZLMediaKit容器
exit
#查看ZLMediaKit容器ID,找到并复制ZLMediaKit的容器ID
docker container ls
#执行下面的命令提交镜像
docker commit -a "decoderx" -m "wvp-assist installed" <这里输入容器ID> zlmediakit:assist
#举例 docker commit -a "decoderx" -m "wvp-assist installed" a404c6c174a2 zlmediakit:assist
#查看是否已经提交成功
docker images
#如果有zlmediakit:assist,提交成功。
#如果需要把此镜像保存到docker hub上,可以执行docker push方便日后使用。

9.删除原来的容器

进入安装ZLMediaKit的docker-compose.yml所在目录,执行docker-compose down, 然后执行 docker rm zlmediakit删除容器。

10.修改ZLMediaKit的docker-compose.yml

services:
# 流媒体服务器ZLMediaKit
zlmediakit:
# 使用主线版本的镜像
# image: zlmediakit/zlmediakit:master
# 上面是原来的配置,修改为下面我们提交的镜像,
image: zlmediakit:assist
container_name: zlmediakit

11.启动新容器

执行指令docker-compose up -d --build 启动容器,至此我们修改后带wvp辅助录像程序的ZLMediaKit容器就好了,而且我们也在ZLMediakit的docker-compose.yml中把18081映射到了宿主机,在wvp-pro中可以通过该端口正常调用辅助录像程序功能。

结束语

因为这里没有使用开启自启辅助录像程序,所以在每次重启ZLMediaKit容器的时候需要手动来启动辅助录像程序。启动指令就是下面这一串,但是我们不会经常去重启容器,最多重启ZLMediaKit服务,所以没啥大问题

nohup java -Xmx512m -Xms256m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/wvpassist/heapdump/ -Djava.security.egd=file:/dev/./urandom -jar /home/wvpassist/assist.jar --spring.config.location=/home/wvpassist/application-dev.yml > /dev/null 2>&1 &