海康摄像机使用GB28181接入SRS服务器的搭建步骤---封装docker镜像运行容器的方式,本篇侧重于如何封装镜像

使用第三方提供的镜像

说明:这个是我在网上找的,没有实际验证及使用过,具体效果未知,看下文,我采用的是自己依据官方基础镜像进一步二次封装的镜像

地址:https://hub.docker.com/r/hasspi/srs4.0

下载镜像支持GB28181
docker pull hasspi/srs4.0:latest

运行镜像
docker run -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 5060:5060 -p 5060:5060/udp -p 9000:9000/udp --name srs4.0 --network br0 --ip 192.168.10.111 hasspi/srs4.0 ./objs/srs -c conf/push.gb28181.conf

进入docker 修改vim conf/push.gb28181.conf 配置文件

host $CANDIDATE; 将 $CANDIDATE 修改为自己的IP例如host 192.168.10.111;后保存配置文件

重启docker镜像

webui控制台:http//ip:1985/console/ng_index.html#/

依据官方基础镜像进一步二次封装的镜像

官方提供的有基础镜像
地址:地址:https://github.com/ossrs/dev-docker

封装这个基础镜像的步骤如下:

1.Install docker

2.Clone SRS

cd ~/git &&
git clone https://gitee.com/ossrs/srs.git srs && cd srs/trunk && 
git remote set-url origin https://github.com/ossrs/srs.git && git pull

3.Build SRS in dev docker

cd ~/git/srs/trunk &&
docker run -it --rm -v `pwd`:/srs -w /srs ossrs/srs:dev \
    bash -c "./configure && make"

After build, the binary file ./objs/srs is generated.

4.Run SRS in dev docker

cd ~/git/srs/trunk &&
docker run -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8085:8085 \
     -it --rm -v `pwd`:/srs -w /srs ossrs/srs:dev \
    ./objs/srs -c conf/console.conf

# Or for macOS, with WebRTC.
docker run -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8085:8085 \
    --env CANDIDATE=$(ifconfig en0 inet| grep 'inet '|awk '{print $2}') -p 8000:8000/udp \
     -it --rm -v `pwd`:/srs -w /srs ossrs/srs:dev \
    ./objs/srs -c conf/console.conf

Debug SRS by GDB in dev docker

cd ~/git/srs/trunk &&
docker run -p 1935:1935 -p 1985:1985 -p 8080:8080 -p 8085:8085 \
    --env CANDIDATE=$(ifconfig en0 inet| grep 'inet '|awk '{print $2}') -p 8000:8000/udp \
    --privileged -it --rm -v `pwd`:/srs -w /srs ossrs/srs:dev \
    gdb --args ./objs/srs -c conf/console.conf

封装后的镜像是:ossrs/srs:dev,这个就是官方提供的基础镜像

自己使用的话,依据官方基础镜像做进一步的封装,比如源码编译运行使用的srs-gb28181-feature-gb28181给封装进去,路径:srs-gb28181-feature-gb28181/trunk里有对应的Dockerfile文件

默认提供的Dockerfile文件内容如下:

# cat Dockerfile
FROM ossrs/srs:dev AS build

# Install depends tools.
RUN yum install -y gcc make gcc-c++ patch unzip perl git

ARG SRS_AUTO_PACKAGER

# Build and install SRS.
COPY . /srs
WORKDIR /srs/trunk
RUN ./configure --srt=on --jobs=2 && make -j2 && make install

# All config files for SRS.
RUN cp -R conf /usr/local/srs/conf && \
    cp research/api-server/static-dir/index.html /usr/local/srs/objs/nginx/html/ && \
    cp research/api-server/static-dir/favicon.ico /usr/local/srs/objs/nginx/html/ && \
    cp research/players/crossdomain.xml /usr/local/srs/objs/nginx/html/ && \
    cp -R research/console /usr/local/srs/objs/nginx/html/ && \
    cp -R research/players /usr/local/srs/objs/nginx/html/ && \
    cp -R 3rdparty/signaling/www/demos /usr/local/srs/objs/nginx/html/

############################################################
# dist
############################################################
FROM centos:7 AS dist

# Expose ports for streaming @see https://github.com/ossrs/srs#ports
EXPOSE 1935 1985 8080 8000/udp 10080/udp

# FFMPEG 4.1
COPY --from=build /usr/local/bin/ffmpeg /usr/local/srs/objs/ffmpeg/bin/ffmpeg
# SRS binary, config files and srs-console.
COPY --from=build /usr/local/srs /usr/local/srs

# Default workdir and command.
WORKDIR /usr/local/srs
CMD ["./objs/srs", "-c", "conf/docker.conf"]

二次封装具体操作步骤:

1.修改Dockerfile文件中关于编译的命令,加上--gb28181=on

也就是把RUN ./configure --srt=on --jobs=2 && make -j2 && make install修改成RUN ./configure --srt=on --jobs=2 --gb28181=on && make -j2 && make install

2.使用修改好的push.gb28181.conf文件替换原有的
该文件中有关服务器IP的变量:$CANDIDATE仍做保留,在使用的时候先设置这环境变量 (不把里面的服务器IP写死,有区别是源码安装运行的那篇文章使用的方式)

该文件可以参考使用源码安装运行使用的那个,地址:https://www.cnblogs.com/hahaha111122222/p/16725612.html

比如:
CANDIDATE="192.168.1.165"

3.修改Dockerfile文件中最后启动使用的配置文件

CMD ["./objs/srs", "-c", "conf/docker.conf"] 修改成 CMD ["./objs/srs", "-c", "conf/push.gb28181.conf"]

若是不这样修改,那么运行容器的时候需要增加启动参数来覆盖Dockerfie文件中的CMD命令,如下所示:

CANDIDATE="192.168.1.165"
docker run -d \
    -p 1935:1935/tcp \
    -p 1985:1985/tcp \
    -p 8000:8000/tcp \
    -p 9000:9000/tcp \
    -p 8080:8080/tcp \
    -p 1935:1935/udp \
    -p 1985:1985/udp \
    -p 8000:8000/udp \
    -p 9000:9000/udp \
    -p 8080:8080/udp \
    -p 5060:5060/udp \
    srs:5.0.26_gb28181 ./objs/srs -c conf/push.gb28181.conf

在这里修改后直接一步到位了

4.修改映射出去的端口

注意:端口映射也是直接参考源码安装运行使用的那个,地址:https://www.cnblogs.com/hahaha111122222/p/16725612.html

把Dockerfile文件中的这行

EXPOSE 1935 1985 8080 8000/udp 10080/udp

修改成如下行

EXPOSE 1935/tcp 1985/tcp 8080/tcp 8000/tcp 9000/tcp 1935/udp 1985/udp 5060/udp 8080/udp 8000/udp 9000/udp

生成镜像

问题:官方文件中提供的Dockerfile文件使用过程中有问题

在编译的时候会报:/bin/sh: ./configure: No such file or directory

也就是这一段命令:

# Build and install SRS.
COPY . /srs
WORKDIR /srs/trunk
RUN ./configure --srt=on --jobs=2 && make -j2 && make install

增加输出当前路径及文件的命令:

# Build and install SRS.
RUN pwd
COPY . /srs
WORKDIR /srs/trunk
RUN pwd && ls -al
RUN ./configure --srt=on --jobs=2 && make -j2 && make install

结果如下:

Step 1/15 : FROM ossrs/srs:dev AS build
 ---> d7c3f5717f25
Step 2/15 : RUN yum install -y gcc make gcc-c++ patch unzip perl git
 ---> Using cache
 ---> 92ddfdcf4b0c
Step 3/15 : ARG SRS_AUTO_PACKAGER
 ---> Using cache
 ---> d3fc55d2d52e
Step 4/15 : RUN pwd # 查看当前路径
 ---> Running in c889972ba694
/tmp/srs  
Removing intermediate container c889972ba694
 ---> 33e2af0f7a76
Step 5/15 : COPY . /srs # 复制宿主机同Dockerfile路径下所有文件到容器指定路径中
 ---> 2efac7af508f
Step 6/15 : WORKDIR /srs/trunk # 切换容器路径
 ---> Running in 2c53628204f7
Removing intermediate container 2c53628204f7
 ---> 53627c4b1514
Step 7/15 : RUN pwd && ls -al # # 查看当前路径,发现并没有输出任何文件,没有把Dockerfile文件所在宿主机路径下的文件COPY过去,才导致找不到文件,编译失败的
 ---> Running in 94818ade063b
/srs/trunk
total 0
drwxr-xr-x 2 root root  6 Sep 24 05:38 .
drwxr-xr-x 1 root root 19 Sep 24 05:38 ..
Removing intermediate container 94818ade063b
 ---> 586fcb293406
Step 8/15 : RUN ./configure --srt=on --jobs=2 --gb28181=on && make -j2 && make install  # 这一步编译报错
 ---> Running in b18ca82e6863
/bin/sh: ./configure: No such file or directory
The command '/bin/sh -c ./configure --srt=on --jobs=2 --gb28181=on && make -j2 && make install' returned a non-zero code: 127

因此修改Dockerfile文件中有关上述命令为:

# Build and install SRS.
WORKDIR /srs/trunk
COPY . /srs/trunk/
RUN ./configure --srt=on --jobs=2 && make -j2 && make install

这样才能编译成功,具体使用的命令如下:

cd srs-gb28181-feature-gb28181/trunk/
docker build -t srs:5.0.26_gb28181 .
# docker image ls
REPOSITORY   TAG              IMAGE ID       CREATED             SIZE
srs          5.0.26_gb28181   c665bf3d5eea   About an hour ago   264MB
ossrs/srs    dev              d7c3f5717f25   6 weeks ago         1.33GB
centos       7                eeb6ee3f44bd   12 months ago       204MB

运行容器

关于配置文件中变量CANDIDATE要用服务器外网IP的设置有两种方式:

第一种方式,直接设置系统环境变量:

CANDIDATE="192.168.2.164"

第二种方式,直接在命令中获取

--env CANDIDATE=$(ifconfig ens32 | grep 'inet '|awk '{print $2}') # 输出当前使用的网卡IP,网卡名称根据实际情况而定

在这里我采用的是第二种方式

docker run -d \
    -p 1935:1935/tcp \
    -p 1985:1985/tcp \
    -p 8000:8000/tcp \
    -p 9000:9000/tcp \
    -p 8080:8080/tcp \
    -p 1935:1935/udp \
    -p 1985:1985/udp \
    -p 8000:8000/udp \
    -p 9000:9000/udp \
    -p 8080:8080/udp \
    -p 5060:5060/udp \
    --env CANDIDATE=$(ifconfig ens32 | grep 'inet '|awk '{print $2}') --name srs srs:5.0.26_gb28181

查看日志,配置摄像机,后续其他的均跟源码安装那篇一样

docker logs -f srs
posted @ 2022-09-24 15:31  哈喽哈喽111111  阅读(2452)  评论(0编辑  收藏  举报