<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Thanks for the help.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
The audio is coming from a radio's audio output thru an AXIS media encoder and doing audio only. The video we have no control over as it's a purpose-built camera by another contractor and always comes in as MPEG4 over UDP. We aren't trying to synchronize them,
 but just trying to put them on the same stream. I'm able to get the UDP to work and the Audio to work separately, but having trouble adding them to the same stream and playing it in VLC because I don't have access to the ProxyServerMediaSubsession. I also
 tried to add the audio as a subsession to the UDP video, but ran into the same problem of not being able to instantiate the ProxyServerMediaSubsession directly.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Also, I inherited this code that had already subclassed OnDemandServerMediaSubsession. I diffed it against the baseline one and it looks like the only thing that was removed was at the end of the startPlaying() method an if statement was commented out.</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
It was changed from this:</div>
<div class="elementToProof" style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">  if (fRTCPInstance != NULL) {</span></div>
<div><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">    // Hack: Send an initial RTCP "SR" packet, before the initial RTP packet, so that receivers will (likely)
 be able to</span></div>
<div><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">    // get RTCP-synchronized presentation times immediately:</span></div>
<div><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">    fRTCPInstance->sendReport();</span></div>
<div><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">  }</span></div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span></div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">To this:</span></div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">      // Some clients dont like the RTCP packet before the initial RTP packet</span></div>
<div><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">      //if (fRTCPInstance != NULL) {</span></div>
<div><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">      //    // Hack: Send an initial RTCP "SR" packet, before the initial RTP packet, so that receivers will
 (likely) be able to</span></div>
<div><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">      //    // get RTCP-synchronized presentation times immediately:</span></div>
<div><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">      //    fRTCPInstance->sendReport();</span></div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">      //}</span></div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span></div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; color: rgb(0, 0, 0);">If
 you think I can re-use yours I will do so as I don't like re-inventing the wheel, especially since it makes updates and fixes in the future much harder to merge.</span><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"><br>
</span></div>
<div class="elementToProof"><span style="font-family: Aptos, Aptos_EmbeddedFont, Aptos_MSFontService, Calibri, Helvetica, sans-serif; font-size: 16px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; color: rgb(0, 0, 0);"><br>
</span></div>
<div id="Signature">
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Thanks,</span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Eric Eastman</span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Staff Software Engineer</span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);"> </span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Offsite Location: IDE Facility</span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">3045 Technology Parkway</span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Orlando, Fl 32826</span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Phone: (407) 883-3138</span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Email:
<a href="mailto:eric.eastman@aitengineering.com" id="OWA95afdcfd-0822-64ed-3f9f-c02e522dbd17" class="OWAAutoLink" style="margin-top: 0px; margin-bottom: 0px;">
eric.eastman@aitengineering.com</a></span></p>
<p style="margin-right: 0px; margin-left: 0px;"><span style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">Site:
<a href="http://www.aitengineering.com/" id="OWA51c3e70d-d1ed-5f1b-c755-2e1028cbeb1a" class="OWAAutoLink" style="margin-top: 0px; margin-bottom: 0px;">
www.aitengineering.com</a></span></p>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>From:</b> live-devel <live-devel-bounces@us.live555.com> on behalf of Ross Finlayson <finlayson@live555.com><br>
<b>Sent:</b> Monday, November 6, 2023 5:54 PM<br>
<b>To:</b> LIVE555 Streaming Media - development & use <live-devel@us.live555.com><br>
<b>Subject:</b> **EXTERNAL**Re: [Live-devel] Adding UDP Video to an Audio RTSP URL coming from an AXIS encoder in the same stream doesn't work</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">[WARNING] This message comes from outside of AIT. Use extreme caution with links or attachments. [WARNING]<br>
<br>
> On Nov 2, 2023, at 10:20 AM, Eric Eastman <Eric.Eastman@AITEngineering.com> wrote:<br>
><br>
> I'm trying to combine video and audio in the same stream. I do see posts were you just add a subsession, but it doesn't work if the subsession is an rtsp url.<br>
<br>
Sorry for the delay in responding to this.  I haven’t tried adding a “ServerMediaSubsession” that’s not a “ProxyServerMediaSubsession” to a “ProxyServerMediaSession”, but off the top of my head, I don’t know of any reason why that wouldn’t work.<br>
<br>
But my first question is: What specifically are you trying to do?  Your audio appears to come from a ‘back-end’ RTSP server (embedded in an Axis camera).  But where is your video coming from?  If it’s coming from the same camera, then why do you not also use
 its RTSP stream?  Or are you processing the video in some way before sending it to the proxy server?  Note that it you do this, you have little chance of properly synchronizing audio and video.  (To get A/V synchronization, both the audio and video substreams
 should use RTP.)  Is it possible that the proxy server is actually sending both audio and video to your 'front-end' RTSP client (media player), but that it’s not able to render it because the timestamps are messed up?  You can test this by using “openRTSP”
 <<a href="http://www.live555.com/openRTSP">https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.live555.com%2FopenRTSP&data=05%7C01%7Ceric.eastman%40aitengineering.com%7C2b8839a207304eb79d1508dbdf34af47%7C96108be3d6734e76aee49c7bb49a433a%7C0%7C0%7C638349189630624733%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=KVV1CEyI4P%2Byl4v%2FafJCatvvM%2B6Ox3Cw45q2%2FYbUZBY%3D&reserved=0</a>>
 as your front-end RTSP client.<br>
<br>
An alternative would be to do the media processing/transcoding inside the proxy server, using the optional ’transcoding’ mechanism that’s provided with the “ProxyServerMediaSubsession” class.  This isn’t well-documented, but you can see it by noting the optional
 “transcodingTable” parameter to the “ProxyServerMediaSubsession” constructor.<br>
<br>
Also, why are you trying to reimplement the “OnDemandServerMediaSubsession” class (but calling it “OnDemandMediaSubsession”)?  What’s wrong with the “OnDemandServerMediaSubsession” class that we already give you?  If you find yourself duplicating a lot of the
 code that we've already given you, then you’re likely doing something wrong.<br>
<br>
<br>
Ross Finlayson<br>
Live Networks, Inc.<br>
<a href="http://www.live555.com/">https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.live555.com%2F&data=05%7C01%7Ceric.eastman%40aitengineering.com%7C2b8839a207304eb79d1508dbdf34af47%7C96108be3d6734e76aee49c7bb49a433a%7C0%7C0%7C638349189630624733%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=CmW3dYto2TvNgcKo8xuYAuo1QzzZBIMkZ6ryrmY%2FmlM%3D&reserved=0</a><br>
<br>
<br>
_______________________________________________<br>
live-devel mailing list<br>
live-devel@lists.live555.com<br>
<a href="http://lists.live555.com/mailman/listinfo/live-devel">https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Flists.live555.com%2Fmailman%2Flistinfo%2Flive-devel&data=05%7C01%7Ceric.eastman%40aitengineering.com%7C2b8839a207304eb79d1508dbdf34af47%7C96108be3d6734e76aee49c7bb49a433a%7C0%7C0%7C638349189630624733%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=MWRDXIFnrYpUz5InNzL2H9zMWEOM8T9UpI02hvG1b2A%3D&reserved=0</a><br>
</div>
</span></font></div>
</body>
</html>