<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div><blockquote type="cite" class=""><div class=""><div bgcolor="#FFFFFF" text="#000000" class="">I am sorry if Iitwasn't clear enough. Your suggestion is exactly
what I want to do: implement my own LIVE555 transcoding filter
(based on libAV). My confusion is about the registering of urls and
where to put the libAV play command. Do I need to register two urls:
the "normal camerastream" and the "transcoded camerastream", or
should it be enough to just use the "transcoded camerastream”?</div></div></blockquote><div><br class=""></div>You create (using “ProxyServerMediaSession::createNew()”) a single “ProxyServerMediaSession” object, with the “<a href="rtsp://“" class="">rtsp://“</a> URL for the ‘back-end’ stream, as usual.</div><div><br class=""></div><div>However, you also pass - as the last parameter to “ProxyServerMediaSession::createNew()” - a pointer to a “MediaTranscodingTable” object. See “liveMedia/include/MediaTranscodingTable.hh”.</div><div><br class=""></div><div>I.e., you would define your own subclass of “MediaTranscodingTable”, and reimplement - in this subclass - the “lookupTranscoder()” virtual function. Your “lookupTranscoder()” implementation would look something like the following (e.g., this is what I do in my new WebRTC demo to transcode from MPEG-4 to VP8 video):</div><div><br class=""></div><div>//////////</div><div>FramedFilter* MyMediaTranscodingTable::lookupTranscoder(MediaSubsession& inputCodecDescription, char*& outputCodecName) {<br class=""> if (strcmp(inputCodecDescription.codecName(), "MP4V-ES") == 0) {<br class=""> outputCodecName = strDup("VP8");<br class=""> return myMPEG4toVP8VideoTranscoder::createNew(envir(), inputCodecDescription.readSource());<br class=""> } else {<br class=""> outputCodecName = NULL;<br class=""> return NULL;</div><div> }<br class=""> }<br class=""><div>//////////</div><div><br class=""></div><div>In this example, “myMPEG4toVP8VideoTranscoder” is a “FramedFilter” subclass that transcodes MPEG-4 video frames to VP8 video frames. You would write a similar “FramedFilter” subclass for whatever pair(s) of codecs you want to transcode. And, of course, you have to implement the transcoding yourself.</div><div class=""><br class=""></div></div><div>In your email, you refer to a “libAV play command”. I’m not sure what you mean by this, but perhaps you’re referring to the fact that the ‘libAV’ library has its own RTSP client functionality. Ignore that; it’s crap. We do all of the RTSP/RTP (at both the back and front ends of our proxy server); you'd use ‘libAV’ (formerly FFMPEG) merely for media transcoding. (Or, if you have some other way to do transcoding (e.g., in hardware), then you’d use that instead.)</div><br class=""><br class=""><div apple-content-edited="true" class="">
<span class="Apple-style-span" style="border-collapse: separate; border-spacing: 0px;"><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">Ross Finlayson<br class="">Live Networks, Inc.<br class=""><a href="http://www.live555.com/" class="">http://www.live555.com/</a></span></span>
</div>
<br class=""></body></html>