|
I'm trying to play an RTSP stream. If the stream is H.264 it plays fine. However, when the stream is MPEG2 I get constant "Skew too big" messages and the video does not play. The RTSP server is displaying the video without problems. This seems to be something about the source. If I switch to a different MPEG2 source it plays without problems.
Does anyone have any ideas where to look for this problem and what can I do about it. I have set GST_DEBUG to *mpeg*:4 to print mpegts and mpeg2decoder;
Here are the warning messages, no error messages;
0:00:03.550437820 7947 0xf4501cc0 WARN mpegtspacketizer mpegtspacketizer.c:1414:calculate_skew: delta - skew: 0:00:01.956890805 too big, reset skew
0:00:03.583087329 7947 0xf4501cc0 WARN mpegtspacketizer mpegtspacketizer.c:1414:calculate_skew: delta - skew: 0:00:02.002075371 too big, reset skew
0:00:06.549910647 7947 0xf4501cc0 WARN mpegtspacketizer mpegtspacketizer.c:1414:calculate_skew: delta - skew: 5124092:33:39.028187818 too big, reset skew
0:00:06.581728657 7947 0xf4501cc0 WARN mpegtspacketizer mpegtspacketizer.c:1414:calculate_skew: delta - skew: 5124092:33:39.104187833 too big, reset skew
Here is the main parts of the pipeline:
/* Create the playbin element */
data.pipeline = gst_element_factory_make ("playbin", NULL);
/* Setup the URL for the RTSP server. */
if (BMS_MODE_RTSP)
g_object_set (data.pipeline, "uri","rtsp://172.16.9.227:554/session_1", NULL);
else
g_object_set (data.pipeline, "uri","udp://0.0.0.0:7000", NULL);
/* Specify the video sink */
vsink = gst_element_factory_make ("nvoverlaysink", NULL);
g_object_set (data.pipeline, "video_sink", vsink, NULL);
g_object_set (vsink, "sync", FALSE, NULL);
g_object_set (vsink, "qos", FALSE, NULL);
/* Connect source-setup signal*/
if (BMS_MODE_RTSP)
g_signal_connect (data.pipeline, "source-setup", G_CALLBACK (source_setup), &data);
else
g_signal_connect (data.pipeline, "source-setup", G_CALLBACK (source_udp), &data);
/* Instruct the bus to emit signals for each received message, and
* connect to the interesting signals
*/
bus = gst_element_get_bus (data.pipeline);
gst_bus_add_watch (bus, (GstBusFunc)handle_message, &data);
gst_object_unref (bus);
/* Start playing the pipeline */
gst_element_set_state (data.pipeline, GST_STATE_PLAYING);
|