Docker:搭建高性能流媒体服务器 ABLMediaServer

1. 前言

  这段时间公司有新需求要接入摄像头做实时播放,对接入视频流这方面知道的不多所以就上网找找方案,普遍方案都是(wvp-pro+ZLMediaKit)流媒体框架搭建,本着学习的态度就多查几篇文章,其中看到一篇性能比对参考博文“对比各种流媒体服务总结”,其中提到 ABLMediaServer 对CPU占用较低,内存相较高一些,这点可能刚好符合我的项目情况所以就研究了一下,说实话网上都是宣扬 ABLMediaServer 怎么厉害怎么牛,实际的服务部署、环境搭建、技术对接的文章网上一点没有(虽说官方有提供吧)……,这里我花了一天时间搭建了一套docker版本的ABLMediaServer服务,特此记录一下。

  这里要提一下,ABLMediaServer 可以直接与wvp-pro(wvp-GB28181-pro)对接,与wvp-pro+ZLMediaKit方案一致,也还算可以吧。

2. 下载压缩包

  截止现在 ABLMediaServer 的最新版本是 2025-10-14,地址:https://github.com/zhichao281/ABLMediaServer/releases

2.1 下载包

image

2.2 解压包

# 创建目录
cd home && mkdir webrtc 
# 解压包
unzip Linux-webrtc.zip -d /home/webrtc
# 查看解压的文件
cd /home/webrtc && ls

image

2.3 修改文件

官方的启动文件(start.sh)有点问题,需要改一下

#!/bin/bash

# 获取当前脚本所在路径
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# 设置 LD_LIBRARY_PATH 为当前路径
export LD_LIBRARY_PATH="$SCRIPT_DIR"

# 添加当前目录及其子目录的读写权限
#sudo chmod -R 777 "$SCRIPT_DIR"
chmod -R 777 "$SCRIPT_DIR"

# 切换到 ABLServer 可执行程序所在目录(假设在当前目录下)
cd "$SCRIPT_DIR"

#设置ABLMediaServer的权限 
chmod 777 ABLMediaServer

# 执行 ABLServer 可执行程序
setsid ./ABLMediaServer &

# 获取进程ID
ABL_PID=$!
echo "ABLMediaServer 启动成功,PID: $ABL_PID"

# 等待进程,保持容器运行
wait $ABL_PID

3. 制作镜像

  这里我没有按照官方提供的docker-compose.yml文件部署,因为wvp-pro我打算直接下载代码跑不用部署方式。

image

2.1 拉取Ubuntu_22.04镜像

docker镜像拉取Ubuntu:22.04

docker pull ubuntu:22.04

image

 2.2 制作镜像

 编写Dockerfile文件,用于构建镜像

FROM ubuntu:22.04

LABEL maintainer="123456@example.com"
LABEL description="ABLMediaServer - WebRTC Media Server"
LABEL version="1.0.0"

# 创建非root用户
RUN groupadd -r ablmedia && useradd -r -g ablmedia ablmedia

# 创建应用目录
RUN mkdir -p /app

# 复制应用程序文件
COPY ABLMediaServer /app/
COPY *.so.* /app/
COPY *.so /app/
COPY *.sh /app/
COPY *.ini /app/
COPY cacert.pem /app/
COPY privkey.pem /app/
COPY server.pem /app/
COPY simhei.ttf /app/

# 设置权限
RUN chmod +x /app/start.sh /app/ABLMediaServer \
    && chown -R ablmedia:ablmedia /app

# 设置库路径环境变量
ENV LD_LIBRARY_PATH=/app

WORKDIR /app

# 正确的入口点格式
CMD ["./start.sh"]

 image

 开始构建镜像,命令如下

# 构建镜像,千万别漏写最后的那个.
docker build -t ablmedia:2025.11.09 . 

image

4. 构建容器

  这里使用官方的部分配置进行的启动,想仔细了解的可以查看官方的docker-compose.yml

docker run -d \
  --name ablmedia \
  --restart always \
  --ulimit nproc=65535:65535 \
  --ulimit nofile=65535:65535 \
  -p 5088:5088/tcp \
  -p 6088:6088/tcp \
  -p 7088:7088/tcp \
  -p 9088:9088/tcp \
  -p 1554:1554/tcp \
  -p 1935:1935/tcp \
  -p 10000-10050:10000-10050/tcp \
  -p 10000-10050:10000-10050/udp \
  -e TZ=Asia/Shanghai \
  -e SET_CONTAINER_TIMEZONE=true \
  -e CONTAINER_TIMEZONE=Asia/Shanghai \
  ablmedia:2025.11.09 

name:自定义容器名称

restart always:配置开机自启

--ulimit nproc=65535:65535 :# 设置进程数限制

--ulimit nofile=65535:65535 :# 设置文件描述符限制

-p 7088:7088/tcp :http操作API端口

-p 5088:5088/tcp :http-mp4 运行端口,拉流时采用该端口(注意:该端口如果为奇数,例如5089 访问变成 https , 偶数,例如5088 访问变成 http )

-p 6088:6088/tcp :ws-flv 运行端口,拉流时采用该端口(注意:该端口如果为奇数,例如6089 访问变成 https , 偶数,例如6088 访问变成 http )

-p 9088:9088/tcp :播放hls 媒体流时使用该端口(注意:该端口如果为奇数,例如9089 访问变成 https , 偶数,例如9088 访问变成 http )

-p 1554:1554/tcp :rtsp运行端口,推流、拉流都是使用该端口(注意:该端口如果为奇数,例如1553 访问变成 https , 偶数,例如1554 访问变成 http )

-p 1935:1935/tcp :rtmp运行端口,推流、拉流都是使用该端口(注意:该端口如果为奇数,例如1935 访问变成 https , 偶数,例如1934 访问变成 http )

image

能正常运行就是成功了。

wvp-pro + ABLMediaServer 对接方案看这里:https://www.cnblogs.com/nhdlb/p/19206670

posted @ 2025-11-10 11:27  怒吼的萝卜  阅读(144)  评论(0)    收藏  举报