2015-11-30 2 views
0

Я использую не поддерживаемую камеру v4L, и мне нужно передать видео на удаленный ПК с помощью gstreamer.
Я успешно передал его на главный компьютер с помощью Qt и QImages. ранее я задал вопрос hereКак отправить QImages через gstreamer через udp

о том, как подавать внешние рамки в gstreamer.
Я прочитал блог here и попытался реализовать его с помощью gstreamer 1.0, но почему-то не работал должным образом.
Так что я думал о потоковых qimages через gstreamer в той же сети, но на разных рабочих станциях. Мне интересно, может ли кто-нибудь дать мне отправную точку отправки Qimages с помощью gstreamer 1.0. Я не прошу код, а только направление.
Я очень новичок в этом мультимедийном материале, поэтому буду благодарен, если вы объясните это на языке непрофессионала.

Заранее спасибо

ответ

2

Прежде всего, необходимо определить, какой протокол и тип кодировки вы хотите использовать, чтобы передать его через 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.

ИЛИ

Возможно QT имеет некоторый простой способ, что я не в курсе. :)

 Смежные вопросы

  • Нет связанных вопросов^_^