天天看点

nginx ffmpeg读取摄像头RTSP转为HLS流并定时截图做动态封面

1.拉取一个FFmpeg的docker镜像。

docker pull jrottenberg/ffmpeg
           

2.创建一个start-ffmpeg-all.sh启动脚本,因为我有多路摄像头,所以要启动多个容器。

#! /bin/bash

for((i=2;$i<=31;i++))
do
        if (( ($i >= 9 && $i <= 12) || $i == 22 ))
           then
                echo "192.168.0.$i is not camera IP"
           else
                docker stop ffmpeg$i && docker rm ffmpeg$i
                docker run -d --privileged=true -v /root/preview:/tmp/workdir --restart=always --name="ffmpeg$i" jrottenberg/ffmpeg -stats -i "rtsp://admin:[email protected].$i:554/h264/ch1/sub/av_stream" -vcodec libx264 -an -f flv rtmp://{ip}:12005/hls/movie$i   -f image2 -y -update 1 -r 0.0001 preview$i.jpg
        fi
done
           

主要命令是:ffmpeg -i "rtsp://admin:[email protected].$i:554/h264/ch1/sub/av_stream" -vcodec libx264 -an -f flv rtmp://{ip}:12005/hls/movie$i   -f image2 -y -update 1 -r 0.2 preview$i.jpg

解释一下这些参数:

-i    输入流,摄像头流地址

-vcodec   指定视频编解码器

-an   不获取声音,节约cpu资源

-f    输出的格式,注意看上面两个,一个flv推流,一个image2截图

-y     覆盖重名的图片

-update   更新

-r    定时截图的频率,1秒钟截几张,0.2就是5秒钟截一张

3.拉取一个nginx镜像

docker pull nginx
           

4.创建start-nginx.sh启动脚本

#!/bin/bash
docker stop nginx && docker rm nginx

sleep 3s

docker run --privileged=true -v /root/preview:/usr/share/nginx/html --restart=always -d -p 8010:80 -p 443:443 --name nginx   nginx
~                                                                                                                                    
           

5.注意挂载的/root/preview这个目录是ffmpeg容器的截图保存的目录,这样就ok了。

继续阅读