带有 h264 数据的 gstreamer shmsrc 和 shmsink

Anj*_*ohn 2 shared-memory gstreamer h.264

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

gstreamer--->h264 encoder--->shmsink
shmrc--->process1
shmrc--->process2
Run Code Online (Sandbox Code Playgroud)

我能够从 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
Run Code Online (Sandbox Code Playgroud)

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

Dev*_*kar 6

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

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

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

./gst-launch-1.0 shmsrc socket-path=/tmp/foo !h264解析!avdec_h264 !视频转换!图像接收器

您可以根据需要修改它。

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