Video Player

From Openmoko

Revision as of 19:46, 25 September 2008 by Kempelen (Talk | contribs)

Jump to: navigation, search

Not a proper 'app' page, just an overview

Contents

FreeRunner

It plays mpeg-4 320x240 stretched fullscreen, however other formats will require transcoding.

Playback

The default media player doesn't seem to handle video very well, but mplayer does OK.

Using standard Mplayer

It can be installed with the following command:

opkg install mplayer

Using the Glamo XV acceleration

TBD, refer to: http://unadventure.wordpress.com/2008/06/08/accelerating-in-my-pocket/

Controlling MPlayer from the Touchscreen

Create a file in /home/root/.mplayer/input.conf with this content:

# Freerunner Optimizations
MOUSE_BTN0 vo_fullscreen
MOUSE_BTN0_DBL q

Now, you can toggle the fullscreen by tapping the screen and exit from mplayer by touble-tapping the LCD. Accelerometers or hardware buttons could help more.

Playback helper script

Create a script named 'vidplay' in your home directory with the following commands:

#!/bin/sh
xrandr -display :0 --output default --mode 240x320
mplayer -vo fbdev "$1" > /dev/null
xrandr -display :0 --output default --mode 480x640
reset

Make the script executable:

chmod 755 /home/root/vidplay

Known issues with this approach:

  • The output isn't in a proper window, so background stuff sometimes flickers through.
  • When done on the local terminal the keyboard is obscured so you can't exit. SSH works quite well.
  • 240x320 mode has some quirks:
    • The gamma/brightness/contrast is weird. Encoding adjustments into the media is a workaround.
    • Vertical banding (as seen in landscape position) is quite noticeable.
  • Using CTRL-C to exit vidplay doesn't reset the screen; use 'q' instead.

Despite these issues, it proves that the horsepower is there and it can be done.


Another derivated method : works like a charm for me !

No ssh, no xrandr, no script needed, juste mplayer and qwerty keyboard : Like it's said in the "Getting started with FreeRunner" wiki page, you have to install the full qwerty keyboard, see these instructions. After that, you can go to Terminal and type :

mplayer vid/my_video.avi

Mplayer starts in full screen, if your video is optimized like below 240x320 it's work like a charm and to quit just use the power button.

Only issue : You can't forward/backward/pause...

Example - Big Buck Bunny

PC

Download the source (no need to start with the giant full resolution version)

cd /tmp
wget http://mirror.botux.net/pub/peach.blender/psp/big_buck_bunny_480p_AVC_FW33.mp4

Test the video filter settings (-vf crop=...) often omitting the last "rotate=2" (Optional, but recommended for long videos).

mplayer big_buck_bunny_480p_AVC_FW33.mp4 vf crop=720:480:-1:-1,scale=320:-2,rotate=2 -zoom

Transcode it

mencoder big_buck_bunny_480p_AVC_FW33.mp4 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 \
-vf crop=720:480:0:0,scale=320:-2,eq=1.2:0.5:-0.25,rotate=2 -oac mp3lame -lameopts br=64:cbr \
-o big_buck_bunny_320.avi

FreeRunner

Transfer the resulting 27M file from the PC to the FreeRunner's MicroSD card

scp user@192.168.0.200:/tmp/big_buck_bunny_320.avi /media/card

Play it

/home/root/vidplay /media/card/big_buck_bunny_320.avi

Other Info

To rotate the screen:

xrandr -o 0
xrandr -o 1

Neo1973

Video is problematic on Neo 1973.

On the minus side.

  • The CPU is certainly not fast enough to decode 480*640 video.
  • The display is portrait, which means that an additional rotation step is needed for most landscape video, adding to CPU usage.
  • Downloading an arbitrary video, and playing it without transcoding it, then playing it later will not be possible.

However.

On the positive side.

  • The LCD can be switched to a 240*320 stretch mode, which is much less taxing.
  • Re-encoding video to rotate it, and scale to 320*240, and encoding with a low CPU use codec such as MPEG-1 may well make half-screen doubled videos playable at 25fps.
  • If not, then it almost certainly will be possible at 12fps.

Mode Switching

For switching between QVGA and VGA mode do the following with a compatible kernel:

chvt 4 && echo qvga-normal > /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state && fbset qvga

vice versa:

echo normal > /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state && fbset vga && chvt 3

taken from http://lists.openmoko.org/pipermail/neo1973-hardware/2007-October/000267.html

To avoid console blanking type

echo -e '\033[9;0]' > /dev/ttyX

where 'X' is your terminal number - for example if you did chvt 4 then /dev/tty4 is your terminal.

To avoid kernel output in vt do

echo 0 > /proc/sys/kernel/printk

User Reports

From a conversation with XorA, in the IRC channel.

400kbps mpeg4 works on a 200Mhz neo (without sound) on prerotated 240*320 ffmpeg codec videos, at 25fps, using stock mplayer.

With sound, this drops to 18fps.

There are optimisations for mplayer that look promising to get 25fps with sound.

Playback using 480x640 / 640x480

To get best speed on GTA01 (best size-speed-resolution-codec trade-off I could find - doesn't mean it's perfect though) crosscode using:

mencoder <sourcefile> -o <targetfile.avi> -ofps 13 -vf scale -zoom -xy 240 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=300:abitrate=32

Also working okay:

mencoder <sourcefile> -o <targetfile.avi> -ofps 13 -vf scale -zoom -xy 352 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=200:abitrate=32

You can playback the file using:

mplayer -sws 0 -nodouble -vo sdl -fs -framedrop <tagetfile.avi>

You may also want to use:

-autosync 30 -vf scale -zoom -xy 640 -vf rotate=1

Transcoding

To make your videos/DVDs compatible use mencoder like this: Find out the -vf cropping parameters with

mplayer input.avi -vf cropdetect

let it run a few seconds and insert the given cropping values into this command

mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output2.avi

To encode a DVD first find out the -vf cropping parameters with

mplayer -dvd-device /path/to/dvd dvd:// -vf cropdetect -sb 50000000

let it run a few seconds and insert the given cropping values into this command

mencoder -dvd-device /path/to/dvd dvd:// -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output.avi

This will rotate the video/DVD, scale it and encode it to mpeg4 with a bitrate of 300kBit/s. Works like a charm.

Frontend

gnome-mplayer

As a nice GUI gnome-mplayer can be recommended.

On Debian you can install it from repository:

# apt-get install gnome-mplayer
Personal tools

Not a proper 'app' page, just an overview

FreeRunner

It plays mpeg-4 320x240 stretched fullscreen, however other formats will require transcoding.

Playback

The default media player doesn't seem to handle video very well, but mplayer does OK.

Using standard Mplayer

It can be installed with the following command:

opkg install mplayer

Using the Glamo XV acceleration

TBD, refer to: http://unadventure.wordpress.com/2008/06/08/accelerating-in-my-pocket/

Controlling MPlayer from the Touchscreen

Create a file in /home/root/.mplayer/input.conf with this content:

# Freerunner Optimizations
MOUSE_BTN0 vo_fullscreen
MOUSE_BTN0_DBL q

Now, you can toggle the fullscreen by tapping the screen and exit from mplayer by touble-tapping the LCD. Accelerometers or hardware buttons could help more.

Playback helper script

Create a script named 'vidplay' in your home directory with the following commands:

#!/bin/sh
xrandr -display :0 --output default --mode 240x320
mplayer -vo fbdev "$1" > /dev/null
xrandr -display :0 --output default --mode 480x640
reset

Make the script executable:

chmod 755 /home/root/vidplay

Known issues with this approach:

  • The output isn't in a proper window, so background stuff sometimes flickers through.
  • When done on the local terminal the keyboard is obscured so you can't exit. SSH works quite well.
  • 240x320 mode has some quirks:
    • The gamma/brightness/contrast is weird. Encoding adjustments into the media is a workaround.
    • Vertical banding (as seen in landscape position) is quite noticeable.
  • Using CTRL-C to exit vidplay doesn't reset the screen; use 'q' instead.

Despite these issues, it proves that the horsepower is there and it can be done.


Another derivated method : works like a charm for me !

No ssh, no xrandr, no script needed, juste mplayer and qwerty keyboard : Like it's said in the "Getting started with FreeRunner" wiki page, you have to install the full qwerty keyboard, see these instructions. After that, you can go to Terminal and type :

mplayer vid/my_video.avi

Mplayer starts in full screen, if your video is optimized like below 240x320 it's work like a charm and to quit just use the power button.

Only issue : You can't forward/backward/pause...

Example - Big Buck Bunny

PC

Download the source (no need to start with the giant full resolution version)

cd /tmp
wget http://mirror.botux.net/pub/peach.blender/psp/big_buck_bunny_480p_AVC_FW33.mp4

Test the video filter settings (-vf crop=...) often omitting the last "rotate=2" (Optional, but recommended for long videos).

mplayer big_buck_bunny_480p_AVC_FW33.mp4 vf crop=720:480:-1:-1,scale=320:-2,rotate=2 -zoom

Transcode it

mencoder big_buck_bunny_480p_AVC_FW33.mp4 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 \
-vf crop=720:480:0:0,scale=320:-2,eq=1.2:0.5:-0.25,rotate=2 -oac mp3lame -lameopts br=64:cbr \
-o big_buck_bunny_320.avi

FreeRunner

Transfer the resulting 27M file from the PC to the FreeRunner's MicroSD card

scp user@192.168.0.200:/tmp/big_buck_bunny_320.avi /media/card

Play it

/home/root/vidplay /media/card/big_buck_bunny_320.avi

Other Info

To rotate the screen:

xrandr -o 0
xrandr -o 1

Neo1973

Video is problematic on Neo 1973.

On the minus side.

  • The CPU is certainly not fast enough to decode 480*640 video.
  • The display is portrait, which means that an additional rotation step is needed for most landscape video, adding to CPU usage.
  • Downloading an arbitrary video, and playing it without transcoding it, then playing it later will not be possible.

However.

On the positive side.

  • The LCD can be switched to a 240*320 stretch mode, which is much less taxing.
  • Re-encoding video to rotate it, and scale to 320*240, and encoding with a low CPU use codec such as MPEG-1 may well make half-screen doubled videos playable at 25fps.
  • If not, then it almost certainly will be possible at 12fps.

Mode Switching

For switching between QVGA and VGA mode do the following with a compatible kernel:

chvt 4 && echo qvga-normal > /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state && fbset qvga

vice versa:

echo normal > /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state && fbset vga && chvt 3

taken from http://lists.openmoko.org/pipermail/neo1973-hardware/2007-October/000267.html

To avoid console blanking type

echo -e '\033[9;0]' > /dev/ttyX

where 'X' is your terminal number - for example if you did chvt 4 then /dev/tty4 is your terminal.

To avoid kernel output in vt do

echo 0 > /proc/sys/kernel/printk

User Reports

From a conversation with XorA, in the IRC channel.

400kbps mpeg4 works on a 200Mhz neo (without sound) on prerotated 240*320 ffmpeg codec videos, at 25fps, using stock mplayer.

With sound, this drops to 18fps.

There are optimisations for mplayer that look promising to get 25fps with sound.

Playback using 480x640 / 640x480

To get best speed on GTA01 (best size-speed-resolution-codec trade-off I could find - doesn't mean it's perfect though) crosscode using:

mencoder <sourcefile> -o <targetfile.avi> -ofps 13 -vf scale -zoom -xy 240 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=300:abitrate=32

Also working okay:

mencoder <sourcefile> -o <targetfile.avi> -ofps 13 -vf scale -zoom -xy 352 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=200:abitrate=32

You can playback the file using:

mplayer -sws 0 -nodouble -vo sdl -fs -framedrop <tagetfile.avi>

You may also want to use:

-autosync 30 -vf scale -zoom -xy 640 -vf rotate=1

Transcoding

To make your videos/DVDs compatible use mencoder like this: Find out the -vf cropping parameters with

mplayer input.avi -vf cropdetect

let it run a few seconds and insert the given cropping values into this command

mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output2.avi

To encode a DVD first find out the -vf cropping parameters with

mplayer -dvd-device /path/to/dvd dvd:// -vf cropdetect -sb 50000000

let it run a few seconds and insert the given cropping values into this command

mencoder -dvd-device /path/to/dvd dvd:// -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output.avi

This will rotate the video/DVD, scale it and encode it to mpeg4 with a bitrate of 300kBit/s. Works like a charm.

Frontend

gnome-mplayer

As a nice GUI gnome-mplayer can be recommended.

On Debian you can install it from repository:

# apt-get install gnome-mplayer