Re: [Rhythmbox-devel] .wax files



Works in VLC (http://videolan.org), so there is free software code out
there to play this format. Your question is really about Gstreamer,
though: Rhythmbox uses Gstreamer as an audio engine. The fact that you
can't play this file in Rhythmbox is due to two problems with
Gstreamer (at least, the version of Gstreamer shipped with Ubuntu
9.10):

1) The .wax playlist file format is not supported. This is a plaintext
or XML-ish file format that lists the playlist entries prominently.
Since it's human readable, I copied out the URL and tried it with
gst-launch-0.10, a very handy swiss army knife that lets you examine
your gstreamer configuration in detail:

$ gst-launch-0.10 playbin2 uri=http://82.135.234.199/Pukas

(gst-launch-0.10:1986): GLib-WARNING **: g_set_prgname() called multiple times
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
ERROR: from element
/GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstTypeFindElement:typefindelement0:
Could not determine type of stream.
Additional debug info:
gsttypefindelement.c(524): gst_type_find_element_handle_event ():
/GstPlayBin2:playbin20/GstURIDecodeBin:uridecodebin0/GstTypeFindElement:typefindelement0
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...

This hints at the second problem, which only appears explicitly upon
further inspection:

$ gst-launch-0.10 -vvv mmssrc location=mms://82.135.234.195/Pukas !
asfdemux ! filesink location=output.what

(gst-launch-0.10:2359): GLib-WARNING **: g_set_prgname() called multiple times
Setting pipeline to PAUSED ...
/GstPipeline:pipeline0/GstMMS:mms0.GstPad:src: caps = video/x-ms-asf
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstASFDemux:asfdemux0.GstPad:sink: caps = video/x-ms-asf
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps =
audio/x-wma, wmaversion=(int)3, bitrate=(int)128016, depth=(int)16,
rate=(int)48000, channels=(int)2, block_align=(int)5462,
codec_data=(buffer)1000030000000000000000000000e0000000
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
^CCaught interrupt -- handling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 19792690991 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstASFDemux:asfdemux0.GstPad:audio_00: caps = NULL
/GstPipeline:pipeline0/GstASFDemux:asfdemux0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstMMS:mms0.GstPad:src: caps = NULL
Setting pipeline to NULL ...
Freeing pipeline ...


As it seems, gstreamer can correctly demux the ASF container format
using asfdemux. But within the container is a file format that the
type finding mechanism can't handle (this is a snippet from the
above):

 audio/x-wma, wmaversion=(int)3

WMA v3 is a new-ish proprietary Microsoft audio format (Windows Media
Audio). On Ubuntu 9.10, with all Gstreamer plugins installed, neither
gstreamer nor gst-ffmpeg was able to decode WMA v3. Therefore our
conundrum.

However, I remembered that I have access to the Fluendo codec pack,
because I purchased it a while back. Fluendo's employees contribute
very heavily to open source Gstreamer development, but due to legal
reasons (software patents), they also sell closed-source, inexpensive
Gstreamer codecs for proprietary, patent-encumbered media formats. WMA
v3 is one of the formats they do support.

I tried installing this codec pack and then playing the stream again:

$ gst-launch-0.10 -vvv mmssrc location=mms://82.135.234.195/Pukas !
decodebin2 ! audioconvert ! wavenc ! filesink location=output.wav
(gst-launch-0.10:2476): GLib-WARNING **: g_set_prgname() called multiple times
Setting pipeline to PAUSED ...
/GstPipeline:pipeline0/GstMMS:mms0.GstPad:src: caps = video/x-ms-asf
Pipeline is PREROLLING ...
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:src:
caps = video/x-ms-asf
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:sink:
caps = video/x-ms-asf
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstGhostPad:sink:
caps = video/x-ms-asf
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstGhostPad:sink.GstProxyPad:proxypad0:
caps = video/x-ms-asf
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstFluAsfDemux:fluasfdemux0.GstPad:sink:
caps = video/x-ms-asf
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0:
max-size-buffers = 5
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0:
max-size-bytes = 2097152
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:sink0:
caps = audio/x-wma, wmaversion=(int)3, rate=(int)48000,
channels=(int)2, bitrate=(int)128016, depth=(int)16, width=(int)16,
block_align=(int)5462,
codec_data=(buffer)1000030000000000000000000000e0000000
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:src0:
caps = audio/x-wma, wmaversion=(int)3, rate=(int)48000,
channels=(int)2, bitrate=(int)128016, depth=(int)16, width=(int)16,
block_align=(int)5462,
codec_data=(buffer)1000030000000000000000000000e0000000
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstDecodePad:src0:
caps = audio/x-raw-int, channels=(int)2, width=(int)16, depth=(int)16,
rate=(int)48000, signed=(boolean)true, endianness=(int)1234
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstFluWMADec:fluwmadec0.GstPad:src:
caps = audio/x-raw-int, channels=(int)2, width=(int)16, depth=(int)16,
rate=(int)48000, signed=(boolean)true, endianness=(int)1234
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstFluWMADec:fluwmadec0.GstPad:sink:
caps = audio/x-wma, wmaversion=(int)3, rate=(int)48000,
channels=(int)2, bitrate=(int)128016, depth=(int)16, width=(int)16,
block_align=(int)5462,
codec_data=(buffer)1000030000000000000000000000e0000000
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps
= audio/x-raw-int, channels=(int)2, width=(int)16, depth=(int)16,
rate=(int)48000, signed=(boolean)true, endianness=(int)1234
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps
= audio/x-raw-int, channels=(int)2, width=(int)16, depth=(int)16,
rate=(int)48000, signed=(boolean)true, endianness=(int)1234
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstDecodePad:src0.GstProxyPad:proxypad3:
caps = audio/x-raw-int, channels=(int)2, width=(int)16, depth=(int)16,
rate=(int)48000, signed=(boolean)true, endianness=(int)1234
/GstPipeline:pipeline0/GstWavEnc:wavenc0.GstPad:sink: caps =
audio/x-raw-int, channels=(int)2, width=(int)16, depth=(int)16,
rate=(int)48000, signed=(boolean)true, endianness=(int)1234
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = audio/x-wav
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
^CCaught interrupt -- handling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 29124176401 ns.
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
/GstPipeline:pipeline0/GstFileSink:filesink0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstWavEnc:wavenc0.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstWavEnc:wavenc0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:src: caps = NULL
/GstPipeline:pipeline0/GstAudioConvert:audioconvert0.GstPad:sink: caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstDecodePad:src0: caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstFluWMADec:fluwmadec0.GstPad:src:
caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstFluWMADec:fluwmadec0.GstPad:sink:
caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:sink0:
caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstMultiQueue:multiqueue0.GstPad:src0:
caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstFluAsfDemux:fluasfdemux0.GstFluAsfStream:stream_0_1:
caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstFluAsfDemux:fluasfdemux0.GstPad:sink:
caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:src:
caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20/GstTypeFindElement:typefind.GstPad:sink:
caps = NULL
/GstPipeline:pipeline0/GstDecodeBin2:decodebin20.GstGhostPad:sink: caps = NULL
/GstPipeline:pipeline0/GstMMS:mms0.GstPad:src: caps = NULL
Setting pipeline to NULL ...
Freeing pipeline ...


When I played the output file from the above, output.wav, I got what
appeared to be an Italian woman saying the lead-in for this radio
station.

Now, with Fluendo's codecs installed, the mms URI (but not the
original .wax file) works fine in Rhythmbox.

So, in short, you have two options available to get this working, in
general, on the free desktop:

1. Use Rhythmbox as your player; buy/install the Fluendo codec pack
(or at least the WMA plugin); and use the link
mms://82.135.234.195/Pukas instead of the .wax file.

OR

2. Use the free VideoLAN Client (VLC), which is also shipped by
default on Ubuntu. This supports both WMA v3 and the .wax file format.

In some sense, the deficiency of Gstreamer in playing this file is a
bug, particularly in gst-plugins-ugly, because -ugly supports
patent-encumbered formats. Gstreamer may someday be improved to
support this without requiring Fluendo's codec pack, but if you live
in a country where you are vulnerable to software patents, you may
want to contact a legal counsel before using gst-plugins-ugly, on the
remote chance that you might get into hot water over this.

And of course, it probably wouldn't hurt to add .wax file support to
Gstreamer, but these are so rare that I don't know if anyone having
the ability to do so would be interested.

-Sean

On Fri, Feb 26, 2010 at 10:19 PM, Jeffrey Sanders
<jeffreysanders2008 gmail com> wrote:
> I love Rythmbox and want to convert to use this as my radio player and
> convert my windows machine to unbuntu/mint.  However there is a radio
> station that my family loves and can not switch unless i have a soltuion to
> play .wax raido stations.  Here is the adress:
>
> http://82.135.234.195/pukas.wax
>
> I am fairly new to rythmbox.
>
> Thanks for everything!
>
> _______________________________________________
> rhythmbox-devel mailing list
> rhythmbox-devel gnome org
> http://mail.gnome.org/mailman/listinfo/rhythmbox-devel
>
>


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