mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-16 21:36:35 +00:00
playout: New example for seamless audio/video playback
An example app that takes video URIs as command line arguments and switches between them seamlessly one after the other using compositor and audiomixer. Both audio-video and video-only media files are valid inputs, but mixing files of both types in a single invocation is cumbersome to support, and hence does not work. The example attempts to keep the audio stream moving along perfectly, and duplicates video frames where necessary to cover gaps in the video timestamps using the 'ignore-eos' videoaggregator pad property. Ensuring seamless (and mostly-glitch-free) switching is harder than it sounds, and hence the example contains plenty of pad probes and running time calculations to make things work. The GPtrArray play_queue contains items that are being played back, have been prepared for playback, and will be played back in the future. The queue itself is mutable besides the first two items (playing and prepared). The item that has been prepared should not be edited or removed since it has been prepared in advance to be activated immediately on the current item's EOS. The example also has support for switching to the next item in the queue prematurely; see the --switch-after/-s flag to the application. Note: the output video is hard-coded at 1280x720, and input video is scaled as needed to fit this size. Set OUTPUT_VIDEO_WIDTH/HEIGHT to change this. https://bugzilla.gnome.org/show_bug.cgi?id=748947
This commit is contained in:
parent
220a133479
commit
5da10b4f57
3 changed files with 1110 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -58,6 +58,7 @@ gst*orc.h
|
|||
/tests/examples/uvch264/test-uvch264
|
||||
/tests/examples/mpegts/tsparser
|
||||
/tests/examples/opencv/gsthanddetect_test
|
||||
/tests/examples/playout
|
||||
|
||||
Build
|
||||
*.user
|
||||
|
|
|
@ -40,6 +40,12 @@ else
|
|||
GTK3_DIR=
|
||||
endif
|
||||
|
||||
noinst_PROGRAMS = playout
|
||||
|
||||
playout_SOURCES = playout.c
|
||||
playout_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
|
||||
playout_LDADD = $(GST_PLUGINS_BASE_LIBS) -lgstvideo-$(GST_API_VERSION) $(GST_LIBS)
|
||||
|
||||
SUBDIRS= mpegts $(DIRECTFB_DIR) $(GTK_EXAMPLES) $(OPENCV_EXAMPLES) $(GL_DIR) \
|
||||
$(GTK3_DIR) $(AVSAMPLE_DIR)
|
||||
DIST_SUBDIRS= mpegts camerabin2 directfb mxf opencv uvch264 gl gtk avsamplesink
|
||||
|
|
1103
tests/examples/playout.c
Normal file
1103
tests/examples/playout.c
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue