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