安装流媒体服务ZLMediaKit和ffmpeg

流媒体服务有两种安装方式,一是宿主机源码安装,一个是docker部署,这次我用的是源码安装包,正常流程:

# 复制流媒体系统文件到系统文件夹
sudo cp -R  ZLMediaKit_x86 /usr/local/ZLMediaKit
sudo chmod 777 /usr/local/ZLMediaKit/MediaServer

# 设置开机自启(此步骤,需要在执行上传系统文件夹后再执行)
sudo cp ~/zt-video-analysis-system/supervisor/zlm.service /etc/systemd/system
sudo systemctl enable zlm.service

# 安装FFmpeg推流工具
sudo apt install ffmpeg

安装过程中有些差异和报错,安装步骤和解决问题过程如下:

1、用xftp上传安装包

image

2、复制流媒体系统文件到系统文件夹

  • 这里因为安装包的名称有变动,目录也有变动,导致报错。

image

  • 修改为正确的路径:
  • sudo cp -R  ZLMediaKit_x86_source/ /usr/local/ZLMediaKit
    sudo chmod 777 /usr/local/ZLMediaKit/ZLMediaKit_x86_source/MediaServer

image

 

3、设置开机自启

sudo cp ./zlm.service /etc/systemd/system
sudo systemctl enable zlm.service
  • 这里的服务文件zlm.service里的路径也需要修改
  • image

     

4、安装FFmpeg

sudo apt install ffmpeg

image

出现的报错

1.第一个问题:缺少 OpenSSL 1.1

按照上面的步骤,流媒体服务已经部署完了,但是摄像头不能播放

ZLM_API请求异常: strHTTPConnectionPool(host='192.168.0.43', port=8050): Max retries exceeded with url: /index/api/addStreamProxy (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7faaa9a56c70>: Failed to establish a new connection: [Errno 111] ECONNREFUSED'))

原因分析

[Errno 111] ECONNREFUSED 表示:

  • 目标服务器 192.168.0.43:8050 的 ZLMediaKit API 服务没有运行或端口未监听
  • 客户端无法建立连接
排查和解决方案:
# 启动服务
sudo systemctl start zlm.service

# 检查状态
systemctl status zlm.service

# 查看日志(如果启动失败)
sudo journalctl -u zlm.service -n 50 --no-pager

# 验证端口是否监听
sudo netstat -tulpn | grep 8050
# 或
sudo ss -tulpn | grep 8050
通过报错日志找到问题:

 缺少 OpenSSL 1.1 的共享库:libssl.so.1.1

error while loading shared libraries: libssl.so.1.1: cannot open shared object file

image

 解决方案:安装 OpenSSL 1.1
# 下载 OpenSSL 1.1wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb

# 安装
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

# 重启服务 
sudo systemctl restart zlm.service 

# 检查状态 
systemctl status zlm.service 

# 验证端口 
sudo netstat -tulpn | grep 8050

 

2.第二个问题:443端口被占用

安装成功后,服务仍然不能正常启动:

TCP Server listening on [::]:8050 # 8050端口启动成功

绑定套接字失败:address already in use  # 443端口被占用

端口占用或无权限:listen on :::443 failed:address already in use 程序启动失败,请修改配置文件中端口号后重试!

image

 通过日志找到问题:端口 443 已被占用,导致 ZLMediaKit 启动失败。
解决方案:
1.查看是什么占用了443端口
sudo netstat -tulpn | grep :443
# 或
sudo lsof -i :443
2.修改 ZLMediaKit 配置文件
# 找到配置文件
cd /usr/local/ZLMediaKit/ZLMediaKit_x86_source/
ls -la config.ini

# 编辑配置文件
sudo nano config.ini
# 或
sudo vim config.ini

找到 HTTP 配置,修改端口

[http]
port=8050
sslport=8443    # 将443改为8443或其他未占用端口

或者直接使用如下命令:

cd /usr/local/ZLMediaKit/ZLMediaKit_x86_source/

# 备份原配置
sudo cp config.ini config.ini.bak

# 修改 sslport 为 8443(如果配置文件中有这行)
sudo sed -i 's/sslport=443/sslport=8443/g' config.ini

# 或者禁用 HTTPS(设置为0)
# sudo sed -i 's/sslport=443/sslport=0/g' config.ini

# 查看修改结果
grep -i "sslport" config.ini
重启服务
# 重启 ZLMediaKit
sudo systemctl restart zlm.service

# 等待几秒后检查状态
sleep 3
systemctl status zlm.service

# 验证端口
sudo netstat -tulpn | grep -E "8050|8443"

这时候服务已经正常启动

image

 

3.第三个问题:secret错误

流媒体正常启动后,但是摄像头播放还是报错,提示secret错误:

这个报错可以直接定位到是流媒体配置文件config.ini里的secret和系统配置文件system.ini里的secret不一致,修改成一样即可。

image

 

image

 

现在再重启系统,摄像头可以正常播放了。

 

 

posted @ 2026-01-04 16:22  Tutu007  阅读(5)  评论(0)    收藏  举报