背景

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   :3.4.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-3.4.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 中插入下面内容

#set( CMAKE_SYSTEM_NAME Linux  )

#set( CMAKE_SYSTEM_PROCESSOR ARM  )

#set( CMAKE_C_COMPILER "/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin/arm-hisiv500-linux-gcc" )

#set( CMAKE_CXX_COMPILER "/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin/arm-hisiv500-linux-g++" )

#set( CMAKE_FIND_ROOT_PATH "/opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin/" )

GCC_FULL_PATH=`whereis ${BUILD_HOST}-gcc | awk -F: '{ print $2 }' | awk '{print $1}'` # 防止多个结果

GCC_DIR=`dirname ${GCC_FULL_PATH}/`

sed -i "1iset( CMAKE_SYSTEM_NAME Linux  )"                         CMakeLists.txt

sed -i "2aset( CMAKE_SYSTEM_PROCESSOR ARM  )"                      CMakeLists.txt

sed -i "2aset( CMAKE_C_COMPILER ${GCC_DIR}/${BUILD_HOST}-gcc  )"   CMakeLists.txt

sed -i "2aset( CMAKE_CXX_COMPILER ${GCC_DIR}/${BUILD_HOST}-g++  )" CMakeLists.txt

sed -i "2aset( CMAKE_FIND_ROOT_PATH ${GCC_DIR} )"                  CMakeLists.txt

cmake ../source

# 指定安装路径

sed -i "1iset( 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() {

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-ffserver

--enable-swscale

--enable-pthreads

--disable-armv5te

--disable-armv6

--disable-armv6t2

--disable-yasm

--disable-stripping

--enable-libx264

--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

开发板准备:

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

测试:

ffmpeg -f video4linux2 -s 320x240 -i /dev/video0 /mnt/tmp/test.avi

# video4linux2 代表Linux下

# /dev/video0 代表摄像头设备

# /mnt/tmp/test.avi代表输出路径

ffmpeg arm linux编译,arm linux 移植 ffmpeg 库 + x264 + x265相关推荐

  1. Linux编译时如何减小so库文件的大小

    Linux编译时如何减小so库文件的大小 今天问了我这个问题,我就顺便记录一下.客户问为什么libc.so文件再编译前和编译后的size不一样啊,staging 和 compile 两个dir下的 l ...

  2. linux 编译汇编,linux下的汇编教程

    linux下的汇编教程 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针.设置页表.操作 ARM的协处理器等.初 ...

  3. [ARM] [基础][编译]ARM的浮点功能历史分类和对应的编译选项

    前言:ARM编译的时候有很多编译选项和浮点功能相关,要真正理解这些编译选项的选择,不仅仅要了解ARM的体系构建的基础知识,可能还需要了解一下ARM的历史.之后,真对这些再考虑到ARM编译选项就比较好理 ...

  4. spdlog linux编译出错,Linux下编写Makefile引入第三方库

    Linux下编写Makefile引入第三方库 前言:一直在使用CmakaList 生成Makefile文件,其实很少去写Makefile,但是最近帮朋友处理了一个Makefile引入第三方库的问题,就 ...

  5. linux 内核编译arm,如何编译ARM的linux驱动

    在电脑的linux上安装了ARM2440的linux交叉编译器. 现在我按照网上的资料写了个简单的hello驱动. #include #include #include MODULE_LICENSE( ...

  6. linux之x86裁剪移植---ffmpeg的H264解码显示(420、422)

    在虚拟机上yuv420可以正常显示 ,而945(D525)模块上却无法显示 ,后来验证了directdraw的yuv420也无法显示 ,由此怀疑显卡不支持 ,后把420转换为422显示. 420显示如 ...

  7. vs2015移植linux编译,windows平台移植(原linux项目)时,用vs2015开发,碰到的问题及处理方案记录...

    (1)问题记录一: 在#include 头文件后,出现如下报错信息: 解决方案: 在#include 头文件之前,先定义 #define HAVE_STRUCT_TIMESPEC 详细原因,参见以下网 ...

  8. exfat linux 编译,嵌入式 linux 基于fuse 的 exfat 文件系统实现

    1.下载源代码 https://github.com/relan/exfat 下载:exfat-master.zip https://github.com/libfuse/libfuse/ 下载 fu ...

  9. linux 编译openmp,Linux 系统中OpenMP

    转自:http://hi.baidu.com/linzch/blog/item/db3252fb6227c01e6c22eb21.html *怎么在Linux上运行OpenMP程序? > 只需要 ...

最新文章

  1. 2021年人工神经网络第四次作业-第一题:LeNet对于水果与动物进行分类
  2. c++运算符重载中很多人易忘的小细节
  3. 基于Git rebase修改历史提交信息
  4. 宝马3系m套件清单图_穿上套件我就不认识你了?华晨宝马1系新老对比
  5. oracle怎么获取行,在oracle中如何实现SELECT TOP N取得前几行记录
  6. Http请求处理流程
  7. mysql1045错误解读_谈谈MYSQL ERROR 1045 错误的解决办法!
  8. 大数据分析双剑合璧:Apache Kylin 和 Superset
  9. wndows make images
  10. DXUT实战1:CG+D3D9+DXUT(june_2010)
  11. gis连接表格到数据库失败_ArcGIS添加Excel数据的新老问题(连接数据库失败)
  12. 获取微信视频号视频地址
  13. kaggle 注册无法激活的问题解决
  14. spring boot 实现 Kurento 一对一浏览器视频聊天
  15. RJ TextEd 中文绿色版下载
  16. UVa-10082-WERTYU
  17. 探访广州黑人区,我好像来到非洲
  18. 16秋计算机科学与技术鲁嘉华数组作业
  19. 嵌入式Linux应用程序开发-(1)第一个嵌入式QT应用程序
  20. python自动化测试平台github_flask构建自动化测试平台1-hello

热门文章

  1. 网页中嵌入 Flash 的方法 满足W3C
  2. 程序员常用工具下载地址及方式
  3. 大泉州人才网(整站)程序 免维护 V1.0
  4. 数据采集卡 html报表,网页表格数据采集助手
  5. 单位意义:dB、dBm与dBw、dBμ与dBV、dBi与dBd、dBFS
  6. 80c51单片机c语言库涵数,80C51单片机C语言应用.ppt
  7. (echarts)引入折线图
  8. 计算机课件模拟实验,计算机模拟仿真密立根油滴实验课件.pdf
  9. python原子_python的原子操作
  10. 九方智投是正规公司吗?一起聊聊九方智投