我正在尝试通过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但我没有这些strcutures的声明。 有人知道用其他方式设置x264enc的方法,比如解析一个字符串或类似的东西吗?答案 0 :(得分:2)
我知道这是一篇较旧的帖子,但您可以使用与预设值对应的简单整数设置GstX264EncPreset值。
g_object_set(encoder, "speed-preset", 2, NULL);
适合我。可以使用gst-inspect-1.0 x264enc
找到这些值,如下所示:
speed-preset : Preset name for speed/quality tradeoff options (can affect decode compatibility - impose restrictions separately for your target decoder)
flags: readable, writable
Enum "GstX264EncPreset" Default: 6, "medium"
(0): None - No preset
(1): ultrafast - ultrafast
(2): superfast - superfast
(3): veryfast - veryfast
(4): faster - faster
(5): fast - fast
(6): medium - medium
(7): slow - slow
(8): slower - slower
(9): veryslow - veryslow
(10): placebo - placebo
答案 1 :(得分:0)
尝试将udpsrc元素上限设置为“application / x-rtp”。