概述
原本希望使用kamailio+rtpproxy来转发媒体,但是rtpproxy对于多网卡服务器的支持不好,无法正常转发多网卡之间的媒体流。
rtpengine没有官方的docker镜像可以直接使用,只能使用源码自己编一个。
环境
CentOS 7.9
rtpengine 13.1.1.6
下载
目录结构如下。
├── docker-compose.yml
├── Dockerfile
├── rtpengine.mr13.1.1.6
├── sources.list.bookworm
└── sources.list.bullseye
下载源代码,指定版本为13.1.1.6。
git clone https://github.com/sipwise/rtpengine.git rtpengine.mr13.1.1.6 -b mr13.1.1.6
sources.list.bookworm文件内容如下。
deb http://mirrors.aliyun.com/debian/ bookworm main contrib non-free
deb http://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free
deb http://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free
dockerfile
dockerfile文件内容如下。
FROM debian:bookworm
COPY ./sources.list.bookworm /etc/apt/sources.list
COPY ./rtpengine.mr13.1.1.6 /usr/local/src/rtpengine
RUN apt-get update \
&& apt-get -y --quiet upgrade curl iproute2 \
&& apt-get install -y --no-install-recommends ca-certificates gcc g++ make \
build-essential git libopus-dev libiptc-dev libavfilter-dev \
libevent-dev libpcap-dev libxmlrpc-core-c3-dev markdown libmnl-dev libnftnl-dev \
libjson-glib-dev default-libmysqlclient-dev libhiredis-dev libssl-dev pandoc \
libcurl4-openssl-dev libavcodec-extra gperf libspandsp-dev libwebsockets-dev \
&& cd /usr/local/src \
&& chmod -R 777 /usr/local/src/rtpengine \
&& cd rtpengine/daemon \
&& make && make install \
&& cp /usr/local/src/rtpengine/daemon/rtpengine /usr/local/bin/rtpengine \
&& rm -Rf /usr/local/src/rtpengine \
&& apt-get purge -y --quiet --force-yes --auto-remove ca-certificates gcc g++ make build-essential git markdown \
&& rm -rf /var/lib/apt/* \
&& rm -rf /var/lib/dpkg/* \
&& rm -rf /var/lib/cache/* \
&& rm -Rf /var/log/* \
&& rm -Rf /usr/local/src/* \
&& rm -Rf /var/lib/apt/lists/*
CMD ["rtpengine"]
运行命令,创建docker镜像。
sudo docker build --no-cache -t 10.55.55.136:5000/zr/rtpengine:mr13.1.1.6-4 .
配置
kamailio和rtpengine的配置文件都映射到宿主机的/usr/local/kamailio/etc目录。
目录下的配置文件包括dispatcher.list kamailio.cfg rtpengine.conf。
配置内容略过。
启动
编写docker-compose.yml,启动docker容器。
docker-compose.yml内容如下。注意rtpengine启动的时候需要加-f参数,前台运行,否则docker容器会一直重启。
services:
rtpengine:
image: 10.55.55.136:5000/zr/rtpengine:mr13.1.1.6-4
container_name: rtpengine
volumes:
- /usr/local/kamailio/etc:/etc/rtpengine
command: >
/usr/local/bin/rtpengine -f
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
network_mode: "host"
privileged: true
logging:
driver: json-file
options:
max-size: "100m"
max-file: "10"
ulimits:
nproc: 65535
nofile:
soft: 40000
hard: 40000
# Kamailio Service
kamailio:
image: 10.55.55.136:5000/zr/kamailio:5.8.3-bullseye
container_name: kamailio
volumes:
- /usr/local/kamailio/etc:/etc/kamailio
environment:
- TZ=Asia/Shanghai
command: >
-m64 -M8
restart: unless-stopped
network_mode: "host"
logging:
driver: json-file
options:
max-size: "100m"
max-file: "10"
ulimits:
nproc: 65535
nofile:
soft: 40000
hard: 40000
depends_on:
- rtpengine
启动命令。
sudo docker-compose up -d
查看进程和端口,运行正常。
总结
rtpproxy相对rtpengine更容易上手,但是功能也更简单。
kamailio+rtpengine的组合还有很多配置方案,需要慢慢熟悉。
空空如常
求真得真