[FFmpeg-devel] [PATCH] Add an RTSP muxer
Luca Abeni
lucabe72
Tue Jan 5 12:04:51 CET 2010
Hi Martin,
On 05/01/10 11:31, Martin Storsj? wrote:
[...]
>>> - I need to better understand your rtpenc.c patches. Well, I understand what
>>> the patches do, but I do not understand why all those changes are needed (for
>>> example, patch 10/24 says "Use the AVStream st member from RTPMuxContext
>>> instead of AVFormatContext->streams[0]", but it does not explain why. BTW, I
>>> just noticed that the "st" field of RTPMuxContext seems to be unused...).
>>
>>> It seems that your goal is to use the rtpenc code without using an
>>> output format context... Why? Cannot the RTSP muxer create one or more
>>> proper RTP muxers, and use them, instead of exposing some of the RTP
>>> muxer internals?
>>
>> Yes, that was my goal. I wasn't really sure how to chain the muxers, to
>> connect the AVStream* that the user set in the RTSP AVFormatContext to the
>> internal RTP AVFormatContexts (just simply copy the pointers?), and thus I
>> thought using RTPMuxContext directly would be leaner.
>>
>> From both your and Ronalds reactions, I see that you'd prefer me to use
>> the full AVFormatContext interface inbetween.
>
> I tried creating full proper RTP muxers for each of the streams
Thanks for trying this.
> and while it does work, it feels more messy to me.
Ok; I need some time for studying the problem and seeing if this
approach can be taken without introducing any mess in the code.
> Downsides to this approach, in my opinion:
>
> - I store the RTP AVFormatContext in rtsp_st->transport_priv
This looks fine, I think.
> and thus
> initializes it long before the proper initialization point in
> rtsp_open_transport_ctx. This, since I need to create the AVFormatContexts
> before doing the setup, in order to use the contexts for creating the SDP
> (as the correct approach was, as I understood from Luca).
Without having looked at the code yet, this looks fine too... Obviously,
rtsp_open_transport_ctx() will need some modifications (or, we call a
different function in case of RTSP output). But I hope it can be done
cleanly.
> - To get the codec parameters available to the RTP muxer, I simply free
> the newly created AVCodecContext and copy the pointer to the
> AVCodecContext of the original AVStream in the RTSP muxer. Instead of
> copying the pointer, the relevant parts (extradata, frame_size, etc) could
> be copied instead, of course.
I need to look at it more deeply. But why freeing the AVCodecContext?
Maybe both the RTSP's AVStream and the RTP's avstream can contain a
pointer to the same AVCodecContext? Or am I missing something? I'll have
a better look later.
> Given this comparison, what's your opinion - internal RTP muxer interface
> or proper chained AVFormatContexts within the RTSP muxer?
I still think the "chained muxers" approach is better, but maybe some
comments from Michael would help.
Of course, we have to implement chained muxers in a clean way, without
making the code too complex, and this might require some work... As I
wrote in the previous email, I am willing to help in this.
Thanks,
Luca
More information about the ffmpeg-devel
mailing list