Days 20 ElfBoard 板 FFmpeg移植

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。因此,对于从事多媒体技术开发的工程师来说,深入研究FFMPEG成为一门必不可少的工作,可以这样说,FFMPEG之于多媒体开发工程师的重要性正如kernel之于嵌入式系统工程师一般。

配置交叉编译环境
ELFbord官方使用的是arm-poky-linux-gnueabi-gcc交叉编译器,但是在使用中发现会报错,因此我使用的是gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux(在实验中使用gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf会报一个与pkg-config有关的错误,暂未找到问题原因及解决方法),具体下载链接请在公众号"MrFeng的学习笔记"回复“ELFboard交叉编译器”获取。
arm交叉编译器下载完成后,我们创建/usr/local/arm目录并将下载的压缩包拷贝到该目录下并解压

sudo mkdir /usr/local/arm
sudo cp gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz /usr/local/arm/
sudo tar -vxf ggcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux.tar.xz
1
2
3


之后我们配置环境变量,使用命令“sudo gedit /etc/profile”打开profile文件,并在文件最后添加

export PATH=$PATH:/usr/local/arm/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin
1


最后保存文件并使用reboot命令重启系统,在命令行输入“arm-linux-gnueabihf-gcc -v”查询是否搭建成功,如果没搭建成功,请检查上一步的PATH路径是否填写正确。


编译x264
首先从网站http://download.videolan.org/pub/videolan/x264/snapshots/获取x264的源码并下载


将下载的压缩包放到你的工作目录下并解压,并创建一个“x264_install”文件夹用于存放编译后生成的文件

tar -vxf x264-snapshot-20191217-2245-stable.tar.bz2
mkdir x264_install
1
2
之后进入解压的“x264-snapshot-20191217-2245-stable”文件夹下(我这里将文件夹重命名为了x264),并执行如下命令

./configure --enable-shared --prefix=/home/feng/文档/开发/Linux/proj/ffmpeg/x264_install/ --host=arm-linux-gnueabihf --disable-asm
1
其中

prefix=/home/feng/文档/开发/Linux/proj/ffmpeg/x264_install/ 表示指定编译后存放路径
host=arm-linux-gnueabihf :表示指定交叉编译链,用户需要修改为自己的交叉编译器

之后修改“config.mak”文件,需要将交叉编译工具修改为自己使用的交叉编译工具

SYS_ARCH=ARM
SYS=LINUX
CC= arm-linux-gnueabihf-gcc
LD=arm-linux-gnueabihf-gcc -o
AR= arm-linux-gnueabihf-ar rc
RANLIB= arm-linux-gnueabihf-ranlib
1
2
3
4
5
6


最后执行
make
make install
完成x264的编译。

编译ffmpeg
首先从ffmpeg网站http://ffmpeg.org/download.html上下载ffmpeg源码并放置在工作目录下

之后与x264编译类似,解压并创建文件夹ffmpeg_install用于存放生成的文件

tar -vxf ffmpeg-snapshot.tar.bz2
mkdir ffmpeg_install
1
2
进入解压后的ffmpeg文件夹,并修改Makefile文件,添加编译选项

CFLAGS += -fPIC
1
执行如下命令来配置编译选项

./configure --cross-prefix=arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --prefix=/home/feng/文档/开发/Linux/proj/ffmpeg/ffmpeg_install --enable-shared --disable-static --enable-gpl --enable-nonfree --disable-ffplay --enable-swscale --enable-pthreads --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-x86asm --disable-stripping --enable-libx264 --extra-cflags=-I/home/feng/文档/开发/Linux/proj/ffmpeg/x264_install/include --extra-ldflags=-L/home/feng/文档/开发/Linux/proj/ffmpeg/x264_install/lib --extra-libs=-ldl
1
参数说明:

cross-prefix=arm-linux-gnueabihf-:配置为自己的交叉编译工具
cc=arm-linux-gnueabihf-gcc:配置为自己的交叉编译工具
arch=arm --prefix=/home/feng/文档/开发/Linux/proj/ffmpeg/ffmpeg_install:编译后存放路径
extra-cflags=-I/home/ubuntu/work/ffmpeg/_x264_install/include:x264的include路径
extra-ldflags=-L/home/ubuntu/work/ffmpeg/_x264_install/lib :x264的lib路径


这一步可能遇到的问题:

ERROR: x264 not found using pkg-config
解决方法:需要指定x264/lib/pkgconfig的路径:

 export PKG_CONFIG_PATH=/home/feng/文档/开发/Linux/proj/ffmpeg/x264_install/lib/pkgconfig
1
error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
解决方法:

sudo apt-get install apt-file
sudo apt-file update
sudo apt-file search libz.so.1
sudo apt-get install lib32z1
1
2
3
4
如果出现问题,可以查看/ffmpeg/ffbuild目录下的config.log文件,查看具体报错原因
最后执行
make
make install
完成ffmpeg的编译


文件移植
进入x264_install/lib目录,将x264_install/lib文件夹下的库文件拷贝到开发板的/lib/目录下

scp -o HostKeyAlgorithms=+ssh-rsa *x264* root@192.168.0.232:/lib/
1
进入ffmpeg_install/lib目录,将ffmpeg_install/lib文件夹下的so库文件全部拷贝到开发板的/lib/目录下

scp -o HostKeyAlgorithms=+ssh-rsa *lib* root@192.168.0.232:/lib/
1
进入ffmpeg_install/bin/目录,将ffmpeg_install/bin/目录下的ffmpeg文件拷贝到开发板的/bin/目录下

scp -o HostKeyAlgorithms=+ssh-rsa ffmpeg root@192.168.0.232:/bin/
1
完成文件的移植。

测试
将免驱的USB摄像头插到ELFboard的USB口上,我们可以看到在/dev文件夹下会新增一个video2的设备,这个就是我们的摄像头。

之后我们测试使用ffmpeg录制摄像头视频并保存

ffmpeg -f video4linux2 -s 320x240 -i /dev/video2 /home/root/cam_video.avi
1
会出现如下所示


我们使用ctrl+c打断录制,这时候我们就会看到/home/root目录下出现了cam_video.avi文件,这个就是我们录制的视频文件。
我们将该视频文件传输到电脑上进行查看。在ELFboard命令行输入

scp -o HostKeyAlgorithms=+ssh-rsa cam_video.avi feng@192.168.0.1:/home/feng/
1
其中“feng@192.168.0.1:/home/feng/”需要改成你自己电脑的用户名和ip地址以及你想要存放文件的路径
这时候在/home/feng/文件夹下就能看到并播放我们录制的视频了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670917.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 11新特性之tuple

概述 在C编程语言的发展历程中,C 11标准引入了许多开创性的新特性,极大地提升了开发效率与代码质量。其中,tuple(元组)作为一种强大的容器类型,为处理多个不同类型的值提供了便捷的手段。tuple是一种固定大…

NLP_神经概率语言模型(NPLM)

文章目录 NPLM的起源NPLM的实现1.构建实验语料库2.生成NPLM训练数据3.定义NPLM4.实例化NPLM5.训练NPLM6.用NPLM预测新词 NPLM小结 NPLM的起源 在NPLM之前,传统的语言模型主要依赖于最基本的N-Gram技术,通过统计词汇的共现频率来计算词汇组合的概率。然而…

解决opencv在图片中添加中文字体乱码问题

解决opencv在图片中添加中文字体乱码问题 需要事先安装PIL库 from PIL import Image, ImageDraw, ImageFont import cv2def cv2_img_add_text(img, text_str, left, top, text_color, text_size): if isinstance(img, np.ndarray):img Image.fromarray(cv2.cvtColor(img, …

【自然语言处理】微调 Fine-Tuning 各种经典方法的概念汇总

【自然语言处理】微调 Fine-Tuning 各种经典方法的概念汇总 前言请看此微调 Fine-TuningSFT 监督微调(Supervised Fine-Tuning)概念:监督学习,无监督学习,自监督学习,半监督学习,强化学习的区别…

Jetpack之RadionBtton、Switch、Checkbox组件介绍

Jetpack Compose系列(9) - RadionBtton、Switch、Checkbox组件介绍 RadioButton 跟View体系一样,Compose也有RadioButton单选按钮组件,遵从Material Design风格。 其构造函数如下: Composable fun RadioButton(selected: Boolean,onClick…

uniapp+uView 【详解】录音,自制音频播放器

效果预览 代码实现 <template><view class"btnListBox"><view class"audioBox" v-if"audioLength"><u-row><u-col span"2"><u--text aligncenter :text"currentTime"></u--text>…

YOLOv8改进 | 检测头篇 | 独创RFAHead检测头超分辨率重构检测头(适用Pose、分割、目标检测)

一、本文介绍 本文给大家带来的改进机制是RFAHead,该检测头为我独家全网首发,本文主要利用将空间注意力机制与卷积操作相结合的卷积RFAConv来优化检测头,其核心在于优化卷积核的工作方式,特别是在处理感受野内的空间特征时。RFAConv主要的优点就是增加模型的特征提取能力,…

arcgis各种版本下载

arcgic 下载&#xff01;&#xff01;&#xff01; ArcGIS是一款地理信息系统软件&#xff0c;由美国Esri公司开发。它提供了一系列完整的GIS功能&#xff0c;包括地图制作、空间数据管理、空间分析、空间信息整合、发布与共享等。ArcGIS是一个可扩展的GIS平台&#xff0c;提供…

vue-页面全屏插件-screenfull

需求&#xff1a;点击按钮项目的当前页全屏 项目环境 vue2 使用插件 screenfull 安装 npm install screenfull --save代码 <template><div class"btn-fullscreen"><svg-icon :icon-class"isFullscreen?exit-fullscreen:fullscreen" cli…

恒创科技:服务器内存不足影响大吗?

​  服务器在为网站、应用程序和在线服务提供支持方面发挥着关键作用。这些服务器需要提供最佳性能&#xff0c;以确保正常无缝的用户体验&#xff0c;而RAM是显著影响服务器性能的关键配置之一。 RAM 是一种随机存取存储器&#xff0c;计算机和服务器使用它来临时存储正在使…

【AG32VF407】国产MCU+FPGA,更新官方固件解决8Mhz内部晶振不准,Verilog实测7.9Mhz!

视频讲解 [AG32VF407]国产MCUFPGA&#xff0c;更新官方固件解决8Mhz内部晶振不准&#xff0c;Verilog实测7.9Mhz&#xff01; 实验过程 之前出现的双路pll不同频率的测试中&#xff0c;提出了内部晶振输出不准的问题&#xff0c;和官方沟通后得到极大改善&#xff0c;方法如下…

探索Web API SpeechSynthesis:给你的网页增添声音

Web API SpeechSynthesis是一项强大的浏览器功能&#xff0c;它允许开发者将文本转换为语音&#xff0c;并通过浏览器播放出来。本文将深入探讨SpeechSynthesis的控制接口&#xff0c;包括其功能、用法和一个完整的JavaScript示例。 参考资料&#xff1a;SpeechSynthesis - Web…

Python程序设计 函数

简单函数 函数&#xff1a;就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。 函数的使用包含两个步骤&#xff1a; 定义函数 —— 封装 独立的功能 调用函数 —— 享受 封装 的成果 函数的作用&#xff0c;在开发程序时&#xff0c;使用…

搭建游戏应该选择什么样的服务器?

目前&#xff0c;越来越多的游戏网络公司发展了起来&#xff0c;游戏已经成为了人们日常生活中必不可少的一个娱乐方式&#xff0c;对于搭建游戏来说&#xff0c;服务器方面需要保持对于游戏的顺畅运行&#xff0c;使游戏用户得到良好的体验感&#xff0c;服务器对于网络游戏企…

NCCL源码解析: P2P 连接的建立

文章目录 前言概括详解ncclTransportP2pSetup() 前言 NCCL 源码解析总目录 我尽量在每个函数之前介绍每个函数的作用&#xff0c;建议先不要投入到函数内部实现&#xff0c;先把函数作用搞清楚&#xff0c;有了整体框架&#xff0c;再回归到细节。 习惯&#xff1a; 我的笔记…

2024年第九届信号与图像处理国际会议(ICSIP 2024)

2024第九届信号与图像处理国际会议&#xff08;ICSIP 2024&#xff09;将于2024年7月12-14日在中国南京召开。ICSIP每年召开一次&#xff0c;在过去的七年中吸引了1200多名与会者&#xff0c;是展示信号和图像处理领域最新进展的领先国际会议之一。本次将汇集来自亚太国家、北美…

LeetCode:13.罗马数字转整数

13. 罗马数字转整数 - 力扣&#xff08;LeetCode&#xff09; 目录 思路&#xff1a; 官解代码&#xff1a; 作者辣眼代码: 每日表情包&#xff1a; 思路&#xff1a; 思路已经很明了了&#xff0c;题目已经给出一般规则和特殊规则&#xff08;而且题目确保给定的是正确的…

活动图(Activity Diagram)

一、定义 动态图。显示人或对象的活动&#xff0c;其方式类似于流程图 二、构成 包含有&#xff1a; 初始节点(开始)最后一个节点(结束)活动转换判定(决策),同步条分岔或汇合泳道 1、 初始节点(开始) 实心圆表示初始节点 2、最后一个节点(结束) 圆圈内加一个实心圆来表…

判断字符串是否包含正则表达式默认的特殊字符c++

判断字符串是否包含正则表达式默认的特殊字符 业务描述&#xff1a; 上层配置的字符列表中&#xff0c;既有准确的字符串&#xff0c;又有可以进行正则匹配的字符串&#xff0c;这时候需要区分出来那些是正则匹配的字符串。 思路: 判断字符串中&#xff0c;是否存在正则表达…

SF相关1111

AndroidQ 图形系统&#xff08;11&#xff09;UI刷新&#xff0c;SurfaceFlinger&#xff0c;Vsync机制总结_android viewrootimpl surfaceflinger hw-CSDN博客