<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.7654.12">
<TITLE>Modifying testMPEG1or2VideoStreamer to Stream m4e Files</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P><FONT SIZE=2 FACE="Arial">Hello,</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">I am using Live555 under Ubuntu Linux 9.04, streaming over a simple private LAN to a VLC client running under Windows.&nbsp; Just cables and a switch.&nbsp; No router, no firewalls.</FONT></P>

<P><FONT SIZE=2 FACE="Arial">I modified testMPEG1or2VideoStreamer to stream unicast to a VLC client and it works well.&nbsp; I now want to modify this application to read from an elementary stream video (.m4e/.m4v) file instead and stream that (still unicast).&nbsp; The testOnDemandRTSPServer works well for this purpose, but I do not want the &quot;on-demand&quot; behavior of it.&nbsp; I accept the fact that my VLC client must be listening before the stream starts .</FONT></P>

<P><FONT SIZE=2 FACE="Arial">I thought that this would be easy to do by modifying the testMPEG1or2VideoStreamer source code as follows:</FONT>
</P>

<P><FONT SIZE=2 FACE="Arial">Replace:</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">1&nbsp;&nbsp;&nbsp; MediaSource* videoSource;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">2&nbsp;&nbsp;&nbsp; RTPSink*&nbsp;&nbsp;&nbsp;&nbsp; videoSink; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</FONT>

<BR><FONT SIZE=2 FACE="Courier New">3&nbsp;&nbsp;&nbsp; videoSink = MPEG1or2VideoRTPSink::createNew(*env, &amp;rtpGroupsock);</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</FONT>

<BR><FONT SIZE=2 FACE="Courier New">4&nbsp;&nbsp;&nbsp; videoSource = MPEG1or2VideoStreamFramer::createNew(*env, videoES, iFramesOnly);</FONT>
</P>
<BR>

<P><FONT SIZE=2 FACE="Arial">With:</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">5&nbsp;&nbsp;&nbsp; MPEG4VideoStreamFramer*&nbsp; videoSource;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">6&nbsp;&nbsp;&nbsp; RTPSink*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; videoSink;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</FONT>

<BR><FONT SIZE=2 FACE="Courier New">7&nbsp;&nbsp;&nbsp; videoSink = MPEG4ESVideoRTPSink::createNew(*env, &amp;rtpGroupsock, 96);</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ...</FONT>

<BR><FONT SIZE=2 FACE="Courier New">8&nbsp;&nbsp;&nbsp; videoSource = MPEG4VideoStreamFramer::createNew(*env, videoES);</FONT>
</P>
<BR>
<BR>

<P><FONT SIZE=2 FACE="Courier New">Unfortunately, this does not seem to work.&nbsp; All I get is garbage video at the VLC display, if I get any display at all. Wireshark's RTP analyzer can interpret some of the data, but it is mostly invalid.</FONT></P>

<P><FONT SIZE=2 FACE="Courier New">I also tried various combinations of using the value &quot;32&quot; instead of &quot;96&quot; on line 7, and using MPEG4VideoStreamDiscreteFramer::createNew() on line 8.</FONT></P>

<P><FONT SIZE=2 FACE="Courier New">Am I going about this the wrong way?</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">Thanks,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">Mike.</FONT>
</P>
<BR>

</BODY>
</HTML>