最近碰到一个项目需要用到 rtsp 视频流做测试, 由于真实环境的 摄像头 并不能满足需求,故尝试了一下用本地视频文件转换成rtsp视频流做测试,记录一下~

采用方案: Docker + EasyDarwin + FFmpeg

 

准备工作:

1. 创建一个文件夹 easydarwin

2. cd easydarwin

3. wget https://github.com/EasyDarwin/EasyDarwin/releases/download/v8.1.0/EasyDarwin-linux-8.1.0-1901141151.tar.gz  (下载EasyDarwin 软件包)

4. 创建: Dockerfile

5. 将easydarwin 的配置文件 也放到此目录下: easydarwin.xml

6. 创建一个自动转换 /root/video 目录下的视频文件成rtsp 流的 shell 脚本: start.sh

 

编写Dockerfile:

  1. FROM centos:latest
  2. USER root
  3.  
  4. COPY ./EasyDarwin-linux-8.1.0-1901141151.tar.gz /EasyDarwin-linux-8.1.0-1901141151.tar.gz
  5. COPY ./start.sh /start.sh
  6. RUN mkdir -p /etc/streaming/
  7. COPY ./easydarwin.xml /etc/streaming/easydarwin.xml
  8. RUN yum -y install tar \
  9. && yum -y install gcc automake autoconf libtool make wget
  10.  
  11. RUN gzip -d /EasyDarwin-linux-8.1.0-1901141151.tar.gz \
  12. && tar -xf /EasyDarwin-linux-8.1.0-1901141151.tar \
  13. && mv EasyDarwin-linux-8.1.0-1901141151 EasyDarwin \
  14. && cd /
  15.  
  16. RUN wget https://ffmpeg.org/releases/ffmpeg-4.1.5.tar.xz \
  17. && tar -xf ffmpeg-4.1.5.tar.xz \
  18. && cd ffmpeg-4.1.5 \
  19. && curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz \
  20. && tar -xf yasm-1.3.0.tar.gz \
  21. && cd yasm-1.3.0 \
  22. && ./configure \
  23. && make \
  24. && make install \
  25. && cd /
  26.  
  27. RUN cd /ffmpeg-4.1.5 \
  28. && ./configure \
  29. && make \
  30. && make install \
  31. && cd /
  32.  
  33. ENTRYPOINT /start.sh

  

编写start.sh

  1. #!/bin/sh
  2. cnt=`ps -ef | grep "[e]asydarwin" | wc -l`
  3. if [ $cnt -lt 1 ];then
  4. nohup /EasyDarwin/easydarwin &
  5. fi
  6. if [[ ! -d /video ]];then
  7. mkdir -p /video
  8. fi
  9.  
  10. while true;do
  11. for video in `ls /video`; do
  12. if [[ "$(ps -ef | grep "$video" | grep -v "grep" | wc -l | tr -d ' ' )" = "1" ]]; then
  13. echo "Safe $video"
  14. else
  15. short_name=`echo $video | cut -d '.' -f 1`
  16. nohup /ffmpeg-4.1.5/ffmpeg -re -stream_loop -1 -i /video/$video -vcodec copy -rtsp_transport tcp -f rtsp rtsp://localhost/$short_name &
  17. echo "Started $video"
  18. fi
  19. done
  20.  
  21. sleep 1m
  22. done

 

用途说明:

  Dockerfile将我们需要的环境准备好,包括安装编译安装EasyDarwin以及需要的依赖包, FFmpeg等, 最后运行 start.sh. 注意 Docker中 ENTRYPOINT 和 CMD 命令的用法区别。

start.sh 用例启动EasyEarwin,并每隔1分钟查看 /root/video 目录下的视频流文件,如果有新文件,就会自动使用ffmpeg 转为rtsp流, 地址为 rtsp://localhost/short_name, 其中localhost使用时改成服务器的IP地址,short_name 为 当前食品文件的文件名(去掉扩展名, 如: video.mp4 的 short_name 为 video)

 

最后打包镜像,然后运行container, 可以在 easydarwin 目录的同级别创建 启动脚本: easydarwin.sh

  1. #!/bin/bash
  2. easy=`ls ./easydarwin/*.gz | wc -l`
  3. if [[ $easy -lt 1 ]];then
  4. wget https://github.com/EasyDarwin/EasyDarwin/releases/download/v8.1.0/EasyDarwin-linux-8.1.0-1901141151.tar.gz
  5. mv EasyDarwin-linux-8.1.0-1901141151.tar.gz ./easydarwin
  6. fi
  7. local_img=`docker images | grep "[e]asydarwin" | wc -l`
  8. if [ $local_img -lt 1 ];then
  9. cd easydarwin
  10. docker build -t easydarwin_qa . --no-cache
  11. cd ..
  12. fi

  13. #挂载host 的 /root/video 到 container 的对应路径
  14. docker run -dit --net host --restart=always --name easy_qa -v /root/video:/video easydarwin_qa

  

所以只需在装了docker的服务器上启动此shell就可以: bash easydarwin.sh

版权声明:本文为FsharpZack原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/FsharpZack/p/12856160.html