最近和同事一起合作,移植ffmepg到Win8平台上。
Windows Store 要求3个架构X86 X64 ARM, 我们主要做的就是X86和ARM的平台,
X86的平台移植的文章已经很多了。我推荐这篇文章
http://blog.sina.com.cn/s/blog_47612ff10101mri6.html
但这样编译出来的库并不能在WinRT平台上使用。ffmepg引用了很多WinRT的禁止的API,编译是可以过的,但是通过不了WACK,也不能上传到store上面。
解决这个问题,一方面要减少ffmepg的功能,另一个方面要改写一些源代码。好在ffmpeg是一个跨平台的库,这些API都可以找到方法去替代。
另外如果只做本地播放,可以禁止ffmepg的网络,然后再写一个流的protocol注册到ffmpeg里面。
最后的configure 是这样的
./configure --toolchain=msvc --prefix=/home/Jessejiang/Output/ --disable-network --disable-programs --disable-protocols --extra-ldflags=-DWINAPI_FAMILY=WINAPI_FAMILY_APP --disable-dxva2
这样编译之后,还有一些log的API,这个需要找到他们,改一下源码就好。
ARM平台还是有些麻烦的。
首先,我们需要用 “VS201 ARM兼容工具命令提示”,从这个里面启动msys.
关键的一步是在configure 里面加入宏_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE 和_M_ARM
最后加上交叉编译和Link的选项-MACHINE:ARM
最后的configure 是这样的
./configure --toolchain=msvc --disable-programs --disable-network--disable-protocols --extra-cflags="-D_ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE -D_M_ARM -DWINAPI_FAMILY=WINAPI_FAMILY_APP" --enable-cross-compile --target-os=win32 --arch=win32 --extra-ldflags="-MACHINE:ARM" --disable-dxva2 --prefix=/home/Jessejiang/Output/
这里用没有对ARM代码进行汇编的优化,因为我试过指定arch平台,但是CPU的架构版本我没办法定义。
最后,如果大家需要引用头文件到ffmpeg里面,需要用-I 像这样-ID:srcwin8include。 但是configure之后不能马上make,需要再config.mak 文件中找到--extra-cflags 选项,把-ID:srcwin8include 路径加上双引号-I ”D:srcwin8include“
关于windows phone的移植,我们还没有开始,我猜大概和ARM的差不多。等做到了,我再回来补上。
听说VS13直接支持C99那ffmpeg或许直接就可以用VS编译了。