Saturday, 23 May 2009

Mormon Radio - In Latin!

Mormon radio is available at http://radio.lds.org


Sadly, the media transport is RTMPT, a proprietary adobe format, which limits reception to those with an adobe flash plugin. That also means x86 PC architecture.


This excludes all streaming audio devices in the world except Adobe Flash. Oh - and there will be iPhone support soon.


How can this seem nearly OK? There are loads of widely supported mechanisms for streaming audio - why choose one with such limited support? This is like publishing the bible only in Latin - because everyone speaks Latin - or at least everybody who needs to read the Bible speaks latin. And what's so special about the iPhone that cuts out my streaming radio?

(Read more at: http://tech.lds.org/forum/showthread.php?t=3119)


Vatican radio on the other hand does it quite well:

http://www.radiovaticana.org/en1/diretta.asp


It supports wma, real (and mp3 in the left column) and no need for any freaky platform-restricted plugins.


So, I'm a church member and I can wake up to Vatican Radio, but not Mormon Radio - why, exactly?

Someone has to make an active decision and sign a large purchase order to do things as wrong as this.

However, by standing on the shoulders of advocates of software freedom, using wireshark to look at the network packets and recognize RTMP as the protocol, swfmill to take to pieces the flash radio player to get the audio addresses, and flvstreamer to dump the audio, I managed to cobble together a system that allows the stream to be converted into an MP3 stream so that mp3 players can pick it up. I've called this the Wycliffe hack in commemoration of John Wycliffe who strove to make religious material available to everyone.

flvstreamer/flvstreamer_x86 -v -r rtmpt://fls2g1.services.att-idns.net/al1/8004_8806_01 -s http://radio.lds.org/mc_files/flash/theMormonChannelPlayer.swf> -p http://radio.lds.org/eng/listen-now -o /dev/stdout > RADIO.flv


Of course I don't want to dump to a file called RADIO.flv, I want to convert the stream to mp3, but commands like this work:

cat RADIO.flv | ffmpeg -f flv -i - -f wav -


if they read from flvstreamer stdout, they fail!


So while I've solved the hardest problem, I need to sort out the glue.

2 comments:

  1. Interesting,=C2=A0 maybe the codec has advantages? Maybe not!!!

    ------------------------------------------------------------------------------



    From Thomas Hori

    ReplyDelete
  2. The streams I was using are no longer available. I think they were test streams. I found some new streams from packet dumps, e.g.

    rtmpt://fls3g1.services.att-idns.net/al1/9874_9200_01

    I need to work out how they are conveyed to the flash player, so that I can get them from the same source.

    The flv streams also seem to be encrypted now and ffmpeg can't decode them, but this gstreamer pipeline can:

    cat P.flv | (( gst-launch filesrc location=/dev/stdin ! decodebin !
    audioconvert ! lame name=enc bitrate=128 ! filesink location=/dev/fd/3 )
    3>&1 >&2 ) > PP.mp3

    So I can still get Mormon Radio without having to load a web browser, and convert it live to an mp3 stream and send to a local shoutcast server for pickup by my clock internet radio:

    ./flvstreamer/flvstreamer_x86 -v \
    -r rtmpt://fls3g1.services.att-idns.net/al1/9874_9200_01 \
    -s http://radio.lds.org/mc_files/flash/theMormonChannelPlayer.swf \
    -p http://radio.lds.org/eng/listen-now | \
    gst-launch filesrc location=/dev/stdin ! \
    decodebin ! audioconvert ! lame name=enc bitrate=128 ! \
    shout2send password=hackme mount=mormon-radio.mp3 \
    ip=192.168.1.70 port=8000

    My icecast server definition is:

    127.0.0.1
    8000
    /mormon-radio.mp3
    /differents.mp3
    0

    1


    I can listen to the mp3stream at:
    http://192.168.1.70:8000/mormon-radio.mp3.m3u

    ReplyDelete