[gst-devel] Extract AAC audio from Apple trailer?

Stefan de Konink skinkie at xs4all.nl
Sat Nov 12 20:20:16 CET 2005


On Sat, 12 Nov 2005, Ronald S. Bultje wrote:

> On Sat, 2005-11-12 at 18:44 +0100, Stefan de Konink wrote:
> > Ronald S. Bultje wrote:
> > > I have no clue what you did or what went wrong. Please me more
> > > descriptive.
> >
> > These commands were used:
> > gst-launch-0.8 -v sinesrc ! audioconvert ! faac ! ffmux_mp4 ! \
> > filesink location=blaatschaap.mp4
>
> Let me guess, you use ctrl-c to quit, right? This will cause ffmux_mp4
> to not write headers (which is done on end-of-stream), and thus the file
> will effectively be garbage.

Wow, thanks. Yes, the conversion is ok now.

But when playing:

skinkie at nemesis ~ $ gst-launch-0.8 -v filesrc location=blaatschaap.mp4 !
qtdemux .audio_00 ! faad ! audiorate ! alsasink
RUNNING pipeline ...
/pipeline0/filesrc0.src: caps = application/x-3gp
/pipeline0/qtdemux0.sink: caps = application/x-3gp
/pipeline0/filesrc0.src: active = TRUE
/pipeline0/qtdemux0.sink: active = TRUE
/pipeline0/qtdemux0.audio_00: active = TRUE
/pipeline0/qtdemux0.audio_00: caps = audio/mpeg, mpegversion=(int)4,
framed=(boolean)true, codec_data=(buffer)0a10, rate=(int)44100,
channels=(int)2
/pipeline0/faad0.sink: caps = audio/mpeg, mpegversion=(int)4,
framed=(boolean)true, codec_data=(buffer)0a10, rate=(int)44100,
channels=(int)2
/pipeline0/faad0.sink: active = TRUE
/pipeline0/faad0.src: active = TRUE
/pipeline0/audiorate0.sink: active = TRUE
/pipeline0/audiorate0.src: active = TRUE
/pipeline0/alsasink0.sink: active = TRUE
/pipeline0/audiorate0.src: caps = audio/x-raw-int, signed=(boolean)true,
width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2,
channel-positions=(GstAudioChannelPosition)<
GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT >, endianness=(int)1234
/pipeline0/alsasink0.sink: caps = audio/x-raw-int, signed=(boolean)true,
width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2,
channel-positions=(GstAudioChannelPosition)<
GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT >, endianness=(int)1234
/pipeline0/faad0.src: caps = audio/x-raw-int, signed=(boolean)true,
width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2,
channel-positions=(GstAudioChannelPosition)<
GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT >, endianness=(int)1234
/pipeline0/audiorate0.sink: caps = audio/x-raw-int, signed=(boolean)true,
width=(int)16, depth=(int)16, rate=(int)44100, channels=(int)2,
channel-positions=(GstAudioChannelPosition)<
GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT,
GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT >, endianness=(int)1234

(gst-launch-0.8:9418): GStreamer-CRITICAL **: gst_buffer_create_sub:
assertion `size > 0' failed
Segmentation fault


If you would like to receive gdb... I could make one for you, strace can
be found here: http://svi.cs.hro.nl/~skinkie/gst-mp4.strace

Mplayer recognize the file now and does play the audio, using faad.


My target is to try make a comparison between vorbis/theora and faad/mp4
in performance, quality and filesize. Currently I make hourly recordings
from a TV card. Hard killed per hour to split the files, not an optimal
situation. Every time the client disconnects from the tcpsrc, the next
key frame results in 'viewable' quality again in the new ogg file.

Though the client/server model wasn't bad. But the client should be a bit
more advanced. With MP4 I should make ffmux to write headers after one
hour. (Waiting for an external event) What is the way to make ffmux close
the current file and write the headers in Gstreamer terms?

(I guess something with disconnecting the src/sink and reconnecting it to
a new instance).


Stefan

ps. If I'm asking all obvious questions, could you please point me to a
URL where such things (per mux/codec type) are documented?





More information about the gstreamer-devel mailing list