2013-02-18 422 views
0

我想通过网络使用gstreamer(在Windows中)通过UDP流h264视频。 首先,如果我用这样的管道,一切都似乎是好的,我看到测试模式:使用udpsink流与gstreamer h264(C++)

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的任何方式,比如解析一个字符串或类似的东西?

回答

0

尝试udpsrc元件到 “应用程序/ x-RTP” 上设置上限。

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