<html xmlns:v="urn:schemas-microsoft-com:vml" 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=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@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:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:2121220242;
        mso-list-type:hybrid;
        mso-list-template-ids:-774222560 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal">Hello Live-Devel,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">First off, I am extremely impressed by what I find in the Live555 source code. Fantastic job and a standing ovation to the responsible.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I am an experienced C/C++ developer new to the Live555 code base. I work at a video security software company as a senior developer.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Having spent last week going thru the Live555 code base, compiling the example tools and trying to locate more information, I have a few questions:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<ul style="margin-top:0in" type="disc">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level1 lfo1">I’ve only located one non-Live555.com online resource with any detailed information describing the Live555 code and its purposes<o:p></o:p></li><ul style="margin-top:0in" type="circle">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level2 lfo1">The resource is a Chinese developer’s Github.com pages.<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level2 lfo1">In a mixture of Chinese description and English C++ code snippets, the Live555 example programs are walked through describing what and why for various portions of the code.
<o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level2 lfo1">Google Translate provides a decent translation:
<o:p></o:p></li><ul style="margin-top:0in" type="square">
<li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level3 lfo1"><a href="https://github.com/hanpfei/hanpfei-documents/tree/7fe4f8241ff16840afd0d46156509c0dea1a3e8b/source/_posts">https://github.com/hanpfei/hanpfei-documents/tree/7fe4f8241ff16840afd0d46156509c0dea1a3e8b/source/_posts</a><o:p></o:p></li><li class="MsoListParagraph" style="margin-left:0in;mso-list:l0 level3 lfo1">Scroll down to the 13 different Live555 markdown documents, and plug them into google translate<o:p></o:p></li></ul>
</ul>
</ul>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>Q1: Does anyone know of or have their own Live555 tutorial, blog or related resource to learn this code base better? Any books?
<o:p></o:p></b></p>
<p class="MsoNormal">(I saw a Live555 book taken down from Amazon, perhaps a fake book republishing the source?)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">The specific reason my employer is looking at the Live555 libraries is to create or locate or buy software that accepts video files, and RTSP streams them as it if were an infinite stream, looping the frames transparently as if the frame
 source were infinite. We want this to simulate the IP video environments of our larger clients, who may have dozens to hundreds of IP security cameras at, for example, a research campus.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I have investigated this need, locating a few posts at Live-Devel asking how to modify the Live555MediaServer to infinitely loop a video file.<o:p></o:p></p>
<p class="MsoNormal">From <a href="http://lists.live555.com/pipermail/live-devel/2012-August/015723.html">
http://lists.live555.com/pipermail/live-devel/2012-August/015723.html</a> I read:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in">> An other behavior we would like to control using arguments is the availability to loop on the source file (I means without closing the RTSP session).<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in">> Could you advise us, how to looping on the file source when end is reached.<o:p></o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in">The best way to do this is to write your own "FramedSource" subclass that presents the illusion of a single, continuous stream of data - i.e., by automatically reseeking to the front of the file (or closing/reopening
 it) whenever the end of the file is reached.  Then use this subclass in a new "OnDemandServerMediaSubsession" subclass (that you would also write).  That way, none of the other server code would need to change - it would act just as if the data source happened
 to be infinite.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>Q2: is this advice still accurate?<o:p></o:p></b></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><b>Q3: Noticing this “how to infinitely loop” question being asked a few times, is anyone aware of any Github or similar code repositories where someone has already made an infinitely looping modification and posted their version?<o:p></o:p></b></p>
<p class="MsoNormal"><b><o:p> </o:p></b></p>
<p class="MsoNormal"><b>Q4: Lacking any open source infinitely looping RTSP servers, does anyone here create and sell such a product? Anyone know of such a product?<o:p></o:p></b></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Any answers or leads to information resources would be hugely appreciated.
<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><span style="color:black">Blake Senftner<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black">Sr. Software Scientist | CyberExtruder<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:black"><a href="mailto:bsenftner@cyberextruder.com"><span style="color:blue">bsenftner@cyberextruder.com</span></a>
<o:p></o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>