在Linux服务器上,我安装了FFmpeg,它将来自中国低成本IP摄像机的视频流传输到Twitch或Youtube服务器。几个小时后,视频不可见,但在服务器端,FFmpeg仍在运行,并且IP摄像机也响应“ ping”命令。
这是我正在使用的脚本:
#
# Camera IP
#
AQUARIUM_CAM_IP="192.168.123.102"
#
# Aquarium data file
#
AQUARIUM_DATA_FILE="/run/aquarium-cam/data.txt"
#
# FFmpeg parameters
#
FFMPEG_LOG_LEVEL=fatal
# Bitrate (1000k = 1Mbit/s) and encoding speed (affects CPU) and number of CPU cores to use
FFMPEG_VBR="1000k"
FFMPEG_QUAL="ultrafast"
FFMPEG_THREADS="1"
# Streaming source
FFMPEG_CAM_RTSP_SRC="rtsp://${AQUARIUM_CAM_IP}:554/user=admin&password=&channel=1&stream=0.sdp" # Camera source
# Streaming destination
FFMPEG_TWITCH_STREAM_URL_DST="rtmp://live-ber.twitch.tv/app" # RTMP stream URL
FFMPEG_TWITCH_KEY="<twitch_key>"
# Data overlay setup
FFMPEG_TEXT_OVERLAY_FONT_PATH="OpenSans-Regular.ttf"
FFMPEG_TEXT_OVERLAY_FONT_SIZE=25
FFMPEG_TEXT_OVERLAY_OFFSET_X=5
FFMPEG_TEXT_OVERLAY_OFFSET_Y=60
FFMPEG_TEXT_OVERLAY_RELOAD=1
FFMPEG_TEXT_OVERLAY_BOX="1"
FFMPEG_TEXT_OVERLAY_BOX_BORDER_WIDTH="5"
FFMPEG_TEXT_OVERLAY_BOX_COLOR="blue@0.5"
FFmpeg脚本:
ffmpeg \
-loglevel ${FFMPEG_LOG_LEVEL} -f lavfi -i anullsrc \
-rtsp_transport tcp \
-i "${FFMPEG_CAM_RTSP_SRC}" \
-vcodec libx264 -pix_fmt yuv420p -preset ${FFMPEG_QUAL} -g 75 -b:v ${FFMPEG_VBR} \
-vf "\
drawtext=fontfile=${FFMPEG_TEXT_OVERLAY_FONT_PATH}:textfile=${AQUARIUM_DATA_FILE}:\
x=${FFMPEG_TEXT_OVERLAY_OFFSET_X}:y=${FFMPEG_TEXT_OVERLAY_OFFSET_X}:\
reload=${FFMPEG_TEXT_OVERLAY_RELOAD}: \
fontcolor=white:fontsize=${FFMPEG_TEXT_OVERLAY_FONT_SIZE}:\
box=${FFMPEG_TEXT_OVERLAY_BOX}:boxborderw=${FFMPEG_TEXT_OVERLAY_BOX_BORDER_WIDTH}:\
boxcolor=${FFMPEG_TEXT_OVERLAY_BOX_COLOR}"\
-threads ${FFMPEG_THREADS} -bufsize 512k \
-f flv "${FFMPEG_TWITCH_STREAM_URL_DST}/${FFMPEG_TWITCH_KEY}"
另一个奇怪的是,当没有流但FFmpeg仍然存在时,当FFmpeg启动和流开始时,CPU利用率约为30%。
>任何想法如何解决此类问题? 如果没有“流”或与摄像机的连接断开,FFmpeg是否可以终止某些选项?