linux 以ffmpeg为服务录制视频流

guykilcj  于 2023-08-03  发布在  Linux
关注(0)|答案(1)|浏览(141)

我想使用ffmpeg来记录监控摄像头的视频流。为此,我有一个脚本来启动录制和systemd服务。这个想法是,如果ffmpeg在中间因为流中断而停止,服务将自动重新启动。
开始录制(/media/HDD 1/video/video-record.sh):

#!/bin/bash
ip=$1
codec=h264
res=1920x1080
out="/media/HDD1/video/$ip-$codec-$(date -u +"%Y%m%dT%H%M%S").mp4"
url="rtsp://192.168.4.$ip/axis-media/media.amp?camera=1&videocodec=$codec&fps=24&resolution=$res&compression=60&videozstrength=50&videoframeskipmode=drop"
ffmpeg -nostdin -i "$url" -acodec copy -vcodec copy $out

字符串
服务文件:

[Unit]
Description=Record camera 101 to HDD

[Service]
Type=simple
ExecStart=/bin/bash /media/HDD1/video/video-record.sh 101
Restart=always
TimeoutStopSec=5

[Install]
WantedBy=multi-user.target


当我手动启动和停止脚本时,它工作得很好。启动服务也没有问题,只有在终止时才有问题。日志上写着:

Error closing file /media/HDD1/video/101-h264-20230719T094514.mp4: Immediate exit requested.


我也不能再播放视频文件了。你知道吗?

ni65a41a

ni65a41a1#

日志条目表明FFmpeg被SIGTERM杀死,导致它不正常地退出。您的MP4无法播放,因为它缺少录制成功后写入的moov原子。
您可以通过使用SIGINT来配置Systemd的kill过程,以允许FFmpeg正常退出。试试这样的方法:

KillSignal=SIGINT

字符串
另请参阅:https://www.freedesktop.org/software/systemd/man/systemd.kill.html

相关问题