x265交叉编译(ffmpeg)
视频文件格式AVI、mov、mp4,mp4是一套用于音频、视频信息的压缩编码标准,主要用于网上流,视频通话,电视广播,支持多个视频,音轨,字幕及流媒体。视频文件格式是视频保存的一种格式,视频文件的扩展名是视频的容器名。视频容器格式是定义怎么存储数据,不是所有的视频流编码兼容所有的视频容器格式。
x265是一个用于编码符合高效率视频编码(HEVC-High Efficiency Video Coding/H.265)标准的视频的开源自由软件及函数库。x264是开源的H.264/MPEG-4 AVC-Advanced Video Codec 视频编码函数库。
一.资源准备
1.ndk android-ndk-r15c wget -c https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip
2.x265 2.5 wget -c https://bitbucket.org/multicoreware/x265/downloads/x265_3.2.1.tar.gz
3.生成工具链(环境)
在ndk目录下build/tools 执行
./make-standalone-toolchain.sh --platform=android-26 --install-dir=/workspace/ffmpeg/android-26-toolchain
二.编译
1.编辑配置文件
vi build/arm_linxu/crosscompile.cmake
CMAKE_FIND_ROOT_PATH是第一步工具链根目录
2.去掉lpthread ndk不支持
vi source/CMakeLists.txt
list(REMOVE_ITEM PLIBLIST "-lc" "-lpthread") 改为list(REMOVE_ITEM PLIBLIST "-lc")
list(APPEND PLATFORM_LIBS pthread) 注释掉
3.设置配置
cmake -DCMAKE_TOOLCHAIN_FILE=crosscompile.cmake -G "Unix Makefiles" ../../source && ccmake ../../source
关闭ENABLE_ASSEMBLY
开启ENABLE_PIC
点击c再g
4.make执行
三.整合ffmpeg
开启x265配置编译
--enable-libx265
--enable-decoder=hevc
--enable-demuxer=hevc
--enable-parser=hevc
四.问题
1.posix_memalign
vi ../../source/common/common.cpp 修改:
void *x265_malloc(size_t size)
{
void *ptr = memalign(X265_ALIGNBYTES, size);
if (ptr != NULL)
return ptr;
else
return NULL;
}
再make
2.cpu_detect
vi ../../source/common/cpu.cpp
cpu_detect方法直接return flags
再make
3.生成so文件不含有后缀-为android加载so文件做准备
CMakeFiles/x265-share.dir/link.txt 修改g++ 参数 -fPIC -O3 -DNDEBUG -Wl,-Bsymbolic,-znoexecstack -shared -o libx265.so
CMakeFiles/cli.dir/link.txt 修改 libx265.so
CMakeFiles/x265-shared.dir/build.make 修改 libx265.so
@$(CMAKE_COMMAND) -E touch_nocreate libx265.so
再make
4.ERROR: x265 not found using pkg-config
x265库找不到 把/usr/bin/pkg-config到对应ndk目录toolchains/arm-linux-androideabi-4.9/prebuiltnux-x86_64/bin 方案1:arm-linux-androideabi-pkg-config 方案2:配置PKG_CONFIG_PATH参数 方案3:添加参数pkg_config_path
5.libx265.so没有加载
ffmpeg编译引用是x265的so文件
6.32bit加载不了64bit so文件 编译gccg++不是ndk
7.重新配置crosscompile.cmake无效-需要重新来 编译添加
8.实际使用还是直接挂掉-未是能解码格式 --enable-decoder
五.有待调研
1.解码耗时,对于cpu计算高
六.链接
FFmpeg交叉编译:https://mozi100.com/blog/detail?blog_id=47
下载x265:https://bitbucket.org/multicoreware/x265/downloads/
mp4边加载边播放:https://mozi100.com/blog/detail?blog_id=50
视频编码:https://baike.baidu.com/item/%E8%A7%86%E9%A2%91%E7%BC%96%E7%A0%81/839038
交叉工具链:https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E5%B7%A5%E5%85%B7%E9%93%BE/2503696