[G1 Apps and Games] lbcoder:
Right.

The best video player is, quite honestly, the STOCK video player and gallery app. The neat thing about it is that it actually THUMBNAILS your videos, whereas none of the other ones do that (at least none that I've seen).

The video formats possible are strictly limited by the available HARDWARE DECODER CHIP. You aren't going to be able to play a video outside of the supported video specifications simply because you don't have the CPU power necessary to decode the video! It has to be done by the dedicated decoder chip.

Note: One of the BIGGEST mistakes that newbies make is the assumption that the CONTAINER format has anything to do with the actual compression format used to store the video. The CONTAINER format is more or less irrelevant. You can usually tell the container format by the file extension. mpeg, avi, wmv *ARE SUPPORTED*, as long as the audio and video that the file CONTAINS are supported by the hardware. For example, you can put h264 video + mpeg-1 audio layer 3 (i.e. mp3) into a "mp4" file, and as long as the various parameters match the ones supported by the hardware, it will play perfectly. You can put the same h264 video + mpeg-1 audio layer 3 into an "avi" file, and it will still play. If you put INDEO video + APT-x audio into an "avi" file, it WON'T play.

The reason why a lot of "mp4" and "3gp" files play where others don't is that these two CONTAINER formats are more commonly used exclusively for mobile devices, which tend to have similar encoder/decoder specifications. The reason why typically avi and wmv files *DON'T* play is that those two file formats are typical of MICROSHAFT. Use of MICROSHAFT video encoder software is guaranteed to give you files encoded using proprietary encoding schemes that can't be implemented without a significant licensing cost. On top of that, they will come at resolutions and bitrates much too high for mobile hardware to decode, even if they were implemented. People who use MS media encoders are typically the type of idiot who will just use whatever is there. No mind of their own and/or extreme LAZINESS.

If you wish to play badly encoded media, you WILL have to transcode it first. Some combination of mencoder and ffmpeg will do wonderfully for this, for example, the following will turn any video into one that not only will play back on most mobile chips, it can stream over the web:

mencoder "orig.mp4" -o "new.tmp.mp4" -vf dsize=400:300:2,scale=-8:-8,harddup -oac faac -faacopts mpeg=4:object=2:raw:br=128 -of lavf -lavfopts format=mp4 -ovc x264 -ofps 24000/1001 -passlogfile "new.log" -sws 9 -x264encopts nocabac:level_idc=30:bframes=0:bitrate=480:threads=auto:turbo=1:pass=1:global_header:threads=auto:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh
mencoder "orig.mp4" -o "new.tmp.mp4" -vf dsize=400:300:2,scale=-8:-8,harddup -oac faac -faacopts mpeg=4:object=2:raw:br=128 -of lavf -lavfopts format=mp4 -ovc x264 -ofps 24000/1001 -passlogfile "new.log" -sws 9 -x264encopts nocabac:level_idc=30:bframes=0:bitrate=480:threads=auto:pass=2:global_header:subq=5:frameref=6:partitions=all:trellis=1:chroma_me:me=umh
ffmpeg -i "new.tmp.mp4" -vcodec copy -acodec copy "new.tmp2.mp4"
qt-faststart "new.tmp2.mp4" "new.mp4"

Note: qt-faststart is an *optional* component to ffmpeg and is used to move the spec data from the end of the file to the start -- required for streaming. If you don't care about streaming, you can leave it out.

Note2: yes, there are TWO mencoder lines... 2-pass encoding for better quality.