【发布时间】:2015-12-04 00:43:34
【问题描述】:
操作系统:Ubuntu
Gstreamer 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));
}
【问题讨论】:
标签: c streaming video-streaming gstreamer multimedia