<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body style='font-size: 10pt; font-family: Verdana,Geneva,sans-serif'>
<p><br /></p>
<p>Hi,</p>
<p>a compressed stream as H264 is a sequence of I-frames and B-frames. A I frame decribes</p>
<p>fully a frame, and B-frames has only information of changes to the previous I frame. In a stream </p>
<p>evry GOP-size is inserted a I frame.</p>
<p>Splitmuxsink can only split at a I frame, because a file needs to beginning with an I frame.</p>
<p>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 ...) </p>
<p>and you set split max-size-time to 4 seconds, splitmux splits at the nearest previous I-frame,</p>
<p>which is at 3.0 seconds.</p>
<p><br /></p>
<p>That's all, redcue the GOP Size in your RTP-Stream and it will work fine ... or transcode the stream</p>
<p>(decoding and encoding with another gop-size)</p>
<p><br /></p>
<p><br /></p>
<p id="reply-intro">Am 21.07.2023 14:18, schrieb Антон Шаров via gstreamer-devel:</p>
<blockquote type="cite" style="padding: 0 0.4em; border-left: #1010ff 2px solid; margin: 0">
<div id="replybody1">
<div>
<div>
<div><br />I just checked data more carefully, when I set 5 sec., it's actual length in major cases is 3.9* seconds</div>
<div>so media player shows 3 seconds. Seems strange to me that the case with 4.9* seconds (which is almost </div>
<div>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 </div>
<div>rather n-1.</div>
<div> </div>
<blockquote style="border-left: 1px solid #0857A6; margin: 10px; padding: 0 0 0 10px;">Пятница, 21 июля 2023, 14:42 +03:00 от Krutskikh Ivan <stein.hak@gmail.com>:<br /> 
<div>
<div class="v1js-helper v1js-readmsg-msg">
<div>
<div id="v1style_16899397742070899505_BODY">
<div class="v1cl_968543">
<div>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.</div>
 
<div class="v1gmail_quote_mr_css_attr">
<div class="v1gmail_attr_mr_css_attr">пт, 21 июл. 2023г. в 14:27, Антон Шаров <<a href="//e.mail.ru/compose/?mailto=mailto%3asharov_am@mail.ru" target="_blank" rel="noopener noreferrer">sharov_am@mail.ru</a>>:</div>
<blockquote class="v1gmail_quote_mr_css_attr" style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">
<div>
<div>
<div>Hi! Thank you for reply!</div>
<div> </div>
<div>How to fix this issue? From one point of view I think it would be ok to ask user for n seconds and </div>
<div>set n+2 to obtain exact duration, but I think I miss somthing to deal with it properly.<br /> </div>
<div class="v1mail-quote-collapse">
<blockquote style="border-left: 1px solid #0857a6; margin: 10px; padding: 0px 0px 0px 10px;"><span>Пятница, 21 июля 2023, 14:05 +03:00 от Krutskikh Ivan <<a href="//e.mail.ru/compose/?mailto=mailto%3astein.hak@gmail.com" target="_blank" rel="noopener noreferrer">stein.hak@gmail.com</a>>:<br /> </span>
<div>
<div id="v1m_4903331624037125863_mr_css_attr">
<div>
<div>
<div id="v1m_4903331624037125863style_16899375450147536453_BODY_mr_css_attr">
<div>
<div>
<div>Hi!</div>
<div> </div>
<div>I think it depends on seconds between  key (I) frames since splitmuxsink begins each new file with a key frame.</div>
</div>
 
<div>
<div><span>пт, 21 июл. 2023г. в 13:46, Антон Шаров via gstreamer-devel <<a href="http://e.mail.ru/compose/?mailto=mailto%3agstreamer%2ddevel@lists.freedesktop.org" target="_blank" rel="noopener noreferrer">gstreamer-devel@lists.freedesktop.org</a>>:</span></div>
<div>
<blockquote style="margin: 0px 0px 0px 0.8ex; border-left: 1px solid #cccccc; padding-left: 1ex;">
<div>
<div>Hi. </div>
<div> </div>
<div>I found very strange issue with splitmuxsink and it's  max-size-time property, namely</div>
<div>given n sec. for desired duration, it's actual duration would be n-2 sec.  Initially I've discovered this</div>
<div>issue while testing hand-coded pipeline, but then desided to reproduce the issue with gst-launch</div>
<div>and observed the very same behaviour. Given </div>
<div>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</div>
<div>(note, max-size-time=10000000000 is 10 sec in nanoseconds)</div>
<div>the actual duration of files will be 8 sec.</div>
<div>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.</div>
<div>Is it ok or maybe I miss something? I don't think that it depends on rtps source.</div>
<div> </div>
<div>Thanks in advance.</div>
<div> </div>
<div>Here some initial seesion info:</div>
<div>
<div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: latency = 2000</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: ntp-sync = false</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: rfc7273-sync = false</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: add-reference-timestamp-meta = true</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: ntp-time-source = ntp</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: drop-on-latency = false</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: max-rtcp-rtp-time-diff = 1000</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: max-ts-offset-adjustment = 0</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: buffer-mode = none</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: timeout = 5000000000</div>
<div>/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</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc2: caps = application/x-rtcp</div>
<div>Progress: (request) SETUP stream 1</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc3: timeout = 5000000000</div>
<div>/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</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc4: caps = application/x-rtcp</div>
<div>Progress: (open) Opened Stream</div>
<div>Setting pipeline to PLAYING ...</div>
<div>New clock: GstSystemClock</div>
<div>/GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:manager: buffer-mode = none</div>
<div>Progress: (request) Sending PLAY request</div>
<div>Redistribute latency...</div>
<div>Redistribute latency...</div>
<div>Progress: (request) Sending PLAY request</div>
<div>Redistribute latency...</div>
<div>Redistribute latency...</div>
<div>/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</div>
<div>/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</div>
<div>Progress: (request) Sent PLAY request</div>
<div>/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</div>
</div>
</div>
<div> </div>
<div> </div>
<div> </div>
<div>
<div>
<div>--<br />С Уважением,<br />Шаров Антон</div>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
 
<div> </div>
<div>
<div>
<div>--<br />С Уважением,<br />Шаров Антон</div>
</div>
</div>
<div> </div>
</div>
</div>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
 
<div> </div>
<div>
<div>
<div>--<br />С Уважением,<br />Шаров Антон</div>
</div>
</div>
<div> </div>
</div>
</div>
</div>
</blockquote>
<p><br /></p>
<div id="signature">-- <br />
<div class="pre" style="margin: 0; padding: 0; font-family: monospace">--------------------------------<br />Ing. Erkert Armin<br />Mittelstrich 9<br />I-39050 Tiers (BZ)<br /><br />Email: <a href="mailto:armin.erkert@rolmail.net">armin.erkert@rolmail.net</a><br />Tel.:  +39 349 4385335<br />WWW:   <a href="http://www.erkert.it" target="_blank" rel="noopener noreferrer">www.erkert.it</a></div>
</div>
</body></html>