splitmuxsink, issues with max-size-time and exact duration
Armin Erkert
armin.erkert at rolmail.net
Fri Jul 21 12:32:28 UTC 2023
Hi,
a compressed stream as H264 is a sequence of I-frames and B-frames. A I
frame decribes
fully a frame, and B-frames has only information of changes to the
previous I frame. In a stream
evry GOP-size is inserted a I frame.
Splitmuxsink can only split at a I frame, because a file needs to
beginning with an I frame.
So,if you have a GOP-Size of 1.5 seconds (also I frames at 0 sec, 1.5
sec, 3.0 sec, 4.5 sec ...)
and you set split max-size-time to 4 seconds, splitmux splits at the
nearest previous I-frame,
which is at 3.0 seconds.
That's all, redcue the GOP Size in your RTP-Stream and it will work fine
... or transcode the stream
(decoding and encoding with another gop-size)
Am 21.07.2023 14:18, schrieb Антон Шаров via gstreamer-devel:
> I just checked data more carefully, when I set 5 sec., it's actual
> length in major cases is 3.9* seconds
> so media player shows 3 seconds. Seems strange to me that the case with
> 4.9* seconds (which is almost
> 5 seconds as desired) is quite rate (like 5:1 ot 6:1). So I would
> correct myself and say that it is not n-2 but
> rather n-1.
> Пятница, 21 июля 2023, 14:42 +03:00 от Krutskikh Ivan
> <stein.hak at gmail.com>:
>
> At first to confirm the issue try lowering the gop on your ip cam to
> lowest possible value (fps or lower if possible) and see how that
> effects the precision on splitmuxsink. I use splitmuxsink in production
> and +/- 2-3 seconds does not bother me.
>
> пт, 21 июл. 2023г. в 14:27, Антон Шаров <sharov_am at mail.ru [1]>:
>
> Hi! Thank you for reply!
>
> How to fix this issue? From one point of view I think it would be ok to
> ask user for n seconds and
> set n+2 to obtain exact duration, but I think I miss somthing to deal
> with it properly.
>
> Пятница, 21 июля 2023, 14:05 +03:00 от Krutskikh Ivan
> <stein.hak at gmail.com [2]>:
>
> Hi!
>
> I think it depends on seconds between key (I) frames since
> splitmuxsink begins each new file with a key frame.
>
> пт, 21 июл. 2023г. в 13:46, Антон Шаров via gstreamer-devel
> <gstreamer-devel at lists.freedesktop.org [3]>:
>
> Hi.
>
> I found very strange issue with splitmuxsink and it's max-size-time
> property, namely
> given n sec. for desired duration, it's actual duration would be n-2
> sec. Initially I've discovered this
> issue while testing hand-coded pipeline, but then desided to reproduce
> the issue with gst-launch
> and observed the very same behaviour. Given
> gst-launch-1.0 -e -v rtspsrc buffer-mode=0
> add-reference-timestamp-meta=true
> location=rtsp://user:pass@ip_addr/onvif/media?profile=Profile1 !
> rtph264depay ! h264parse ! splitmuxsink
> location="d:\\video_files\\video_%02d.mp4" max-size-time=10000000000
> (note, max-size-time=10000000000 is 10 sec in nanoseconds)
> the actual duration of files will be 8 sec.
> Same for 7→ 5, 5→ 3, and so on. So, it seems to be the pattern -- set
> for n secodns, receive for n-2 seconds.
> Is it ok or maybe I miss something? I don't think that it depends on
> rtps source.
>
> Thanks in advance.
>
> Here some initial seesion info:
>
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: latency =
> 2000
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: ntp-sync
> = false
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager:
> rfc7273-sync = false
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager:
> add-reference-timestamp-meta = true
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager:
> ntp-time-source = ntp
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager:
> drop-on-latency = false
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager:
> max-rtcp-rtp-time-diff = 1000
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager:
> max-ts-offset-adjustment = 0
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager:
> buffer-mode = none
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: timeout =
> 5000000000
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: caps =
> application/x-rtp, media=(string)video, payload=(int)97,
> clock-rate=(int)90000, encoding-name=(string)H264,
> packetization-mode=(string)1,
> profile-level-id=(string)4D00000000000000,
> sprop-parameter-sets=(string)"Z00AH52oFAFum4CAgIE\=\,aO48gA\=\=",
> a-framerate=(string)15, ssrc=(uint)3053121902
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc2: caps =
> application/x-rtcp
> Progress: (request) SETUP stream 1
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc3: timeout =
> 5000000000
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc3: caps =
> application/x-rtp, media=(string)audio, payload=(int)0,
> clock-rate=(int)8000, encoding-name=(string)PCMU,
> encoding-params=(string)1, ssrc=(uint)2174462030
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc4: caps =
> application/x-rtcp
> Progress: (open) Opened Stream
> Setting pipeline to PLAYING ...
> New clock: GstSystemClock
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager:
> buffer-mode = none
> Progress: (request) Sending PLAY request
> Redistribute latency...
> Redistribute latency...
> Progress: (request) Sending PLAY request
> Redistribute latency...
> Redistribute latency...
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: caps =
> application/x-rtp, media=(string)video, payload=(int)97,
> clock-rate=(int)90000, encoding-name=(string)H264,
> packetization-mode=(string)1,
> profile-level-id=(string)4D00000000000000,
> sprop-parameter-sets=(string)"Z00AH52oFAFum4CAgIE\=\,aO48gA\=\=",
> a-framerate=(string)15, ssrc=(uint)3053121902,
> clock-base=(uint)2632806877, seqnum-base=(uint)14666,
> npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1,
> onvif-mode=(boolean)false
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc3: caps =
> application/x-rtp, media=(string)audio, payload=(int)0,
> clock-rate=(int)8000, encoding-name=(string)PCMU,
> encoding-params=(string)1, ssrc=(uint)2174462030,
> clock-base=(uint)661265319, seqnum-base=(uint)53364,
> npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1,
> onvif-mode=(boolean)false
> Progress: (request) Sent PLAY request
> /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1.GstPad:src:
> caps = application/x-rtp, media=(string)video, payload=(int)97,
> clock-rate=(int)90000, encoding-name=(string)H264,
> packetization-mode=(string)1,
> profile-level-id=(string)4D00000000000000,
> sprop-parameter-sets=(string)"Z00AH52oFAFum4CAgIE\=\,aO48gA\=\=",
> a-framerate=(string)15, ssrc=(uint)3053121902,
> clock-base=(uint)2632806877, seqnum-base=(uint)14666,
> npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1,
> onvif-mode=(boolean)false
>
> --
> С Уважением,
> Шаров Антон
--
С Уважением,
Шаров Антон
--
С Уважением,
Шаров Антон
--
--------------------------------
Ing. Erkert Armin
Mittelstrich 9
I-39050 Tiers (BZ)
Email: armin.erkert at rolmail.net
Tel.: +39 349 4385335
WWW: www.erkert.it [4]
Links:
------
[1]
http://mail.konmail.net//e.mail.ru/compose/?mailto=mailto%3asharov_am@mail.ru
[2]
http://mail.konmail.net//e.mail.ru/compose/?mailto=mailto%3astein.hak@gmail.com
[3]
http://e.mail.ru/compose/?mailto=mailto%3agstreamer%2ddevel@lists.freedesktop.org
[4] http://www.erkert.it
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20230721/e6f1a953/attachment.htm>
More information about the gstreamer-devel
mailing list