带有 h264 数据的 gstreamer shmsrc 和 shmsink

gstreamer shmsrc and shmsink with h264 data

我正在尝试将来自 gstreamer 的 h264 编码数据共享到另外两个进程(均基于 gstreamer)。经过一些研究,我发现唯一的方法是使用 shm 插件。 这就是我想要做的

gstreamer--->h264 encoder--->shmsink
shmrc--->process1
shmrc--->process2

我能够从 videotestsrc 和网络摄像头工作中获取原始数据。但是对于 h264 编码的数据,它没有。 这是我的测试管道

gst-launch-1.0 videotestsrc ! video/x-raw,width=640,height=480,format=YUY2 ! 
x264enc ! shmsink     socket-path=/tmp/foo     sync=true     wait-for-
connection=false     shm-size=10000000

gst-launch-1.0 shmsrc socket-path=/tmp/foo ! avdec_h264 ! video/x-
raw,width=640,height=480,framerate=25/1,format=YUY2 !   autovideosink

有没有人试过使用 h264 编码数据的 shm 插件,请帮忙

我不知道 "autovideosink" 中使用的接收器的功能,但据我所知,如果接收器支持的格式(如 kmssink 或 ximagesink)与提供的格式不同,则您需要使用 videoconvert按来源(在您的情况下为 YUY2)或如果接收器支持相机格式,则使用 videoparse。您可以使用 gst-inspect-1.0 检查支持的格式。

无论如何,我可以在我的设置中使用 videoconvert 运行 您的管道进行一些修改:

./gst-launch-1.0 videotestsrc ! x264编码! shmsink socket-path=/tmp/foo sync=true wait-for-connection=false shm-size=10000000

./gst-launch-1.0 shmsrc 套接字路径=/tmp/foo ! h264解析! avdec_h264!视频转换! ximagesink

您可以根据需要修改它。

如果您遇到上述任何问题,请告诉我。