热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ffmpegarmlinux编译,armlinux移植ffmpeg库+x264+x265

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

背景

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代表输出路径



推荐阅读
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 在Ubuntu上安装MySQL时解决缺少libaio.so.1错误及libaio在MySQL中的重要性分析
    在Ubuntu系统上安装MySQL时,遇到了缺少libaio.so.1的错误。本文详细介绍了如何解决这一问题,并深入探讨了libaio库在MySQL性能优化中的重要作用。对于初学者而言,理解这些依赖关系和配置步骤是成功安装和运行MySQL的关键。通过本文的指导,读者可以顺利解决相关问题,并更好地掌握MySQL在Linux环境下的部署与管理。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 本文介绍了一种自定义的Android圆形进度条视图,支持在进度条上显示数字,并在圆心位置展示文字内容。通过自定义绘图和组件组合的方式实现,详细展示了自定义View的开发流程和关键技术点。示例代码和效果展示将在文章末尾提供。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • 在处理 XML 数据时,如果需要解析 `` 标签的内容,可以采用 Pull 解析方法。Pull 解析是一种高效的 XML 解析方式,适用于流式数据处理。具体实现中,可以通过 Java 的 `XmlPullParser` 或其他类似的库来逐步读取和解析 XML 文档中的 `` 元素。这样不仅能够提高解析效率,还能减少内存占用。本文将详细介绍如何使用 Pull 解析方法来提取 `` 标签的内容,并提供一个示例代码,帮助开发者快速解决问题。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 分享一款基于Java开发的经典贪吃蛇游戏实现
    本文介绍了一款使用Java语言开发的经典贪吃蛇游戏的实现。游戏主要由两个核心类组成:`GameFrame` 和 `GamePanel`。`GameFrame` 类负责设置游戏窗口的标题、关闭按钮以及是否允许调整窗口大小,并初始化数据模型以支持绘制操作。`GamePanel` 类则负责管理游戏中的蛇和苹果的逻辑与渲染,确保游戏的流畅运行和良好的用户体验。 ... [详细]
author-avatar
果子露强逼_604
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有