x265交叉编译(ffmpeg)

    

    视频文件格式AVI、mov、mp4,mp4是一套用于音频、视频信息的压缩编码标准,主要用于网上流,视频通话,电视广播,支持多个视频,音轨,字幕及流媒体。视频文件格式是视频保存的一种格式,视频文件的扩展名是视频的容器名。视频容器格式是定义怎么存储数据,不是所有的视频流编码兼容所有的视频容器格式。

    

    x265是一个用于编码符合高效率视频编码(HEVC-High Efficiency Video Coding/H.265)标准的视频的开源自由软件及函数库。x264是开源的H.264/MPEG-4 AVC-Advanced Video Codec 视频编码函数库。

    guide.png    



一.资源准备

    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.cmakeimage.png    

    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

    image.png    关闭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.cppimage.png    修改:

    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.cppimage.png

    cpu_detect方法直接return flags

    image.png


        再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

        

        image.png

       

        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


x265ffmpeg交叉编译
提交需求
电话咨询
电话咨询:180-6574-6936