Pipeline
Shaf
shaf.nttf at gmail.com
Fri May 31 01:44:35 UTC 2019
I have created the below pipeline for audio and video streaming using RTSP :
Gstreamer Version :
gst-inspect-1.0 version 1.16.0
GStreamer 1.16.0
*Audio and Video apsink:*
<http://gstreamer-devel.966125.n4.nabble.com/file/t378739/av.png>
*RTSP appsrc:*
<http://gstreamer-devel.966125.n4.nabble.com/file/t378739/RTSP.png>
I am able to view the video and listen to audio (with some lag in audio).
But I could see there are some errors logged in the log file :
0:00:13.968698600 6268 06BB4DF0 WARN basesink
gstbasesink.c:1218:gst_base_sink_query_latency:<multiudpsink2> warning:
Pipeline construction is invalid, please add queues.
0:00:13.968762300 6268 06BB4DF0 WARN basesink
gstbasesink.c:1218:gst_base_sink_query_latency:<multiudpsink2> warning: Not
enough buffering available for the processing deadline of
0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional
data. Shortening processing latency to 0:00:00.000000000.
0:00:13.968936300 6268 06BB4DF0 WARN basesink
gstbasesink.c:1218:gst_base_sink_query_latency:<multiudpsink0> warning:
Pipeline construction is invalid, please add queues.
0:00:13.968969900 6268 06BB4DF0 WARN basesink
gstbasesink.c:1218:gst_base_sink_query_latency:<multiudpsink0> warning: Not
enough buffering available for the processing deadline of
0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional
data. Shortening processing latency to 0:00:00.000000000.
0:00:13.969087400 6268 06BB4DF0 WARN bin
gstbin.c:2773:gst_bin_do_latency_func:<media-pipeline> warning: Impossible
to configure latency: max 0:00:00.000000000 < min 0:00:01.800000001. Add
queues or other buffering elements.
0:00:13.971208500 6268 04403C48 WARN basesink
gstbasesink.c:1218:gst_base_sink_query_latency:<multiudpsink2> warning:
Pipeline construction is invalid, please add queues.
0:00:13.972308800 6268 04403C48 WARN basesink
gstbasesink.c:1218:gst_base_sink_query_latency:<multiudpsink2> warning: Not
enough buffering available for the processing deadline of
0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional
data. Shortening processing latency to 0:00:00.000000000.
0:00:13.972325700 6268 06B994B0 WARN libav
gstavauddec.c:628:gst_ffmpegauddec_drain:<avdec_aac0> send packet failed,
could not drain decoder
0:00:13.973876000 6268 04403C48 WARN basesink
gstbasesink.c:1218:gst_base_sink_query_latency:<multiudpsink0> warning:
Pipeline construction is invalid, please add queues.
0:00:13.974672200 6268 04403C48 WARN basesink
gstbasesink.c:1218:gst_base_sink_query_latency:<multiudpsink0> warning: Not
enough buffering available for the processing deadline of
0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional
data. Shortening processing latency to 0:00:00.000000000.
0:00:13.975559800 6268 04403C48 WARN bin
gstbin.c:2773:gst_bin_do_latency_func:<media-pipeline> warning: Impossible
to configure latency: max 0:00:00.000000000 < min 0:00:01.800000001. Add
queues or other buffering elements.
0:00:13.976542400 6268 0447EEA0 WARN rtspmedia
rtsp-media.c:2973:default_handle_message: 06945418: got warning Pipeline
construction is invalid, please add queues.
(../libs/gst/base/gstbasesink.c(1218): gst_base_sink_query_latency ():
/GstPipeline:media-pipeline/GstMultiUDPSink:multiudpsink2:
Not enough buffering available for the processing deadline of
0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional
data. Shortening processing latency to 0:00:00.000000000.)
0:00:13.977377100 6268 0447EEA0 WARN rtspmedia
rtsp-media.c:2973:default_handle_message: 06945418: got warning Pipeline
construction is invalid, please add queues.
(../libs/gst/base/gstbasesink.c(1218): gst_base_sink_query_latency ():
/GstPipeline:media-pipeline/GstMultiUDPSink:multiudpsink0:
Not enough buffering available for the processing deadline of
0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional
data. Shortening processing latency to 0:00:00.000000000.)
0:00:13.978032800 6268 0447EEA0 WARN rtspmedia
rtsp-media.c:2973:default_handle_message: 06945418: got warning GStreamer
error: clock problem. (../gst/gstbin.c(2773): gst_bin_do_latency_func ():
/GstPipeline:media-pipeline:
Impossible to configure latency: max 0:00:00.000000000 < min
0:00:01.800000001. Add queues or other buffering elements.)
0:00:13.978168500 6268 0447EEA0 WARN rtspmedia
rtsp-media.c:2973:default_handle_message: 06945418: got warning Pipeline
construction is invalid, please add queues.
(../libs/gst/base/gstbasesink.c(1218): gst_base_sink_query_latency ():
/GstPipeline:media-pipeline/GstMultiUDPSink:multiudpsink2:
Not enough buffering available for the processing deadline of
0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional
data. Shortening processing latency to 0:00:00.000000000.)
0:00:13.978243800 6268 0447EEA0 WARN rtspmedia
rtsp-media.c:2973:default_handle_message: 06945418: got warning Pipeline
construction is invalid, please add queues.
(../libs/gst/base/gstbasesink.c(1218): gst_base_sink_query_latency ():
/GstPipeline:media-pipeline/GstMultiUDPSink:multiudpsink0:
Not enough buffering available for the processing deadline of
0:00:00.020000000, add enough queues to buffer 0:00:00.020000000 additional
data. Shortening processing latency to 0:00:00.000000000.)
0:00:13.978314500 6268 0447EEA0 WARN rtspmedia
rtsp-media.c:2973:default_handle_message: 06945418: got warning GStreamer
error: clock problem. (../gst/gstbin.c(2773): gst_bin_do_latency_func ():
/GstPipeline:media-pipeline:
Impossible to configure latency: max 0:00:00.000000000 < min
0:00:01.800000001. Add queues or other buffering elements.)
0:00:16.405496700 6268 0DFDE8C8 WARN videodecoder
gstvideodecoder.c:2762:gst_video_decoder_prepare_finish_frame:<avdec_h264-1>
decreasing timestamp (0:00:00.427196500 < 0:00:00.497652761)
The audio and video is not in sync.
1. How can I sync the audio and video (appsink and appsrc) ?
2. What is the issue in the above pipeline, where should I add the queue ?
I am using 2 different approach to push the audio and video sink inside the
appsrc "need-data" signal as below:
void needData(GstElement *appsrc, guint unused, Context *ctx) {
GstFlowReturn ret;
GstBuffer *buffer;
GstStructure *capsstruct;
GstSample *sample = NULL;
// gst_app_sink_pull_sample(GST_APP_SINK(ctx->glblapp->sink));
gint rate = 1, frames = 30;
while (sample == NULL) {
if (appsrc == ctx->glblapp->videoappsrc) {
sample = gst_app_sink_pull_sample(GST_APP_SINK(ctx->glblapp->sink));
} else if (appsrc == ctx->glblapp->audioappsrc) {
sample = gst_app_sink_pull_sample(GST_APP_SINK(ctx->glblapp->aud_sink));
}
}
if (appsrc == ctx->glblapp->videoappsrc) {
GstCaps *capsfromsink = fetch_caps(ctx->glblapp->sink, "sink");
if (capsfromsink != NULL) {
g_object_set(G_OBJECT(appsrc), "caps", capsfromsink, NULL);
gst_caps_unref(capsfromsink);
}
buffer = gst_sample_get_buffer(sample);
capsstruct = gst_caps_get_structure(capsfromsink, 0);
if (gst_structure_has_field(capsstruct, FRAMERATE)) {
const GValue *framerate_val = gst_structure_get_value(capsstruct,
FRAMERATE);
if (G_VALUE_TYPE(framerate_val) == GST_TYPE_FRACTION) {
frames = gst_value_get_fraction_numerator(framerate_val);
rate = gst_value_get_fraction_denominator(framerate_val);
}
}
GST_BUFFER_PTS(buffer) = ctx->timestamp;
GST_BUFFER_DURATION(buffer) = gst_util_uint64_scale_int(rate, GST_SECOND,
frames);
ctx->timestamp += GST_BUFFER_DURATION(buffer);
g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);
}
else if (appsrc == ctx->glblapp->audioappsrc) {
GstCaps *audiocapsfromsink = fetch_caps(ctx->glblapp->aud_sink, "sink");
if (audiocapsfromsink != NULL) {
g_object_set(G_OBJECT(appsrc), "caps", audiocapsfromsink, NULL);
gst_caps_unref(audiocapsfromsink);
}
buffer = gst_sample_get_buffer(sample);
GstSegment *seg = gst_sample_get_segment(sample);
GstClockTime pts, dts;
/* Convert the PTS/DTS to running time so they start from 0 */
pts = GST_BUFFER_PTS(buffer);
if (GST_CLOCK_TIME_IS_VALID(pts))
pts = gst_segment_to_running_time(seg, GST_FORMAT_TIME, pts);
dts = GST_BUFFER_DTS(buffer);
if (GST_CLOCK_TIME_IS_VALID(dts))
dts = gst_segment_to_running_time(seg, GST_FORMAT_TIME, dts);
if (buffer) {
/* Make writable so we can adjust the timestamps */
buffer = gst_buffer_copy(buffer);
GST_BUFFER_PTS(buffer) = pts;
GST_BUFFER_DTS(buffer) = dts;
g_signal_emit_by_name(appsrc, "push-buffer", buffer, &ret);
}
}
gst_sample_unref(sample);
}
--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/
More information about the gstreamer-devel
mailing list