首页 > 系统相关 >arm linux 移植 ffmpeg 库 + x264 + x265

arm linux 移植 ffmpeg 库 + x264 + x265

时间:2023-09-21 15:34:40浏览次数:53  
标签:enable ffmpeg -- make install linux x264 txt

背景

Ffmpeg 中带有h264的解码,没有编码,需要添加x264。libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264。

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

librtmp用来接收、发布RTMP协议格式的数据。FFmpeg支持RTMP协议,将librtmp编译进去后支持协议RTMPE、RMTPTE、RTMPS。这里我直接使用FFmpeg自带的RTMP功能。

host平台   :Ubuntu 18.04

arm平台   : S5P6818

x264  :20171212
x265  :v2.6

ffmpeg   :4.0.1

arm-gcc   :4.8.1

编译

使用以下脚本一键编译。

##
#    Copyright By Schips, All Rights Reserved
#    https://gitee.com/schips/

#    File Name:  make.sh
#    Created  :  Mon 02 Sep 2019 08:05:53 PM HKT
##
#!/bin/sh
BASE=`pwd`
BUILD_HOST=arm-linux
OUTPUT_PATH=${BASE}/install

OTHER_LIB=${OUTPUT_PATH}/__all_without_ffmpeg

make_dirs () {
    #为了方便管理,创建有关的目录
    cd ${BASE} && mkdir compressed install source -p
}

tget () { #try wget
    filename=`basename $1`
    echo "Downloading [${filename}]..."
    if [ ! -f ${filename} ];then
        wget $1
    fi

    echo "[OK] Downloaded [${filename}] "
}

download_package () {
    cd ${BASE}/compressed
    tget http://download.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20171212-2245.tar.bz2
    tget http://ffmpeg.org/releases/ffmpeg-4.0.1.tar.bz2
    tget http://download.videolan.org/videolan/x265/x265_2.6.tar.gz
}

tar_package () {
    cd ${BASE}/compressed
    ls * > /tmp/list.txt
    for TAR in `cat /tmp/list.txt`
    do
        tar -xf $TAR -C  ../source
    done
    rm -rf /tmp/list.txt
}

make_x264() {
    cd ${BASE}/source/x264*

    CC=${BUILD_HOST}-gcc \
    ./configure \
    --host=${BUILD_HOST} \
    --enable-shared \
    --enable-static \
    --enable-pic \
    --prefix=${OUTPUT_PATH}/x264 \
    --cross-prefix=${BUILD_HOST}- \
    --disable-asm

    make -j4 && make install
}

make_x265() {
    #sudo apt-get install cmake -y
    # 其他编译选项可以 通过 在 cmake ../source 以后 ccmake ../source 可以查看 ( ccmake 可以通过 sudo apt-get install cmake-curses-gui  进行安装 )
        cd ${BASE}/source/x265*/source
    # 获取 工具链所在位置 下面的操作为的是在 CMakeLists.txt 中插入下面内容
    GCC_FULL_PATH=`whereis ${BUILD_HOST}-gcc | awk -F: '{ print $2 }' | awk '{print $1}'` # 防止多个结果
    GCC_DIR=`dirname ${GCC_FULL_PATH}/`
    sed -i "1i\set( CMAKE_SYSTEM_NAME Linux  )"                         CMakeLists.txt
    sed -i "2a\set( CMAKE_SYSTEM_PROCESSOR ARM  )"                      CMakeLists.txt
    sed -i "2a\set( CMAKE_C_COMPILER ${GCC_DIR}/${BUILD_HOST}-gcc  )"   CMakeLists.txt
    sed -i "2a\set( CMAKE_CXX_COMPILER ${GCC_DIR}/${BUILD_HOST}-g++  )" CMakeLists.txt
    sed -i "2a\set( CMAKE_FIND_ROOT_PATH ${GCC_DIR} )"                  CMakeLists.txt
    cmake ../source
    # 指定安装路径
    sed -i "1i\set( CMAKE_INSTALL_PREFIX "${BASE}/install/x265"  )"     cmake_install.cmake
    make && make install
}
prepare_other_lib () {
    # 这一个是针对 ffmpeg 方便管理外部库使用的
    # 核心思想是把 所有的库都放到一起,再让 ffmpeg ld的时候在这里找(而不是添加多行) --extra-cflags="-I${X264_DIR}/include -I${xxx}/include" \
    cd ${BASE}/install/
    rm ${OTHER_LIB} -rf
    ls > /tmp/list.txt
    mkdir ${OTHER_LIB} -p
    for sub_dir in `cat /tmp/list.txt`
    do
        cp ${sub_dir}/* ${OTHER_LIB} -r -v
    done
    rm -rf /tmp/list.txt
}

make_ffmpeg() {
    MYPKGCONFIG=${BASE}/install/x265/lib/pkgconfig/
    export PKG_CONFIG_PATH=${MYPKGCONFIG}:$PKG_CONFIG_PATH
    cd ${BASE}/source/ffmpeg*
    ./configure \
    --cross-prefix=${BUILD_HOST}- \
    --enable-cross-compile \
    --target-os=linux \
    --cc=${BUILD_HOST}-gcc \
    --arch=arm \
    --prefix=${OUTPUT_PATH}/ffmpeg \
    --enable-shared \
    --enable-static \
    --enable-gpl \
    --enable-nonfree \
    --enable-ffmpeg \
    --disable-ffplay \
    --enable-swscale \
    --pkg-config="pkg-config --static" \
    --enable-pthreads \
    --disable-armv5te \
    --disable-armv6 \
    --disable-armv6t2 \
    --disable-yasm \
    --disable-stripping \
    --enable-libx264 \
    --enable-libx265 \
    --extra-cflags=-I${OTHER_LIB}/include \
    --extra-ldflags=-L${OTHER_LIB}/lib &&
    make clean && make -j4 && make install
}

echo "Using ${BUILD_HOST}-gcc"
make_dirs
download_package
tar_package
make_x264
make_x265
prepare_other_lib
make_ffmpeg

配置完成以后可能会有这个警告,但是不影响后续的结果

License: nonfree and unredistributable
Creating configuration files ...

WARNING: The --disable-yasm option is only provided for compatibility and will be
 removed in the future. Use --enable-x86asm / --disable-x86asm instead.
WARNING: unknown architecture linux
WARNING: using libx264 without pkg-config

开发板准备

生成完的结果都在 install 目录中。

拷贝 __all_without_ffmpeg中的 lib下的所有文件到板子上的/usr/lib 中,同样地,拷贝ffmpeg中的lib到板子上。

拷贝 install/ffmpeg中的 ffmpeg 文件到板子上。

测试

 ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 /mnt/tmp/test.avi 
 # video4linux2 代表Linux下  
 # /dev/video0 代表摄像头设备 
 # /mnt/tmp/test.avi代表输出路径

标签:enable,ffmpeg,--,make,install,linux,x264,txt
From: https://www.cnblogs.com/kn-zheng/p/17720056.html

相关文章

  • Linux常用命令2
    cat/proc/mtd查看NandFlash分区情况flash_erase/dev/mtd300nandwrite-s0x60000-p/dev/mtd3/home/root/imx6ull-14x14-nand-7-1024x600-c.dtbsyncflash_erase/dev/mtd400nandwrite-p/dev/mtd4/home/root/zImagesyncps-Akill100 ls/dev/tty* “ttym......
  • Linux系统的物理cpu数、核数、逻辑cpu个数查看
    1#总核数=物理CPU个数X每颗物理CPU的核数2#总逻辑CPU数=物理CPU个数X每颗物理CPU的核数X超线程数34#查看物理CPU个数5cat/proc/cpuinfo|grep"physicalid"|sort|uniq|wc-l67#查看每个物理CPU中core的个数(即核数)8......
  • windows下操作静态库lib(相当于linux下的ar命令)
    linux下有ar可以操作.a文件,windows下提供了lib.exe操作lib文件,从vs的控制台编译环境中可以直接调用。主要有一下几个操作:列出obj::lib/listxxx.lib释放obj:lib/extract:xxx.obj/out:new.objxxx.lib删除obj:lib/remove:xxx.objxxx.lib增加obj:libxxx.objxxx.lib ......
  • 为何学linux及用处
    目前企业使用的操作系统无非就是国产类的,windows和linux类。我们要提升自己的技能,需要学习这两款。我记得在大学时期,学习过windows以及linux,但当时觉得又不常用,就学的模棱两可。毕业之后,你会发现,其实这两种操作系统是很主流的。为什么学?下面就是一些工作中遇到的例子分享一下。我......
  • linux的ps功能简介
    环境centos7.9简介ps是Linux系统中一个非常有用的命令,用于显示当前系统中正在运行的进程信息。它提供了许多功能,可以帮助用户监控和管理系统中的进程功能作用显示进程列表:Ps命令可以显示当前系统中所有正在运行的进程的列表。默认情况下,它会显示与当前终端相关的进程。进......
  • 为何学linux及用处
    目前企业使用的操作系统无非就是国产类的,windows和linux类。我们要提升自己的技能,需要学习这两款。我记得在大学时期,学习过windows以及linux,但当时觉得又不常用,就学的模棱两可。毕业之后,你会发现,其实这两种操作系统是很主流的。为什么学?下面就是一些工作中遇到的例子分享一下。我......
  • 【Linux】网络设置之基础操作命令详解
    大家好,本篇文章主要讲的是Linux网络设置之基础操作命令详解,感兴趣的同学快来看一看吧,对你有用的话记得收藏起来,方便下次浏览查看网络配置查看网络接口信息---ifconfig查看活动的网络接口设备1、ifconfig网卡名称查看指定的网络接口设备1、ifconfig网卡名称#可查看所有存在的网络......
  • 趣学Linux云计算
    作者:董露希望我们能达成共识高效愉快的学习先了解整体方向,再细节学习以实际工作内容为准,要用什么就快速学习什么先knowhow,再knowwhy学习初期应该是琢磨别人怎么做,而不是我认为应该怎么做学习阶梯第一阶梯:输入完成外界给与的任务,(学校,职场,应试)第二阶梯:输入完成自己......
  • NoodJs-Linux 环境下部署
    1、nodejs官网下载压缩包(选择合适自己系统的版本),放到Linux的安装目录下。下载|Node.js(nodejs.org)2、使用命令解压下载的nodejs压缩包:tar-xvfnode-v10.8.0-linux-x64.tar.xz3、重命名文件:mvnode-v10.8.0-linux-x64node4.设置环境变量: vim/etc/profile 在文件......
  • MongoDb-Llinux 环境下部署
    1.使用远程工具登录Linux系统后,将Mongodb压缩文件上传到/usr/local目录下解压缩cd/usr/localtar-zxvf压缩包名称2.将解压好的mongodb文件名修改为mongodb-server【看个人喜好,可以不做修改】mv原文件名mongodb-server3.在mongodb-server目录下为mongodb配置数据库保存的......