我正在尝试将来自 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 socket-path=/tmp/foo ! h264解析! avdec_h264 !视频转换! ximagesink
您可以根据需要修改它。
如果您遇到上述任何问题,请告诉我。
关于带有 h264 数据的 gstreamer shmsrc 和 shmsink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260580/