<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:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="font-size:11.0pt">I am working on a project that uses the live555 proxy server to receive 4K video streams from a H.265 IP camera sent over a radio link to efficiently redistribute them over RTSP. I am able to connect a VLC
 client and play the RTSP stream from the proxy server. An additional customer requirement however is to also be able receive the video stream as MPEGTS over multicast UDP (not RTP) for compatibility with some legacy SW. I reviewed the many articles on the
 live555 forum. Here is what I came up with. It is not clear to me if this is the right approach.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">First I modified the RTSP client to request RAW-UDP from the proxy server as described here:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">http://lists.live555.com/pipermail/live-devel/2011-November/014016.html<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">I verified that the SETUP command is sending out transport header as RAW/RAW/UDP. Next I use a BasicUDPSink to send out the data instead of the DummySink in that example. I wrote a quick multicast client (test
 code) to join the multicast group and dump the data. It see a whole bunch of frames beginning with the the same sequence of bytes. I am thinking these are raw H.265 frames.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Next I added a MPEG2TransportStreamFramer to the incoming data and then send it to the BasicUDPSink as described here:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">http://lists.live555.com/pipermail/live-devel/2015-April/019234.html<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">like this ...<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    struct in_addr outputAddress;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    outputAddress.s_addr = our_inet_addr(outputAddressStr);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    portNumBits outputPortNum = 4444;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    Port const outputPort(outputPortNum);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    unsigned char const outputTTL = 255;<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    outputGroupsock = new Groupsock(env, outputAddress, outputPort, outputTTL);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    unsigned const maxPacketSize = 65536; // allow for large UDP packets<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">    scs.subsession->sink = BasicUDPSink::createNew(env, outputGroupsock, maxPacketSize);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">                FramedSource* videoES = scs.subsession->readSource();<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">                videoSource = MPEG2TransportStreamFramer::createNew(env, videoES);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">                scs.subsession->sink->startPlaying(*videoSource, subsessionAfterPlaying, scs.subsession);<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Here is what I observe ...<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">1. I see frames beginning with 0x47 0x01 (as I understand that this is the MPEGTS header) coming into my multicast test client.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">2. VLC is unable to play the MPEGTS video stream. I use the URL udp://@<multicast-group-ip-addr>:<portnum>. I do not see any video.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">3. Also the frames stop coming into my test multicast client program. The RTSP client seems blocked on select call on the socket inside
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">BasicUDPSink. I am looking further into why this is happening.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">Questions:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">1. Am I pursing the right strategy to accomplish my final objective - namely, playing MPEGTS stream over multicast UDP, the video source being the proxy server.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">2. If yes, what is the best way to verify that the RAW-UDP data I receive in my RTSP client are indeed H.265 frames ?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt">3. Also, what the best way to verify that the MPEGTS framing is being sent to the multicast group?<o:p></o:p></span></p>
<p class="MsoNormal"><span style="font-size:11.0pt"><o:p> </o:p></span></p>
</div>
</body>
</html>