ffmpeg+libx264+facc交叉编译 实现264流录制avi文件

默认交叉编译器已经搭建好。。。。。。。。。。。。。。。

需求:

把标准的h264流保存成avi格式的实现文件,所以需要h264的解码器,avi文件容器,传输协议类型是文件,这些会体现在ffmpeg的configure配置上--disable-everything --enable-protocol=file --enable-encoder=libx264 --enable-encoder=libfaac --enable-libx264 --enable-gpl --enable-libfaac --enable-nonfree --enable-muxer=avi --enable-demuxer=avi。

1 .下载libx264 ffmpeg facc

下载地址自己找吧。。。。。。

我下载的三个包:x264-snapshot-20120718-2245-stable.tar.bz ffmpeg-0.11.1.tar.gz faac-1.28.tar.bz2

2 .交叉编译libx264

2.1 解压x264-snapshot-20120718-2245-stable.tar.bz 到目录 /root/workspace/multimedia/ffpmeg

2.2 进入目录 /root/workspace/multimedia/ffpmeg/x264-snapshot-stable

2.3 创建目录 /root/workspace/multimedia/ffpmeg/out

2.4 执行configure 构造Makefile

./configure --enable-static --host=arm-linux --disable-asm --prefix=/root/workspace/multimedia/ffpmeg/out

2.5 修改config.mak

CC=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc

LD=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc -o

AR=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-ar rc

RANLIB=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-ranlib

STRIP=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-strip

保存

2.6 执行 make

2.7 执行 make install

2.8 搞定。。。。。。。。。。。。。。。。。。。编译好的静态库 躺在out目录里

3 交叉编译 faac

3.1 解压 ffmpeg 到目录/root/workspace/multimedia/ffmpeg

3.2 进入目录 /root/workspace/multimedia/ffmpeg/ffmpeg-1.0

3.3 执行configure 构造Makefile

./configure --enable-static --host=arm-linux --with-mp4v2 --prefix=/root/workspace/multimedia/ffpmeg/out CC=/opt/dm6467t/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc CXX=/opt/dm6467t/arm-2009q1-203/bin/arm-none-linux-gnueabi-g++

3.4 执行 make

3.5 执行 make install

3.6 执行 make clean

3.7  搞定。。。。。。。。。。。。。。。。。。。编译好的静态库 躺在out目录里
虽然配置了静态库但动态库已编译了。

4 交叉编译 ffmpeg

4.1 解压 ffmpeg 到目录/root/workspace/multimedia/ffmpeg

4.2 进入目录 /root/workspace/multimedia/ffmpeg/ffmpeg-1.0

4.3 执行configure 构造Makefile

./configure --arch=arm --target-os=linux --cc=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-gcc  cxx=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-g++ strip=/opt/arm-2009q1-203/bin/arm-none-linux-gnueabi-strip --enable-cross-compile --disable-avdevice --disable-avfilter --disable-network --enable-static --disable-shared --enable-small --disable-debug --disable-everything --enable-protocol=file --enable-encoder=libx264 --enable-encoder=libfaac --enable-libx264 --enable-gpl --enable-libfaac --enable-nonfree --enable-muxer=avi --enable-demuxer=avi --prefix=/root/workspace/smart-box-apps-v1.0/sbox_app/multimedia/ffpmeg/out --extra-cflags=-I/root/workspace/smart-box-apps-v1.0/sbox_app/multimedia/ffpmeg/out/include --extra-ldflags=-L/root/workspace/smart-box-apps-v1.0/sbox_app/multimedia/ffpmeg/out/lib

4.4 执行 make

4.5执行 make install

4.6 搞定。。。。。。。。。。。。。。。。。。。编译好的静态库 躺在out目录里

说明: --disable-everything 一定要关闭所有,然后再打开你需要的模块,不然编译的静态库有几十兆

5 使用 ffmpeg 库

修改原有的Makefile 添加:

INCLUDES+=-I$(SBOX_APP_DIR)/multimedia/ffpmeg/out/include

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavformat.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavcodec.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libx264.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libfaac.a

#LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavdevice.a

#LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavfilter.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libavutil.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libswresample.a

LIBS+=$(SBOX_APP_DIR)/multimedia/ffpmeg/out/lib/libswscale.a

编译出可执行程序2.2M大小

裁剪成功

ffmpeg+libx264+facc交叉编译 实现264流录制avi文件

时间: 2024-10-03 21:53:34

ffmpeg+libx264+facc交叉编译 实现264流录制avi文件的相关文章

VoIP应用在Ubuntu 14.04下编译FFmpeg libX264及PJSIP

PJSIP是一个开源的SIP协议栈.它支持多种SIP的扩展功能,可说算是最目前流行的SIP协议栈之一了.  它实现了SIP.SDP.RTP.STUN.TURN和ICE.PJSIP作为基于SIP的一个多媒体通信框架提供了非常清晰的API,以及NAT穿越的功能.PJSIP具有非常好的移植性,几乎支持现今所有系统:从桌面系统.嵌入式系统到智能手机.PJSIP同时支持语音.视频.状态呈现和即时通讯. PJSIP很强大,很多VOIP语音视频通话应用都用它… 下面来说说如何在ubuntu下进行编译 文章目录

使用FFMPEG在windows平台下推rtmp流

使用FFMPEG在windows平台下推rtmp流 工作中习惯在Linux下面使用FFmpeg模拟推rtmp流,无奈家中的电脑都是windows系统,需要利用家中的带宽来测试流媒体服务器的性能.所以研究了一下如何在windows系统中快速推流. 首先下载安装ffmpeg 下载windows下的FFMPEG压缩包,解压到当前目录,见下图(如何快速截图并上传到图传?) 我们使用的是ffmpeg-20180429-19c3df0-win64-static\bin路径下的ffmpeg.exe文件. 写两

开启FFmpeg+libx264软解码的多线程特性

之前编译的FFmpeg+libx264可以实现分辨率为1920*1080的H264视频流的软解码,经过测试,随着码率的提高,解码效率会降低,导致解码速率跟不上实际帧率.查找资料发现FFmpeg软解码支持多线程特性,程序上不用做修改,只是在软解码的上下文设置里添加一行指定解码线程数量的代码即可,如下: m_codec = avcodec_find_decoder_by_name("h264_mediacodec"); if (!m_codec) { SDLOG_PRINTF("

Java 流(Stream)、文件(File)和IO

Java.io包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io包中的流支持很多种格式,比如:基本类型.对象.本地化字符集等等. 一个流可以理解为一个数据的序列.输入流表示从一个源读取数据,输出流表示向一个目标写数据. Java为I/O提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中. 但本文讲述最基本的和流与I/O相关的功能.我们将通过一个个例子来学习这些功能. 读取控制台输入 Java的控制台输入由System.in完成. 为了获得一

C++学习47 文件的概念 文件流类与文件流对象 文件的打开与关闭

迄今为止,我们讨论的输入输出是以系统指定的标准设备(输入设备为键盘,输出设备为显示器)为对象的.在实际应用中,常以磁盘文件作为对象.即从磁盘文件读取数据,将数据输出到磁盘文件.磁盘是计算机的外部存储器,它能够长期保留信息,能读能写,可以刷新重写,方便携带,因而得到广泛使用. 文件(file)是程序设计中一个重要的概念.所谓“文件”,一般指存储在外部介质上数据的集合.一批数据是以文件的形式存放在外部介质(如磁盘.光盘和U盘)上的.操 作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部

在Ubuntu宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,类似于PC上的ldd命令

在电脑上安装的Linux系统中,有一个ldd命令,可以查看对应的可执行文件或库文件依赖哪些库,但可执行文件或库文件要求与操作系统的编译器类型相同,即电脑是X86的GCC编译器,那么无法通过ldd命令查看ARM交叉编译器编译出来的可执行文件或库文件. 如果想在Ubuntu等Linux宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,可以通过以下命令: [email protected]:$ arm-linux-readelf  -a  busybox |grep "Shared&qu

利用字节流和字节数组流是实现文件的复制

package ioxuexi; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;i

InputStream流解析 XML文件

1 // 根据InputStream流解析 XML文件 2 private void getNewsFromStream(InputStream is){ 3 // 1.创建XML pull 解析器 谷歌内置解析器 4 XmlPullParser xp = Xml.newPullParser(); 5 try { 6 //2.指定解析器要解析的文件 和解析文件所用到的编码方式 7 xp.setInput(is,"utf-8"); 8 //3.开始解析文件(在解析之前需要有 JavaBe

java——用递归和IO流来实现文件的复制

1 import java.io.ByteArrayInputStream; 2 import java.io.ByteArrayOutputStream; 3 import java.io.File; 4 import java.io.FileInputStream; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStream; 8 import java.io.Ou