带有 h264 数据的 gstreamer shmsrc 和 shmsink

标签 gstreamer shared-memory h.264

我正在尝试将来自 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/

相关文章:

encoding - gstreamer 无法将 UYVY 编码为 h264

python - gstreamer appsrc 适用于 xvimagesink 但不适用于 theoraenc !奥格多路复用器

linux - 在具有共享内存结果零拷贝的进程之间进行通信?

c# - 如何将RGB图像编码成H264帧(关键帧+一些依赖帧)?

python - Apache mpm 事件共享内存错误 - 打开输出流编码器时出现 ffmpeg-python 错误 #0 :1 when accessed by multiple instances

windows - GStreamer 中的 UdpSink 在 Windows 中不工作

GStreamer-关键 ** : gst_debug_log_valist: assertion `category != NULL' failed?

c - 字符串数组上的 shmget 和 shmat

c - 如何从共享内存中分离字符串数组? C

android - 使用 Jcodec 在 Android 上创建 mp4 文件