Hello community,
here is the log from the commit of package gstreamer-rtsp-server for
openSUSE:Factory checked in at 2020-11-29 12:25:40
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gstreamer-rtsp-server (Old)
and /work/SRC/openSUSE:Factory/.gstreamer-rtsp-server.new.5913 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gstreamer-rtsp-server"
Sun Nov 29 12:25:40 2020 rev:26 rq:846456 version:1.18.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/gstreamer-rtsp-server/gstreamer-rtsp-server.changes
2020-10-27 18:59:05.762749836 +0100
+++
/work/SRC/openSUSE:Factory/.gstreamer-rtsp-server.new.5913/gstreamer-rtsp-server.changes
2020-11-29 12:25:57.985852780 +0100
@@ -1,0 +2,14 @@
+Wed Oct 28 10:34:58 UTC 2020 - Antonio Larrosa <[email protected]>
+
+- Update to 1.18.1:
+ + Highlighted bugfixes in 1.18.1
+ - important security fixes
+ - bug fixes and memory leak fixes
+ - various stability and reliability improvements
+ + gst-rtsp-server changes:
+ - rtsp-stream: collect rtp info when blocking
+ - rtsp-media: set a 0 storage size for TCP receivers
+ - rtsp-stream: preroll on gap events
+ - rtsp-media: do not unblock on unsuspend
+
+-------------------------------------------------------------------
Old:
----
gst-rtsp-server-1.18.0.tar.xz
New:
----
gst-rtsp-server-1.18.1.tar.xz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gstreamer-rtsp-server.spec ++++++
--- /var/tmp/diff_new_pack.X03H2K/_old 2020-11-29 12:25:58.597853399 +0100
+++ /var/tmp/diff_new_pack.X03H2K/_new 2020-11-29 12:25:58.601853403 +0100
@@ -19,7 +19,7 @@
%define gstreamer_req_version %(echo %{version} | sed -e "s/+.*//")
%define _name gst-rtsp-server
Name: gstreamer-rtsp-server
-Version: 1.18.0
+Version: 1.18.1
Release: 0
Summary: GStreamer-based RTSP server library
License: LGPL-2.0-or-later
++++++ _service ++++++
--- /var/tmp/diff_new_pack.X03H2K/_old 2020-11-29 12:25:58.625853427 +0100
+++ /var/tmp/diff_new_pack.X03H2K/_new 2020-11-29 12:25:58.629853431 +0100
@@ -4,7 +4,7 @@
<param name="filename">gst-rtsp-server</param>
<!--<param name="versionformat">@PARENT_TAG@+git%cd.%h</param>-->
<param name="versionformat">@PARENT_TAG@</param>
- <param name="revision">1.18.0</param>
+ <param name="revision">1.18.1</param>
<param name="scm">git</param>
</service>
<service name="recompress" mode="disabled">
++++++ gst-rtsp-server-1.18.0.tar.xz -> gst-rtsp-server-1.18.1.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-rtsp-server-1.18.0/ChangeLog
new/gst-rtsp-server-1.18.1/ChangeLog
--- old/gst-rtsp-server-1.18.0/ChangeLog 2020-09-08 01:08:29.998949500
+0200
+++ new/gst-rtsp-server-1.18.1/ChangeLog 2020-10-26 12:15:28.844300300
+0100
@@ -1,10 +1,86 @@
+=== release 1.18.1 ===
+
+2020-10-26 11:15:28 +0000 Tim-Philipp Müller <[email protected]>
+
+ * ChangeLog:
+ * NEWS:
+ * RELEASE:
+ * gst-rtsp-server.doap:
+ * meson.build:
+ Release 1.18.1
+
+2020-10-08 22:17:16 +0200 Mathieu Duponchelle <[email protected]>
+
+ * gst/rtsp-server/rtsp-stream.c:
+ rtsp-stream: make use of blocked_running_time in query_position
+ When blocking, the sink element will not have received a buffer
+ yet and the position query will fail. Instead, we make use of
+ the running time of the buffer we blocked on.
+ Part-of:
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/163>
+
+2020-10-06 00:04:17 +0200 Mathieu Duponchelle <[email protected]>
+
+ * gst/rtsp-server/rtsp-stream.c:
+ rtsp-stream: collect rtp info when blocking
+ We don't unblock the stream anymore before replying to the
+ play request (883ddc72bb5bc57c95a9e167814d1ac53fe1b443),
+ so the sinks don't have a last-sample after potentially flush
+ seeking. seek_trickmode waits for preroll however, which means
+ the stream will block and wait for a first buffer. Subsequent
+ calls to get_rtpinfo() can thus make use of the information.
+ See
https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/issues/115
+ Part-of:
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/163>
+
+2020-09-05 00:30:42 +0200 Mathieu Duponchelle <[email protected]>
+
+ * gst/rtsp-server/rtsp-media.c:
+ * gst/rtsp-server/rtsp-server-internal.h:
+ * gst/rtsp-server/rtsp-stream.c:
+ rtsp-media: set a 0 storage size for TCP receivers
+ ulpfec correction is obviously useless when receiving a stream
+ over TCP, and in TCP modes the rtp storage receives non
+ timestamped buffers, causing it to queue buffers indefinitely,
+ until the queue grows so large that sanity checks kick in and
+ warnings start to get emitted.
+ Part-of:
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/158>
+
+2020-08-21 03:02:40 +0200 Mathieu Duponchelle <[email protected]>
+
+ * gst/rtsp-server/rtsp-stream.c:
+ rtsp-stream: preroll on gap events
+ This allows negotiating a SDP with all streams present, but only
+ start sending packets at some later point in time
+ Part-of:
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/157>
+
+2020-08-25 16:10:36 +0200 Mathieu Duponchelle <[email protected]>
+
+ * gst/rtsp-server/rtsp-media.c:
+ rtsp-media: do not unblock on unsuspend
+ rtsp_media_unsuspend() is called from handle_play_request()
+ before sending the play response. Unblocking the streams here
+ was causing data to be sent out before the client was ready
+ to handle it, with obvious side effects such as initial packets
+ getting discarded, causing decoding errors.
+ Instead we can simply let the media streams be unblocked when
+ the state of the media is set to PLAYING, which occurs after
+ sending the play response.
+ Part-of:
<https://gitlab.freedesktop.org/gstreamer/gst-rtsp-server/-/merge_requests/156>
+
+2020-09-08 17:44:37 +0100 Tim-Philipp Müller <[email protected]>
+
+ * docs/gst_plugins_cache.json:
+ * meson.build:
+ Back to development
+
=== release 1.18.0 ===
2020-09-08 00:08:29 +0100 Tim-Philipp Müller <[email protected]>
+ * .gitlab-ci.yml:
* ChangeLog:
* NEWS:
* RELEASE:
+ * docs/gst_plugins_cache.json:
* gst-rtsp-server.doap:
* meson.build:
Release 1.18.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-rtsp-server-1.18.0/NEWS
new/gst-rtsp-server-1.18.1/NEWS
--- old/gst-rtsp-server-1.18.0/NEWS 2020-09-08 01:08:29.998949500 +0200
+++ new/gst-rtsp-server-1.18.1/NEWS 2020-10-26 12:15:28.844300300 +0100
@@ -1,11 +1,14 @@
GStreamer 1.18 Release Notes
-GStreamer 1.18.0 was originally released on 7 September 2020.
+GStreamer 1.18.0 was originally released on 8 September 2020.
+
+The latest bug-fix release in the 1.18 series is 1.18.1 and was released
+on 26 October 2020.
See https://gstreamer.freedesktop.org/releases/1.18/ for the latest
version of this document.
-Last updated: Monday 7 September 2020, 10:30 UTC (log)
+Last updated: Monday 26 October 2020, 11:00 UTC (log)
Introduction
@@ -28,7 +31,8 @@
- Active Format Description (AFD) and Bar Data support
-- ONVIF trick modes support in both GStreamer RTSP server and client
+- RTSP server and client implementations gained ONVIF trick modes
+ support
- Hardware-accelerated video decoding on Windows via DXVA2 /
Direct3D11
@@ -39,24 +43,25 @@
- qmlgloverlay: New overlay element that renders a QtQuick scene over
the top of an input video stream
-- New imagesequencesrc element to easily create a video stream from a
+- imagesequencesrc: New element to easily create a video stream from a
sequence of jpeg or png images
-- dashsink: Add new sink to produce DASH content
+- dashsink: New sink to produce DASH content
-- dvbsubenc: DVB Subtitle encoder element
+- dvbsubenc: New DVB Subtitle encoder element
-- TV broadcast compliant MPEG-TS muxing with constant bitrate muxing
- and SCTE-35 support
+- MPEG-TS muxing now also supports TV broadcast compliant muxing with
+ constant bitrate muxing and SCTE-35 support
-- rtmp2: new RTMP client source and sink element implementation
+- rtmp2: New RTMP client source and sink element from-scratch
+ implementation
-- svthevcenc: new SVT-HEVC-based H.265 video encoder
+- svthevcenc: New SVT-HEVC-based H.265 video encoder
-- vaapioverlay compositor element using VA-API
+- vaapioverlay: New compositor element using VA-API
-- rtpmanager support for Google’s Transport-Wide Congestion Control
- (twcc) RTP extension
+- rtpmanager gained support for Google’s Transport-Wide Congestion
+ Control (twcc) RTP extension
- splitmuxsink and splitmuxsrc gained support for auxiliary video
streams
@@ -64,18 +69,18 @@
- webrtcbin now contains some initial support for renegotiation
involving stream addition and removal
-- New RTP source and sink elements to easily set up RTP streaming via
- rtp:// URIs
+- RTP support was enhanced with new RTP source and sink elements to
+ easily set up RTP streaming via rtp:// URIs
-- New Audio Video Transport Protocol (AVTP) plugin for Time-Sensitive
- Applications
+- avtp: New Audio Video Transport Protocol (AVTP) plugin for
+ Time-Sensitive Applications
- Support for the Video Services Forum’s Reliable Internet Stream
Transport (RIST) TR-06-1 Simple Profile
- Universal Windows Platform (UWP) support
-- rpicamsrc element for capturing from the Raspberry Pi camera
+- rpicamsrc: New element for capturing from the Raspberry Pi camera
- RTSP Server TCP interleaved backpressure handling improvements as
well as support for Scale/Speed headers
@@ -2179,7 +2184,208 @@
1.18.0
-1.18.0 was released on 7 September 2020.
+1.18.0 was released on 8 September 2020.
+
+1.18.1
+
+The first 1.18 bug-fix release (1.18.1) was released on 26 October 2020.
+
+This release only contains bugfixes and it should be safe to update from
+1.18.0.
+
+Highlighted bugfixes in 1.18.1
+
+- important security fixes
+- bug fixes and memory leak fixes
+- various stability and reliability improvements
+
+gstreamer
+
+- aggregator: make peek() has() pop() drop() buffer API threadsafe
+- gstvalue: don’t write to const char *
+- meson: Disallow DbgHelp for UWP build
+- info: Fix build on Windows ARM64 device
+- build: use cpu_family for arch checks
+- basetransform: Fix in/outbuf confusion of _default_transform_meta
+- Fix documentation
+- info: Load DbgHelp.dll using g_module_open()
+- padtemplate: mark documentation caps as may be leaked
+- gstmeta: intern registered impl string
+- aggregator: Hold SRC_LOCK while unblocking via SRC_BROADCAST()
+- ptp_helper_post_install.sh: deal with none
+- skip elements/leak.c if tracer is not available
+- aggregator: Wake up source pad in PAUSED<->PLAYING transitions
+- input-selector: Wake up blocking pads when releasing them
+- ptp: Also handle gnu/kfreebsd
+
+gst-plugins-base
+
+- theoradec: Set telemetry options only if they are nonzero
+- glslstage: delete shader on finalize of stage
+- urisourcebin: Fix crash caused by use after free
+- decodebin3: Store stream-start event on output pad before exposing
+ it
+- Add some missing nullable annotations
+- typefind/xdgmime: Validate mimetypes to be valid GstStructure names
+ before using them
+- uridecodebin3: Forward upstream events to decodebin3 directly
+- video-converter: Add fast paths from v210 to I420/YV12, Y42B, UYVY
+ and YUY2
+- videoaggregator: Limit accepted caps by template caps
+- gstrtpbuffer: fix header extension length validation
+- decodebin3: only force streams-selected seqnum after a
+ select-streams
+- videodecoder: don’t copy interlace-mode from reference state
+- enable abi checks
+- multihandlesink: Don’t pass NULL caps to gst_caps_is_equal
+- audio: video: Fix in/outbuf confusion of transform_meta
+- meson: Always wrap “prefix” option with join_paths() to make Windows
+ happy
+- videoaggregator: ensure peek_next_sample() uses the correct caps
+- meson: Actually build gstgl without implicit include dirs
+- videoaggregator: Don’t require any pads to be configured for
+ negotiating source pad caps
+- gst-libs: gl: Fix documentation typo and clarify
+ gl_memory_texsubimage
+- audioaggregator: Reset offset if the output rate is renegotiated
+- video-anc: Implement transform functions for AFD/Bar metas
+- appsrc: Wake up the create() function on caps changes
+- rtpbasepayload: do not forget delayed segment when forwarding gaps
+
+gst-plugins-good
+
+- v4l2object: Only offer inactive pools and if needed
+- vpx: Fix the check to unfixed/unknown framerate to set bitrate
+- qmlglsink: fix crash when created/destroyed in quick succession
+- rtputils: Count metas with an empty tag list for copying/keeping
+- rtpbin: Remove the rtpjitterbuffer with the stream
+- rtph26*depay: drop FU’s without a corresponding start bit
+- imagefreeze: Response caps query from srcpad
+- rtpmp4gdepay: Allow lower-case “aac-hbr” instead of correct
+ “AAC-hbr”
+- rtspsrc: Fix push-backchannel-buffer parameter mismatch
+- jpegdec: check buffer size before dereferencing
+- flvmux: Move stream skipping to GstAggregatorPadClass.skip_buffer
+- v4l2object: plug memory leak
+- splitmuxsink: fix sink pad release while PLAYING
+
+gst-plugins-bad
+
+- codecparsers: h264parser: guard against ref_pic_markings overflow
+- v4l2codecs: Various fixes
+- h265parse: Don’t enable passthrough by default
+- srt: Fix “Fix timestamping”
+- srt: Fixes for 1.4.2
+- dtlsconnection: Ignore OpenSSL system call errors
+- h265parse: set interlace-mode=interleaved on interlaced content
+- Replace GPL v2 with LGPL v2 in COPYING file
+- srt: Consume the error from gst_srt_object_write
+- srt: Check socket state before retrieving payload size
+- x265enc: fix deadlock on reconfig
+- webrtc: Require gstreamer-sdp in the pkg-config file
+- srtsrc: Fix timestamping
+- mfvideosrc: Use only the first video stream per device
+- srtobject: typecast SRTO_LINGER to linger
+- decklink: Correctly order the different dependent mode tables
+- wasapisrc: Make sure that wasapisrc produces data in loopback mode
+- wpesrc: fix some caps leaks using the non-GL output
+- smoothstreaming: clear live adapter on seek
+- vtdec/vulkan: use Shared storage mode for IOSurface textures
+- wpe: Move webview load waiting to WPEView
+- wpe: Use proper callback for TLS errors signal handling
+- kmssink: Do not source using padded width/height
+- avtp: avtpaafdepay: fix crash when building caps
+- opencv: set opencv_dep when option is disabled to fix the build
+- line21encoder: miscellaneous enhancements
+- Hls youtube issues with urisourcebin/queue2
+- rtmp2: Replace stats queue with stats lock
+- rtmp2sink: support EOS event for graceful connection shutdown
+- mpegtsmux: Make handling of sinkpads thread-safe
+- hlssink2: Actually release splitmuxsink’s pads
+- mpegtsmux: Don’t create streams with reserved PID
+
+gst-plugins-ugly
+
+- no changes
+
+gst-libav
+
+- avaudenc/avvidenc: Reopen encoding session if it’s required
+- avauddec/audenc/videnc: Don’t return GST_FLOW_EOS when draining
+- avauddec/avviddec: Avoid dropping non-OK flow return
+- avcodecmap: Enable 24 bit WMA Lossless decoding
+
+gst-rtsp-server
+
+- rtsp-stream: collect rtp info when blocking
+- rtsp-media: set a 0 storage size for TCP receivers
+- rtsp-stream: preroll on gap events
+- rtsp-media: do not unblock on unsuspend
+
+gstreamer-vaapi
+
+- decoder: don’t reply src caps query with allowed if pad is fixed
+- plugins: decode: fix a DMA caps typo in ensure_allowed_srcpad_caps
+
+gstreamer-sharp
+
+- Add bindings for some missing 1.18 API
+
+gst-omx
+
+- omxvideodec: support interlace-mode=interleaved input
+
+gst-python
+
+- no changes
+
+gst-editing-services
+
+- ges: Do not recreate auto-transitions when changing clip assets
+- ges: Fix a copy/paste mistake in meson file
+
+gst-integration-testsuites
+
+- medias: Update for h265parse passthrough behavior change
+- update validate.test.h265parse.alternate test
+
+gst-build
+
+- windows: Detect Strawberry Perl and error out early
+- {pygobject,pycairo}.wrap: point to stable refs
+
+Cerbero build tool and packaging changes in 1.18.1
+
+- Add macOS Big Sur support
+- gst-plugins-bad: Ship rtpmanagerbad plugin
+- gstreamer-1.0: Don’t enable DbgHelp for UWP build
+- pango: fix font corruption on windows
+- cairo: use thread local storage to grant one windows HDC per thread
+- small fixes for Xcode 12
+- cerbero: Re-add alsa-devel to bootstrap on Linux
+- FreeType: update to 2.10.4 to fix security vulnerability
+
+Contributors to 1.18.1
+
+Aaron Boxer, Adam Williamson, Andrew Wesie, Arun Raghavan, Bastien
+Reboulet, Brent Gardner, Edward Hervey, François Laignel, Guillaume
+Desmottes, Havard Graff, He Junyan, Hosang Lee, Jacek Tomaszewski, Jakub
+Adam, Jan Alexander Steffens (heftig), Jan Schmidt, Jérôme Laheurte,
+Jordan Petridis, Marc Leeman, Marian Cichy, Marijn Suijten, Mathieu
+Duponchelle, Matthew Waters, Michael Tretter, Nazar Mokrynskyi, Nicolas
+Dufresne, Niklas Hambüchen, Nirbheek Chauhan, Olivier Crête, Philippe
+Normand, raghavendra, Ricky Tang, Sebastian Dröge, Seungha Yang,
+sohwan.park, Stéphane Cerveau, Thibault Saunier, Tim-Philipp Müller, Tom
+Schoonjans, Víctor Manuel Jáquez Leal, Will Miller, Xavier Claessens, Xℹ
+Ruoyao, Zebediah Figura,
+
+… 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.18.1
+
+- List of Merge Requests applied in 1.18.1
+- List of Issues fixed in 1.18.1
Schedule for 1.20
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-rtsp-server-1.18.0/RELEASE
new/gst-rtsp-server-1.18.1/RELEASE
--- old/gst-rtsp-server-1.18.0/RELEASE 2020-09-08 01:08:29.998949500 +0200
+++ new/gst-rtsp-server-1.18.1/RELEASE 2020-10-26 12:15:28.844300300 +0100
@@ -1,4 +1,4 @@
-This is GStreamer gst-rtsp-server 1.18.0.
+This is GStreamer gst-rtsp-server 1.18.1.
The GStreamer team is thrilled to announce a new major feature release
of your favourite cross-platform multimedia framework!
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-rtsp-server-1.18.0/docs/gst_plugins_cache.json
new/gst-rtsp-server-1.18.1/docs/gst_plugins_cache.json
--- old/gst-rtsp-server-1.18.0/docs/gst_plugins_cache.json 2020-09-08
01:08:29.998949500 +0200
+++ new/gst-rtsp-server-1.18.1/docs/gst_plugins_cache.json 2020-10-26
12:15:28.844300300 +0100
@@ -321,7 +321,7 @@
"construct": false,
"construct-only": false,
"controllable": false,
- "default": "GStreamer/1.18.0",
+ "default": "GStreamer/1.18.1",
"mutable": "null",
"readable": true,
"type": "gchararray",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-rtsp-server-1.18.0/gst/rtsp-server/rtsp-media.c
new/gst-rtsp-server-1.18.1/gst/rtsp-server/rtsp-media.c
--- old/gst-rtsp-server-1.18.0/gst/rtsp-server/rtsp-media.c 2020-09-08
01:08:30.002949700 +0200
+++ new/gst-rtsp-server-1.18.1/gst/rtsp-server/rtsp-media.c 2020-10-26
12:15:28.848300200 +0100
@@ -84,6 +84,7 @@
#define HMAC_80_KEY_LEN 10
#include "rtsp-media.h"
+#include "rtsp-server-internal.h"
struct _GstRTSPMediaPrivate
{
@@ -1645,6 +1646,25 @@
return res;
}
+static void
+update_stream_storage_size (GstRTSPMedia * media, GstRTSPStream * stream,
+ guint sessid)
+{
+ GObject *storage = NULL;
+
+ g_signal_emit_by_name (G_OBJECT (media->priv->rtpbin), "get-storage",
+ sessid, &storage);
+
+ if (storage) {
+ guint size_time = 0;
+
+ if (!gst_rtsp_stream_is_tcp_receiver (stream))
+ size_time = (media->priv->latency + 50) * GST_MSECOND;
+
+ g_object_set (storage, "size-time", size_time, NULL);
+ }
+}
+
/**
* gst_rtsp_media_set_latency:
* @media: a #GstRTSPMedia
@@ -1670,13 +1690,8 @@
g_object_set (priv->rtpbin, "latency", latency, NULL);
for (i = 0; i < media->priv->streams->len; i++) {
- GObject *storage = NULL;
-
- g_signal_emit_by_name (G_OBJECT (media->priv->rtpbin), "get-storage",
- i, &storage);
- if (storage)
- g_object_set (storage, "size-time",
- (media->priv->latency + 50) * GST_MSECOND, NULL);
+ GstRTSPStream *stream = g_ptr_array_index (media->priv->streams, i);
+ update_stream_storage_size (media, stream, i);
}
}
@@ -3617,14 +3632,6 @@
return res;
}
-static void
-new_storage_cb (GstElement * rtpbin, GObject * storage, guint sessid,
- GstRTSPMedia * media)
-{
- g_object_set (storage, "size-time", (media->priv->latency + 50) *
GST_MSECOND,
- NULL);
-}
-
static gboolean
start_prepare (GstRTSPMedia * media)
{
@@ -3636,8 +3643,6 @@
if (priv->status != GST_RTSP_MEDIA_STATUS_PREPARING)
goto no_longer_preparing;
- g_signal_connect (priv->rtpbin, "new-storage", G_CALLBACK (new_storage_cb),
- media);
g_signal_connect (priv->rtpbin, "request-fec-decoder",
G_CALLBACK (request_fec_decoder), media);
@@ -4582,21 +4587,14 @@
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);
- /* at this point the media pipeline has been updated and contain all
- * specific transport parts: all active streams contain at least one
sink
- * element and it's safe to unblock all blocked streams */
- media_streams_set_blocked (media, FALSE);
- } else {
- /* streams are not blocked and media is suspended from PAUSED */
- gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_PREPARED);
- }
- g_rec_mutex_unlock (&priv->state_lock);
- if (gst_rtsp_media_get_status (media) == GST_RTSP_MEDIA_STATUS_ERROR) {
+ g_rec_mutex_unlock (&priv->state_lock);
+ if (gst_rtsp_media_get_status (media) == GST_RTSP_MEDIA_STATUS_ERROR) {
+ g_rec_mutex_lock (&priv->state_lock);
+ goto preroll_failed;
+ }
g_rec_mutex_lock (&priv->state_lock);
- goto preroll_failed;
}
- g_rec_mutex_lock (&priv->state_lock);
+ gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_PREPARED);
break;
case GST_RTSP_SUSPEND_MODE_PAUSE:
gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_PREPARED);
@@ -5017,6 +5015,8 @@
g_mutex_unlock (&priv->lock);
return FALSE;
}
+
+ update_stream_storage_size (media, stream, i);
}
priv->complete = TRUE;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/gst-rtsp-server-1.18.0/gst/rtsp-server/rtsp-server-internal.h
new/gst-rtsp-server-1.18.1/gst/rtsp-server/rtsp-server-internal.h
--- old/gst-rtsp-server-1.18.0/gst/rtsp-server/rtsp-server-internal.h
2020-09-08 01:08:30.002949700 +0200
+++ new/gst-rtsp-server-1.18.1/gst/rtsp-server/rtsp-server-internal.h
2020-10-26 12:15:28.848300200 +0100
@@ -56,6 +56,8 @@
gboolean gst_rtsp_stream_transport_check_back_pressure
(GstRTSPStreamTransport *trans,
gboolean
is_rtp);
+gboolean gst_rtsp_stream_is_tcp_receiver (GstRTSPStream *
stream);
+
G_END_DECLS
#endif /* __GST_RTSP_SERVER_INTERNAL_H__ */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-rtsp-server-1.18.0/gst/rtsp-server/rtsp-stream.c
new/gst-rtsp-server-1.18.1/gst/rtsp-server/rtsp-stream.c
--- old/gst-rtsp-server-1.18.0/gst/rtsp-server/rtsp-stream.c 2020-09-08
01:08:30.006949700 +0200
+++ new/gst-rtsp-server-1.18.1/gst/rtsp-server/rtsp-stream.c 2020-10-26
12:15:28.852300200 +0100
@@ -214,7 +214,12 @@
GstRTSPPublishClockMode publish_clock_mode;
GThreadPool *send_pool;
- guint32 last_seqnum;
+
+ /* Used to provide accurate rtpinfo when the stream is blocking */
+ gboolean blocked_buffer;
+ guint32 blocked_seqnum;
+ guint32 blocked_rtptime;
+ GstClockTime blocked_running_time;
};
#define DEFAULT_CONTROL NULL
@@ -3790,6 +3795,20 @@
return ret;
}
+gboolean
+gst_rtsp_stream_is_tcp_receiver (GstRTSPStream * stream)
+{
+ GstRTSPStreamPrivate *priv;
+ gboolean ret = FALSE;
+
+ priv = stream->priv;
+ g_mutex_lock (&priv->lock);
+ ret = (priv->sinkpad != NULL && priv->appsrc[0] != NULL);
+ g_mutex_unlock (&priv->lock);
+
+ return ret;
+}
+
static gboolean
check_mcast_client_addr (GstRTSPStream * stream, const GstRTSPTransport * tr)
{
@@ -4271,6 +4290,25 @@
} else {
gst_sample_unref (last_sample);
}
+ } else if (priv->blocking) {
+ if (seq) {
+ if (!priv->blocked_buffer)
+ goto stats;
+ *seq = priv->blocked_seqnum;
+ }
+
+ if (rtptime) {
+ if (!priv->blocked_buffer)
+ goto stats;
+ *rtptime = priv->blocked_rtptime;
+ }
+
+ if (running_time) {
+ if (!GST_CLOCK_TIME_IS_VALID (priv->blocked_running_time))
+ goto stats;
+ *running_time = priv->blocked_running_time;
+ }
+ goto done;
}
}
@@ -5179,35 +5217,74 @@
GstRTSPStreamPrivate *priv;
GstRTSPStream *stream;
GstBuffer *buffer = NULL;
+ GstPadProbeReturn ret = GST_PAD_PROBE_OK;
+ GstEvent *event;
stream = user_data;
priv = stream->priv;
- GST_DEBUG_OBJECT (pad, "now blocking");
-
g_mutex_lock (&priv->lock);
- priv->blocking = TRUE;
if ((info->type & GST_PAD_PROBE_TYPE_BUFFER)) {
+ GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
+
buffer = gst_pad_probe_info_get_buffer (info);
+ if (gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp)) {
+ priv->blocked_buffer = TRUE;
+ priv->blocked_seqnum = gst_rtp_buffer_get_seq (&rtp);
+ priv->blocked_rtptime = gst_rtp_buffer_get_timestamp (&rtp);
+ gst_rtp_buffer_unmap (&rtp);
+ }
+ priv->position = GST_BUFFER_TIMESTAMP (buffer);
} else if ((info->type & GST_PAD_PROBE_TYPE_BUFFER_LIST)) {
+ GstRTPBuffer rtp = GST_RTP_BUFFER_INIT;
+
GstBufferList *list = gst_pad_probe_info_get_buffer_list (info);
buffer = gst_buffer_list_get (list, 0);
+ if (gst_rtp_buffer_map (buffer, GST_MAP_READ, &rtp)) {
+ priv->blocked_buffer = TRUE;
+ priv->blocked_seqnum = gst_rtp_buffer_get_seq (&rtp);
+ priv->blocked_rtptime = gst_rtp_buffer_get_timestamp (&rtp);
+ gst_rtp_buffer_unmap (&rtp);
+ }
+ priv->position = GST_BUFFER_TIMESTAMP (buffer);
+ } else if ((info->type & GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM)) {
+ if (GST_EVENT_TYPE (info->data) == GST_EVENT_GAP) {
+ gst_event_parse_gap (info->data, &priv->position, NULL);
+ } else {
+ ret = GST_PAD_PROBE_PASS;
+ g_mutex_unlock (&priv->lock);
+ goto done;
+ }
} else {
g_assert_not_reached ();
}
- g_assert (buffer);
- priv->position = GST_BUFFER_TIMESTAMP (buffer);
- GST_DEBUG_OBJECT (stream, "buffer position: %" GST_TIME_FORMAT,
- GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buffer)));
+ event = gst_pad_get_sticky_event (pad, GST_EVENT_SEGMENT, 0);
+ if (event) {
+ const GstSegment *segment;
+
+ gst_event_parse_segment (event, &segment);
+ priv->blocked_running_time =
+ gst_segment_to_stream_time (segment, GST_FORMAT_TIME, priv->position);
+ gst_event_unref (event);
+ }
+
+ priv->blocking = TRUE;
+
+ GST_DEBUG_OBJECT (pad, "Now blocking");
+
+ GST_DEBUG_OBJECT (stream, "position: %" GST_TIME_FORMAT,
+ GST_TIME_ARGS (priv->position));
+
g_mutex_unlock (&priv->lock);
gst_element_post_message (priv->payloader,
gst_message_new_element (GST_OBJECT_CAST (priv->payloader),
gst_structure_new_empty ("GstRTSPStreamBlocking")));
- return GST_PAD_PROBE_OK;
+done:
+ return ret;
}
static void
@@ -5231,9 +5308,12 @@
continue;
if (priv->send_src[i]) {
priv->blocking = FALSE;
+ priv->blocked_buffer = FALSE;
+ priv->blocked_running_time = GST_CLOCK_TIME_NONE;
priv->blocked_id[i] = gst_pad_add_probe (priv->send_src[i],
GST_PAD_PROBE_TYPE_BLOCK | GST_PAD_PROBE_TYPE_BUFFER |
- GST_PAD_PROBE_TYPE_BUFFER_LIST, pad_blocking,
+ GST_PAD_PROBE_TYPE_BUFFER_LIST |
+ GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM, pad_blocking,
g_object_ref (stream), g_object_unref);
}
}
@@ -5348,6 +5428,13 @@
priv = stream->priv;
g_mutex_lock (&priv->lock);
+
+ if (priv->blocking && GST_CLOCK_TIME_IS_VALID (priv->blocked_running_time)) {
+ *position = priv->blocked_running_time;
+ g_mutex_unlock (&priv->lock);
+ return TRUE;
+ }
+
/* depending on the transport type, it should query corresponding sink */
if (priv->configured_protocols & GST_RTSP_LOWER_TRANS_UDP)
sink = priv->udpsink[0];
@@ -6119,8 +6206,8 @@
if (stream->priv->appsink[0])
g_object_set (stream->priv->appsink[0], "sync", enabled, NULL);
if (stream->priv->payloader
- && g_object_class_find_property (G_OBJECT_GET_CLASS (stream->priv->
- payloader), "onvif-no-rate-control"))
+ && g_object_class_find_property (G_OBJECT_GET_CLASS (stream->
+ priv->payloader), "onvif-no-rate-control"))
g_object_set (stream->priv->payloader, "onvif-no-rate-control", !enabled,
NULL);
if (stream->priv->session) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-rtsp-server-1.18.0/gst-rtsp-server.doap
new/gst-rtsp-server-1.18.1/gst-rtsp-server.doap
--- old/gst-rtsp-server-1.18.0/gst-rtsp-server.doap 2020-09-08
01:08:29.998949500 +0200
+++ new/gst-rtsp-server-1.18.1/gst-rtsp-server.doap 2020-10-26
12:15:28.844300300 +0100
@@ -32,6 +32,16 @@
<release>
<Version>
+ <revision>1.18.1</revision>
+ <branch>1.18</branch>
+ <name></name>
+ <created>2020-10-26</created>
+ <file-release
rdf:resource="https://gstreamer.freedesktop.org/src/gst-rtsp-server/gst-rtsp-server-1.18.1.tar.xz"
/>
+ </Version>
+ </release>
+
+ <release>
+ <Version>
<revision>1.18.0</revision>
<branch>master</branch>
<name></name>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/gst-rtsp-server-1.18.0/meson.build
new/gst-rtsp-server-1.18.1/meson.build
--- old/gst-rtsp-server-1.18.0/meson.build 2020-09-08 01:08:30.006949700
+0200
+++ new/gst-rtsp-server-1.18.1/meson.build 2020-10-26 12:15:28.852300200
+0100
@@ -1,5 +1,5 @@
project('gst-rtsp-server', 'c',
- version : '1.18.0',
+ version : '1.18.1',
meson_version : '>= 0.48',
default_options : ['warning_level=1', 'buildtype=debugoptimized'])
_______________________________________________
openSUSE Commits mailing list -- [email protected]
To unsubscribe, email [email protected]
List Netiquette: https://en.opensuse.org/openSUSE:Mailing_list_netiquette
List Archives:
https://lists.opensuse.org/archives/list/[email protected]