2015-06-03 40 views
0

當我使用該命令在一個計算機上有流:gstreamer的錯誤的顏色轉換到H264原始RGB

gst-launch-1.0 -e v4l2src do-timestamp=true ! video264,width=1296,height=730,framerate=30/1 ! h264parse ! rtph264pay config-interval=1 ! gdppay ! udpsink host=192.168.1.116 port=5000 

所以輸出在YU12格式H264。我需要在原RGB格式,所以在接收器位置處使用:

gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! decodebin ! videoconvert ! video/x-raw,format=\(string\)RGB ! videoconvert ! fpsdisplaysink sync=false text-overlay=true 

其中在圖像與正確的顏色效果,你可以在下面看到: fpsdisplaysink is ok

然而,當我管這個輸出到其他程序,並且我嘗試了一種將rgb幀轉換爲紋理的自定義格式,並且還使用參數pix_fmt rgb24進行了顯示,顏色錯誤並且圖片以某種奇怪的方式移動。 wrong colors with piped output

什麼是奇怪的是,當我嘗試bgr紅色在第二個輸出正確的fdisplaysink之一沒有改變。

我使用gst-launch-1.0 --version gst-launch-1.0 version 1.4.5 GStreamer 1.4.5

任何幫助表示讚賞。

+0

可以粘貼您使用的是管道ffplay命令? – mpr

+0

@mpr gst-launch-1.0 -v udpsrc port = 5000! gdpdepay! rtph264depay! avdec_h264!解碼器! videoconvert! video/x-raw,height = 730,width = 1296,framerate = 25/1,format = RGB! videoconvert! filesink sync = false location =/dev/stdout | ffplay -pix_fmt RGB24 -s 1296x730 -i - – backman

回答

1

正如以下評論所述:「-q」選項需要防止gst-launch將調試信息吐出到標準輸出管道。


好了,有趣的故事,看起來當你在使用HEIGHTxWIDTH ffplay指定視頻大小等,GStreamer的使用爲WIDTHxHEIGHT。這個命令工作正常:

gst-launch-1.0 -q videotestsrc pattern = ball! video/x-raw,height = 320,width = 240,framerate = 30/1,format = RGB! fdsink | ffplay -f rawvideo -pixel_format RGB24 -video_size 240x320的-i -

如果顏色上改變了你可能有一個RGB混合了一個BGR的地方。

你可以得到的所有ffplay像素格式像這樣的列表:

ffplay -pix_fmts

這videoconvert支持GStreamer的像素格式的位置:

GST-檢查-1.0 videoconvert
+0

不,這不是問題,我其實可以指定尺寸爲videoconvert插件參數,不會改變任何事情。像素格式不是問題,兩者都指定相同。但是,我發現真正的問題,或者說如何避免我的問題。將很快發佈更新。 – backman

+1

-q選項是問題解決者 – backman

0

因此,事實證明,這是一種管道問題。我不知道爲什麼,但通過標準輸出到另一個程序只是改變了一切。它看起來像幀開始在錯誤的字節或東西。我甚至已經到了視頻正在進行一些移動圖像效果的地步,其中每幀圖像更加偏移。這不是真正的使用色彩空間的問題,它只發生在每一個。

我不知道如何解決這個問題,我發佈的這個解決方案並不是如何移除它而不是如何避免它。

標準輸出不能正常工作,但保存到文件例如。所以我嘗試使用命名管道。經典mkfifo。做這樣的事情

gst-launch-1.0 -v udpsrc port=5000 ! gdpdepay ! rtph264depay ! avdec_h264 ! decodebin ! videoconvert ! video/x-raw,height=730,width=1296,framerate=25/1,format=RGB ! videoconvert ! filesink sync=false location=pipe

,並比任何打開管道,或者簡單地將它像

cat pipe | program - 

使得它的工作就像一個魅力。沒有顏色錯誤,沒有移位的圖片。

我不知道是什麼在Linux(我根本不會有足夠的時間來研究它們)命名管道和stdout pipeing之間的區別,我只是曾經看到有一個名爲的人更少的開銷。

+0

您是否嘗試將-q添加到gstreamer命令?我注意到如果我沒有包含它,它會拋出一些警告消息給stdout。 – mpr

+0

ou,沒有注意到...那個作品像一個魅力,對不起,我將你的答案標記爲解決方案。 – backman