Есть батник принимающий видео трансляцию по RTP средствами gstreamer. Пытаюсь написать программу, которая делал бы тоже самое, что бы не было нужды в установке gstreamer'a на целевой компьютер. Компилируется нормально, но при запуске появляются ошибки:
(gstreamer-app.exe:3776): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed
(gstreamer-app.exe:3776): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed
(gstreamer-app.exe:3776): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT (object)' failed
(gstreamer-app.exe:3776): GStreamer-CRITICAL **: gst_bin_add_many: assertion 'GST_IS_ELEMENT (element_1)' failed
(gstreamer-app.exe:3776): GStreamer-CRITICAL **: gst_element_link_many: assertion 'GST_IS_ELEMENT (element_1)' failed
bat файл:
gst-launch-1.0.exe udpsrc port=3000 ! capsfilter caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQCgC3I\,aO48sA\=\=\", payload=(int)96, ssrc=(guint)321130676, clock-base=(guint)96808957, seqnum-base=(guint)33742" ! queue ! rtph264depay ! avdec_h264 ! queue ! d3dvideosink sync=false
Программа
#include <gst/gst.h>
#include <glib.h>
gchar* caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, sprop-parameter-sets=(string)\"Z2QAKK2EBUViuKxUdCAqKxXFYqOhAVFYrisVHQgKisVxWKjoQFRWK4rFR0ICorFcVio6ECSFITk8nyfk/k/J8nm5s00IEkKQnJ5Pk/J/J+T5PNzZprQCgC3I\,aO48sA\=\=\", payload=(int)96, ssrc=(guint)321130676, clock-base=(guint)96808957, seqnum-base=(guint)33742";
gint main(int argc, char *argv[]) {
gst_init (&argc, &argv);
GstElement *pipeline, *videosrc, *capsfilter , *que, *depay, *dec, *que2, *sync;
// init GStreamer
GstCaps* cap = gst_caps_from_string (caps);
GMainLoop* loop = g_main_loop_new (NULL, FALSE);
// setup pipeline
pipeline = gst_pipeline_new ("pipeline");
videosrc = gst_element_factory_make ("udpsrc", "source");
capsfilter = gst_element_factory_make ("capsfilter", "filter");
que = gst_element_factory_make("queue", "que1");
depay = gst_element_factory_make("rtph264depay", "depay");
dec = gst_element_factory_make("avdec_h264", "dec");
que2 = gst_element_factory_make("queue", "que2");
sync = gst_element_factory_make ("d3dvideosink", "out");
//--------------------------------------------------
g_object_set(G_OBJECT(videosrc), "port", 3000, NULL);
g_object_set(G_OBJECT(capsfilter), "caps", cap, NULL);
g_object_set(G_OBJECT(sync), "sync", false, NULL);
//---------------------
gst_bin_add_many (GST_BIN (pipeline), videosrc, que, depay, dec, que2, sync, NULL);
gst_element_link_many (videosrc, que, depay, dec, que2, sync, NULL);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
g_main_loop_run (loop);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (pipeline));
g_main_loop_unref (loop);
return 0;
}
Компилирую в code blocks под windows, все header'ы и lib'ы подключил.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Возникла задача, в которой надо обращаться с двумя соседними элементами множества setТакой вопрос: как это сделать? Гуглил, нигде не нашел...
Есть данная программа которая работает с принтером, проблема заключается в том что при попытке прочитать с ком порта ничего не происходит,...
Нужно перегрузить оператор "=" (присваивания для следующих типов данных)