ОС: Ubuntu
Gstreamer версию 0,10Gstreamer-0,10 код не в поток видео веб-камера над УДП
Я должен разработать приложение для потокового видео с веб-камеры на удаленном компьютере через UDP. Я написал небольшой фрагмент кода, но он запускается на секунду, а затем выдает ошибку.
Ошибка я получаю
*Running...
Error: Internal data flow error.
Returned, stopping playback
Deleting pipeline*
Может кто-то пожалуйста, точно мне о моей ошибке.
Ниже мой код
GstElement *pipeline, *source, *sink, *muxer, *videoenc, *payloader, *udpsink;
GstBus *bus;
GMainLoop *loop;
// Initialize GStreamer
gst_init (&argc, &argv);
loop = g_main_loop_new(NULL, FALSE);
// Create the elements
source = gst_element_factory_make ("v4l2src", "source");
muxer = gst_element_factory_make ("qtdemux", "mux");
// videoenc = gst_element_factory_make("ffdec_mpeg4", "videoenc"); //why this failed
videoenc = gst_element_factory_make("ffmpegcolorspace", "videoenc");// but this passed but in both cases app failed to run
payloader = gst_element_factory_make("rtpmp4vpay", "rtpmp4vpay");
udpsink = gst_element_factory_make("udpsink", "udpsink");
// Create the empty pipeline
pipeline = gst_pipeline_new ("test-pipeline");
if (!pipeline || !source)
{
g_printerr ("One element could not be created. Exiting.\n");
return -1;
}
if(!muxer )
{
g_printerr ("failed to create muxer Exiting.\n");
return -1;
}
if(!videoenc)
{
g_printerr ("failedto create videoenc. Exiting.\n");
return -1;
}
if(!payloader || !udpsink)
{
{
g_printerr ("One element could not be created out of payloader or udpsink. Exiting.\n");
return -1;
}
}
g_object_set(G_OBJECT(payloader),
"config-interval", 0,
NULL);
g_object_set(G_OBJECT(udpsink),
"host", "127.0.0.1",
"port", 5000,
NULL);
// we add a message handler
bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));
gst_bus_add_watch (bus, bus_call, loop);
gst_object_unref (bus);
//set der source
g_object_set (G_OBJECT (source), "device", "/dev/video0", NULL);
gst_bin_add_many (GST_BIN (pipeline), source, videoenc, payloader, udpsink, NULL);
gst_element_link_many (source, videoenc, payloader, udpsink, NULL);
// g_print("Linked all the Elements together\n");
gst_element_set_state (pipeline, GST_STATE_PLAYING);
// Iterate
g_print ("Running...\n");
g_main_loop_run (loop);
// Out of the main loop, clean up nicely
g_print ("Returned, stopping playback\n");
gst_element_set_state (pipeline, GST_STATE_NULL);
g_print ("Deleting pipeline\n");
gst_object_unref (GST_OBJECT (pipeline));
}
Отлично Mate. На самом деле я все еще получал ошибку после добавления шапок. Так как вы предположили, что я отлаживал и нашел ffmpegcolorspace, а rtpmp4vpay не удалось связать. В командной строке, когда я набираю «gst-launch-0.10 v4l2src! Video/x-raw-yuv, format = \ (fourcc \) YUY2, width = 320, height = 240, framerate = 20/1! Jpegenc! Rtpjpegpay! Udpsink host = 127.0.0.1 port = 5200 "и on Receiver" gst-launch-0.10 udpsrc port = 5200! application/x-rtp, encoding-name = JPEG, payload = 26! rtpjpegdepay! jpegdec! autovideosink "он работает. – samprat
Итак, я исследовал и изменил ffmpegcolorspace на «jpegenc», а в payloader меняю на «rtpjpegpay», и он работает. На самом деле мне нужно кодировать, используя mpeg-4, так что это работает для меня. – samprat
Также к вашему предыдущему комментарию. Его основным требованием в моем проекте было использование только gstreamer-0.10, поэтому мои руки связаны между собой – samprat