完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 zealsoft 于 2022-9-15 20:01 编辑 一、 FFmpeg的安装 FFmpeg是用来记录、转换数字音频、视频的开源软件,它支持文件和网络流操作。它支持以函数库的方式使用,所以有很多软件都依赖它,包括VLC、暴风影音、腾讯会议等。它的命令行程序也非常强大,各种命令行选项学起来虽然困难,但是几乎能够满足日常对音视频的各种处理需求。今天我们介绍的就是它的命令行工作方式。FFmpeg提供了全部源代码,所以在网上可以找到很多教程是关于交叉编译ARM版本的。如果想偷懒,也可以从https://johnvansickle.com/ffmpeg/下载已经编译好的版本。我们测试的版本使用的是FFmpeg-release-armel-static.tar.xz。解压缩以后拷贝到arm开发板并设置好权限就可以使用了。 二、 USB摄像头测试 OKA40i-C开发板接口丰富,它支持USB 摄像头、CMOS-OV5640 摄像头、模拟摄像头。把USB摄像头插入开发板,然后使用
可以看到/dev/video0就是我们的USB摄像头,如下图。 使用下面的命令可以看到该摄像头的全部参数:
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可以抓取视频,命令行如下:
使用Windows版本的ffplay可以正常播放抓取的视频,命令行如下:
上面保存的是YUV格式的原始视频,如果要保存压缩视频,可以用下面的命令行:
其中的-r 25表示每秒采样25帧,这个参数必须有,否则FFmpeg可能会不断地采集并压缩同一视频帧。-r参数超过30没有什么意义,因为USB摄像头的最大能力就是30fps。A40i可以对于1080p的视频压缩达到45fps,所以对USB摄像头的视频压缩应该没有什么压力。 三、 FFmpeg性能测试 FFmpeg有个benchmark参数可以方便进行性能测试。我们对A40i开发板自带的一个MP4视频就行解码测试,命令行如下:
得到的测试数据如下: 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 手上暂时没有ARM开发板可以对比,就拿我用了5年的i7-6500笔记本测试了一下,测试结果如下: video:241kB audio:3428kB subtitle:0kB other streams:0kB globalheaders:0kB muxing overhead: unknown bench: utime=0.391s stime=0.000s rtime=0.228s bench: maxrss=20316kB 以后可以找其他开发板来对比一下。 四、 FFmpeg产生实时视频流 FFmpeg可以支持实时视频流的发送和接收,从而可以把板子上的视频实时发送到PC上,由PC上的软件实时接收并显示。我们可以使用下面的命令将板子上的一个MP4转换为RTP码流发送的PC上:
使用Wireshark可以看到在PC机的1234端口收到大量来自板子的H.264视频流。 如果想在PC上显示视频流,需要建立一个SDP文件,它描述视频流中的端口和编码信息。SDP是来自SIP标准中定义,目前VLC、Apple QuickTime和ffplay等很多软件都可以打开SDP文件,并按照SDP中的描述显示视频流。SDP文件并不需要手工编写,在ffmpeg运行时它会显示命令行所对应的SDP定义,如下图所示。 也可以用重定向将输出写入一个SDP文件,如:
下面就是使用VLC显示的接收到的视频流。
|
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【飞凌嵌入式OK3588J-C开发板体验】OK3588J-C开发板开箱、系统烧写及环境测试
382 浏览 0 评论
【飞凌嵌入式OK3588J-C开发板体验】OK3588J-C开发板开箱评测
3617 浏览 1 评论
[技术] 【飞凌嵌入式OK3576-C开发板体验】llama2.c部署
7434 浏览 0 评论
7893 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】ssh连接与文件传输
7822 浏览 0 评论
6832浏览 2评论
11247浏览 1评论
5327浏览 1评论
85765浏览 1评论
688浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 11:48 , Processed in 0.606973 second(s), Total 39, Slave 29 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号