我想使用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.
型
我也不能再播放视频文件了。你知道吗?
1条答案
按热度按时间ni65a41a1#
日志条目表明FFmpeg被
SIGTERM
杀死,导致它不正常地退出。您的MP4无法播放,因为它缺少录制成功后写入的moov
原子。您可以通过使用
SIGINT
来配置Systemd的kill过程,以允许FFmpeg正常退出。试试这样的方法:字符串
另请参阅:https://www.freedesktop.org/software/systemd/man/systemd.kill.html