Jump to content


Photo

GStreamer 1.0

gstreamer 1.0 openpli

  • Please log in to reply
2520 replies to this topic

Re: GStreamer 1.0 #2281 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 10 April 2016 - 13:10

@Alexvrs, similar to previous issue but with different element, qtdemux is not pushing buffers to sink.



Re: GStreamer 1.0 #2282 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 10 April 2016 - 13:28

 

I found another problem gstreamer 1.9.0.1, this time with mp4, see this link here 

http://e1.cdnak.neul..._1600K_16x9.mp4

is not work

gst-launch-1.0 playbin uri=http://e1.cdnak.neulion.com/nhl/vod/2016/01/27/741/2_741_phi_wsh_1516_h_continuous_
1_1600K_16x9.mp4
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
WARNING: from element /GstPlayBin:playbin0/GstPlaySink:playsink: No volume control found
Additional debug info:
../../../git/gst/playback/gstplaysink.c(2857): gen_audio_chain (): /GstPlayBin:playbin0/GstPlaySink:playsink:
Volume/mute is not available
Prerolled, waiting for buffering to finish...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Got EOS from element "playbin0".
Execution ended after 0:00:00.004491741
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

Yes I checked with 1.7.1 the file did played well :

 

With 1.9.0.1 the file does not play

 

Has nothing to do with buffering or downloads.

 

If you fetch the file first and then just play normally it was ok with 1.7.1 or even if You played it through http link it was ok with 1.7.1

 

@mx3L thanks with You're patch the live streams hls from youtube are working.



Re: GStreamer 1.0 #2283 Beeker

  • PLi® Contributor
  • 1,602 posts

+203
Excellent

Posted 10 April 2016 - 13:28

Last patch wont apply for gstreamer 1.9.0.1..adapt it.

diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.c
index bd196c3..1f29ef0 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -1634,7 +1634,7 @@ gst_ts_demux_stream_added (MpegTSBase * base, MpegTSBaseStream * bstream,
     stream->first_pts = GST_CLOCK_TIME_NONE;
     stream->raw_pts = -1;
     stream->raw_dts = -1;
-    stream->pending_ts = TRUE;
+    stream->pending_ts = program->pcr_pid < 0x1fff;
     stream->nb_out_buffers = 0;
     stream->gap_ref_buffers = 0;
     stream->gap_ref_pts = GST_CLOCK_TIME_NONE;
@@ -1728,7 +1728,7 @@ gst_ts_demux_stream_flush (TSDemuxStream * stream, GstTSDemux * tsdemux,
   stream->dts = GST_CLOCK_TIME_NONE;
   stream->raw_pts = -1;
   stream->raw_dts = -1;
-  stream->pending_ts = TRUE;
+  stream->pending_ts = program->pcr_pid < 0x1fff;
   stream->nb_out_buffers = 0;
   stream->gap_ref_buffers = 0;
   stream->gap_ref_pts = GST_CLOCK_TIME_NONE;

But fails to compile.

tmp/sysroots/dm8000=  -c -o libgstmpegtsdemux_la-pesparse.lo `test -f 'pesparse.c' || echo '../../../git/gst/mpegtsdemux/'`pesparse.c
| ../../../git/gst/mpegtsdemux/tsdemux.c:1731:24: error: 'program' undeclared (first use in this function)
|    stream->pending_ts = program->pcr_pid < 0x1fff;
|                         ^
| ../../../git/gst/mpegtsdemux/tsdemux.c:1731:24: note: each undeclared identifier is reported only once for each function it appears in

So back to first patch for now.


Edited by Beeker, 10 April 2016 - 13:28.

Dreambox dm920, Uclan Ustym4Kpro, Gigablue UHD TRIO 4K and Dreambox dm8000. Wavefrontier T55 13.0|19.2|23.5|28.2 + Ziggo.


Re: GStreamer 1.0 #2284 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 10 April 2016 - 13:45

@Beeker

I'm using 1.8.0, no problem there

 

@Alexvrs

This one is culprit in good plugins - 0391a93a3519c2ea4c375e9668b481c851e59d08, if you revert it stream works



Re: GStreamer 1.0 #2285 Alexvrs

  • Senior Member
  • 36 posts

+4
Neutral

Posted 10 April 2016 - 14:02

@Beeker

It uses only the first part of your patch:

diff --git a/gst/mpegtsdemux/tsdemux.c b/gst/mpegtsdemux/tsdemux.cindex bd196c3..1f29ef0 100644
--- a/gst/mpegtsdemux/tsdemux.c
+++ b/gst/mpegtsdemux/tsdemux.c
@@ -1634,7 +1634,7 @@ gst_ts_demux_stream_added (MpegTSBase * base, MpegTSBaseStream * bstream,
     stream->first_pts = GST_CLOCK_TIME_NONE;
     stream->raw_pts = -1;
     stream->raw_dts = -1;
-    stream->pending_ts = TRUE;
+    stream->pending_ts = program->pcr_pid < 0x1fff;
     stream->nb_out_buffers = 0;
     stream->gap_ref_buffers = 0;
     stream->gap_ref_pts = GST_CLOCK_TIME_NONE;

in the second part of the code does not have a program variable so you get an error


Edited by Alexvrs, 10 April 2016 - 14:03.

Один — стоит, Единый движется.


Re: GStreamer 1.0 #2286 Beeker

  • PLi® Contributor
  • 1,602 posts

+203
Excellent

Posted 10 April 2016 - 14:10

Yes..apparently i tried only the second part..My mistake..Thanks for reporting.


Dreambox dm920, Uclan Ustym4Kpro, Gigablue UHD TRIO 4K and Dreambox dm8000. Wavefrontier T55 13.0|19.2|23.5|28.2 + Ziggo.


Re: GStreamer 1.0 #2287 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 10 April 2016 - 16:02

Ok I do not have a new full gst-1.9.0.1 working.

 

Just two extra patches. On plugins-bad and on plugins-good

 

 

I added the two patches and also included my currentlly used full gst-1.9.0.1 bundle.

 

Tested on vuduo2 runs all fine

 

Youtube live streams

mp4 from Alexvrs.

 

Attached Files



Re: GStreamer 1.0 #2288 Alexvrs

  • Senior Member
  • 36 posts

+4
Neutral

Posted 10 April 2016 - 16:26

@christophecvr

 

Thank you. I will test it on a few boxes and give a report  :)


Один — стоит, Единый движется.


Re: GStreamer 1.0 #2289 Taapat

  • PLi® Core member
  • 2,345 posts

+121
Excellent

Posted 10 April 2016 - 17:31

Also, for me on solo2 and current gstreamer from the git these two changes fix live hls streams and Alexvrs mp4 link playback.



Re: GStreamer 1.0 #2290 MastaG

  • Senior Member
  • 1,531 posts

+118
Excellent

Posted 10 April 2016 - 19:59

You guys are awesome :-)
Thank you!

Re: GStreamer 1.0 #2291 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 11 April 2016 - 10:54

qtdemux revert shouldn't be neccessary anymore https://bugzilla.gno...g.cgi?id=764870



Re: GStreamer 1.0 #2292 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 11 April 2016 - 13:18

I just now tested .

 

master-next

gstreamer-head off today

multibox-dvbmediasink.

 

All inclusif live streams are playing.

 

The only media who does not play is the old wmv. Media made with mediaplayer below 9. (wmv version 1 and 2 but looks that the codecs are not supported on a bcm chipset this means we can't do anything to this whatever player is used)

 

I just mad a git for recipes.

 

On :

https://github.com/c...TREAMER-RECIPES

 

You can find my last full gstreamer recipe bundle I'm using now.



Re: GStreamer 1.0 #2293 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 11 April 2016 - 13:47

As I understand PTS can be computed from h264 buffers, so proper solution would be to compute it instead of using DTS instead of PTS which can be different from PTS.

We should try this patch for h264parse:

https://cgit.freedes...mit/?h=h264-pts from https://bugzilla.gno...i?id=659489#c40



Re: GStreamer 1.0 #2294 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 11 April 2016 - 14:19

Perhaps but looks to be very old and it seems they did not succeeded.

 

Strictly speaking at this time:

 

If it is really dts audio and the stb does not have dts on board like for example dm8000 . All is done trough the gst decoder

Else like on vuplus all is done by driver.

 

Point here was actually that the media on it was wrongly converted to ac3 by the convertion they should have set during the convertion the pts timestamp.

That is done now by modern converters  then no problem.

 

Think we should not bring more processors intense tasks if it's running like now.

 

But it's trough that DTS can be different off pts. And as far I know there are two DTS audio frame per video frame.



Re: GStreamer 1.0 #2295 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 11 April 2016 - 14:34

I don't think it has anything to do with audio. Note there is difference between DTS audio codec and DTS as decode timestamp.

AFAIK, audio doesn't use concept of b-frames like in video where when b-frames are used decoder needs to know DTS in order to reconstruct frames and PTS to show these reconstructed frames in right order. So in audio it should be always PTS==DTS.



Re: GStreamer 1.0 #2296 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 11 April 2016 - 14:38

analyzing the sink as extra ok work around for wrong media perhaps also should be done :

 

changing in gstdvbvideosink.c from :

			if (au_type == 9)
			{
				if (!GST_BUFFER_PTS_IS_VALID(buffer))
				{
					GST_DEBUG_OBJECT(self, "writing missing pts to AU_DELIM");
					GST_BUFFER_PTS(buffer) = 0;
				}
				self->h264_initial_audelim_written = TRUE;

to :

			if (au_type == 9)
			{
				if (!GST_BUFFER_PTS_IS_VALID(buffer))
				{
					if(GST_BUFFER_DTS_IS_VALID(buffer))
						GST_BUFFER_PTS(buffer) = GST_BUFFER_DTS(buffer);
					else
					{
						GST_DEBUG_OBJECT(self, "writing missing pts to AU_DELIM");
						GST_BUFFER_PTS(buffer) = 0;
					}
				}
				self->h264_initial_audelim_written = TRUE;


Re: GStreamer 1.0 #2297 MastaG

  • Senior Member
  • 1,531 posts

+118
Excellent

Posted 11 April 2016 - 14:40

@christophecvr

Comparing your git with my patches I have two patches which are being applied to gstreamer1.0 (base) which you don't have:

0001-baseparse-post-tag-list-when-avg-bitrate-changes-at-.patch

From d8b4db4efb91d831c463d96a4de606cc0ddc710f Mon Sep 17 00:00:00 2001
From: Athanasios Oikonomou <athoik@gmail.com>
Date: Sat, 5 Dec 2015 11:58:16 +0200
Subject: [PATCH] baseparse: post tag list when avg bitrate changes at least 2%

Watching videos with variant bitrate is common to have delta
more than 10 kbps, resulting in tag list spam.

Instead of relying on fixed 10 kpbs delta, it is better to
calculale the difference in percentage and update tag list
only when bitrate changes more than 2%.

https://bugzilla.gnome.org/show_bug.cgi?id=759055

diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
index c9a57c5..916fe36 100644
--- a/libs/gst/base/gstbaseparse.c
+++ b/libs/gst/base/gstbaseparse.c
@@ -219,6 +219,9 @@
 #define MIN_FRAMES_TO_POST_BITRATE 10
 #define TARGET_DIFFERENCE          (20 * GST_SECOND)
 #define MAX_INDEX_ENTRIES          4096
+#define UPDATE_THRESHOLD           2
+
+#define ABSDIFF(a,b) (((a) > (b)) ? ((a) - (b)) : ((b) - (a)))
 
 GST_DEBUG_CATEGORY_STATIC (gst_base_parse_debug);
 #define GST_CAT_DEFAULT gst_base_parse_debug
@@ -1691,11 +1694,8 @@ gst_base_parse_update_duration (GstBaseParse * parse)
 static void
 gst_base_parse_update_bitrates (GstBaseParse * parse, GstBaseParseFrame * frame)
 {
-  /* Only update the tag on a 10 kbps delta */
-  static const gint update_threshold = 10000;
-
   guint64 data_len, frame_dur;
-  gint overhead, frame_bitrate, old_avg_bitrate;
+  gint overhead, frame_bitrate;
   GstBuffer *buffer = frame->buffer;
 
   overhead = frame->overhead;
@@ -1755,11 +1755,13 @@ gst_base_parse_update_bitrates (GstBaseParse * parse, GstBaseParseFrame * frame)
         parse->priv->tags_changed = TRUE;
     }
 
-    old_avg_bitrate = parse->priv->posted_avg_bitrate;
-    if (((gint) (old_avg_bitrate - parse->priv->avg_bitrate) > update_threshold
-            || (gint) (parse->priv->avg_bitrate - old_avg_bitrate) >
-            update_threshold) && parse->priv->post_avg_bitrate)
-      parse->priv->tags_changed = TRUE;
+    /* Only update the tag on a 2% change */
+    if (parse->priv->post_avg_bitrate && parse->priv->avg_bitrate) {
+      gint diffprev = (gint) 100 * (ABSDIFF (parse->priv->avg_bitrate,
+          parse->priv->posted_avg_bitrate)) / parse->priv->avg_bitrate;
+      if (diffprev >= UPDATE_THRESHOLD)
+        parse->priv->tags_changed = TRUE;
+    }
   }
 }
 
--
2.1.4

 

0001-Fix-crash-with-gst-inspect.patch

--- gstreamer/tools/gst-inspect.c.orig    2015-11-17 11:54:36.849000877 +0100
+++ gstreamer/tools/gst-inspect.c    2015-11-17 11:56:23.522978789 +0100
@@ -1511,7 +1511,7 @@
   g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
   g_option_context_add_group (ctx, gst_init_get_option_group ());
   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
-    g_printerr ("Error initializing: %s\n", err->message);
+    g_printerr ("Error initializing: %s\n", err ? err->message : "(null)");
     g_clear_error (&err);
     g_option_context_free (ctx);
     return -1;

 

Do you think the above two patches are now obsolete?



Re: GStreamer 1.0 #2298 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 11 April 2016 - 14:44

Well by me they are not needed.

 

Note : that is since the debuglvl is standard 3 now . It was actually the debug print on each change which was the cause off problems.

 

however You still can apply the patches iff You wan't. Theonly problem maybe in time is that the patch will break modern head.


Edited by christophecvr, 11 April 2016 - 14:46.


Re: GStreamer 1.0 #2299 MastaG

  • Senior Member
  • 1,531 posts

+118
Excellent

Posted 11 April 2016 - 15:01

You're right about the debug changes not printed anymore.

Regarding gst-inspect.c I believe it causes a compile error, so I can always re-apply it if it still fails to build.

 

Now for gst-plugins-base I have 3 patches still being applied, that you don't seem to use?

Do you think any of the ones below is still valid?

 

get-caps-from-src-pad-when-query-caps.patch

From af0dac26f62aaceb4bf266720911953793e0fc5d Mon Sep 17 00:00:00 2001
From: zhouming <b42586@freescale.com>
Date: Wed, 14 May 2014 10:16:20 +0800
Subject: [PATCH] ENGR00312515: get caps from src pad when query caps

https://bugzilla.gnome.org/show_bug.cgi?id=728312

Upstream Status: Pending

Signed-off-by: zhouming <b42586@freescale.com>
---
 gst-libs/gst/tag/gsttagdemux.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)
 mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c

diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c
old mode 100644
new mode 100755
index 9b6c478..ae2294a
--- a/gst-libs/gst/tag/gsttagdemux.c
+++ b/gst-libs/gst/tag/gsttagdemux.c
@@ -1708,6 +1708,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
       }
       break;
     }
+    case GST_QUERY_CAPS:
+    {
+
+      /* We can hijack caps query if we typefind already */
+      if (demux->priv->src_caps) {
+        gst_query_set_caps_result (query, demux->priv->src_caps);
+        res = TRUE;
+      } else {
+        res = gst_pad_query_default (pad, parent, query);
+      }
+      break;
+    }
+
     default:
       res = gst_pad_query_default (pad, parent, query);
       break;
--
1.7.9.5

taglist-not-send-to-down-stream-if-all-the-frame-cor.patch
From 68fa1b1425ad2c5f7c5013d0943153a8a6d0934e Mon Sep 17 00:00:00 2001
From: Jian Li <lj.qfy.sh@gmail.com>
Date: Wed, 24 Sep 2014 17:21:02 +0800
Subject: [PATCH] taglist not send to down stream if all the frame corrupted

https://bugzilla.gnome.org/show_bug.cgi?id=737246

Upstream status: Pending

Signed-off-by: Jian Li <lj.qfy.sh@gmail.com>
---
 gst-libs/gst/audio/gstaudiodecoder.c |    9 +++++++++
 gst-libs/gst/video/gstvideodecoder.c |    8 ++++++++
 2 files changed, 17 insertions(+)

diff --git a/gst-libs/gst/audio/gstaudiodecoder.c b/gst-libs/gst/audio/gstaudiodecoder.c
index 3504678..3d69efe 100644
--- a/gst-libs/gst/audio/gstaudiodecoder.c
+++ b/gst-libs/gst/audio/gstaudiodecoder.c
@@ -2083,6 +2083,15 @@ gst_audio_decoder_sink_eventfunc (GstAudioDecoder * dec, GstEvent * event)
       gst_audio_decoder_drain (dec);
       GST_AUDIO_DECODER_STREAM_UNLOCK (dec);
 
+      /* send taglist if no valid frame is decoded util EOS */
+      if (dec->priv->taglist && dec->priv->taglist_changed) {
+        GST_DEBUG_OBJECT (dec, "codec tag %" GST_PTR_FORMAT, dec->priv->taglist);
+        if (!gst_tag_list_is_empty (dec->priv->taglist))
+          gst_audio_decoder_push_event (dec,
+              gst_event_new_tag (gst_tag_list_ref (dec->priv->taglist)));
+        dec->priv->taglist_changed = FALSE;
+      }
+
       /* Forward EOS because no buffer or serialized event will come after
        * EOS and nothing could trigger another _finish_frame() call. */
       ret = gst_audio_decoder_push_event (dec, event);
diff --git a/gst-libs/gst/video/gstvideodecoder.c b/gst-libs/gst/video/gstvideodecoder.c
index dd8abe3..d9bfe4d 100644
--- a/gst-libs/gst/video/gstvideodecoder.c
+++ b/gst-libs/gst/video/gstvideodecoder.c
@@ -1024,6 +1024,14 @@ gst_video_decoder_sink_event_default (GstVideoDecoder * decoder,
        * parent class' ::sink_event() until a later time.
        */
       forward_immediate = TRUE;
+
+      /* send taglist if no valid frame is decoded util EOS */
+      if (decoder->priv->tags && decoder->priv->tags_changed) {
+        gst_video_decoder_push_event (decoder,
+            gst_event_new_tag (gst_tag_list_ref (decoder->priv->tags)));
+        decoder->priv->tags_changed = FALSE;
+      }
+
       break;
     }
     case GST_EVENT_GAP:
--
1.7.9.5

subparse-avoid-false-negatives-dealing-with-UTF-8.patch
From cc5681e3d07023e8684c5da962c4fb5fcecfd385 Mon Sep 17 00:00:00 2001
From: "Reynaldo H. Verdejo Pinochet" <reynaldo@osg.samsung.com>
Date: Fri, 28 Nov 2014 13:26:13 -0300
Subject: [PATCH] subparse: avoid false negatives dealing with UTF-8

g_utf8_validate() chokes at any NUL among max_len
bytes so we should avoid passing null character
terminators if present. Additionally, only part of
the available data might be valid UTF-8. For example
a byte at the end might be the start of a valid UTF-8
run (ie: d0) but not be a valid UTF-8 character by
itself. In this case, we consume only the valid portion
of the run.

https://bugzilla.gnome.org/show_bug.cgi?id=740784
---
 gst/subparse/gstsubparse.c | 23 +++++++++++++++++++++--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/gst/subparse/gstsubparse.c b/gst/subparse/gstsubparse.c
index 11b76c3..2719fd7 100644
--- a/gst/subparse/gstsubparse.c
+++ b/gst/subparse/gstsubparse.c
@@ -437,6 +437,9 @@ convert_encoding (GstSubParse * self, const gchar * str, gsize len,
   const gchar *encoding;
   GError *err = NULL;
   gchar *ret = NULL;
+  gsize nuls = 0;
+  gsize valid_utf8_len;
+  const gchar *invalid_utf8_start;
 
   *consumed = 0;
 
@@ -457,11 +460,27 @@ convert_encoding (GstSubParse * self, const gchar * str, gsize len,
 
   /* Otherwise check if it's UTF8 */
   if (self->valid_utf8) {
-    if (g_utf8_validate (str, len, NULL)) {
+    /* Trim NUL terminator(s) if present */
+    while (len > 0 && str[len - 1] == '\0') {
+      len--;
+      nuls++;
+    }
+
+    /* Consume whole byte run if all valid UTF-8 */
+    if (g_utf8_validate (str, len, &invalid_utf8_start)) {
       GST_LOG_OBJECT (self, "valid UTF-8, no conversion needed");
-      *consumed = len;
+      *consumed = len + nuls;
       return g_strndup (str, len);
     }
+
+    /* Consume initial data as far as we have at least 1 valid code point */
+    valid_utf8_len = invalid_utf8_start - str;
+    if (valid_utf8_len) {
+      GST_WARNING_OBJECT (self, "At least some of the data was invalid UTF-8");
+      *consumed = valid_utf8_len;
+      return g_strndup (str, valid_utf8_len);
+    }
+
     GST_INFO_OBJECT (self, "invalid UTF-8!");
     self->valid_utf8 = FALSE;
   }
--
2.1.4


Re: GStreamer 1.0 #2300 christophecvr

  • Senior Member
  • 3,131 posts

+140
Excellent

Posted 11 April 2016 - 15:05

Well actually for dm8000 and vuduo2 all runs fine whitout those patches. I try to have it run with less possible patches. Since patches are pretty maintenance intensif and sometimes maybe the cause on itself off buggy issues if problems where solved on another place.





8 user(s) are reading this topic

0 members, 6 guests, 0 anonymous users


    Bing (2)