<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 14 (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:Cambria;
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;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
{mso-style-priority:99;
mso-style-link:"Balloon Text Char";
margin:0cm;
margin-bottom:.0001pt;
font-size:8.0pt;
font-family:"Tahoma","sans-serif";
mso-fareast-language:EN-US;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
{mso-style-priority:34;
margin-top:0cm;
margin-right:0cm;
margin-bottom:0cm;
margin-left:36.0pt;
margin-bottom:.0001pt;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri","sans-serif";
color:windowtext;}
span.BalloonTextChar
{mso-style-name:"Balloon Text Char";
mso-style-priority:99;
mso-style-link:"Balloon Text";
font-family:"Tahoma","sans-serif";}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";
mso-fareast-language:EN-US;}
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:1108818342;
mso-list-type:hybrid;
mso-list-template-ids:-1106721392 1074331663 1074331673 1074331675 1074331663 1074331673 1074331675 1074331663 1074331673 1074331675;}
@list l0:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l0:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l0:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l0:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1
{mso-list-id:1181318476;
mso-list-type:hybrid;
mso-list-template-ids:1651643244 1074331663 1074331673 1074331675 1074331663 1074331673 1074331675 1074331663 1074331673 1074331675;}
@list l1:level1
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l1:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l1:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l1:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l1:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l1:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-18.0pt;}
@list l1:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
--></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-IN link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Hi,<o:p></o:p></p><p class=MsoNormal>I am using Live555 library to create rtsp stream for live device source. I read the FAQ and mailing list and sub classed all the required classes ::<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'> </span></span><![endif]>Framed source (using the deviceSource.cpp model)<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'> </span></span><![endif]>OnDemandServerMediaSubsession (using H264VideoFileServerMediaSubsession model)<o:p></o:p></p><p class=MsoNormal>But few on the questions are I am not able to figure out:<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>1.<span style='font:7.0pt "Times New Roman"'> </span></span><![endif]>In each call of my doGetNextFrame() of my device source I am assuming that no frame data is available and I am returning. Instead whenever I receive data I trigger a event which schedule getNextFrame() of my device source. Is there is status check (waiting for event or running) required for Live555 run loop to schedule the task of the new data arrival in the function signalNewFrameData() of device source?<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l1 level1 lfo2'><![if !supportLists]><span style='mso-list:Ignore'>2.<span style='font:7.0pt "Times New Roman"'> </span></span><![endif]>In my OnDemandServerMediaSubsession subclass I have implemented both required function createNewStreamSource() and createNewRTPSink(). Since I set the reuseFirstSource to true in my OnDemandServerMediaSunsession I keep a reference of my device source in my dataMember variable. But the following code<o:p></o:p></p><p class=MsoNormal style='margin-left:36.0pt'>/// Function in OnDemandServerMediaSunsession causing application crash<o:p></o:p></p><p class=MsoListParagraph>char const* OnDemandServerMediaSubsession::sdpLines() {<o:p></o:p></p><p class=MsoListParagraph> if (fSDPLines == NULL) {<o:p></o:p></p><p class=MsoListParagraph> // We need to construct a set of SDP lines that describe this<o:p></o:p></p><p class=MsoListParagraph> // subsession (as a unicast stream). To do so, we first create<o:p></o:p></p><p class=MsoListParagraph> // dummy (unused) source and "RTPSink" objects,<o:p></o:p></p><p class=MsoListParagraph> // whose parameters we use for the SDP lines:<o:p></o:p></p><p class=MsoListParagraph> unsigned estBitrate;<o:p></o:p></p><p class=MsoListParagraph> FramedSource* inputSource = createNewStreamSource(0, estBitrate); // will return only device source<o:p></o:p></p><p class=MsoListParagraph> if (inputSource == NULL) return NULL; // file not found<o:p></o:p></p><p class=MsoListParagraph><o:p> </o:p></p><p class=MsoListParagraph> struct in_addr dummyAddr;<o:p></o:p></p><p class=MsoListParagraph> dummyAddr.s_addr = 0;<o:p></o:p></p><p class=MsoListParagraph> Groupsock dummyGroupsock(envir(), dummyAddr, 0, 0);<o:p></o:p></p><p class=MsoListParagraph> unsigned char rtpPayloadType = 96 + trackNumber()-1; // if dynamic<o:p></o:p></p><p class=MsoListParagraph> RTPSink* dummyRTPSink<o:p></o:p></p><p class=MsoListParagraph> = createNewRTPSink(&dummyGroupsock, rtpPayloadType, inputSource);<o:p></o:p></p><p class=MsoListParagraph><o:p> </o:p></p><p class=MsoListParagraph> setSDPLinesFromRTPSink(dummyRTPSink, inputSource, estBitrate);<o:p></o:p></p><p class=MsoListParagraph> Medium::close(dummyRTPSink);<o:p></o:p></p><p class=MsoListParagraph> closeStreamSource(inputSource); // will deallocate my device source and make my application crash. Commenting out this line and above line makes my application running<o:p></o:p></p><p class=MsoListParagraph> }<o:p></o:p></p><p class=MsoListParagraph><o:p> </o:p></p><p class=MsoListParagraph> return fSDPLines;<o:p></o:p></p><p class=MsoListParagraph>}<o:p></o:p></p><p class=MsoListParagraph>Commenting out those line is the right solution or I am doing something wrong elsewhere? Also is it required to store the rtpSink returned by the function createNewRTPSink() in my subclass of onDemandServerMediaSubSession?<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Cambria","serif";mso-fareast-language:EN-IN'>Thanks and Regards,<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Cambria","serif";mso-fareast-language:EN-IN'>Bhawesh Kumar Choudhary<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Cambria","serif";mso-fareast-language:EN-IN'>Graphics Engineer<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.0pt;font-family:"Cambria","serif";mso-fareast-language:EN-IN'>VizExperts India Pvt. Ltd.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='mso-fareast-language:EN-IN'><o:p> </o:p></span></p><p class=MsoNormal><o:p> </o:p></p></div></body></html>