[vlc-devel] Re: [vlc] Playing 3GPP Audio Only LATM AAC/HE-AAC Streams
Ross Finlayson
finlayson at live555.com
Fri Mar 3 03:44:55 CET 2006
FYI, I have now found and fixed this problem.
The problem was caused by the fact that the "faad" decoder - unlike
other AAC decoders - does not handle the 'LATM frame size' field
that's at the start of each LATM-format AAC audio frame. I fixed the
problem by (i) updating the "LIVE555 Streaming Media" libraries to
support (optionally) omitting this field on incoming frames from
LATM/RTP streams, and (ii) updating VLC's "livedotcom.cpp" file to
tell the LIVE555 code to omit this field.
The attached patch to "livedotcom.cpp" will fix the problem. Note
that, to work, it requires the use of version 2006.03.03 or later of
the "LIVE555 Streaming Media" code.
With this fix, VLC will successfully play all of Greg Ogonowski's
streams: AAC or AAC+, one frame per packet or multiple frames per packet.
Ross.
ps. At some point, the VLC developers should rename the file
"livedotcom.cpp" to "live555.cpp". The domain name "live.com" is now
owned by Microsoft, and we should not be misleading people into
thinking that this code has anything to do with Microsoft's "live.com" stuff.
-------------- next part --------------
--- livedotcom.cpp Thu Mar 2 17:32:44 2006
+++ livedotcom.cpp.new Thu Mar 2 17:59:29 2006
@@ -1,5 +1,5 @@
/*****************************************************************************
- * livedotcom.cpp : live.com support.
+ * livedotcom.cpp : LIVE555 Streaming Media support.
*****************************************************************************
* Copyright (C) 2003-2005 the VideoLAN team
* $Id$
@@ -509,6 +509,12 @@
memcpy( tk->fmt.p_extra, p_extra, i_extra );
delete[] p_extra;
}
+
+#if LIVEMEDIA_LIBRARY_VERSION_INT >= 1141257600
+ /* Because the "faad" decoder does not handle the LATM data length field
+ at the start of each returned LATM frame, tell the RTP source to omit it. */
+ ((MPEG4LATMAudioRTPSource*)sub->rtpSource())->omitLATMDataLengthField();
+#endif
}
else if( !strcmp( sub->codecName(), "MPEG4-GENERIC" ) )
{
More information about the vlc-devel
mailing list