> 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”?
You create (using “ProxyServerMediaSession::createNew()”) a single
“ProxyServerMediaSession” object, with the “rtsp://“ URL for the ‘back-end’
stream, as usual.
However, you also pass - as the last parameter to
“ProxyServerMediaSession::createNew()” - a pointer to a “MediaTranscodingTable”
object. See “liveMedia/include/MediaTranscodingTable.hh”.
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):
//////////
FramedFilter* MyMediaTranscodingTable::lookupTranscoder(MediaSubsession&
inputCodecDescription, char*& outputCodecName) {
if (strcmp(inputCodecDescription.codecName(), "MP4V-ES") == 0) {
outputCodecName = strDup("VP8");
return myMPEG4toVP8VideoTranscoder::createNew(envir(),
inputCodecDescription.readSource());
} else {
outputCodecName = NULL;
return NULL;
}
}
//////////
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.
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.)
Ross Finlayson
Live Networks, Inc.
http://www.live555.com/
_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel