- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 gstreamer
管道中,我试图弄清楚是否有办法指定我只需要 RTSP 流中的关键帧。
在ffmpeg
中,您可以使用-skip_frame nokey
标志来做到这一点。例如:
ffmpeg -skip_frame nokey -i rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov -qscale 0 -r 1/1 帧%03d.jpg
读取 RTSP feed 的相应 gstreamer 命令如下所示:
gst-launch-1.0 rtspsrc location=rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov !解码器!视频率! “视频/x-raw,帧速率=1/1”!视频转换!自动视频接收器
有谁知道是否可以要求 gstreamer 仅返回关键帧?
最佳答案
花了几天时间寻找这个问题的完整答案后,我最终找到了一个解决方案,它为我提供了我正在寻找的 rtsp 处理能力。
以下是 Python 中管道的差异,从处理每个 RTSP 帧过渡到仅处理关键帧。
https://github.com/ambianic/ambianic-edge/pull/171/files#diff-f89415777c559bba294250e788230c5e
首先注册流启动总线事件:
Gst.MessageType.STREAM_START
当流处理开始时触发。当此事件发生时,请求寻找下一个关键帧。
当请求完成时,管道会触发我们需要监听的下一个总线事件:
Gst.MessageType.ASYNC_DONE
最后,这是关键帧搜索请求本身:
def _gst_seek_next_keyframe(self):
found, pos_int = self.gst_pipeline.query_position(Gst.Format.TIME)
if not found:
log.warning('Gst current pipeline position not found.')
return
rate = 1.0 # keep rate close to real time
flags = \
Gst.SeekFlags.FLUSH | Gst.SeekFlags.KEY_UNIT | \
Gst.SeekFlags.TRICKMODE | Gst.SeekFlags.SNAP_AFTER | \
Gst.SeekFlags.TRICKMODE_KEY_UNITS | \
Gst.SeekFlags.TRICKMODE_NO_AUDIO
is_event_handled = self.gst_pipeline.seek(
rate,
Gst.Format.TIME,
flags,
Gst.SeekType.SET, pos_int,
Gst.SeekType.END, 0)
关于ffmpeg - 如何让Gstreamer只返回关键帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51307975/
我是一名优秀的程序员,十分优秀!