准备工作:
要把本项目先clone到你本地。
git clone https://github.com/scottzhang/AKStreamDocker
然后进入目录:
cd AKStreamDocker
后续要在本目录执行脚本。
aliyun docker的地址: 先pull下来,再tag下
docker pull registry.cn-hangzhou.aliyuncs.com/jgcx/akstream:v2
docker tag registry.cn-hangzhou.aliyuncs.com/jgcx/akstream:v2 akstream:v2
避免重复安装.net,mysql,配置3个组件,录像,直接配好了。
mysql:
database:AKStream
username:root
password:AKStream2021@
mysql_data: 就是mysql的数据文件,使用系统产生的配置都保存在这个里面,docker可以rm再run,这个删了就得从头再来了。
video_record: 保存录像的文件夹。
当前使用的是.net3, 现在因为里面有编译环境和源文件,造成整体偏大,好处是可以修改代码编译打印日志.
启动方法:
在host机使用root用户
./prepare.sh
这个把缺少的dbus权限文件绑定上,我发现在openSUSE上需要做这个,在centos7&8的host机上,最好也执行下,虽然前几行centos本来就是好的。opensuse,centos7,centos8的宿主机测试都是好的。
ubuntu没测试。
./start.sh
docker exec -it akstream_dev bash
docker start akstream_dev
docker stop akstream_dev
调整配置:
需要根据部署机器的网络地址,调整Keeper和NVR的配置,改以下2个地方:
/root/AKStreamKeeper/Config/AKStreamKeeper.json
{
"IpV4Address": "xx.xx.xx.xx",
"IpV6Address": "fe80::8:807:2143:28a1%5",
"WebApiPort": 6880,
"MediaServerPath": "/Users/chatop/Projects/Clion/ZLMediaKit/release/mac/Debug/MediaServer",
"AkStreamWebRegisterUrl": "http://127.0.0.1:5800/MediaServer/WebHook/MediaServerKeepAlive",
"CutMergeFilePath": "/User/chatop/Projects/CutMergeFile",
"CustomRecordPathList": [
"/Users/chatop/Downloads/record1",
"/Users/chatop/Downloads/record2"
],
"UseSsl": false,
"MinRtpPort": 10001,
"MaxRtpPort": 20000,
"MinSendRtpPort": 20002,
"MaxSendRtpPort": 20200,
"RandomPort": false,
"FFmpegPath": "/usr/local/bin/ffmpeg",
"AccessKey": "O7O4S089-PGDW6HTM-T4CV6K74-V6RIP1I6-9300G54F-Z03TI40Q",
"RtpPortCdTime": 3600,
"HttpClientTimeoutSec": 5,
"DisableShell": true,
"ZLMediakitSSLFilePath": "./sslfiles/"
}
/root/AKStreamNVR/public/env-config.js
window._env_ = {
REACT_APP_API_HOST: "xx.xx.xx.xx",
AKSTREAM_WEB_API:"xx.xx.xx.xx:5800",
}
xx.xx.xx.xx就是你本机的IP
docker exec -it akstream_dev bash
进入系统后,需要启动AKStreamWeb, AKStreamKeeper, AKStreamNVR 就可以用了
- 先启动mysql
systemctl start mysqld
- 再启动keeper
cd ~/AKStreamKeeper
dotnet AKStreamKeeper.dll > /dev/null &
- 再启动Web
cd ~/AKStreameWeb
dotnet AKStreamWeb.dll > /dev/null &
- 再启动NVR
cd ~/AKStreamNVR
npm run start &
浏览器打开 http://localhost:3000 或者 http://xx.xx.xx.xx:3000 就可以用了
常见问题:
那个prepare.sh执行下,然后重启下docker
docker stop akstream_dev
docker start akstream_dev
因为这个docker使用的是-net选项,所以直接共享了宿主的网络,可以尝试关闭主机的apache,mysql服务,再尝试启动。
本质是nvr这个程序,那个自动断流选项即使不选,默认值null会被直接存进了数据库,在AKStreamWeb/MediaSerivce里AddVideoChannel处理下就会好,如果不行可以直接进mysql,改VideoChannel表的NoPlayerBreak设置为0,就会好。
NVR这个使用稍微有点绕,先建recordPlan,名字一定不要太复杂,记住,下面那个周1-7,然后选时间,比较令人困惑,我是周一到周7,每个建一行,时间从今天选到2050年,注意看那个时间框,虽然只是显示时间00:00:00,实际里面是带日期的,所以一定要用他那个控件选,不要手工输入。 再改摄像头,recordplan字段填上这个,最下面有个自动录像的选项,填上就好了。
先编辑摄像头配置,把Enabled设置为false,然后等一会儿,AKStreamWeb会自动把流停止,这时候,视频广场就看不到了。这时候再从数据库里删除。
也许你翻翻AKStreamWeb的AutoTask下的文件就可以解答了,这个是个定时任务,其他的基本都是Service。