[FFmpeg-devel] [PATCH] ffserver rtsp bug fixes
Howard Chu
hyc
Wed May 19 09:10:33 CEST 2010
Luca Abeni wrote:
> On 05/19/2010 08:44 AM, Howard Chu wrote:
>> Luca Abeni wrote:
>>> Hi,
>>>
>>> On 05/19/2010 08:24 AM, Howard Chu wrote:
>>> [...]
>>>>> Note that I still haven't gotten ffserver to successfully stream
>>>>> anything from
>>>>> a file, there are plenty more problems left to chase down.
>>>>
>>>> It turns out that streaming just audio from FLV files was working fine.
>>>> But the H264 video was encoded as the AVC1 subtype, and none of the sdp
>>>> or rtp code handled this. This patch gets RTP working for me from an FLV
>>>> (AVC1) file source.
>>>
>>> I think this is the wrong solution. The (IMHO) correct one would be to
>>> use
>>> a bitstream filter to convert the NAL syntax.
>>
>> Why is that a better solution?
>
> Because in this way we can separate different functionalities (converting
> the bitstream syntax - in the bitstream filter - and packetising the
> bitstream - in the rtp mixer) in different parts of the code. And we can
> avoid code duplication (and we can reduce the complexity of the rtp muxer
> code).
> AFAIR, the needed bitstream filter is already there, it just needs to be
> used (I used this solution in one of my programs, some time ago... If I
> remember well, I just needed to fix some minor issue. But then it worked).
I don't think the muxer's complexity has been harmed by these patches. On the
other hand, I've just taken a look at the h264_mp4toannexb filter source code
and it is quite dense. Also, anything that does "alloc_and_copy" is a bad idea
from a memory and CPU resource perspective.
If bitstream filters were capable of operating in-place on the data, I might
agree with you. But to me it just looks like a useless pig.
> In my opinion, a muxer (or a demuxer) should accept (or produce) only one
> bitstream syntax per codec. If the application wants to use a different
> bitstream syntax, then it should use a bitstream filter for the conversion.
How does the application know that it needs to use a filter? How does it know
that the syntaxes are different? Why should the application author worry about
details like this that are otherwise hidden under several layers of binary
encoding?
>> And if it is, then why hasn't it already been done
>
> This, I do not know.
>> so that libavcodec/h264.c doesn't have to do exactly these
>> same steps (after all, that's where I lifted this code from) ?
>
> This smells like code duplication... :)
Indeed. These functions ought to be collected into a single place. I believe
the "clean split" between decoder, muxer, and network layer you're alluding to
is a distinct disadvantage here. Anything that touches H264 has to understand
how to parse NALUs; that code belongs in a single place usable from all of
those layers.
--
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/
More information about the ffmpeg-devel
mailing list