首先,你需要確定你要使用通過UDP傳輸它什麼協議和編碼類型。對於大多數情況,我建議使用h264而不是RTP。
GStreamer提供了大量的插件來執行此操作,其中包括一個名爲gst-launch的命令行實用程序。下面是一些基本的發送/接收命令:
gst-launch-1.0 videotestsrc pattern=ball ! video/x-raw,width=1280,height=720 ! videoconvert ! x264enc ! h264parse ! rtph264pay ! udpsink host=localhost port=7777
gst-launch-1.0 udpsrc port=7777 ! rtpbin ! rtph264depay ! decodebin ! videoconvert ! autovideosink
當你編寫使用的GStreamer管道,最簡單的方式來獲得幀到管道與appsrc
應用。所以,你可能有這樣的事情:
const char* pipeline = "appsrc name=mysrc caps=video/x-raw,width=1280,height=720,format=RGB ! videoconvert ! x264enc ! h264parse ! rtph264pay ! udpsink host=localhost port=7777";
GError* error(NULL);
GstElement* bin = gst_parse_bin_from_description(tail_pipe_s.c_str(), true, &error);
if(bin == NULL || error != NULL) {
...
}
GstElement* appsrc = gst_bin_get_by_name(GST_BIN(bin), "mysrc");
GstAppSrcCallbacks* appsrc_callbacks = (GstAppSrcCallbacks*)malloc(sizeof(GstAppSrcCallbacks));
memset(appsrc_callbacks, 0, sizeof(GstAppSrcCallbacks));
appsrc_callbacks->need_data = need_buffers;
appsrc_callbacks->enough_data = enough_buffers;
gst_app_src_set_callbacks(GST_APP_SRC(appsrc), appsrc_callbacks, (gpointer)your_data, free);
gst_object_unref(appsrc);
然後在後臺線程您對gst_app_src_push_buffer
調用,這將涉及您的QImage讀取原始數據,並將其轉換爲一個GstBuffer。
OR
也許QT有我不知道的一些更簡單的方法。 :)
來源
2015-12-02 15:18:01
mpr