<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style></head><body lang=EN-US link=blue vlink="#954F72"><div class=WordSection1><p class=MsoNormal>Hey Roger and everyone else commenting – I appreciate all the advice and </p><p class=MsoNormal>questions.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I now have more work than before <span style='font-family:"Segoe UI Emoji",sans-serif'>😊</span>!</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Greetings from sunny South Africa!</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Sent from <a href="https://go.microsoft.com/fwlink/?LinkId=550986">Mail</a> for Windows 10</p><p class=MsoNormal><o:p> </o:p></p><div style='mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal style='border:none;padding:0cm'><b>From: </b><a href="mailto:rh_icecast@skuldwyrm.no">Roger Hågensen</a><br><b>Sent: </b>Thursday, May 2, 2019 12:12 PM<br><b>To: </b><a href="mailto:icecast-dev@xiph.org">icecast-dev@xiph.org</a><br><b>Subject: </b>Re: [Icecast-dev] Webm files written without duration in header</p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>On 2019-05-01 11:58, Sytze Visser wrote:> I am streaming live with webm </p><p class=MsoNormal>with ffmpeg to icecast 2.4.2. After the</p><p class=MsoNormal> > stream ends, I am unable to determine the duration of the file using</p><p class=MsoNormal> > ffprobe or mediainfo. Not sure but it seems that this has to do with</p><p class=MsoNormal> > headers?</p><p class=MsoNormal> ></p><p class=MsoNormal> > Should icecast be writing the duration into the header or should this</p><p class=MsoNormal> > somehow be passed from ffmpeg?</p><p class=MsoNormal>Do you mean the stream you sent to icecast or the stream listeners get </p><p class=MsoNormal>from icecast?</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>If it's the user stream then no, as a listener may drop packets and any </p><p class=MsoNormal>length would be incorrect, in this case it is the listeners player that </p><p class=MsoNormal>should track duration played (received) and add this to the file header </p><p class=MsoNormal>if the player allows archiving of live streams. For livestreams I think </p><p class=MsoNormal>Icecast sets a length of -1 (but it could be 0, or no length at all).</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>If you use a stream capture tool then I'm sure there exists one that </p><p class=MsoNormal>will write the duration header to a file. Have you tried using ffmpeg to </p><p class=MsoNormal>capture the stream? Look at the manual, you should be able to make it </p><p class=MsoNormal>write a duration to the header (if possible/supported by the file format)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal> > The requirement is really to determine the duration of the streamed</p><p class=MsoNormal> > event (i.e. not radio).</p><p class=MsoNormal>If you are using ffmpeg as the stream encoder then you should log the </p><p class=MsoNormal>duration either prior to ffmpeg getting the audio or after ffmpeg </p><p class=MsoNormal>encoding. There is no way for ffmpeg to magically add a length </p><p class=MsoNormal>(duration) to the header (which may have been streamed an hour ago).</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>If you only want to track duration before streaming it "out", then </p><p class=MsoNormal>encode and store the stream locally, then when it ends run a script to </p><p class=MsoNormal>add/fix the header to have a duration then stream the file to icecast, </p><p class=MsoNormal>this would mean the liveness of the stream would be delayed by the </p><p class=MsoNormal>duration of it.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>But I doubt you want to do this (why stream live otherwise right?)</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I can't recall if you can get ffmpeg to trigger a script or executable </p><p class=MsoNormal>when it quits or not, but you could (be it Windows or Linux) easily make </p><p class=MsoNormal>a script that you call instead of ffmpeg directly, in the script you log </p><p class=MsoNormal>the time before calling ffmepg and again after ffmpeg quits.</p><p class=MsoNormal>If you log as a datestamp you can simply subtract the start value from </p><p class=MsoNormal>the end value to get duration. Do note that this may not match the </p><p class=MsoNormal>actual duration of the archived stream (even if you archive it straight </p><p class=MsoNormal>from ffmpeg), it could be off by a second for example.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>You should also consider how to handle things in case ffmpeg crashes or </p><p class=MsoNormal>looses the connection to icecast (something sure to happen if using </p><p class=MsoNormal>public networks instead of a local LAN).</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>If a script you can "easily" restart ffmpeg and you can log the start </p><p class=MsoNormal>and end time (you could maybe even detect a ffmpeg crash or quit and log </p><p class=MsoNormal>a message).</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>I note you said "streamed event", are you using some form of broadcast </p><p class=MsoNormal>software? In that case that should have it's own log for events, or you </p><p class=MsoNormal>can set it to trigger a script at the start and end of events.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Regards,</p><p class=MsoNormal>Roger.</p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>-- </p><p class=MsoNormal>Unless specified otherwise, anything I write publicly is considered </p><p class=MsoNormal>Public Domain (CC0). My opinions are my own unless specified otherwise.</p><p class=MsoNormal>Roger Hågensen,</p><p class=MsoNormal>Freelancer, Norway.</p><p class=MsoNormal>_______________________________________________</p><p class=MsoNormal>Icecast-dev mailing list</p><p class=MsoNormal>Icecast-dev@xiph.org</p><p class=MsoNormal>http://lists.xiph.org/mailman/listinfo/icecast-dev</p><p class=MsoNormal><o:p> </o:p></p></div></body></html>