天天看點

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了。

繼續閱讀