Gapless Playback

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Gapless Playback

Digits Info
Hi,

Is gapless playback only possible with playbin?  I have a fairly complicated pipeline using a uridecodebin, two video sink bins and an audio sink (plus video and audio converters) which works but I can't load a new uri for gapless playback. I can't persuade playbin to use a similar custom sinkbin which does offer the uri queuing.  I am currently trying the approach of using the uridecodebin drained signal to trigger the creation of a new pipeline - it this the correct approach?

Regards,

Dave.

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Gapless Playback

Tim Müller
On Thu, 2016-07-14 at 16:43 +0930, Digits wrote:

Hi Dave,

> Is gapless playback only possible with playbin?  I have a fairly
> complicated pipeline using a uridecodebin, two video sink bins and an
> audio sink (plus video and audio converters) which works but I can't
> load a new uri for gapless playback. I can't persuade playbin to use
> a similar custom sinkbin which does offer the uri queuing.  I am
> currently trying the approach of using the uridecodebin drained
> signal to trigger the creation of a new pipeline - it this the
> correct approach?

It is of course possible to do gapless playback also with a custom
pipeline, but it's quite involved and not easy to get right.

There are many ways to achieve the same thing though. If you're looking
to do some kind of playout application, perhaps this will do the job:

https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/tests/examp
les/playout.c

Cheers
-Tim

-- 
Tim Müller, Centricular Ltd - http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Gapless Playback

Ralph
In reply to this post by Digits Info
What about using GES or gnonlin?
Reply | Threaded
Open this post in threaded view
|

Re: Gapless Playback

Carlos Rafael Giani
In reply to this post by Digits Info
On 2016-07-14 09:13, Digits wrote:
Hi,

Is gapless playback only possible with playbin?  I have a fairly complicated pipeline using a uridecodebin, two video sink bins and an audio sink (plus video and audio converters) which works but I can't load a new uri for gapless playback. I can't persuade playbin to use a similar custom sinkbin which does offer the uri queuing.  I am currently trying the approach of using the uridecodebin drained signal to trigger the creation of a new pipeline - it this the correct approach?

Regards,

Dave.


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

As Tim said, it is certainly possible to do it without playbin, but more complex. For example, I've implemented gapless playback without playbin, but for audio-only playback. I used the concat element. I couldn't use playbin, because I had to be able to prefetch data for the next stream properly (for example, start the prefetch 10 seconds before the current stream ended). With concat, you can notice when the switch happened by installing a pad probe on its srcpad that checks for a stream-start event.

_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
Reply | Threaded
Open this post in threaded view
|

Re: Gapless Playback

Digits Info
In reply to this post by Tim Müller
Hi Tim,

Thanks for the link to playback.c - I have now tried this but it only seems to play multiple mp4 files.  Other containers result in demuxer non-negotiated errors (I tried qtdemux, matroskademux and mpegpsdemux), the playback then stalls on the last frame.  The only modification I made to the code is to make it print the filenames.  However, it validates the direction I was heading by queuing a complete pipeline and blocking until required.

DEBUG level2:

dave@OpenGL-Test-2:~/Dropbox/R+D/Digits/Decklink/gstreamer$ ./playout '/Storage/Tests/matroska/tasA1.mkv' '/Storage/Tests/matroska/tasA2.mkv' '/Storage/Tests/matroska/tasA3.mkv'
filename: /Storage/Tests/matroska/tasA1.mkv
filename: /Storage/Tests/matroska/tasA2.mkv
filename: /Storage/Tests/matroska/tasA3.mkv
0:00:00.023151845  3326       0x9f14c0 WARN                 basesrc gstbasesrc.c:3481:gst_base_src_start_complete:<source> pad not activated yet
0:00:00.023609446  3326       0x9f14c0 WARN                 basesrc gstbasesrc.c:3481:gst_base_src_start_complete:<source> pad not activated yet
0:00:00.035824577  3326 0x7f7a100142d0 WARN                   libav gstavcodecmap.c:3089:gst_ffmpeg_caps_with_codecid: No specified format
0:00:00.035874890  3326 0x7f7a100142d0 WARN                   libav gstavcodecmap.c:2413:gst_ffmpeg_caps_to_pixfmt: ignoring insane framerate 1/0
0:00:00.151779451  3326 0x7f7a100142d0 WARN                    alsa conf.c:4705:snd_config_expand: alsalib error: Unknown parameters {AES0 0x02 AES1 0x82 AES2 0x00 AES3 0x02}
0:00:00.151836019  3326 0x7f7a100142d0 WARN                    alsa pcm.c:2239:snd_pcm_open_noupdate: alsalib error: Unknown PCM default:{AES0 0x02 AES1 0x82 AES2 0x00 AES3 0x02}
0:00:00.153569495  3326 0x7f7a100142d0 WARN                 basesrc gstbasesrc.c:3481:gst_base_src_start_complete:<source> pad not activated yet
0:00:00.153932424  3326 0x7f7a100142d0 WARN                 basesrc gstbasesrc.c:3481:gst_base_src_start_complete:<source> pad not activated yet
0:00:00.159456785  3326 0x7f7a100142d0 WARN                   libav gstavviddec.c:1326:gst_ffmpegviddec_video_frame: Change in interlacing ! picture:1, recorded:0
0:00:00.170395006  3326       0x89b590 WARN                   libav gstavcodecmap.c:3089:gst_ffmpeg_caps_with_codecid: No specified format
0:00:00.170490941  3326       0x89b590 WARN                   libav gstavcodecmap.c:2413:gst_ffmpeg_caps_to_pixfmt: ignoring insane framerate 1/0
0:00:00.208710409  3326       0x89b590 WARN                   libav gstavviddec.c:1326:gst_ffmpegviddec_video_frame: Change in interlacing ! picture:1, recorded:0
0:01:46.734048970  3326 0x7f7a04003e30 WARN                 basesrc gstbasesrc.c:3481:gst_base_src_start_complete:<source> pad not activated yet
0:01:46.734437850  3326       0x8a7f20 WARN           matroskademux matroska-demux.c:4639:gst_matroska_demux_loop:<matroskademux1> error: stream stopped, reason not-negotiated
0:01:46.734602076  3326 0x7f7a04003e30 WARN                 basesrc gstbasesrc.c:3481:gst_base_src_start_complete:<source> pad not activated yet
0:01:46.734727856  3326 0x7f7a04003e30 WARN                 playout playout.c:454:playout_item_pad_probe_event: /Storage/Tests/matroska/tasA1.mkv: video pad went EOS before audio pad! There will be audio/video glitches while switching.
0:01:46.738367932  3326 0x7f79c0004140 WARN                   libav gstavcodecmap.c:3089:gst_ffmpeg_caps_with_codecid: No specified format
0:01:46.738407250  3326 0x7f79c0004140 WARN                   libav gstavcodecmap.c:2413:gst_ffmpeg_caps_to_pixfmt: ignoring insane framerate 1/0
0:01:46.755357066  3326 0x7f79c0004140 WARN                   libav gstavviddec.c:1326:gst_ffmpegviddec_video_frame: Change in interlacing ! picture:1, recorded:0
0:02:06.600578151  3326       0x9c2d90 WARN             xvimagesink xvimagesink.c:555:gst_xv_image_sink_handle_xevents:<autovideosink0-actual-sink-xvimage> error: Output window was closed
^C
On 14/07/2016 6:04 PM, Tim Müller wrote:
On Thu, 2016-07-14 at 16:43 +0930, Digits wrote:

Hi Dave,

Is gapless playback only possible with playbin?  I have a fairly
complicated pipeline using a uridecodebin, two video sink bins and an
audio sink (plus video and audio converters) which works but I can't
load a new uri for gapless playback. I can't persuade playbin to use
a similar custom sinkbin which does offer the uri queuing.  I am
currently trying the approach of using the uridecodebin drained
signal to trigger the creation of a new pipeline - it this the
correct approach?
It is of course possible to do gapless playback also with a custom
pipeline, but it's quite involved and not easy to get right.

There are many ways to achieve the same thing though. If you're looking
to do some kind of playout application, perhaps this will do the job:

https://cgit.freedesktop.org/gstreamer/gst-plugins-bad/tree/tests/examp
les/playout.c

Cheers
-Tim

-- 
Tim Müller, Centricular Ltd - http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel