<!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. Just cables and a switch. 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. I now want to modify this application to read from an elementary stream video (.m4e/.m4v) file instead and stream that (still unicast). The testOnDemandRTSPServer works well for this purpose, but I do not want the "on-demand" behavior of it. 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 MediaSource* videoSource;</FONT>
<BR><FONT SIZE=2 FACE="Courier New">2 RTPSink* videoSink; </FONT>
<BR><FONT SIZE=2 FACE="Courier New"> ...</FONT>
<BR><FONT SIZE=2 FACE="Courier New">3 videoSink = MPEG1or2VideoRTPSink::createNew(*env, &rtpGroupsock);</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> ...</FONT>
<BR><FONT SIZE=2 FACE="Courier New">4 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 MPEG4VideoStreamFramer* videoSource;</FONT>
<BR><FONT SIZE=2 FACE="Courier New">6 RTPSink* videoSink;</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> ...</FONT>
<BR><FONT SIZE=2 FACE="Courier New">7 videoSink = MPEG4ESVideoRTPSink::createNew(*env, &rtpGroupsock, 96);</FONT>
<BR><FONT SIZE=2 FACE="Courier New"> ...</FONT>
<BR><FONT SIZE=2 FACE="Courier New">8 videoSource = MPEG4VideoStreamFramer::createNew(*env, videoES);</FONT>
</P>
<BR>
<BR>
<P><FONT SIZE=2 FACE="Courier New">Unfortunately, this does not seem to work. 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 "32" instead of "96" 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>