Re: [Rhythmbox-devel] Problem with faac encoded m4a files



Jaap Haitsma wrote:
Gunnar Degnbol wrote:

I can't get Rhythmbox to play m4a files encoded with faac. m4a files
encoded with iTunes work, and the faac files play on my iPod Shuffle,
and in AmaroK and XMMS.

I am using Fedora Core 4 on x86, and have installed all the plugins and
decoders with yum. faac is compiled from sources, as the rpm does
not have mp4 support.

The -d option tells me the files are identified as video/quicktime
instead of audio/x-m4a (what I see for an iTunes encoded file):

[0x91f5a58] [rb_metadata_load] rb-metadata-gst.c:468 (23:57:25): loading metadata for uri: file:///home/gunnar/ai/American_Idiot.m4a
[0x91f5a58] [rb_metadata_gst_typefind_cb] rb-metadata-gst.c:421 (23:57:25): found type video/quicktime
[0x91f5a58] [rb_metadata_gst_load_tag] rb-metadata-gst.c:360 (23:57:25): uri: file:///home/gunnar/ai/American_Idiot.m4a tag: title
...


--gst-debug-level=5 produces a 1.2 MB logfile, that is a bit hard to make
sense of. Gstreamer seems to understand that it is an audio file, until it
suddenly is a video.


Is this a Rhythmbox problem or a Gstreamer bug? Has anybody had any similar
problem?


I guess it's gstreamer bug. You can try playing it using the command line utility gst-launch (Do a man gst-launch to see how to play a music file). If you see the same behaviour ovethere it's caused by gstreamer

Jaap


It depends. "gst-launch -v filesrc=filename ! spider ! alsasink" plays both files, but it also plays the audio side of a QuickTime movie, which Rhythmbox of course wants to avoid.

The faac encoded aac file shows this:

/pipeline0/alsasink0.sink: active = TRUE
/pipeline0/filesrc0.src: caps = video/quicktime
/pipeline0/spider0/sink_ident.sink: caps = video/quicktime
/pipeline0/spider0/sink_ident.src: caps = video/quicktime
/pipeline0/spider0/qtdemux0.sink: caps = video/quicktime
/pipeline0/spider0/qtdemux0.sink: active = TRUE
/pipeline0/spider0/qtdemux0.audio_00: active = TRUE
/pipeline0/spider0/qtdemux0.audio_00: caps = audio/mpeg, mpegversion=(int)4, rate=(int)44100, channels=(int)2
/pipeline0/spider0/faad0.sink: caps = audio/mpeg, mpegversion=(int)4, rate=(int)44100, channels=(int)2
/pipeline0/spider0/faad0.sink: active = TRUE


While the QuickTime movie shows this:

/pipeline0/alsasink0.sink: active = TRUE
/pipeline0/filesrc0.src: caps = video/quicktime
/pipeline0/spider0/sink_ident.sink: caps = video/quicktime
/pipeline0/spider0/sink_ident.src: caps = video/quicktime
/pipeline0/spider0/qtdemux0.sink: caps = video/quicktime
/pipeline0/spider0/qtdemux0.sink: active = TRUE
/pipeline0/spider0/qtdemux0.video_00: active = TRUE
/pipeline0/spider0/qtdemux0.audio_00: active = TRUE
/pipeline0/spider0/qtdemux0.audio_00: caps = audio/mpeg, layer=(int)3, mpegversion=(int)1, rate=(int)32000, channels=(int)2
/pipeline0/spider0/mad0.sink: caps = audio/mpeg, layer=(int)3, mpegversion=(int)1, rate=(int)32000, channels=(int)2
/pipeline0/spider0/mad0.sink: active = TRUE


The bug could be fixed in one or all of faac, which could be more like the iTunes encoder (though it is good enough for iTunes and iPod), or gstreamer, which ought to know that a file without a video stream is not a QuickTime movie, or Rhythmbox, which could identify videos using the presence of a video stream, instead of relying on the mime type returned by gstreamer.

Gunnar

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]