Hello community, here is the log from the commit of package gstreamer-rtsp-server for openSUSE:Factory checked in at 2019-12-12 23:17:07 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer-rtsp-server (Old) and /work/SRC/openSUSE:Factory/.gstreamer-rtsp-server.new.4691 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-rtsp-server" Thu Dec 12 23:17:07 2019 rev:23 rq:754309 version:1.16.2 Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer-rtsp-server/gstreamer-rtsp-server.changes 2019-10-11 15:14:25.752579933 +0200 +++ /work/SRC/openSUSE:Factory/.gstreamer-rtsp-server.new.4691/gstreamer-rtsp-server.changes 2019-12-12 23:17:11.522218712 +0100 @@ -1,0 +2,10 @@ +Wed Dec 4 13:21:03 UTC 2019 - Bjørn Lie <bjorn....@gmail.com> + +- Update to version 1.16.2: + + rtsp-media: Use lock in gst_rtsp_media_is_receive_only + + rtsp-client: + - RTP Info when completed_sender + - Fix location uri-format by getting uri directly from context + instead + +------------------------------------------------------------------- Old: ---- gst-rtsp-server-1.16.1.tar.xz New: ---- gst-rtsp-server-1.16.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer-rtsp-server.spec ++++++ --- /var/tmp/diff_new_pack.ZsBW4p/_old 2019-12-12 23:17:12.150218655 +0100 +++ /var/tmp/diff_new_pack.ZsBW4p/_new 2019-12-12 23:17:12.158218654 +0100 @@ -1,7 +1,7 @@ # # spec file for package gstreamer-rtsp-server # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ %define _name gst-rtsp-server Name: gstreamer-rtsp-server -Version: 1.16.1 +Version: 1.16.2 Release: 0 Summary: GStreamer-based RTSP server library License: LGPL-2.0-or-later ++++++ gst-rtsp-server-1.16.1.tar.xz -> gst-rtsp-server-1.16.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/ChangeLog new/gst-rtsp-server-1.16.2/ChangeLog --- old/gst-rtsp-server-1.16.1/ChangeLog 2019-09-23 12:17:42.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/ChangeLog 2019-12-03 12:16:06.000000000 +0100 @@ -1,3 +1,51 @@ +=== release 1.16.2 === + +2019-12-03 11:16:06 +0000 Tim-Philipp Müller <t...@centricular.com> + + * ChangeLog: + * NEWS: + * RELEASE: + * configure.ac: + * gst-rtsp-server.doap: + * meson.build: + Release 1.16.2 + +2019-09-17 13:45:57 +0200 Adam x Nilsson <ada...@axis.com> + + * gst/rtsp-server/rtsp-media.c: + rtsp-media: Use lock in gst_rtsp_media_is_receive_only + (cherry picked from commit f1d2a0cae9a791ce07c753faaf82a6cdefecd373) + +2019-11-04 12:56:13 +0100 Kristofer Bjorkstrom <kristofer.bjorkst...@axis.com> + + * gst/rtsp-server/rtsp-client.c: + * gst/rtsp-server/rtsp-media.c: + * tests/check/gst/client.c: + rtsp-client: RTP Info when completed_sender + Change condition that should be fulfilled regarding RTPInfo. + Replace !gst_rtsp_media_is_receive_only with + gst_rtsp_media_has_completed_sender. It is more correct to actually look + for a sender pipeline that is complete. Only then a RTPInfo should + exist. + gst_rtsp_media_is_receive_only gives different answears depending on + state of server. + If Describe is called wth URL+options for backchannel SDP will give only + audio and only backchannel a=sendonly + If Describe is called on URL+options that gives both audio and video + direction from server to client, pipelines are created. Thus + receive_only will return false, even though Setup only would setup + backchannel. + RTP-Info is only for outgoing streams. Thus one should look if outgoing + streams are complete. + +2019-10-17 12:15:42 +0200 Muhammet Ilendemli <m...@tailored-apps.com> + + * gst/rtsp-server/rtsp-client.c: + rtsp-client: Generate correct URI for MIKEY in ANNOUNCE responses + Instead of hardcoding the URI, take the actual URI (and especially the correct port) + from the RTSP context. + Fixes #84 + === release 1.16.1 === 2019-09-23 11:17:41 +0100 Tim-Philipp Müller <t...@centricular.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/NEWS new/gst-rtsp-server-1.16.2/NEWS --- old/gst-rtsp-server-1.16.1/NEWS 2019-09-23 12:17:41.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/NEWS 2019-12-03 12:16:06.000000000 +0100 @@ -5,13 +5,13 @@ GStreamer 1.16.0 was originally released on 19 April 2019. -The latest bug-fix release in the 1.16 series is 1.16.1 and was released -on 23 September 2019. +The latest bug-fix release in the 1.16 series is 1.16.2 and was released +on 3 December 2019. See https://gstreamer.freedesktop.org/releases/1.16/ for the latest version of this document. -_Last updated: Sunday 22 September 2019, 21:00 UTC (log)_ +_Last updated: Tuesday 03 December 2019, 08:00 UTC (log)_ Introduction @@ -142,9 +142,9 @@ Raw audio samples are usually passed around in interleaved form in GStreamer, which means that if there are multiple audio channels the -samples for each channel are interleaved in memory, e.g. -|LEFT|RIGHT|LEFT|RIGHT|LEFT|RIGHT| for stereo audio. A non-interleaved -or planar arrangement in memory would look like +samples for each channel are interleaved in memory, +e.g. |LEFT|RIGHT|LEFT|RIGHT|LEFT|RIGHT| for stereo audio. A +non-interleaved or planar arrangement in memory would look like |LEFT|LEFT|LEFT|RIGHT|RIGHT|RIGHT| instead, possibly with |LEFT|LEFT|LEFT| and |RIGHT|RIGHT|RIGHT| residing in separate memory chunks or separated by some padding. @@ -243,7 +243,7 @@ GstVideoOverlayCompositions on a stream. The element will emit the "draw" signal for each video buffer, and the application then generates an overlay for that frame (or not). This is much more - performant than e.g. cairooverlay for many use cases, e.g. because + performant than e.g. cairooverlay for many use cases, e.g. because pixel format conversions can be avoided or the blitting of the overlay can be delegated to downstream elements (such as gloverlaycompositor). It’s particularly useful for cases where only @@ -336,7 +336,7 @@ - "reset-muxer" property: when unset, the muxer is reset using flush events instead of setting its state to NULL and back. This - means the muxer can keep state across resets, e.g. mpegtsmux + means the muxer can keep state across resets, e.g. mpegtsmux will keep the continuity counter continuous across segments as required by hlssink2. @@ -700,9 +700,9 @@ - There is now a GDB PRETTY PRINTER FOR VARIOUS GSTREAMER TYPES: For GstObject pointers the type and name is added, e.g. 0x5555557e4110 [GstDecodeBin|decodebin0]. For GstMiniObject pointers - the object type is added, e.g. 0x7fffe001fc50 [GstBuffer]. For + the object type is added, e.g. 0x7fffe001fc50 [GstBuffer]. For GstClockTime and GstClockTimeDiff the time is also printed in human - readable form, e.g. 150116219955 [+0:02:30.116219955]. + readable form, e.g. 150116219955 [+0:02:30.116219955]. - GDB EXTENSION WITH TWO CUSTOM GDB COMMANDS gst-dot AND gst-print: @@ -1044,7 +1044,7 @@ - Rust 1.31 is the minimum supported Rust version now - Update to latest gir code generator and glib bindings -- Functions returning e.g. gst::FlowReturn or other “combined” enums +- Functions returning e.g. gst::FlowReturn or other “combined” enums were changed to return split enums like Result<gst::FlowSuccess, gst::FlowError> to allow usage of the standard Rust error handling. @@ -1388,7 +1388,8 @@ - decklinkaudiosink: Drop late buffers - openh264enc: Fix compilation with openh264 v2.0 - wasapisrc: fix segtotal value being always 2 -- Fix issues on Android Q +- android: Fix gnutls issue causing a FORTIFY crash on Android Q +- windows: Fix two crashes due to cross-CRT free when using MSVC gstreamer core @@ -1698,6 +1699,182 @@ - List of Merge Requests applied in 1.16 - List of Issues fixed in 1.16.1 +1.16.2 + +The second 1.16 bug-fix release (1.16.2) was released on 03 December +2019. + +This release only contains bugfixes and it _should_ be safe to update +from 1.16.1. + +Highlighted bugfixes in 1.16.2 + +- Interlaced video scaling fixes +- CineForm video support in AVI +- audioresample: avoid glitches due to rounding errors after changing + rate +- Command line tool output printing improvements on Windows +- various performance improvements, memory leak fixes and security + fixes +- VP9 decoding fixes +- avfvideosrc: Explicitly request video permission on macOS 10.14+ +- wasapi: bug fixes and stability improvements +- webrtc-audio-processing: fix segmentation fault on 32-bit windows +- tsdemux: improved handling of certain discontinuities +- vaapi h265 decoder: wait for I-frame before trying to decode + +gstreamer + +- gst-launch: Fix ugly stdout on Windows +- tee: Make sure to actually deactivate pads that are released +- bin: Drop need-context messages without source instead of crashing +- gst: Don’t pass miniobjects to GST_DEBUG_OBJECT() and similar macros +- tracers: Don’t leak temporary GstStructure + +gst-plugins-base + +- xvimagepool: Update size, stride, and offset with allocated XvImage +- video-converter: Fix RGB-XYZ-RGB conversion +- audiorate: Update next_offset on rate change +- audioringbuffer: Reset reorder flag before check +- audio-buffer: Don’t fail to map buffers with zero samples +- videorate: Fix max-duplication-time handling +- gl/gbm: ensure we call the resize callback before attempting to draw +- video-converter: Various fixes for interlaced scaling +- gstrtspconnection: messages_bytes not decreased +- check: Don’t use real audio devices for tests +- riff: add CineForm mapping +- glfilters: Don’t use static variables for storing per-element state +- glupload: Add VideoMetas and GLSyncMeta to the raw uploaded buffers +- streamsynchronizer: avoid pad release race during logging. +- gst-play: Use gst_print* to avoid broken stdout string on Windows + +gst-plugins-good + +- vp9dec: Fix broken 4:4:4 8bits decoding +- rtpsession: add locking for clear-pt-map +- rtpL16depay: don’t crash if data is not modulo channels*width +- wavparse: Fix push mode ignoring audio with a size smaller than + segment buffer +- wavparse: Fix push mode ignoring last audio payload chunk +- aacparse: fix wrong offset of the channel number in adts header +- jpegdec: Fix incorrect logic in EOI tag detection +- videocrop: Also update the coordinate when in-place +- jpegdec: don’t overwrite the last valid line +- vpx: Error out if enabled and no features found +- v4l2videodec: ensure pool exists before orphaning it +- v4l2videoenc: fix type conversion errors +- v4l2bufferpool: Queue number of allocated buffers to capture +- v4l2object: fix mpegversion number typo +- v4l2object: Work around bad TRY_FMT colorimetry implementations + +gst-plugins-bad + +- avfvideosrc: Explicitly request video permission on macOS 10.14+ +- wasapi: Various fixes and a workaround for a specific driver bug +- wasapi: Move to CoInitializeEx for COM initialization +- wasapi: Fix runtime/build warnings +- waylandsink: Commit the parent after creating subsurface +- msdkdec: fix surface leak in msdkdec_handle_frame +- tsmux: Fix copying of buffer region +- tsdemux: Handle continuity mismatch in more cases +- tsdemux: Always issue a DTS even when it’s equal to PTS +- openexr: Fix build with OpenEXR 2.4 (and also OpenEXR 2.2 on Ubuntu + 18.04) +- ccextractor: Always forward all sticky events to the caption pad +- pnmdec: Return early on ::finish() if we have no actual data to + parse +- ass: avoid infinite unref loop with bad data +- fluidsynth: add sf3 to soundfont search path +- webrtcdsp/webrtcechoprobe segmentation fault on windows (1.16.0 x86) + +gst-libav + +- avvidenc: Fix error propagation +- avdemux: Fix segmentation fault if long_name is NULL +- avviddec: Fix huge leak caused by circular reference +- avviddec: Enforce allocate new AVFrame per input frame +- avdec_mpeg2video (and probably more): Huge memory leak in git master + +gst-rtsp-server + +- rtsp-media: Use lock in gst_rtsp_media_is_receive_only +- rtsp-client: RTP Info when completed_sender +- rtsp-client: fix location uri-format by getting uri directly from + context instead + +gstreamer-vaapi + +- meson build: halt configuration if no renderer API +- libs: decoder: h265: skip all pictures prior the first I-frame +- libs: window: x11: Avoid usage of deprecated API + +gst-editing-services + +- Initialize debug categories before usage + +gst-build + +- gst-env: Use locally built GStreamer utility programs + +Cerbero build tool and packaging changes in 1.16.2 + +General + +- openssl: Update to 1.1.1d +- Updated ffmpeg, expat, flac, freetype, croco, ogg, xml2, mpg123, + openjpeg, opus, pixman, speex, tiff recipes +- Fix setting of git credentials in local source repos + +Windows + +- webrtc-audio-processing: fix segmentation fault on 32-bit windows + with webrtcdsp/webrtcechoprobe elemens +- vpx plugin has no features when built with Visual Studio 2019 +- libvpx: Add support for Visual Studio 2019 +- mingw-runtime.recipe: Correctly package pkg-config in the MSI +- GIO doesn’t load any modules on Windows with MSVC, which breaks TLS + support since glib-networking’s giognutls module isn’t loaded +- Make the instructions for running Cerbero the same on all platforms + +macOS + iOS + +- Add support for macOS 10.15 Catalina +- Updates for Xcode 11 +- macos/ios: expose objc++ compilers in env variables +- srt.recipe: Fix crash in constructor on iOS +- osx-framework.recipe: Dynamically generate the list of libraries and + ship pkg-config +- macos: add -mmacosx-version-min for framework +- gstreamer-1.0-osx-framework.recipe contains an outdated hard-coded + list of libraries +- We need to ship pkg-config with macOS + +Linux + +- Fix filesprovider.find_shlib_regex when a lib_suffix is used in the + cerbero config file + +Contributors to 1.16.2 + +Adam Nilsson, Amr Mahdi, Angus Ao, Charlie Turner, Edward Hervey, Fabian +Greffrath, Fuwei Tang, Havard Graff, Hu Qian, James Cowgill, Jan +Alexander Steffens (heftig), Jeffy Chen, Jeremy Lempereur, Joakim +Johansson, Jochen Henneberg, Julien Isorce, Kevin Joly, Kristofer +Bjorkstrom, Kyrylo Polezhaiev, Matthew Waters, Michael Olbrich, Muhammet +Ilendemli, Nicolas Dufresne, Nirbheek Chauhan, Pablo Marcos Oltra, Roman +Shpuntov, Ruben Gonzalez, Scott Kanowitz, Sebastian Dröge, Seungha Yang, +Thibault Saunier, Tim-Philipp Müller, Víctor Manuel Jáquez Leal, Vivia +Nikolaidou, + +… and many others who have contributed bug reports, translations, sent +suggestions or helped testing. Thank you all! + +List of merge requests and issues fixed in 1.16.2 + +- List of Merge Requests applied in 1.16 +- List of Issues fixed in 1.16.2 + Known Issues @@ -1721,9 +1898,8 @@ development of 1.17/1.18 will happen in the git master branch. The plan for the 1.18 development cycle is yet to be confirmed, but it -is now expected that feature freeze will take place shortly after the -GStreamer conference/hackfest in early November 2019, with the first -1.18 stable release ready in late November or early December. +is now expected that feature freeze will take place in December 2019, +with the first 1.18 stable release ready in late January or February. 1.18 will be backwards-compatible to the stable 1.16, 1.14, 1.12, 1.10, 1.8, 1.6, 1.4, 1.2 and 1.0 release series. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/RELEASE new/gst-rtsp-server-1.16.2/RELEASE --- old/gst-rtsp-server-1.16.1/RELEASE 2019-09-23 12:17:41.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/RELEASE 2019-12-03 12:16:06.000000000 +0100 @@ -1,4 +1,4 @@ -This is GStreamer gst-rtsp-server 1.16.1. +This is GStreamer gst-rtsp-server 1.16.2. The GStreamer team is pleased to announce another bug-fix release in the stable 1.x API series of your favourite cross-platform multimedia framework! diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/configure new/gst-rtsp-server-1.16.2/configure --- old/gst-rtsp-server-1.16.1/configure 2019-09-23 12:17:09.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/configure 2019-12-03 12:15:32.000000000 +0100 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for GStreamer RTSP Server Library 1.16.1. +# Generated by GNU Autoconf 2.69 for GStreamer RTSP Server Library 1.16.2. # # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer>. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='GStreamer RTSP Server Library' PACKAGE_TARNAME='gst-rtsp-server' -PACKAGE_VERSION='1.16.1' -PACKAGE_STRING='GStreamer RTSP Server Library 1.16.1' +PACKAGE_VERSION='1.16.2' +PACKAGE_STRING='GStreamer RTSP Server Library 1.16.2' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -1537,7 +1537,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures GStreamer RTSP Server Library 1.16.1 to adapt to many kinds of systems. +\`configure' configures GStreamer RTSP Server Library 1.16.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1609,7 +1609,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer RTSP Server Library 1.16.1:";; + short | recursive ) echo "Configuration of GStreamer RTSP Server Library 1.16.2:";; esac cat <<\_ACEOF @@ -1807,7 +1807,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -GStreamer RTSP Server Library configure 1.16.1 +GStreamer RTSP Server Library configure 1.16.2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2085,7 +2085,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by GStreamer RTSP Server Library $as_me 1.16.1, which was +It was created by GStreamer RTSP Server Library $as_me 1.16.2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3062,7 +3062,7 @@ # Define the identity of the package. PACKAGE='gst-rtsp-server' - VERSION='1.16.1' + VERSION='1.16.2' cat >>confdefs.h <<_ACEOF @@ -3273,9 +3273,9 @@ - PACKAGE_VERSION_MAJOR=$(echo 1.16.1 | cut -d'.' -f1) - PACKAGE_VERSION_MINOR=$(echo 1.16.1 | cut -d'.' -f2) - PACKAGE_VERSION_MICRO=$(echo 1.16.1 | cut -d'.' -f3) + PACKAGE_VERSION_MAJOR=$(echo 1.16.2 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 1.16.2 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 1.16.2 | cut -d'.' -f3) @@ -3286,7 +3286,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 $as_echo_n "checking nano version... " >&6; } - NANO=$(echo 1.16.1 | cut -d'.' -f4) + NANO=$(echo 1.16.2 | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 @@ -8112,10 +8112,10 @@ done - GST_CURRENT=1601 + GST_CURRENT=1602 GST_REVISION=0 - GST_AGE=1601 - GST_LIBVERSION=1601:0:1601 + GST_AGE=1602 + GST_LIBVERSION=1602:0:1602 @@ -12749,10 +12749,10 @@ -GST_REQ=1.16.1 -GSTPB_REQ=1.16.1 -GSTPG_REQ=1.16.1 -GSTPD_REQ=1.16.1 +GST_REQ=1.16.2 +GSTPB_REQ=1.16.2 +GSTPG_REQ=1.16.2 +GSTPD_REQ=1.16.2 @@ -18953,7 +18953,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by GStreamer RTSP Server Library $as_me 1.16.1, which was +This file was extended by GStreamer RTSP Server Library $as_me 1.16.2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -19019,7 +19019,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -GStreamer RTSP Server Library config.status 1.16.1 +GStreamer RTSP Server Library config.status 1.16.2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/configure.ac new/gst-rtsp-server-1.16.2/configure.ac --- old/gst-rtsp-server-1.16.1/configure.ac 2019-09-23 12:16:58.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/configure.ac 2019-12-03 12:15:20.000000000 +0100 @@ -2,7 +2,7 @@ dnl initialize autoconf dnl when going to/from release please set the nano (fourth number) right ! dnl releases only do Wall, cvs and prerelease does Werror too -AC_INIT([GStreamer RTSP Server Library], [1.16.1], +AC_INIT([GStreamer RTSP Server Library], [1.16.2], [http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer], [gst-rtsp-server]) AG_GST_INIT @@ -53,13 +53,13 @@ dnl 1.10.9 (who knows) => 1009 dnl dnl sets GST_LT_LDFLAGS -AS_LIBTOOL(GST, 1601, 0, 1601) +AS_LIBTOOL(GST, 1602, 0, 1602) dnl *** required versions of GStreamer stuff *** -GST_REQ=1.16.1 -GSTPB_REQ=1.16.1 -GSTPG_REQ=1.16.1 -GSTPD_REQ=1.16.1 +GST_REQ=1.16.2 +GSTPB_REQ=1.16.2 +GSTPG_REQ=1.16.2 +GSTPD_REQ=1.16.2 dnl *** autotools stuff **** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/docs/libs/html/GstRTSPClient.html new/gst-rtsp-server-1.16.2/docs/libs/html/GstRTSPClient.html --- old/gst-rtsp-server-1.16.1/docs/libs/html/GstRTSPClient.html 2019-09-23 12:17:44.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/docs/libs/html/GstRTSPClient.html 2019-12-03 12:16:07.000000000 +0100 @@ -819,7 +819,7 @@ <a name="GstRTSPClientSendFunc"></a><h3>GstRTSPClientSendFunc ()</h3> <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <span class="c_punctuation">(</span>*GstRTSPClientSendFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="GstRTSPClient.html" title="GstRTSPClient"><span class="type">GstRTSPClient</span></a> *client</code></em>, - <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>, + <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GstRTSPMessage-struct"><span class="type">GstRTSPMessage</span></a> *message</code></em>, <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> close</code></em>, <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre> <p>This callback is called when <em class="parameter"><code>client</code></em> @@ -843,7 +843,7 @@ </tr> <tr> <td class="parameter_name"><p>message</p></td> -<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GstRTSPMessage"><span class="type">GstRTSPMessage</span></a></p></td> +<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GstRTSPMessage-struct"><span class="type">GstRTSPMessage</span></a></p></td> <td class="parameter_annotations"> </td> </tr> <tr> @@ -924,7 +924,7 @@ <a name="GstRTSPClientSendMessagesFunc"></a><h3>GstRTSPClientSendMessagesFunc ()</h3> <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a> <span class="c_punctuation">(</span>*GstRTSPClientSendMessagesFunc<span class="c_punctuation">)</span> (<em class="parameter"><code><a class="link" href="GstRTSPClient.html" title="GstRTSPClient"><span class="type">GstRTSPClient</span></a> *client</code></em>, - <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *messages</code></em>, + <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GstRTSPMessage-struct"><span class="type">GstRTSPMessage</span></a> *messages</code></em>, <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#guint"><span class="type">guint</span></a> n_messages</code></em>, <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> close</code></em>, <em class="parameter"><code><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a> user_data</code></em>);</pre> @@ -949,7 +949,7 @@ </tr> <tr> <td class="parameter_name"><p>messages</p></td> -<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GstRTSPMessage"><span class="type">GstRTSPMessage</span></a></p></td> +<td class="parameter_description"><p><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GstRTSPMessage-struct"><span class="type">GstRTSPMessage</span></a></p></td> <td class="parameter_annotations"> </td> </tr> <tr> @@ -1038,7 +1038,7 @@ <a name="gst-rtsp-client-handle-message"></a><h3>gst_rtsp_client_handle_message ()</h3> <pre class="programlisting"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRtspdefs.html#GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a> gst_rtsp_client_handle_message (<em class="parameter"><code><a class="link" href="GstRTSPClient.html" title="GstRTSPClient"><span class="type">GstRTSPClient</span></a> *client</code></em>, - <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>);</pre> + <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GstRTSPMessage-struct"><span class="type">GstRTSPMessage</span></a> *message</code></em>);</pre> <p>Let the client handle <em class="parameter"><code>message</code></em> .</p> <div class="refsect3"> @@ -1057,7 +1057,7 @@ </tr> <tr> <td class="parameter_name"><p>message</p></td> -<td class="parameter_description"><p>an <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GstRTSPMessage"><span class="type">GstRTSPMessage</span></a>. </p></td> +<td class="parameter_description"><p>an <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GstRTSPMessage-struct"><span class="type">GstRTSPMessage</span></a>. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> </tbody> @@ -1074,10 +1074,10 @@ <pre class="programlisting"><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRtspdefs.html#GstRTSPResult"><span class="returnvalue">GstRTSPResult</span></a> gst_rtsp_client_send_message (<em class="parameter"><code><a class="link" href="GstRTSPClient.html" title="GstRTSPClient"><span class="type">GstRTSPClient</span></a> *client</code></em>, <em class="parameter"><code><a class="link" href="GstRTSPSession.html" title="GstRTSPSession"><span class="type">GstRTSPSession</span></a> *session</code></em>, - <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> *message</code></em>);</pre> + <em class="parameter"><code><a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GstRTSPMessage-struct"><span class="type">GstRTSPMessage</span></a> *message</code></em>);</pre> <p>Send a message message to the remote end. <em class="parameter"><code>message</code></em> must be a -<a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GST-RTSP-MESSAGE-REQUEST:CAPS"><span class="type">GST_RTSP_MESSAGE_REQUEST</span></a> or a <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GST-RTSP-MESSAGE-RESPONSE:CAPS"><span class="type">GST_RTSP_MESSAGE_RESPONSE</span></a>.</p> +<a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GST-RTSP-MESSAGE-REQUEST:CAPS"><span class="type">GST_RTSP_MESSAGE_REQUEST</span></a> or a <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GST-RTSP-MESSAGE-RESPONSE:CAPS"><span class="type">GST_RTSP_MESSAGE_RESPONSE</span></a>.</p> <div class="refsect3"> <a name="gst-rtsp-client-send-message.parameters"></a><h4>Parameters</h4> <div class="informaltable"><table class="informaltable" width="100%" border="0"> @@ -1100,7 +1100,7 @@ </tr> <tr> <td class="parameter_name"><p>message</p></td> -<td class="parameter_description"><p>The <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#GstRTSPMessage"><span class="type">GstRTSPMessage</span></a> to send. </p></td> +<td class="parameter_description"><p>The <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#GstRTSPMessage-struct"><span class="type">GstRTSPMessage</span></a> to send. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>]</span></td> </tr> </tbody> @@ -1320,13 +1320,13 @@ <tr> <td class="struct_member_name"><p><em class="structfield"><code><a name="GstRTSPClientClass.params-set"></a>params_set</code></em> ()</p></td> <td class="struct_member_description"><p>set parameters. This function should also initialize the -RTSP response(ctx->response) via a call to <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#gst-rtsp-message-init-response"><code class="function">gst_rtsp_message_init_response()</code></a></p></td> +RTSP response(ctx->response) via a call to <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#gst-rtsp-message-init-response"><code class="function">gst_rtsp_message_init_response()</code></a></p></td> <td class="struct_member_annotations"> </td> </tr> <tr> <td class="struct_member_name"><p><em class="structfield"><code><a name="GstRTSPClientClass.params-get"></a>params_get</code></em> ()</p></td> <td class="struct_member_description"><p>get parameters. This function should also initialize the -RTSP response(ctx->response) via a call to <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPMessage.html#gst-rtsp-message-init-response"><code class="function">gst_rtsp_message_init_response()</code></a></p></td> +RTSP response(ctx->response) via a call to <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPMessage.html#gst-rtsp-message-init-response"><code class="function">gst_rtsp_message_init_response()</code></a></p></td> <td class="struct_member_annotations"> </td> </tr> <tr> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/docs/libs/html/GstRTSPMediaFactory.html new/gst-rtsp-server-1.16.2/docs/libs/html/GstRTSPMediaFactory.html --- old/gst-rtsp-server-1.16.1/docs/libs/html/GstRTSPMediaFactory.html 2019-09-23 12:17:44.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/docs/libs/html/GstRTSPMediaFactory.html 2019-12-03 12:16:07.000000000 +0100 @@ -1399,7 +1399,7 @@ <a name="gst-rtsp-media-factory-construct"></a><h3>gst_rtsp_media_factory_construct ()</h3> <pre class="programlisting"><a class="link" href="GstRTSPMedia.html" title="GstRTSPMedia"><span class="returnvalue">GstRTSPMedia</span></a> * gst_rtsp_media_factory_construct (<em class="parameter"><code><a class="link" href="GstRTSPMediaFactory.html" title="GstRTSPMediaFactory"><span class="type">GstRTSPMediaFactory</span></a> *factory</code></em>, - <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPUrl.html#GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre> + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPUrl.html#GstRTSPUrl-struct"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre> <p>Construct the media object and create its streams. Implementations should create the needed gstreamer elements and add them to the result object. No state changes should be performed on them yet.</p> @@ -1440,7 +1440,7 @@ <a name="gst-rtsp-media-factory-create-element"></a><h3>gst_rtsp_media_factory_create_element ()</h3> <pre class="programlisting"><a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct"><span class="returnvalue">GstElement</span></a> * gst_rtsp_media_factory_create_element (<em class="parameter"><code><a class="link" href="GstRTSPMediaFactory.html" title="GstRTSPMediaFactory"><span class="type">GstRTSPMediaFactory</span></a> *factory</code></em>, - <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPUrl.html#GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre> + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPUrl.html#GstRTSPUrl-struct"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre> <p>Construct and return a <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstElement.html#GstElement-struct"><span class="type">GstElement</span></a> that is a <a href="/usr/share/gtk-doc/html/gstreamer-1.0/GstBin.html#GstBin-struct"><span class="type">GstBin</span></a> containing the elements to use for streaming the media.</p> <p>The bin should contain payloaders pay%d for each stream. The default diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/docs/libs/html/GstRTSPMountPoints.html new/gst-rtsp-server-1.16.2/docs/libs/html/GstRTSPMountPoints.html --- old/gst-rtsp-server-1.16.1/docs/libs/html/GstRTSPMountPoints.html 2019-09-23 12:17:44.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/docs/libs/html/GstRTSPMountPoints.html 2019-12-03 12:16:07.000000000 +0100 @@ -266,7 +266,7 @@ <a name="gst-rtsp-mount-points-make-path"></a><h3>gst_rtsp_mount_points_make_path ()</h3> <pre class="programlisting"><a href="/usr/share/gtk-doc/html/glib/glib-Basic-Types.html#gchar"><span class="returnvalue">gchar</span></a> * gst_rtsp_mount_points_make_path (<em class="parameter"><code><a class="link" href="GstRTSPMountPoints.html" title="GstRTSPMountPoints"><span class="type">GstRTSPMountPoints</span></a> *mounts</code></em>, - <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPUrl.html#GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre> + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPUrl.html#GstRTSPUrl-struct"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre> <p>Make a path string from <em class="parameter"><code>url</code></em> .</p> <div class="refsect3"> @@ -285,7 +285,7 @@ </tr> <tr> <td class="parameter_name"><p>url</p></td> -<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPUrl.html#GstRTSPUrl"><span class="type">GstRTSPUrl</span></a></p></td> +<td class="parameter_description"><p>a <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPUrl.html#GstRTSPUrl-struct"><span class="type">GstRTSPUrl</span></a></p></td> <td class="parameter_annotations"> </td> </tr> </tbody> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/docs/libs/html/GstRTSPStreamTransport.html new/gst-rtsp-server-1.16.2/docs/libs/html/GstRTSPStreamTransport.html --- old/gst-rtsp-server-1.16.1/docs/libs/html/GstRTSPStreamTransport.html 2019-09-23 12:17:44.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/docs/libs/html/GstRTSPStreamTransport.html 2019-12-03 12:16:07.000000000 +0100 @@ -72,7 +72,7 @@ </td> </tr> <tr> -<td class="function_type">const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPUrl.html#GstRTSPUrl"><span class="returnvalue">GstRTSPUrl</span></a> * +<td class="function_type">const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPUrl.html#GstRTSPUrl-struct"><span class="returnvalue">GstRTSPUrl</span></a> * </td> <td class="function_name"> <a class="link" href="GstRTSPStreamTransport.html#gst-rtsp-stream-transport-get-url" title="gst_rtsp_stream_transport_get_url ()">gst_rtsp_stream_transport_get_url</a> <span class="c_punctuation">()</span> @@ -387,7 +387,7 @@ <hr> <div class="refsect2"> <a name="gst-rtsp-stream-transport-get-url"></a><h3>gst_rtsp_stream_transport_get_url ()</h3> -<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPUrl.html#GstRTSPUrl"><span class="returnvalue">GstRTSPUrl</span></a> * +<pre class="programlisting">const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPUrl.html#GstRTSPUrl-struct"><span class="returnvalue">GstRTSPUrl</span></a> * gst_rtsp_stream_transport_get_url (<em class="parameter"><code><a class="link" href="GstRTSPStreamTransport.html" title="GstRTSPStreamTransport"><span class="type">GstRTSPStreamTransport</span></a> *trans</code></em>);</pre> <p>Get the url configured in <em class="parameter"><code>trans</code></em> .</p> @@ -420,7 +420,7 @@ <a name="gst-rtsp-stream-transport-set-url"></a><h3>gst_rtsp_stream_transport_set_url ()</h3> <pre class="programlisting"><span class="returnvalue">void</span> gst_rtsp_stream_transport_set_url (<em class="parameter"><code><a class="link" href="GstRTSPStreamTransport.html" title="GstRTSPStreamTransport"><span class="type">GstRTSPStreamTransport</span></a> *trans</code></em>, - <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPUrl.html#GstRTSPUrl"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre> + <em class="parameter"><code>const <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPUrl.html#GstRTSPUrl-struct"><span class="type">GstRTSPUrl</span></a> *url</code></em>);</pre> <p>Set <em class="parameter"><code>url</code></em> as the client url.</p> <div class="refsect3"> @@ -439,7 +439,7 @@ </tr> <tr> <td class="parameter_name"><p>url</p></td> -<td class="parameter_description"><p>a client <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/gst-plugins-base-libs-GstRTSPUrl.html#GstRTSPUrl"><span class="type">GstRTSPUrl</span></a>. </p></td> +<td class="parameter_description"><p>a client <a href="/usr/share/gtk-doc/html/gst-plugins-base-libs-1.0/GstRTSPUrl.html#GstRTSPUrl-struct"><span class="type">GstRTSPUrl</span></a>. </p></td> <td class="parameter_annotations"><span class="annotation">[<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="NULL may be passed as the value in, out, in-out; or as a return value."><span class="acronym">nullable</span></acronym>]</span></td> </tr> </tbody> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/docs/libs/html/index.html new/gst-rtsp-server-1.16.2/docs/libs/html/index.html --- old/gst-rtsp-server-1.16.1/docs/libs/html/index.html 2019-09-23 12:17:44.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/docs/libs/html/index.html 2019-12-03 12:16:07.000000000 +0100 @@ -15,7 +15,7 @@ <div> <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GStreamer RTSP Server Reference Manual</p></th></tr></table></div> <div><p class="releaseinfo"> - for GStreamer RTSP Server 1.16.1 + for GStreamer RTSP Server 1.16.2 </p></div> </div> <hr> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/gst/rtsp-server/rtsp-client.c new/gst-rtsp-server-1.16.2/gst/rtsp-server/rtsp-client.c --- old/gst-rtsp-server-1.16.1/gst/rtsp-server/rtsp-client.c 2019-09-21 19:58:44.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/gst/rtsp-server/rtsp-client.c 2019-12-02 21:04:18.000000000 +0100 @@ -202,6 +202,7 @@ GstRTSPContext * ctx); static gboolean pre_signal_accumulator (GSignalInvocationHint * ihint, GValue * return_accu, const GValue * handler_return, gpointer data); +gboolean gst_rtsp_media_has_completed_sender (GstRTSPMedia * media); G_DEFINE_TYPE_WITH_PRIVATE (GstRTSPClient, gst_rtsp_client, G_TYPE_OBJECT); @@ -1741,7 +1742,7 @@ GstRTSPResult res; GstRTSPState rtspstate; GstRTSPRangeUnit unit = GST_RTSP_RANGE_NPT; - gchar *path, *rtpinfo; + gchar *path, *rtpinfo = NULL; gint matched; gchar *seek_style = NULL; GstRTSPStatusCode sig_result; @@ -1830,7 +1831,8 @@ } /* grab RTPInfo from the media now */ - if (!(rtpinfo = gst_rtsp_session_media_get_rtpinfo (sessmedia))) + if (gst_rtsp_media_has_completed_sender (media) && + !(rtpinfo = gst_rtsp_session_media_get_rtpinfo (sessmedia))) goto rtp_info_error; /* construct the response now */ @@ -1839,7 +1841,9 @@ gst_rtsp_status_as_text (code), ctx->request); /* add the RTP-Info header */ - gst_rtsp_message_take_header (ctx->response, GST_RTSP_HDR_RTP_INFO, rtpinfo); + if (rtpinfo) + gst_rtsp_message_take_header (ctx->response, GST_RTSP_HDR_RTP_INFO, + rtpinfo); if (seek_style) gst_rtsp_message_add_header (ctx->response, GST_RTSP_HDR_SEEK_STYLE, seek_style); @@ -3091,16 +3095,18 @@ n_streams = gst_rtsp_media_n_streams (media); for (i = 0; i < n_streams; i++) { GstRTSPStream *stream = gst_rtsp_media_get_stream (media, i); - gchar *location = - g_strdup_printf ("rtsp://%s%s:8554/stream=%d", priv->server_ip, path, - i); - gchar *keymgmt = stream_make_keymgmt (client, location, stream); + gchar *uri, *location, *keymgmt; + + uri = gst_rtsp_url_get_request_uri (ctx->uri); + location = g_strdup_printf ("%s/stream=%d", uri, i); + keymgmt = stream_make_keymgmt (client, location, stream); if (keymgmt) gst_rtsp_message_take_header (ctx->response, GST_RTSP_HDR_KEYMGMT, keymgmt); g_free (location); + g_free (uri); } /* we suspend after the announce */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/gst/rtsp-server/rtsp-media.c new/gst-rtsp-server-1.16.2/gst/rtsp-server/rtsp-media.c --- old/gst-rtsp-server-1.16.1/gst/rtsp-server/rtsp-media.c 2019-09-21 19:58:44.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/gst/rtsp-server/rtsp-media.c 2019-12-02 21:04:18.000000000 +0100 @@ -237,6 +237,9 @@ static guint gst_rtsp_media_signals[SIGNAL_LAST] = { 0 }; static gboolean check_complete (GstRTSPMedia * media); +gboolean gst_rtsp_media_has_completed_sender (GstRTSPMedia * media); + +static gboolean gst_rtsp_media_is_receive_only (GstRTSPMedia * media); #define C_ENUM(v) ((gint) v) @@ -731,23 +734,24 @@ return rtpbin; } +/* Must be called with priv->lock */ static gboolean is_receive_only (GstRTSPMedia * media) { GstRTSPMediaPrivate *priv = media->priv; - gboolean recive_only = TRUE; + gboolean receive_only = TRUE; guint i; for (i = 0; i < priv->streams->len; i++) { GstRTSPStream *stream = g_ptr_array_index (priv->streams, i); if (gst_rtsp_stream_is_sender (stream) || !gst_rtsp_stream_is_receiver (stream)) { - recive_only = FALSE; + receive_only = FALSE; break; } } - return recive_only; + return receive_only; } /* must be called with state lock */ @@ -757,6 +761,7 @@ GstQuery *query; GstRTSPMediaPrivate *priv = media->priv; + g_mutex_lock (&priv->lock); /* Update the seekable state of the pipeline in case it changed */ if (is_receive_only (media)) { /* TODO: Seeking for "receive-only"? */ @@ -770,6 +775,7 @@ if (gst_rtsp_stream_get_publish_clock_mode (stream) == GST_RTSP_PUBLISH_CLOCK_MODE_CLOCK_AND_OFFSET) { priv->seekable = -1; + g_mutex_unlock (&priv->lock); return; } } @@ -796,7 +802,7 @@ } GST_DEBUG_OBJECT (media, "seekable:%" G_GINT64_FORMAT, priv->seekable); - + g_mutex_unlock (&priv->lock); gst_query_unref (query); } @@ -818,7 +824,7 @@ return FALSE; } -/* must be called with state lock */ +/* must be called with state lock and private lock */ static void collect_media_stats (GstRTSPMedia * media) { @@ -826,8 +832,9 @@ gint64 position = 0, stop = -1; if (priv->status != GST_RTSP_MEDIA_STATUS_PREPARED && - priv->status != GST_RTSP_MEDIA_STATUS_PREPARING) + priv->status != GST_RTSP_MEDIA_STATUS_PREPARING) { return; + } priv->range.unit = GST_RTSP_RANGE_NPT; @@ -887,8 +894,9 @@ priv->range.max.seconds = ((gdouble) stop) / GST_SECOND; priv->range_stop = stop; } - + g_mutex_unlock (&priv->lock); check_seekable (media); + g_mutex_lock (&priv->lock); } } @@ -2518,9 +2526,8 @@ priv->status != GST_RTSP_MEDIA_STATUS_SUSPENDED) goto not_prepared; - g_mutex_lock (&priv->lock); - /* Update the range value with current position/duration */ + g_mutex_lock (&priv->lock); collect_media_stats (media); /* make copy */ @@ -2554,6 +2561,27 @@ } } +gboolean +gst_rtsp_media_has_completed_sender (GstRTSPMedia * media) +{ + GstRTSPMediaPrivate *priv = media->priv; + gboolean sender = FALSE; + guint i; + + g_mutex_lock (&priv->lock); + for (i = 0; i < priv->streams->len; i++) { + GstRTSPStream *stream = g_ptr_array_index (priv->streams, i); + if (gst_rtsp_stream_is_complete (stream) && + gst_rtsp_stream_is_sender (stream)) { + sender = TRUE; + break; + } + } + g_mutex_unlock (&priv->lock); + + return sender; +} + static void stream_update_blocked (GstRTSPStream * stream, GstRTSPMedia * media) { @@ -2910,10 +2938,13 @@ GST_DEBUG ("%p: went from %s to %s (pending %s)", media, gst_element_state_get_name (old), gst_element_state_get_name (new), gst_element_state_get_name (pending)); - if (priv->no_more_pads_pending == 0 && is_receive_only (media) && - old == GST_STATE_READY && new == GST_STATE_PAUSED) { + if (priv->no_more_pads_pending == 0 + && gst_rtsp_media_is_receive_only (media) && old == GST_STATE_READY + && new == GST_STATE_PAUSED) { GST_INFO ("%p: went to PAUSED, prepared now", media); + g_mutex_lock (&priv->lock); collect_media_stats (media); + g_mutex_unlock (&priv->lock); if (priv->status == GST_RTSP_MEDIA_STATUS_PREPARING) gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_PREPARED); @@ -2995,7 +3026,9 @@ if (priv->blocked && media_streams_blocking (media) && priv->no_more_pads_pending == 0) { GST_DEBUG_OBJECT (GST_MESSAGE_SRC (message), "media is blocking"); + g_mutex_lock (&priv->lock); collect_media_stats (media); + g_mutex_unlock (&priv->lock); if (priv->status == GST_RTSP_MEDIA_STATUS_PREPARING) gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_PREPARED); @@ -3385,7 +3418,7 @@ g_object_set_data (G_OBJECT (elem), "gst-rtsp-dynpay-handlers", handlers); } - if (priv->nb_dynamic_elements == 0 && is_receive_only (media)) { + if (priv->nb_dynamic_elements == 0 && gst_rtsp_media_is_receive_only (media)) { /* If we are receive_only (RECORD), do not try to preroll, to avoid * a second ASYNC state change failing */ priv->is_live = TRUE; @@ -4212,7 +4245,7 @@ switch (priv->suspend_mode) { case GST_RTSP_SUSPEND_MODE_NONE: - if (is_receive_only (media)) + if (gst_rtsp_media_is_receive_only (media)) break; if (media_streams_blocking (media)) { gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_PREPARING); @@ -4451,7 +4484,7 @@ /* we just activated the first media, do the playing state change */ if (old_active == 0 && activate) do_state = TRUE; - /* if we have no more active media and prepare count is not indicate + /* if we have no more active media and prepare count is not indicate * that there are new session/sessions ongoing, * do the downward state changes */ else if (priv->n_active == 0 && priv->prepare_count <= 1) @@ -4472,9 +4505,11 @@ /* remember where we are */ if (state != GST_STATE_NULL && (state == GST_STATE_PAUSED || - old_active != priv->n_active)) + old_active != priv->n_active)) { + g_mutex_lock (&priv->lock); collect_media_stats (media); - + g_mutex_unlock (&priv->lock); + } g_rec_mutex_unlock (&priv->state_lock); return TRUE; @@ -4639,3 +4674,16 @@ return TRUE; } + +gboolean +gst_rtsp_media_is_receive_only (GstRTSPMedia * media) +{ + GstRTSPMediaPrivate *priv = media->priv; + gboolean receive_only; + + g_mutex_lock (&priv->lock); + receive_only = is_receive_only (media); + g_mutex_unlock (&priv->lock); + + return receive_only; +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/gst-rtsp-server.doap new/gst-rtsp-server-1.16.2/gst-rtsp-server.doap --- old/gst-rtsp-server-1.16.1/gst-rtsp-server.doap 2019-09-23 12:16:58.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/gst-rtsp-server.doap 2019-12-03 12:15:20.000000000 +0100 @@ -32,6 +32,16 @@ <release> <Version> + <revision>1.16.2</revision> + <branch>1.16</branch> + <name></name> + <created>2019-12-03</created> + <file-release rdf:resource="https://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.16.2.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.16.1</revision> <branch>1.16</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/ltmain.sh new/gst-rtsp-server-1.16.2/ltmain.sh --- old/gst-rtsp-server-1.16.1/ltmain.sh 2019-09-23 12:17:04.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/ltmain.sh 2019-12-03 12:15:26.000000000 +0100 @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-10" +VERSION="2.4.6 Debian-2.4.6-11" package_revision=2.4.6 @@ -2141,7 +2141,7 @@ compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.6-10 + version: $progname $scriptversion Debian-2.4.6-11 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/meson.build new/gst-rtsp-server-1.16.2/meson.build --- old/gst-rtsp-server-1.16.1/meson.build 2019-09-23 12:16:58.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/meson.build 2019-12-03 12:15:20.000000000 +0100 @@ -1,5 +1,5 @@ project('gst-rtsp-server', 'c', - version : '1.16.1', + version : '1.16.2', meson_version : '>= 0.47', default_options : ['warning_level=1', 'buildtype=debugoptimized']) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.16.1/tests/check/gst/client.c new/gst-rtsp-server-1.16.2/tests/check/gst/client.c --- old/gst-rtsp-server-1.16.1/tests/check/gst/client.c 2019-09-21 19:58:44.000000000 +0200 +++ new/gst-rtsp-server-1.16.2/tests/check/gst/client.c 2019-12-02 21:04:18.000000000 +0100 @@ -55,6 +55,51 @@ } static gboolean +test_response_play_200 (GstRTSPClient * client, GstRTSPMessage * response, + gboolean close, gpointer user_data) +{ + GstRTSPStatusCode code; + const gchar *reason; + GstRTSPVersion version; + gchar *str; + gchar **session_hdr_params; + gchar *pattern; + + fail_unless_equals_int (gst_rtsp_message_get_type (response), + GST_RTSP_MESSAGE_RESPONSE); + + fail_unless (gst_rtsp_message_parse_response (response, &code, &reason, + &version) + == GST_RTSP_OK); + fail_unless_equals_int (code, GST_RTSP_STS_OK); + fail_unless_equals_string (reason, "OK"); + fail_unless_equals_int (version, GST_RTSP_VERSION_1_0); + + /* Verify mandatory headers according to RFC 2326 */ + /* verify mandatory CSeq header */ + fail_unless (gst_rtsp_message_get_header (response, GST_RTSP_HDR_CSEQ, &str, + 0) == GST_RTSP_OK); + fail_unless (atoi (str) == cseq++); + + /* verify mandatory Session header */ + fail_unless (gst_rtsp_message_get_header (response, GST_RTSP_HDR_SESSION, + &str, 0) == GST_RTSP_OK); + session_hdr_params = g_strsplit (str, ";", -1); + fail_unless (session_hdr_params[0] != NULL); + g_strfreev (session_hdr_params); + + /* verify mandatory RTP-Info header */ + fail_unless (gst_rtsp_message_get_header (response, GST_RTSP_HDR_RTP_INFO, + &str, 0) == GST_RTSP_OK); + pattern = g_strdup_printf ("^url=rtsp://.+;seq=[0-9]+;rtptime=[0-9]+"); + fail_unless (g_regex_match_simple (pattern, str, 0, 0), + "GST_RTSP_HDR_RTP_INFO '%s' doesn't match pattern '%s'", str, pattern); + g_free (pattern); + + return TRUE; +} + +static gboolean test_response_400 (GstRTSPClient * client, GstRTSPMessage * response, gboolean close, gpointer user_data) { @@ -1707,7 +1752,55 @@ GST_END_TEST; -static Suite * +GST_START_TEST (test_client_play) +{ + GstRTSPClient *client; + GstRTSPMessage request = { 0, }; + gchar *str; + GstRTSPContext ctx = { NULL }; + + client = setup_multicast_client (1); + + ctx.client = client; + ctx.auth = gst_rtsp_auth_new (); + ctx.token = + gst_rtsp_token_new (GST_RTSP_TOKEN_MEDIA_FACTORY_ROLE, G_TYPE_STRING, + "user", NULL); + gst_rtsp_context_push_current (&ctx); + + fail_unless (gst_rtsp_message_init_request (&request, GST_RTSP_SETUP, + "rtsp://localhost/test/stream=0") == GST_RTSP_OK); + str = g_strdup_printf ("%d", cseq); + gst_rtsp_message_take_header (&request, GST_RTSP_HDR_CSEQ, str); + gst_rtsp_message_add_header (&request, GST_RTSP_HDR_TRANSPORT, + "RTP/AVP;multicast"); + /* destination is from adress pool */ + expected_transport = "RTP/AVP;multicast;destination=233.252.0.1;" + "ttl=1;port=.*;mode=\"PLAY\""; + gst_rtsp_client_set_send_func (client, test_setup_response_200, NULL, NULL); + fail_unless (gst_rtsp_client_handle_message (client, + &request) == GST_RTSP_OK); + gst_rtsp_message_unset (&request); + expected_transport = NULL; + + fail_unless (gst_rtsp_message_init_request (&request, GST_RTSP_PLAY, + "rtsp://localhost/test") == GST_RTSP_OK); + str = g_strdup_printf ("%d", cseq); + gst_rtsp_message_take_header (&request, GST_RTSP_HDR_CSEQ, str); + gst_rtsp_message_add_header (&request, GST_RTSP_HDR_SESSION, session_id); + gst_rtsp_client_set_send_func (client, test_response_play_200, NULL, NULL); + fail_unless (gst_rtsp_client_handle_message (client, + &request) == GST_RTSP_OK); + gst_rtsp_message_unset (&request); + + send_teardown (client); + teardown_client (client); + g_object_unref (ctx.auth); + gst_rtsp_token_unref (ctx.token); + gst_rtsp_context_pop_current (&ctx); +} + +GST_END_TEST static Suite * rtspclient_suite (void) { Suite *s = suite_create ("rtspclient"); @@ -1759,6 +1852,7 @@ tcase_add_test (tc, test_client_multicast_max_ttl_first_client); tcase_add_test (tc, test_client_multicast_max_ttl_second_client); tcase_add_test (tc, test_client_multicast_invalid_ttl); + tcase_add_test (tc, test_client_play); return s; }