为DicePlayer编译libffmpeg.so
DicePlayer真乃一代神器,各种格式通吃,SAMBA、FTP一个不落,最重要的是,能支持2倍速播放!
不过因为版权原因,DicePlayer先后阉割了DTS解码和AC3解码,后者的阉割导致人人影视一票的HR-HDTV都播放不了,而我又找不到清晰度、文件大小、字幕方便程度能媲美的替代品,只好操刀自己上。
在xda的这个帖子里提到,可以提取2.0.53版本中的libffmpeg_dice.so文件,放到sdcard下,但这只能恢复AC3解码。
而那个帖子又提供了几个网友根据DicePlayer官方页面提供的源码,编译的版本,但放我这里总是有破音,而且也无法恢复DTS解码。
于是我打算自己编译一下看看。
看了下DicePlayer官方提供的源码,发现是基于ffmpeg 0.10.10修改的,于是把正宗的0.10.10源码弄下来,用工具对比了一下修改了哪些地方,发现没修改什么,似乎是从libav那边弄了点代码过来,不过没在libav页面上找到对应的代码。
于是决定不进行大修改,直接编译:
- 下载ffmpeg的0.10.15版本代码,解压。
- 先安装NDK。
- 再修改build-ffmpeg.sh脚本中的变量,记得按里面提示打开DTS部分,官方脚本有问题,可以用我修改后的版本。
- 修改libavformat/nutdec.c第852行,
assert(0);
后添加一行return 0;
,否则会编译报错。 - 执行build脚本即可。
编译要求不高,在我DigitalOcean的512M内存VPS上都可以编译,耗时大概10分钟,最后在ffmpeg目录里可以得到libffmpeg_dice.so文件即可使用。
附上解决问题过程中找到的几个有用的链接:
- android ffmpeg https://github.com/guardianproject/android-ffmpeg
- build and include freetype2 by default to enable the ‘drawtext’ filter https://github.com/guardianproject/android-ffmpeg/commit/f08db49e613a7ea4423effb22973e3f1afefb819
Update 1: 脚本又修改了一下,现在能支持ffmpeg-2.4.2版本
Update 2: 现成的版本可以在这里下载