播放器算是手机上用的最多的软件之一,vlc是其中的佼佼者,更是第一大开源软件,但是vlc实在是太重了,附带的几十个开源框架编译都很辛苦。
其实我只想学习一下视频解码到显示的过程。
所以我选的方案是ffmpeg解码,sdl显示,这两个开源项目都有很好的维护,而且都能很好的跨各个平台。
编译ffmpeg for android
下载sdl的代码hg clone http://hg.libsdl.org/SDL
在android-project导入到Eclipse中,进入jni文件夹,新建一个SDL文件,将SDL2-2.0.4\src,SDL2-2.0.4\include,SDL2-2.0.4\Android.mk文件拷贝到android-project\jni\SDL\中。
src下面增加了一个Android.mk:
1 | 1 LOCAL_PATH := $(call my-dir) |
主要的播放代码ktDecodeDisplay.c
1 | /* |
ktDecodeDisplay.h
1 | #ifndef _INCLUDED_KTDECODEDISPLAY_H_ |
为了保证更好的使用,代码做了一些小的修改,发现自己怎么解释代码都不会比原作者解释的清楚,所以最好还是看英文原版的解释吧。
英文原版的http://dranger.com/ffmpeg/tutorial01.html
ps:整体上来说,sdl+ffmepg效率是非常高的,在骁龙800的手机上都能实现h264,4k,高码率的软解。如果能深入优化,有希望能流程的播放,而且夸平台性非常好,适合新手了解播放器编解码显示的过程。后来b站开源了ijkplayer,成为了iOS和Android上最好开源跨平台播放器。