2013-02-18 77 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