从RTSP捕获JPEG图像-gStreamer

时间:2019-11-25 04:37:29

标签: video-streaming jpeg gstreamer rtsp

我正在建立视频流传输管道。我想捕获实时视频流的缩略图。我使用jpegenc将缓冲区编码为jpeg并通过filesink保存。我不想保存每个帧,我只想保存第10帧(即模10,这应该是可配置的)。我怎样才能做到这一点? (流来自rtsp源)

1 个答案:

答案 0 :(得分:2)

以下解决方案在数学上可能不正确(例如以100%的精度捕获每10帧),但也许值得一提。它基于gstreamer的videorate元素,该元素可以处理视频FPS(每秒帧数)。

假设我们拥有 rtsp来源,就像这样:

rtsp://freja.hiof.no:1935 / rtplive / _definst_ / hessdalen03.stream

(公共摄像机,H264视频,帧速率= 60000/1001 =〜60帧/秒)。

管道

gst-launch-1.0 -v rtspsrc location="rtsp://freja.hiof.no:1935/rtplive/_definst_/hessdalen03.stream" \
! rtph264depay ! avdec_h264 \
! timeoverlay halignment=right valignment=bottom \
! videorate ! video/x-raw,framerate=60000/1001 ! jpegenc ! multifilesink location="./frame%08d.jpg"

应该捕获每个接收到的视频帧并将其另存为jpg图像。

但是,如果您这样修改viderate的大写字母

video/x-raw,framerate=6000/1001

捕获帧的速率约为6 fps(少10倍,理论上应该捕获第6帧)。

因此,了解输入视频的帧率后,您可以修改viderate“输出”上限以达到所需的“输出”帧率。

注意,我添加了timeoverlay halignment=right valignment=bottom,它将为视频/ jpg图像添加管道运行时间戳,以便于跟踪。