Hello community, here is the log from the commit of package gstreamer-rtsp-server for openSUSE:Factory checked in at 2017-02-03 16:27:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/gstreamer-rtsp-server (Old) and /work/SRC/openSUSE:Factory/.gstreamer-rtsp-server.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "gstreamer-rtsp-server" Changes: -------- --- /work/SRC/openSUSE:Factory/gstreamer-rtsp-server/gstreamer-rtsp-server.changes 2017-01-10 10:44:57.370884609 +0100 +++ /work/SRC/openSUSE:Factory/.gstreamer-rtsp-server.new/gstreamer-rtsp-server.changes 2017-02-03 17:42:01.439989403 +0100 @@ -1,0 +2,6 @@ +Mon Jan 30 16:48:37 UTC 2017 - zaitor@opensuse.org + +- Update to version 1.10.3: + + Bugs fixed: bgo#755329, bgo#776343, bgo#776345. + +------------------------------------------------------------------- Old: ---- gst-rtsp-server-1.10.2.tar.xz New: ---- gst-rtsp-server-1.10.3.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gstreamer-rtsp-server.spec ++++++ --- /var/tmp/diff_new_pack.dgRO1T/_old 2017-02-03 17:42:01.783940720 +0100 +++ /var/tmp/diff_new_pack.dgRO1T/_new 2017-02-03 17:42:01.787940154 +0100 @@ -18,7 +18,7 @@ Name: gstreamer-rtsp-server %define _name gst-rtsp-server -Version: 1.10.2 +Version: 1.10.3 Release: 0 Summary: GStreamer-based RTSP server library License: LGPL-2.0+ @@ -27,9 +27,9 @@ Source: http://gstreamer.freedesktop.org/src/gst-rtsp-server/%{_name}-%{version}.tar.xz BuildRequires: gstreamer-plugins-good >= 1.10.0 BuildRequires: pkgconfig(gobject-introspection-1.0) >= 1.31.1 -BuildRequires: pkgconfig(gstreamer-1.0) >= 1.10.0 -BuildRequires: pkgconfig(gstreamer-plugins-bad-1.0) >= 1.10.0 -BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) >= 1.10.0 +BuildRequires: pkgconfig(gstreamer-1.0) >= 1.10.3 +BuildRequires: pkgconfig(gstreamer-plugins-bad-1.0) >= 1.10.3 +BuildRequires: pkgconfig(gstreamer-plugins-base-1.0) >= 1.10.3 BuildRequires: pkgconfig(libcgroup) >= 0.26 BuildRoot: %{_tmppath}/%{name}-%{version}-build ++++++ gst-rtsp-server-1.10.2.tar.xz -> gst-rtsp-server-1.10.3.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/ChangeLog new/gst-rtsp-server-1.10.3/ChangeLog --- old/gst-rtsp-server-1.10.2/ChangeLog 2016-11-29 14:59:15.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/ChangeLog 2017-01-30 14:59:17.000000000 +0100 @@ -1,9 +1,98 @@ +=== release 1.10.3 === + +2017-01-30 Sebastian Dröge <slomo@coaxion.net> + + * configure.ac: + releasing 1.10.3 + +2017-01-19 14:57:19 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtsp-server/rtsp-client.c: + rtsp-client: Also handle the (S|G)ET_PARAMETER case of size==0 || !data as keep-alive + If there is no Content-Length header, no body would be allocated and the + '\0' would also not be appended to the body. + +2017-01-19 14:24:07 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtsp-server/rtsp-client.c: + rtsp-client: Fix handling of keep-alive GET_PARAMETER/SET_PARAMETER + While they logically have 0 bytes length, GstRTSPConnection is appending + a '\0' to everything making the size be 1 instead. + +2017-01-10 08:34:50 +0100 Patricia Muscalu <patricia@axis.com> + + * gst/rtsp-server/rtsp-stream.c: + rtsp-stream: corrected if-statement in _get_server_port() + This bug was accidentally introduced while fixing a segfault + in _get_server_port() function. + https://bugzilla.gnome.org/show_bug.cgi?id=776345 + +2017-01-09 14:12:05 +0100 Patricia Muscalu <patricia@axis.com> + + * gst/rtsp-server/rtsp-stream.c: + * tests/check/gst/stream.c: + rtsp-stream: fixed segmenation fault in _get_server_port() + Calling function gst_rtsp_stream_get_server_port() results in + segmenation fault in the RTP/RTSP/TCP case. + Port that the server will use to receive RTCP makes only + sense in the UDP case, however the function should handle + the TCP case in a nicer way. + https://bugzilla.gnome.org/show_bug.cgi?id=776345 + +2016-12-21 13:41:50 +0100 Patricia Muscalu <patricia@axis.com> + + * gst/rtsp-server/rtsp-stream.c: + * tests/check/gst/rtspserver.c: + rtsp-stream: Fixed TCP transport case + Make sure that the appsink element is actually added to + the bin before trying to link it with the elements in it. + https://bugzilla.gnome.org/show_bug.cgi?id=776343 + +2016-12-01 18:04:34 +0200 Sebastian Dröge <sebastian@centricular.com> + + * gst/rtsp-server/rtsp-media-factory.c: + rtsp-media-factory: Don't create a pipeline for the media pipeline string + We're going to put a pipeline into a pipeline otherwise, which is not + exactly ideal. + +2016-10-25 15:41:28 +0300 Kseniia Vasilchuk <vasilchukkseniia@gmail.com> + + * gst/rtsp-server/rtsp-media.c: + media: Fix race condition around finish_unprepare() if called multiple time + https://bugzilla.gnome.org/show_bug.cgi?id=755329 + +2016-12-02 15:40:09 +0100 Edward Hervey <edward@centricular.com> + + * gst/rtsp-server/rtsp-media.c: + media: Fix pt map caps + Since decryption is handled within rtpbin, all outcoming stream + caps will be application/x-rtp (i.e. regular rtp) + Fixes RECORD with SRTP streams + +2016-12-02 15:38:04 +0100 Edward Hervey <edward@centricular.com> + + * gst/rtsp-server/rtsp-media-factory.c: + media-factory: Create media objects with the proper transport mode + The function called immediately afterwards (collect_streams()) will + need it to work properly + +2016-11-30 14:06:36 +1100 Jan Schmidt <jan@centricular.com> + + * gst/rtsp-sink/gstrtspclientsink.c: + rtspclientsink: Don't leave stale pointer after unref + Fix a warning on shutdown - don't keep a pointer to an + alread-unreffed object. + === release 1.10.2 === -2016-11-29 Sebastian Dröge <slomo@coaxion.net> +2016-11-29 16:22:26 +0200 Sebastian Dröge <sebastian@centricular.com> + * ChangeLog: + * NEWS: + * RELEASE: * configure.ac: - releasing 1.10.2 + * gst-rtsp-server.doap: + Release 1.10.2 2016-11-21 23:29:56 +1100 Matthew Waters <matthew@centricular.com> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/Makefile.in new/gst-rtsp-server-1.10.3/Makefile.in --- old/gst-rtsp-server-1.10.2/Makefile.in 2016-11-29 13:26:05.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/Makefile.in 2017-01-30 12:38:27.000000000 +0100 @@ -194,7 +194,7 @@ $(top_srcdir)/common/cruft.mak $(top_srcdir)/common/po.mak \ $(top_srcdir)/common/release.mak AUTHORS COPYING COPYING.LIB \ ChangeLog INSTALL NEWS README TODO compile config.guess \ - config.sub depcomp install-sh ltmain.sh missing + config.sub install-sh ltmain.sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/NEWS new/gst-rtsp-server-1.10.3/NEWS --- old/gst-rtsp-server-1.10.2/NEWS 2016-11-29 15:00:03.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/NEWS 2017-01-30 15:00:27.000000000 +0100 @@ -1,8 +1,8 @@ # GStreamer 1.10 Release Notes GStreamer 1.10.0 was originally released on 1st November 2016. -The latest bug-fix release in the 1.10 series is [1.10.2](#1.10.2) and was -released on 29 November 2016. +The latest bug-fix release in the 1.10 series is [1.10.3](#1.10.3) and was +released on 30 January 2017. The GStreamer team is proud to announce a new major feature release in the stable 1.x API series of your favourite cross-platform multimedia framework! @@ -13,7 +13,7 @@ See [https://gstreamer.freedesktop.org/releases/1.10/][latest] for the latest version of this document. -*Last updated: Tuesday 29 Nov 2016, 12:30 UTC [(log)][gitlog]* +*Last updated: Monday 30 Jan 2017, 12:00 UTC [(log)][gitlog]* [latest]: https://gstreamer.freedesktop.org/releases/1.10/ [gitlog]: https://cgit.freedesktop.org/gstreamer/www/log/src/htdocs/releases/1.10/rele... @@ -1103,7 +1103,7 @@ ### 1.10.2 -The first 1.10 bug-fix release (1.10.2) was released on 29 November 2016. +The second 1.10 bug-fix release (1.10.2) was released on 29 November 2016. This release only contains bugfixes and it should be safe to update from 1.10.x. #### Major bugfixes in 1.10.2 @@ -1111,7 +1111,9 @@ - Security-relevant bugfix in the FLI/FLX/FLC decoder (CVE-2016-9634, CVE-2016-9635, CVE-2016-9636) - Various fixes for crashes, assertions and other failures on fuzzed input - files (among others, thanks to Hanno Böck for testing and reporting) + files. Among others, thanks to Hanno Böck for testing and reporting + (CVE-2016-9807, CVE-2016-9808, CVE-2016-9809, CVE-2016-9810, CVE-2016-9811, + CVE-2016-9812, CVE-2016-9813). - SAVP/SAVPF profile in gst-rtsp-server works for live streams again, and the correct MIKEY policy message is generated - Further OpenGL related bugfixes @@ -1124,6 +1126,32 @@ [buglist-1.10.2]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VE... +<a name="1.10.3"></a> + +### 1.10.3 + +The third 1.10 bug-fix release (1.10.3) was released on 30 January 2017. +This release only contains bugfixes and it should be safe to update from 1.10.x. + +#### Major bugfixes in 1.10.3 + + - Various fixes for crashes, assertions, deadlocks and memory leaks on fuzzed + input files and in other situations + - Regression fixes for souphttpsrc with redirection tracking and retrying + - Regression fix for gst-rtsp-server not handling TCP-only medias anymore + - Various other bugfixes the RTP/RTSP codebase + - vp8enc works again on 32 bit Windows + - Fixes to Opus PLC handling in the decoder + - Fix for stream corruption in multihandlesink when removing clients + - gst-libav was updated to ffmpeg 3.2.2 + - ... and many, many more! + +For a full list of bugfixes see [Bugzilla][buglist-1.10.3]. Note that this is +not the full list of changes. For the full list of changes please refer to the +GIT logs or ChangeLogs of the particular modules. + +[buglist-1.10.3]: https://bugzilla.gnome.org/buglist.cgi?bug_status=RESOLVED&bug_status=VE... + ## Known Issues - iOS builds with iOS 6 SDK and old C++ STL. You need to select iOS 6 instead @@ -1134,8 +1162,6 @@ - Building applications with Android NDK r13 on Windows does not work. Other platforms and earlier/later versions of the NDK are not affected. [Bug #772842](https://bugzilla.gnome.org/show_bug.cgi?id=772842) -- vp8enc crashes on 32 bit Windows, but was working fine in 1.6. 64 bit Windows is unaffected. - [Bug #763663](https://bugzilla.gnome.org/show_bug.cgi?id=763663) ## Schedule for 1.12 @@ -1144,9 +1170,9 @@ of 1.11/1.12 will happen in the git master branch. The plan for the 1.12 development cycle is yet to be confirmed, but it is -expected that feature freeze will be around early/mid-January, +expected that feature freeze will be around early/mid-February, followed by several 1.11 pre-releases and the new 1.12 stable release -in March. +in April. 1.12 will be backwards-compatible to the stable 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.10.2/RELEASE new/gst-rtsp-server-1.10.3/RELEASE --- old/gst-rtsp-server-1.10.2/RELEASE 2016-11-29 14:59:40.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/RELEASE 2017-01-30 14:59:42.000000000 +0100 @@ -1,7 +1,7 @@ -Release notes for GStreamer RTSP Server Library 1.10.2 +Release notes for GStreamer RTSP Server Library 1.10.3 -The GStreamer team is proud to announce the second bugfix release in the stable +The GStreamer team is proud to announce the third bugfix release in the stable 1.10 release series of your favourite cross-platform multimedia framework! @@ -15,8 +15,9 @@ Bugs fixed in this release - * 765673 : udpsrc error: getsockname failed: could not get local address: Socket operation on non-socket - * 770239 : SAVP doesn't seem to work when restreaming an RTSP source + * 755329 : Race condition around finish_unprepare + * 776343 : gst-rtsp-server: TCP transport does not work + * 776345 : gst-rtsp-server: segmentation fault when trying to get server port in TCP transport case ==== Download ==== @@ -53,7 +54,9 @@ Contributors to this release - * Göran Jönsson - * Matthew Waters - * Tim-Philipp Müller + * Edward Hervey + * Jan Schmidt + * Kseniia Vasilchuk + * Patricia Muscalu + * Sebastian Dröge \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/configure new/gst-rtsp-server-1.10.3/configure --- old/gst-rtsp-server-1.10.2/configure 2016-11-29 13:26:05.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/configure 2017-01-30 12:38:26.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.10.2. +# Generated by GNU Autoconf 2.69 for GStreamer RTSP Server Library 1.10.3. # # 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.10.2' -PACKAGE_STRING='GStreamer RTSP Server Library 1.10.2' +PACKAGE_VERSION='1.10.3' +PACKAGE_STRING='GStreamer RTSP Server Library 1.10.3' PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer' PACKAGE_URL='' @@ -1541,7 +1541,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.10.2 to adapt to many kinds of systems. +`configure' configures GStreamer RTSP Server Library 1.10.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1613,7 +1613,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of GStreamer RTSP Server Library 1.10.2:";; + short | recursive ) echo "Configuration of GStreamer RTSP Server Library 1.10.3:";; esac cat <<_ACEOF @@ -1812,7 +1812,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<_ACEOF -GStreamer RTSP Server Library configure 1.10.2 +GStreamer RTSP Server Library configure 1.10.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2090,7 +2090,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.10.2, which was +It was created by GStreamer RTSP Server Library $as_me 1.10.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -3067,7 +3067,7 @@ # Define the identity of the package. PACKAGE='gst-rtsp-server' - VERSION='1.10.2' + VERSION='1.10.3' cat >>confdefs.h <<_ACEOF @@ -3278,9 +3278,9 @@ - PACKAGE_VERSION_MAJOR=$(echo 1.10.2 | cut -d'.' -f1) - PACKAGE_VERSION_MINOR=$(echo 1.10.2 | cut -d'.' -f2) - PACKAGE_VERSION_MICRO=$(echo 1.10.2 | cut -d'.' -f3) + PACKAGE_VERSION_MAJOR=$(echo 1.10.3 | cut -d'.' -f1) + PACKAGE_VERSION_MINOR=$(echo 1.10.3 | cut -d'.' -f2) + PACKAGE_VERSION_MICRO=$(echo 1.10.3 | cut -d'.' -f3) @@ -3291,7 +3291,7 @@ { $as_echo "$as_me:${as_lineno-$LINENO}: checking nano version" >&5 $as_echo_n "checking nano version... " >&6; } - NANO=$(echo 1.10.2 | cut -d'.' -f4) + NANO=$(echo 1.10.3 | cut -d'.' -f4) if test x"$NANO" = x || test "x$NANO" = "x0" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: 0 (release)" >&5 @@ -8120,10 +8120,10 @@ done - GST_CURRENT=1002 + GST_CURRENT=1003 GST_REVISION=0 - GST_AGE=1002 - GST_LIBVERSION=1002:0:1002 + GST_AGE=1003 + GST_LIBVERSION=1003:0:1003 @@ -18891,7 +18891,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.10.2, which was +This file was extended by GStreamer RTSP Server Library $as_me 1.10.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -18957,7 +18957,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.10.2 +GStreamer RTSP Server Library config.status 1.10.3 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.10.2/configure.ac new/gst-rtsp-server-1.10.3/configure.ac --- old/gst-rtsp-server-1.10.2/configure.ac 2016-11-29 13:26:02.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/configure.ac 2017-01-30 12:20:08.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.10.2], +AC_INIT([GStreamer RTSP Server Library], [1.10.3], [http://bugzilla.gnome.org/enter_bug.cgi?product=GStreamer], [gst-rtsp-server]) AG_GST_INIT @@ -53,7 +53,7 @@ dnl 1.10.9 (who knows) => 1009 dnl dnl sets GST_LT_LDFLAGS -AS_LIBTOOL(GST, 1002, 0, 1002) +AS_LIBTOOL(GST, 1003, 0, 1003) dnl *** required versions of GStreamer stuff *** GST_REQ=1.10.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/docs/libs/html/index.html new/gst-rtsp-server-1.10.3/docs/libs/html/index.html --- old/gst-rtsp-server-1.10.2/docs/libs/html/index.html 2016-11-29 15:00:11.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/docs/libs/html/index.html 2017-01-30 15:00:36.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.10.2 + for GStreamer RTSP Server 1.10.3 </p></div> </div> <hr> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/gst/rtsp-server/rtsp-client.c new/gst-rtsp-server-1.10.3/gst/rtsp-server/rtsp-client.c --- old/gst-rtsp-server-1.10.2/gst/rtsp-server/rtsp-client.c 2016-11-04 18:07:56.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/gst/rtsp-server/rtsp-client.c 2017-01-19 14:03:04.000000000 +0100 @@ -985,8 +985,8 @@ if (res != GST_RTSP_OK) goto bad_request; - if (size == 0) { - /* no body, keep-alive request */ + if (size == 0 || !data || strlen ((char *) data) == 0) { + /* no body (or only '\0'), keep-alive request */ send_generic_response (client, GST_RTSP_STS_OK, ctx); } else { /* there is a body, handle the params */ @@ -1022,8 +1022,8 @@ if (res != GST_RTSP_OK) goto bad_request; - if (size == 0) { - /* no body, keep-alive request */ + if (size == 0 || !data || strlen ((char *) data) == 0) { + /* no body (or only '\0'), keep-alive request */ send_generic_response (client, GST_RTSP_STS_OK, ctx); } else { /* there is a body, handle the params */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/gst/rtsp-server/rtsp-media-factory.c new/gst-rtsp-server-1.10.3/gst/rtsp-server/rtsp-media-factory.c --- old/gst-rtsp-server-1.10.2/gst/rtsp-server/rtsp-media-factory.c 2016-11-04 18:07:22.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/gst/rtsp-server/rtsp-media-factory.c 2016-12-05 10:08:47.000000000 +0100 @@ -1414,7 +1414,9 @@ goto no_launch; /* parse the user provided launch line */ - element = gst_parse_launch (priv->launch, &error); + element = + gst_parse_launch_full (priv->launch, NULL, GST_PARSE_FLAG_PLACE_IN_BIN, + &error); if (element == NULL) goto parse_error; @@ -1467,7 +1469,9 @@ GST_RTSP_MEDIA_FACTORY_UNLOCK (factory); /* create a new empty media */ - media = g_object_new (media_gtype, "element", element, NULL); + media = + g_object_new (media_gtype, "element", element, "transport-mode", + factory->priv->transport_mode, NULL); gst_rtsp_media_collect_streams (media); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/gst/rtsp-server/rtsp-media.c new/gst-rtsp-server-1.10.3/gst/rtsp-server/rtsp-media.c --- old/gst-rtsp-server-1.10.2/gst/rtsp-server/rtsp-media.c 2016-11-04 18:07:22.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/gst/rtsp-server/rtsp-media.c 2016-12-05 10:08:47.000000000 +0100 @@ -3050,6 +3050,10 @@ g_rec_mutex_unlock (&priv->state_lock); set_state (media, GST_STATE_NULL); g_rec_mutex_lock (&priv->state_lock); + + if (priv->status != GST_RTSP_MEDIA_STATUS_UNPREPARING) + return; + remove_fakesink (priv); for (i = 0; i < priv->streams->len; i++) { @@ -3168,6 +3172,7 @@ if (klass->unprepare) success = klass->unprepare (media); } else { + gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_UNPREPARING); finish_unprepare (media); } g_rec_mutex_unlock (&priv->state_lock); @@ -3375,7 +3380,7 @@ } for (i = 0; i < medias_len; i++) { - const gchar *proto, *media_type; + const gchar *proto; const GstSDPMedia *sdp_media = gst_sdp_message_get_media (sdp, i); GstRTSPStream *stream; gint j, formats_len; @@ -3394,16 +3399,12 @@ } if (g_str_equal (proto, "RTP/AVP")) { - media_type = "application/x-rtp"; profile = GST_RTSP_PROFILE_AVP; } else if (g_str_equal (proto, "RTP/SAVP")) { - media_type = "application/x-srtp"; profile = GST_RTSP_PROFILE_SAVP; } else if (g_str_equal (proto, "RTP/AVPF")) { - media_type = "application/x-rtp"; profile = GST_RTSP_PROFILE_AVPF; } else if (g_str_equal (proto, "RTP/SAVPF")) { - media_type = "application/x-srtp"; profile = GST_RTSP_PROFILE_SAVPF; } else { GST_ERROR ("%p: unsupported profile '%s' for stream %d", media, proto, i); @@ -3440,7 +3441,7 @@ gst_sdp_media_attributes_to_caps (sdp_media, caps); s = gst_caps_get_structure (caps, 0); - gst_structure_set_name (s, media_type); + gst_structure_set_name (s, "application/x-rtp"); gst_rtsp_stream_set_pt_map (stream, pt, caps); gst_caps_unref (caps); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/gst/rtsp-server/rtsp-stream.c new/gst-rtsp-server-1.10.3/gst/rtsp-server/rtsp-stream.c --- old/gst-rtsp-server-1.10.2/gst/rtsp-server/rtsp-stream.c 2016-11-29 13:26:02.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/gst/rtsp-server/rtsp-stream.c 2017-01-19 14:03:04.000000000 +0100 @@ -1525,15 +1525,20 @@ priv = stream->priv; g_return_if_fail (priv->joined_bin != NULL); + if (server_port) { + server_port->min = 0; + server_port->max = 0; + } + g_mutex_lock (&priv->lock); if (family == G_SOCKET_FAMILY_IPV4) { - if (server_port) { + if (server_port && priv->server_addr_v4) { server_port->min = priv->server_addr_v4->port; server_port->max = priv->server_addr_v4->port + priv->server_addr_v4->n_ports - 1; } } else { - if (server_port) { + if (server_port && priv->server_addr_v6) { server_port->min = priv->server_addr_v6->port; server_port->max = priv->server_addr_v6->port + priv->server_addr_v6->n_ports - 1; @@ -2462,6 +2467,7 @@ } } else if (is_tcp) { /* only appsink needed, link it to the session */ + gst_bin_add (bin, priv->appsink[i]); pad = gst_element_get_static_pad (priv->appsink[i], "sink"); gst_pad_link (priv->send_src[i], pad); gst_object_unref (pad); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/gst/rtsp-sink/gstrtspclientsink.c new/gst-rtsp-server-1.10.3/gst/rtsp-sink/gstrtspclientsink.c --- old/gst-rtsp-server-1.10.2/gst/rtsp-sink/gstrtspclientsink.c 2016-11-04 18:07:22.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/gst/rtsp-sink/gstrtspclientsink.c 2016-12-05 10:08:47.000000000 +0100 @@ -1559,8 +1559,10 @@ context->stream = NULL; } - if (context->srtcpparams) + if (context->srtcpparams) { gst_caps_unref (context->srtcpparams); + context->srtcpparams = NULL; + } g_free (context->conninfo.location); context->conninfo.location = NULL; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/gst-rtsp-server.doap new/gst-rtsp-server-1.10.3/gst-rtsp-server.doap --- old/gst-rtsp-server-1.10.2/gst-rtsp-server.doap 2016-11-29 13:26:02.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/gst-rtsp-server.doap 2017-01-30 12:25:08.000000000 +0100 @@ -32,6 +32,16 @@ <release> <Version> + <revision>1.10.3</revision> + <branch>1.10</branch> + <name></name> + <created>2017-01-30</created> + <file-release rdf:resource="http://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.10.3.tar.xz" /> + </Version> + </release> + + <release> + <Version> <revision>1.10.2</revision> <branch>1.10</branch> <name></name> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/gst-rtsp.spec new/gst-rtsp-server-1.10.3/gst-rtsp.spec --- old/gst-rtsp-server-1.10.2/gst-rtsp.spec 2016-11-29 13:26:07.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/gst-rtsp.spec 2017-01-30 12:38:29.000000000 +0100 @@ -1,7 +1,7 @@ %define gst_majorminor 1.0 Name: gstreamer-rtsp-server -Version: 1.10.2 +Version: 1.10.3 Release: 1%{?dist} Summary: GStreamer based RTSP server Vendor: Collabora Multimedia diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/tests/check/gst/rtspserver.c new/gst-rtsp-server-1.10.3/tests/check/gst/rtspserver.c --- old/gst-rtsp-server-1.10.2/tests/check/gst/rtspserver.c 2016-11-04 18:07:22.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/tests/check/gst/rtspserver.c 2016-12-22 13:38:57.000000000 +0100 @@ -191,6 +191,40 @@ GST_DEBUG ("rtsp server listening on port %d", test_port); } +static void +start_tcp_server (void) +{ + GstRTSPMountPoints *mounts; + gchar *service; + GstRTSPMediaFactory *factory; + + mounts = gst_rtsp_server_get_mount_points (server); + + factory = gst_rtsp_media_factory_new (); + + gst_rtsp_media_factory_set_protocols (factory, GST_RTSP_LOWER_TRANS_TCP); + gst_rtsp_media_factory_set_launch (factory, + "( " VIDEO_PIPELINE " " AUDIO_PIPELINE " )"); + gst_rtsp_mount_points_add_factory (mounts, TEST_MOUNT_POINT, factory); + g_object_unref (mounts); + + /* set port to any */ + gst_rtsp_server_set_service (server, "0"); + + /* attach to default main context */ + source_id = gst_rtsp_server_attach (server, NULL); + fail_if (source_id == 0); + + /* get port */ + service = gst_rtsp_server_get_service (server); + test_port = atoi (service); + fail_unless (test_port != 0); + g_free (service); + + GST_DEBUG ("rtsp server listening on port %d", test_port); + +} + /* start the testing rtsp server for RECORD mode */ static GstRTSPMediaFactory * start_record_server (const gchar * launch_line) @@ -296,6 +330,7 @@ read_response (GstRTSPConnection * conn) { GstRTSPMessage *response = NULL; + GstRTSPMsgType type; if (gst_rtsp_message_new (&response) != GST_RTSP_OK) { GST_DEBUG ("failed to create response object"); @@ -306,8 +341,8 @@ gst_rtsp_message_free (response); return NULL; } - fail_unless (gst_rtsp_message_get_type (response) == - GST_RTSP_MESSAGE_RESPONSE); + type = gst_rtsp_message_get_type (response); + fail_unless (type == GST_RTSP_MESSAGE_RESPONSE || type == GST_RTSP_MESSAGE_DATA); return response; } @@ -325,6 +360,7 @@ GstRTSPMessage *response; GstRTSPStatusCode code; gchar *value; + GstRTSPMsgType msg_type; /* create request */ request = create_request (conn, method, control); @@ -351,6 +387,19 @@ /* read response */ response = read_response (conn); + fail_unless (response != NULL); + + msg_type = gst_rtsp_message_get_type (response); + + if (msg_type == GST_RTSP_MESSAGE_DATA) { + do { + gst_rtsp_message_free (response); + response = read_response (conn); + msg_type = gst_rtsp_message_get_type (response); + } while (msg_type == GST_RTSP_MESSAGE_DATA); + } + + fail_unless (msg_type == GST_RTSP_MESSAGE_RESPONSE); /* check status line */ gst_rtsp_message_parse_response (response, &code, NULL, NULL); @@ -1105,6 +1154,76 @@ GST_END_TEST; +GST_START_TEST (test_play_tcp) +{ + GstRTSPConnection *conn; + GstSDPMessage *sdp_message = NULL; + const GstSDPMedia *sdp_media; + const gchar *video_control; + const gchar *audio_control; + GstRTSPRange client_ports = { 0 }; + gchar *session = NULL; + GstRTSPTransport *video_transport = NULL; + GstRTSPTransport *audio_transport = NULL; + + start_tcp_server (); + + conn = connect_to_server (test_port, TEST_MOUNT_POINT); + + /* send DESCRIBE request */ + sdp_message = do_describe (conn, TEST_MOUNT_POINT); + + /* get control strings from DESCRIBE response */ + fail_unless (gst_sdp_message_medias_len (sdp_message) == 2); + sdp_media = gst_sdp_message_get_media (sdp_message, 0); + video_control = gst_sdp_media_get_attribute_val (sdp_media, "control"); + sdp_media = gst_sdp_message_get_media (sdp_message, 1); + audio_control = gst_sdp_media_get_attribute_val (sdp_media, "control"); + + get_client_ports (&client_ports); + + /* send SETUP request for the first media */ + fail_unless (do_setup_full (conn, video_control, GST_RTSP_LOWER_TRANS_TCP, + &client_ports, NULL, &session, &video_transport, + NULL) == GST_RTSP_STS_OK); + + /* check response from SETUP */ + fail_unless (video_transport->trans == GST_RTSP_TRANS_RTP); + fail_unless (video_transport->profile == GST_RTSP_PROFILE_AVP); + fail_unless (video_transport->lower_transport == GST_RTSP_LOWER_TRANS_TCP); + fail_unless (video_transport->mode_play); + gst_rtsp_transport_free (video_transport); + + /* send SETUP request for the second media */ + fail_unless (do_setup_full (conn, audio_control, GST_RTSP_LOWER_TRANS_TCP, + &client_ports, NULL, &session, &audio_transport, + NULL) == GST_RTSP_STS_OK); + + /* check response from SETUP */ + fail_unless (audio_transport->trans == GST_RTSP_TRANS_RTP); + fail_unless (audio_transport->profile == GST_RTSP_PROFILE_AVP); + fail_unless (audio_transport->lower_transport == GST_RTSP_LOWER_TRANS_TCP); + fail_unless (audio_transport->mode_play); + gst_rtsp_transport_free (audio_transport); + + /* send PLAY request and check that we get 200 OK */ + fail_unless (do_simple_request (conn, GST_RTSP_PLAY, + session)== GST_RTSP_STS_OK); + + /* send TEARDOWN request and check that we get 200 OK */ + fail_unless (do_simple_request (conn, GST_RTSP_TEARDOWN, + session) == GST_RTSP_STS_OK); + + /* clean up and iterate so the clean-up can finish */ + g_free (session); + gst_sdp_message_free (sdp_message); + gst_rtsp_connection_free (conn); + stop_server (); + iterate (); +} + +GST_END_TEST; + GST_START_TEST (test_play_without_session) { GstRTSPConnection *conn; @@ -1992,6 +2111,7 @@ tcase_add_test (tc, test_setup_with_require_header); tcase_add_test (tc, test_setup_non_existing_stream); tcase_add_test (tc, test_play); + tcase_add_test (tc, test_play_tcp); tcase_add_test (tc, test_play_without_session); tcase_add_test (tc, test_bind_already_in_use); tcase_add_test (tc, test_play_multithreaded); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/gst-rtsp-server-1.10.2/tests/check/gst/stream.c new/gst-rtsp-server-1.10.3/tests/check/gst/stream.c --- old/gst-rtsp-server-1.10.2/tests/check/gst/stream.c 2016-11-04 18:07:22.000000000 +0100 +++ new/gst-rtsp-server-1.10.3/tests/check/gst/stream.c 2017-01-09 14:29:18.000000000 +0100 @@ -385,6 +385,47 @@ GST_END_TEST; +GST_START_TEST (test_tcp_transport) +{ + GstPad *srcpad; + GstElement *pay; + GstRTSPStream *stream; + GstBin *bin; + GstElement *rtpbin; + GstRTSPRange server_port; + + srcpad = gst_pad_new ("testsrcpad", GST_PAD_SRC); + fail_unless (srcpad != NULL); + gst_pad_set_active (srcpad, TRUE); + pay = gst_element_factory_make ("rtpgstpay", "testpayloader"); + fail_unless (pay != NULL); + stream = gst_rtsp_stream_new (0, pay, srcpad); + fail_unless (stream != NULL); + gst_object_unref (pay); + gst_object_unref (srcpad); + rtpbin = gst_element_factory_make ("rtpbin", "testrtpbin"); + fail_unless (rtpbin != NULL); + bin = GST_BIN (gst_bin_new ("testbin")); + fail_unless (bin != NULL); + fail_unless (gst_bin_add (bin, rtpbin)); + + /* TCP transport */ + gst_rtsp_stream_set_protocols (stream, GST_RTSP_LOWER_TRANS_TCP); + fail_unless (gst_rtsp_stream_join_bin (stream, bin, rtpbin, GST_STATE_NULL)); + + /* port that the server will use to receive RTCP makes only sense in the UDP + * case so verify that the received server port is 0 in the TCP case */ + gst_rtsp_stream_get_server_port (stream, &server_port, G_SOCKET_FAMILY_IPV4); + fail_unless_equals_int (server_port.min, 0); + fail_unless_equals_int (server_port.max, 0); + + fail_unless (gst_rtsp_stream_leave_bin (stream, bin, rtpbin)); + gst_object_unref (bin); + gst_object_unref (stream); +} + +GST_END_TEST; + static Suite * rtspstream_suite (void) { @@ -398,6 +439,7 @@ tcase_add_test (tc, test_multicast_address_and_unicast_udp); tcase_add_test (tc, test_allocate_udp_ports_multicast); tcase_add_test (tc, test_allocate_udp_ports_client_settings); + tcase_add_test (tc, test_tcp_transport); return s; }