x265目前在Android手机上如果用来编码的话,编译速度很慢,而且极度消耗cpu,目前在移动端的实用性不大。
首先需要使用ndk做一个交叉编译工具链出来:
进入ndk的/build/tools/目录,然后使用命令:
./make-standalone-toolchain.sh --install-dir=/home/zxb/android-16-toolchain --ndk-dir=/home/zxb/android-ndk-r9d/ --arch=arm --platform=android-16 --system=linux-x86_64
最好使用ndk-9。
然后进入x265的build/arm-linux下,修改crosscompile.cmake的内容为下面这样:
set(CROSS_COMPILE_ARM 1)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR armv6l)
# specify the cross compiler
set(CMAKE_C_COMPILER arm-linux-androideabi-gcc)
set(CMAKE_CXX_COMPILER arm-linux-androideabi-g++)
# specify the target environment
SET(CMAKE_FIND_ROOT_PATH /home/zxb/android-16-toolchain/)
set(CMAKE_SYSROOT /home/zxb/android-16-toolchain/sysroot)
修改x265/source/CMakeList.txt文件:
if(X265_LATEST_TAG)
# convert lists of link libraries into -lstdc++ -lm etc..
foreach(LIB ${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES} ${PLATFORM_LIBS})
if(IS_ABSOLUTE ${LIB} AND EXISTS ${LIB})
list(APPEND PLIBLIST "${LIB}")
else()
list(APPEND PLIBLIST "-l${LIB}")
endif()
endforeach()
if(PLIBLIST)
# blacklist of libraries that should not be in Libs.private
list(REMOVE_ITEM PLIBLIST "-lc" "-lmingwex" "-lmingwthrd"
"-lmingw32" "-lmoldname" "-lmsvcrt" "-ladvapi32" "-lshell32"
"-luser32" "-lkernel32")
string(REPLACE ";" " " PRIVATE_LIBS "${PLIBLIST}")
else()
set(PRIVATE_LIBS "")
endif(PLIBLIST)
# Produce a pkg-config file
configure_file("x265.pc.in" "x265.pc" @ONLY)
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/x265.pc"
DESTINATION "${LIB_INSTALL_DIR}/pkgconfig")
endif()
去掉lpthread.
if(UNIX)
# list(APPEND PLATFORM_LIBS pthread)
# 注释掉list这一行
然后执行make-Makefiles.bash这个文件.
执行完命令后修改CMakeFiles/x265-shared.dir/link.txt文件下将命令中间相关改成这样:-fPIC -O3 -DNDEBUG -Wl,-Bsymbolic,-znoexecstack -shared -o libx265.so
修改文件CMakeFiles/cli.dir/link.txt文件,将libx265.so.151去掉(.版本号)变成libx265.so.
修改文件./CMakeFiles/x265-shared.dir/build.make做如下修改:
首先去年所有libx265.so.151后面的版本号,改成libx265.so.
然后做如下修改
libx265.so: x265.def
libx265.so: CMakeFiles/x265-shared.dir/link.txt
@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --bold --progress-dir=/home/zxb/x265/build/arm-linux/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Linking CXX shared library libx265.so"
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/x265-shared.dir/link.txt --verbose=$(VERBOSE)
$(CMAKE_COMMAND) -E cmake_symlink_library libx265.so libx265.so libx265.so.151//修改点
libx265.so.151: libx265.so//修改点
@$(CMAKE_COMMAND) -E touch_nocreate libx265.so.151//修改点
修改文件source/common/cpu.cpp下关于arm的cpu_detect,修改如下:
#elif X265_ARCH_ARM
extern "C" {
void PFX(cpu_neon_test)(void);
int PFX(cpu_fast_neon_mrc_test)(void);
}
uint32_t cpu_detect(void)
{
return 0;
}
最后执行make命令。就可以了。这个是使用cmake编译出的x265动态库。目前x265的静态库好像不能直接供ffmpeg使用。编译通不过。
可直接下载ffmpeg+x264+265资源地址: