发烧友实测 | 用飞凌OKA40i-C开发板玩转FFmpeg

news2025/2/28 20:19:27
本篇试用报告由发烧友  zealsoft提供,感谢  zealsoft的支持。飞凌嵌入式会在电子发烧友和电路城论坛持续开展开发板有奖试用活动,更有京东E卡等着你!欢迎大家的持续关注。

1. FFmpeg的安装

FFmpeg是用来记录、转换数字音频、视频的开源软件,它支持文件和网络流操作。它支持以函数库的方式使用,所以有很多软件都依赖它,比如VLC、暴风影音、腾讯会议等。它的命令行程序也非常强大,各种命令行选项学起来虽然困难,但是几乎能够满足日常对音视频的各种处理需求。今天我们就通过飞凌嵌入式OKA40i-C开发板来介绍它的命令行工作方式。

FFmpeg提供了全部源代码,所以在网上可以找到很多教程是关于交叉编译ARM版本的。我们测试的版本使用的是FFmpeg-release-armel-static.tar.xz。解压缩以后拷贝到飞凌嵌入式OKA40i-C开发板上并设置好权限就可以使用了。

2. USB摄像头测试

OKA40i-C开发板接口丰富,它支持USB摄像头、CMOS-OV5640摄像头、模拟摄像头。把USB摄像头插入开发板,然后使用

v4l2-ctl --list-devices

可以看到/dev/video0就是我们的USB摄像头,如下图。

使用下面的命令可以看到该摄像头的全部参数:

v4l2-ctl -d /dev/video0 --all
Driver Info (not using libv4l2):

Driver name : uvcvideo

Card type : USB2.0 PC CAMERA

Bus info : usb-sunxi-ehci-1

Driver version : 3.10.65

Capabilities : 0x04000001

Video Capture

Streaming

Video input : 0 (Camera 1: ok)

Format Video Capture:

Width/Height : 640/480

Pixel Format : 'YUYV'

Field : None

Bytes per Line : 1280

Size Image : 614400

Colorspace : Default

Transfer Function : Default

YCbCr Encoding : Default

Quantization : Default

Crop Capability Video Capture:

Bounds : Left 0, Top 0, Width 640, Height 480

Default : Left 0, Top 0, Width 640, Height 480

Pixel Aspect: 1/1

Streaming Parameters VideoCapture:

Capabilities : timeperframe

Frames per second: 30.000 (30/1)

Read buffers : 0

brightness (int) : min=0 max=255 step=1 default=128value=128

contrast (int) : min=0 max=255 step=1 default=135value=135

saturation (int) : min=0 max=255 step=1 default=75 value=75

hue (int) : min=-127 max=127 step=1 default=0 value=0

gamma (int) : min=1 max=8 step=1 default=4 value=4

power_line_frequency (menu) : min=0 max=2 default=1 value=1

sharpness (int) : min=0 max=15 step=1 default=5 value=5

backlight_compensation (int) : min=1 max=5 step=1 default=1 value=1

我们使用了两种型号的USB摄像头,按照手册说明使用内置的uvccamera程序进行测试,不过都没有成功,得到的错误信息如下图所示。

我们使用FFmpeg可以抓取视频,命令行如下:

ffmpeg -f video4linux2 -s 640x480 -pix_fmt yuyv422 -i /dev/video0 out.yuv

使用Windows版本的ffplay可以正常播放抓取的视频,命令行如下:

ffplay -s 640x480 -pix_fmt yuyv422 out.yuv

上面保存的是YUV格式的原始视频,如果要保存压缩视频,可以用下面的命令行:

ffmpeg -y -t 15 -r 25 -f video4linux2 -i /dev/video0 out3.mp4-timestamps bs

其中的-r 25表示每秒采样25帧,这个参数必须有,否则FFmpeg可能会不断地采集并压缩同一视频帧。-r参数超过30没有什么意义,因为USB摄像头的最大能力就是30fps。

飞凌嵌入式OKA40i-C开发板可以对于1080P的视频压缩达到45fps,所以对USB摄像头的视频压缩应该没有什么压力。

3. FFmpeg性能测试

FFmpeg有个benchmark参数可以方便进行性能测试。我们对A40i开发板自带的一个MP4视频就行解码测试,命令行如下:

ffmpeg-benchmark -i translate.mp4 -f null –

得到的测试数据如下:

由于我手上暂时没有其他的开发板可以对比,于是就通过我用了5年的i7-6500笔记本测试了一下,测试结果如下:

video:148kB

audio:3428kB subtitle:0kB other streams:0kB globalheaders:0kB muxing

overhead:unknown

bench:utime=2.820s stime=0.110s rtime=0.956s

bench:maxrss=14208kB

4. FFmpeg产生实时视频流

FFmpeg可以支持实时视频流的发送和接收,从而可以把OKA40i-C开发板上的视频实时发送到PC上,由PC上的软件实时接收并显示。我们可以使用下面的命令将OKA40i-C开发板上的一个MP4转换为RTP码流发送的PC上:

ffmpeg -re -i test.mp4 -an -c copy -f rtp rtp://192.168.0.105:1234

使用Wireshark可以看到在PC机的1234端口收到大量来自OKA40i-C开发板的H.264视频流。

如果想在PC上显示视频流,需要建立一个SDP文件,它描述视频流中的端口和编码信息。

SDP是来自SIP标准中定义,目前VLC、Apple QuickTime和ffplay等很多软件都可以打开SDP文件,并按照SDP中的描述显示视频流。SDP文件并不需要手工编写,在ffmpeg运行时它会显示命令行所对应的SDP定义,如下图所示。

也可以用重定向将输出写入一个SDP文件,如:

ffmpeg -re -i test.mp4 -an -c copy -f rtp rtp://192.168.0.105:1234 > rtp.sdp

下面就是使用VLC显示的接收到的视频流。

5. FFmpeg转发USB摄像头的视频流

前面演示了将MP4文件转换为视频流,我们也可以将USB摄像头采集的内容实时转发到PC上,使用下面的命令行即可。

ffmpeg -y -t 15 -r 25 -f video4linux2 -i /dev/video0 -f rtp

rtp://192.168.0.105:1234 > usb.sdp

再使用下面的命令行就可以看到实时抓取的USB摄像头的视频流了:

ffplay -protocol_whitelist "file,udp,rtp" -i usb.sdp

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

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

相关文章

python作业大教学:制作员工管理系统

前言 大家早好、午好、晚好吖 ❤ ~ 环境使用: Python 3.8 Pycharm 功能需求 “”" 创建员工类:属性有:员工号,员工姓名,员工工资; 创建用户类:属性有:用户名,密码&#x…

Excel插件E灵:按家庭建表,创建一户一表。将明细表转成一户一表

单击播放视频: 教你将Excel明细表转换成一户一表,即按家庭创建新表01需求概述 图1是档案明细表,图2是家庭收入采集表的模板样式。现要求将明细表转换成家庭收入采集表,有几个家庭就生成几份单独的采集表。 图1 档案明细表 图2 家…

玩游戏蓝牙耳机哪款好?适合打游戏的无线蓝牙耳机推荐

随着蓝牙耳机越来越受欢迎,喜欢戴蓝牙耳机玩游戏的人也越来越多,特别是近几年随着技术不断地升级,支持低延迟、能听声辨位的游戏蓝牙耳机逐渐火热起来。今天在这里给大家分享几款适合打游戏的无线蓝牙耳机,一起来看看吧。 一、南…

神舟战神z7使用U盘重装系统操作教程分享

神舟战神z7使用U盘重装系统操作教程分享。有用户使用神舟战神z7笔记本电脑的时候安装了一个程序导致了电脑中毒,系统出现了损坏,无法正常的使用。今天教你如何通过U盘重装系统的方法来进行系统的重置,恢复正常的电脑使用。 准备工作&#xff…

复杂度分析

算法 如何评估一个算法的好坏?(事后统计法的应用) 在同一个问题上 比较不同算法对于同一输入的执行时间 事后统计法的缺点 1.严重依赖硬件以及运行时各种不确定因素(比如cpu好一点的效率就高一点) 2.必须编写相应的测试代码 3.测试时输入的数据难以保证公平性…

【数据挖掘机器学习】招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解

文章目录一.本次需求背景二.职位招聘数据的分位数图、分位数-分位数图三.使用散点图、使用线性回归算法拟合散点图处理数据一.本次需求背景 本文主题:招聘网站的职位招聘数据的分位数图、分位数-分位数图以及散点图、使用线性回归算法拟合散点图处理详解 之前的文…

《Python多人游戏项目实战》第三节 在窗口上显示玩家ID以及对话内容

目录 3.1 显示不同的人物图片 3.2 显示玩家ID 3.3 显示玩家对话内容 3.4 完整代码下载地址 本节只是在上一节内容的基础上加一些小功能:显示不同的人物图片、在人物头顶上显示玩家ID以及人物头顶上显示一个聊天对话框。大家可以把这一节内容当做一个过渡&#x…

【OpenCV-Python】教程:6-2 Pose Estimation (姿态估计)

OpenCV Python Pose Estimation (姿态估计) 【目标】 利用calib3d模块在图像中创建一些3D效果。 【理论】 这是一小部分。在上一节中,已经找到了摄像机矩阵,失真系数等。给定一个图案图像,我们可以利用上面的信息来计算它的姿态&#xff…

【云原生进阶之容器】第一章Docker核心技术1.5.2节——cgroups原理剖析

2 cgroups原理解析 上面是说的cgroups 是内核提供的功能,但现在我们在用户空间想使用的是cgroup的功能。其原理是:linux 内核有一个很强大的模块叫做VFS(vritual File System),VFS 把具体的文件系统的细节隐藏起来,给用户态进程提供一个完备的文件系统API接口。linux 也是通…

昆仑万维重磅发布AIGC全系列算法与模型,领跑未来

2022年12月15日,昆仑万维在北京举行AIGC技术发布会,会上昆仑万维CEO方汉正式发布了「昆仑天工」AIGC全系列算法与模型,并宣布模型开源。「昆仑天工」旗下模型包括天工巧绘SkyPaint、天工乐府SkyMusic、天工妙笔SkyText、天工智码SkyCode&…

[附源码]Python计算机毕业设计高校学科竞赛报名系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

四、移动手机自动化测试

移动手机自动化测试4.1 Appium 介绍4.1.1 Appium 中的常用术语1. Session2. Desired Capabilities3. Appium Server4.1.2 Appium 服务关键字Appium 服务相关参数的说明4.1 Appium 介绍 Appium 是一个开源、跨平台的自动化测试工具,可以用来测试 Native 及混合的移动…

Web3中文|Reddit用户在Polygon上铸造了超500万个NFT

Reddit用户通过Collectible Avatars 计划,已经铸造了超过 500 万个NFT。 Reddit的NFT头像是在以太坊扩展网络Polygon上铸造的,大多数都是免费赠送给Reddit用户。 在NFT销量下滑和加密货币市场动荡的情况下,Reddit对NFT头像的推动是一个罕见…

Spring 之类元数据封装—MetadataReader

在 Spring 中最喜欢干的事情就是将多个参数封装到一个对象,这里就挑选一个例子讲讲——MetadataReader,这个对象是将一个类封装成了三部分:File 文件本身,类元数据,注解元数据。 MetadataReader 元数据对象 先看下这…

架构设计(四):CDN

架构设计(四):CDN 作者:Grey 原文地址: 博客园:架构设计(四):CDN CSDN:架构设计(四):CDN CDN 全称 Content delivery…

Redis面试准备

1. redis网站 Redis Redis文档中心 -- Redis中国用户组(CRUG) 数据库排名网站:DB-Engines - Knowledge Base of Relational and NoSQL Database Management Systems 2. 基础知识 磁盘中的寻址速度是毫秒级,内存中寻址速度是纳…

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-048(CVE-2017-9791)

一、漏洞编号 s2-048 CVE-2017-9791二、影响范围 Apache Struts 2.3.x系列中启用了struts2-struts1-plugin插件的版本三、漏洞描述 Apache Struts2 2.3.x 系列启用了struts2-struts1-plugin 插件并且存在 struts2-showcase 目录,其漏洞成因是当ActionMessage接收客户可控的参…

【论文精读】Focal Inverse Distance Transform Maps for Crowd Localization

文章目录摘要主要贡献主要内容一、FIDT二、LMDS三。I-SSIM loss摘要 在本文中,我们关注人群定位任务,这是人群分析的一个重要课题。基于回归的方法大多使用卷积神经网络( CNN )对密度图进行回归,在极度稠密的场景中无法准确定位实例&#xf…

跨境卖家如何以最少量的预算建立品牌知名度?

关键词:跨境卖家、品牌知名度 什么是品牌知名度? 品牌知名度反映了您的目标受众对您的品牌的了解、认可和记忆程度。 为什么品牌知名度至关重要? 当您的目标受众需要您提供的产品或服务时,您希望他们考虑您的品牌。为此&#xf…

windows下nginx隐藏HTTP 请求头文件中的Server信息

简介 本文主要是隐藏HTTP 请求头文件中的Server信息 解决问题主要分下面几步 一、准备编译所需要的环境 二、修改nginx源码改变配置 三、编译nginx源码生成新的nginx.exe 四、替换nginx.exe,重新启动nginx 1. 准备所需环境 环境都需要准备好,因为编译是…