我正在尝试通过 UDP 使用 gstreamer(在 windows 中)通过网络流式传输 h264 视频。首先,如果我使用这样的管道,一切似乎都很好,我看到了测试模式:
videotestsrc, ffmpegcolorspace, x264enc, rtph264pay, rtph264depay, ffdec_h264, ffmpegcolorspace, autovideosink
现在我决定将此管道分为客户端和服务器部分,使用 udpsink 和 udpsrc 通过 udp 传输流。
Server: videotestsrc, ffmpegcolorspace, x264enc, rtph264pay, udpsink
Client: udpsrc, rtph264depay, ffdec_h264, ffmpegcolorspace, autovideosink
在服务器上,我使用类似的东西:
source = gst_element_factory_make ("videotestsrc", "source");
ffmpegcolortoYUV = gst_element_factory_make ("ffmpegcolorspace", "ffmpegcolortoYUV");
encoder = gst_element_factory_make ("x264enc", "encoder");
rtppay = gst_element_factory_make ("rtph264pay", "rtppay");
udpsink = gst_element_factory_make ("udpsink", "sink");
g_object_set (source, "pattern", 0, NULL);
g_object_set( udpsink, "host", "127.0.0.1", NULL );
g_object_set( udpsink, "port", 5555, NULL );
然后我将元素添加到管道并运行,任何地方都没有错误。现在,如果我查找 UDP 端口 5555,它没有在监听!!!!
客户端部分也可以运行,但如果服务器端没有侦听 UDP 端口,它将无法工作。
编辑:事实上我非常接近解决方案......如果我启动客户端它可以工作,但是在可视化方面存在一些问题......我认为问题在于 x264enc 配置。任何人都知道如何更改 x264enc 参数,如速度预设或调整???我试图实例化 GstX264EncPreset 或 GstX264EncTune 但我没有这些结构的声明。任何人都知道以其他方式设置 x264enc 的任何方法,例如解析字符串或类似的东西?