Hello freevo dev's, I just happened to setup a freevo box at home, connected to a TV. As it turns out, TV live streaming was important for my own purposes so I decided to quickly hack rtmp support (lots of live free TV services are rtmp) into freevo. Since this might be useful for others too, I decided to share my setup.
Since this was the first time I messed with freevo, I decided not to touch the python code and instead wrap the mplayer binary. So here it is how I made it work: In freevo.conf I replaced the system's mplayer with the wrapper: # mplayer = /home/mediacenter/bin/mplayer-wrapper Then created a webtv.fxd somewhere with something like this inside: # <movie title="FOO"> # <cover-img>&imgdir;/foo.png</cover-img> # <video><url id="p1">"@stream=rtmp://steamhere.com/foo/|path=bar|player=http://www.streamhere.com/player.swf@"</url></video> # <info> # <tagline>Foo channel.</tagline> # <plot>Video: 480x...@25, 600 kbps
Audio: stereo, 96 kbps</plot> # </info> # </movie> Notice the "strange" url there. This will be later parsed by the mplayer-wrapper: Note: The double-quotes inside the url tag are important, to keep special symbols like & away from bash. --------------------- mplayer-wrapper ---------------------------- #!/bin/bash INPUT="$(echo "$@" | sed -e 's/\-autosync\ [0-9]*//')" if [[ ! "$(echo "$INPUT" | grep -Eo "rtmp://")" ]]; then exec /usr/bin/mplayer $INPUT exit 0 fi echo "mplayer rtmp wrapper init" > ~/mplayer-wrapper.log RTMP_PARAMS="$(echo "$INPUT" | grep -Eo "@[...@]*@" | sed -e 's/^@//' -e 's/@$//')" echo "RTMP params: $RTMP_PARAMS" >> ~/mplayer-wrapper.log RTMP_STREAM="$(echo "$RTMP_PARAMS" | grep -Eo "stream=[^|@]*" | sed -e 's/stream=//')" echo "RTMP stream: $RTMP_STREAM" >> ~/mplayer-wrapper.log RTMP_PATH="$(echo "$RTMP_PARAMS" | grep -Eo "path=[^|@]*" | sed -e 's/path=//')" echo " RTMP path: $RTMP_PATH" >> ~/mplayer-wrapper.log RTMP_PLAYER="$(echo "$RTMP_PARAMS" | grep -Eo "player=[^|@]*" | sed -e 's/player=//')" echo "RTMP player: $RTMP_PLAYER" >> ~/mplayer-wrapper.log mkfifo /tmp/freevo.flv &> /dev/null rtmpdump -r "$RTMP_STREAM" -y "$RTMP_PATH" -W "$RTMP_PLAYER" -k 1 -v -o - > /tmp/freevo.flv & MPLAYER_ARGS="$(echo "$INPUT" | sed -e "s...@${rtmp_params}@@" -e 's/@//g' -e 's@"@@g')" echo "Executing: /usr/bin/mplayer $MPLAYER_ARGS /tmp/freevo.flv" >> ~/mplayer-wrapper.log exec /usr/bin/mplayer $MPLAYER_ARGS -loop 0 -autosync 30 \ /tmp/freevo.flv ---------------------------------------------------------------- The wrapper receives as input a concatenation of mplayer arguments provided by video.mplayer and the url itself, something like this: -slave -v -vo xv,sdl,x11, -ao alsa -nolirc -nojoystick -autoq 100 -screenw 400 -screenh 300 -fs -cache 1000 -vf pp=de -osdlevel 0 "@stream=rtmp://steamhere.com/foo/|path=bar|player=http://www.streamhere.com/player.swf@" Then the wrapper parses stream, path and player fields from its input and gives them to rtmpdump. rtmpdump's output is redirected into a fifo connected to mplayer's input. rtmpdump's arguments (delimited by @@) are stripped from the wrappers input to get the correct mplayer's arguments. Note: if the rtmp:// string is not detected in the wrapper's input, mplayer is launched as usual. As you can see this is a _really quick hack_, but it works very well! Some may ask why the hell all of this fuzz, why using rtmpdump. The quick answer is that some flash based streaming services check if the stream client is the crappy flash client located in their ad-filled websites. The authors of rtmpdump then developed this wonderful tool to somehow "impersonate" the flash client. Some info about my system: Gentoo 2.6.35-hardened-r2 freevo-1.9.0 rtmpdump-2.3 mplayer-1.0_rc4_p20100612 I plan to integrate this into the freevo's video class but since I'm currently lacking time I decided to push this hack into the mailing list. Thanks to all freevo's contributors, we have a wonderful project here. -- Angelo Arrifano AKA MiKNiX mik...@gmail.com http://www.arrifano.com Gentoo Linux OMAP850/Embedded Official Developer http://www.gentoo.org/~miknix mik...@gentoo.org Linwizard Project Leader/Developer mik...@users.sourceforge.net PGP Pubkey 0x3D92BB0B ------------------------------------------------------------------------------ Download new Adobe(R) Flash(R) Builder(TM) 4 The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly Flex(R) Builder(TM)) enable the development of rich applications that run across multiple browsers and platforms. Download your free trials today! http://p.sf.net/sfu/adobe-dev2dev _______________________________________________ Freevo-devel mailing list Freevo-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/freevo-devel