米尔这款ARM+fpga开发板具备高性能的ARM MPU+多媒体能力,采用i.MX 8M Mini+Artix-7处理器,特别适合多媒体终端开发。本篇就体验搭建ffmpeg开发环境,并进行性能测试,进行视频播放,演示网络视频播放器等。
(资料图片仅供参考)
交叉编译下载代码
git clonehttps://github.com/FFmpeg/FFmpeg.gitcd FFmpeg/
交叉编译
./configure --cross-prefix=aarch64-linux-gnu- --enable-cross-compile --target-os=linux --cc=aarch64-linux-gnu-gcc --arch=arm64 --prefix=/home/lhj/opt/ffmpeg/board --enable-ffmpeg --disable-armv5te --disable-armv6 --disable-armv6t2WARNING: aarch64-linux-gnu-pkg-config not found, library detection may fail.makemake install
生成文件如下
lhj@lhj:~/FFmpeg$ tree /home/lhj/opt/ffmpeg/board//home/lhj/opt/ffmpeg/board/|-- bin| |-- ffmpeg| `-- ffprobe|-- include| |-- libavcodec| | |-- ac3_parser.h| | |-- adts_parser.h| | |-- avcodec.h| | |-- avdct.h| | |-- avfft.h| | |-- bsf.h| | |-- codec.h| | |-- codec_desc.h| | |-- codec_id.h| | |-- codec_par.h| | |-- d3d11va.h| | |-- defs.h| | |-- dirac.h| | |-- dv_profile.h| | |-- dxva2.h| | |-- jni.h| | |-- mediacodec.h| | |-- packet.h| | |-- qsv.h| | |-- vdpau.h| | |-- version.h| | |-- version_major.h| | |-- videotoolbox.h| | |-- vorbis_parser.h| | `-- xvmc.h| |-- libavdevice| | |-- avdevice.h| | |-- version.h| | `-- version_major.h| |-- libavfilter| | |-- avfilter.h| | |-- buffersink.h| | |-- buffersrc.h| | |-- version.h| | `-- version_major.h| |-- libavformat| | |-- avformat.h| | |-- avio.h| | |-- version.h| | `-- version_major.h| |-- libavutil| | |-- adler32.h| | |-- aes.h| | |-- aes_ctr.h| | |-- ambient_viewing_environment.h| | |-- attributes.h| | |-- audio_fifo.h| | |-- avassert.h| | |-- avconfig.h| | |-- avstring.h| | |-- avutil.h| | |-- base64.h| | |-- blowfish.h| | |-- bprint.h| | |-- bswap.h| | |-- buffer.h| | |-- camellia.h| | |-- cast5.h| | |-- channel_layout.h| | |-- common.h| | |-- cpu.h| | |-- crc.h| | |-- csp.h| | |-- des.h| | |-- detection_bbox.h| | |-- dict.h| | |-- display.h| | |-- dovi_meta.h| | |-- downmix_info.h| | |-- encryption_info.h| | |-- error.h| | |-- eval.h| | |-- ffversion.h| | |-- fifo.h| | |-- file.h| | |-- film_grain_params.h| | |-- frame.h| | |-- hash.h| | |-- hdr_dynamic_metadata.h| | |-- hdr_dynamic_vivid_metadata.h| | |-- hmac.h| | |-- hwcontext.h| | |-- hwcontext_cuda.h| | |-- hwcontext_d3d11va.h| | |-- hwcontext_drm.h| | |-- hwcontext_dxva2.h| | |-- hwcontext_mediacodec.h| | |-- hwcontext_opencl.h| | |-- hwcontext_qsv.h| | |-- hwcontext_vaapi.h| | |-- hwcontext_vdpau.h| | |-- hwcontext_videotoolbox.h| | |-- hwcontext_vulkan.h| | |-- imgutils.h| | |-- intfloat.h| | |-- intreadwrite.h| | |-- lfg.h| | |-- log.h| | |-- lzo.h| | |-- macros.h| | |-- mastering_display_metadata.h| | |-- mathematics.h| | |-- md5.h| | |-- mem.h| | |-- motion_vector.h| | |-- murmur3.h| | |-- opt.h| | |-- parseutils.h| | |-- pixdesc.h| | |-- pixelutils.h| | |-- pixfmt.h| | |-- random_seed.h| | |-- rational.h| | |-- rc4.h| | |-- replaygain.h| | |-- ripemd.h| | |-- samplefmt.h| | |-- sha.h| | |-- sha512.h| | |-- spherical.h| | |-- stereo3d.h| | |-- tea.h| | |-- threadmessage.h| | |-- time.h| | |-- timecode.h| | |-- timestamp.h| | |-- tree.h| | |-- twofish.h| | |-- tx.h| | |-- uuid.h| | |-- version.h| | |-- video_enc_params.h| | `-- xtea.h| |-- libswresample| | |-- swresample.h| | |-- version.h| | `-- version_major.h| `-- libswscale| |-- swscale.h| |-- version.h| `-- version_major.h|-- lib| |-- libavcodec.a| |-- libavdevice.a| |-- libavfilter.a| |-- libavformat.a| |-- libavutil.a| |-- libswresample.a| |-- libswscale.a| `-- pkgconfig| |-- libavcodec.pc| |-- libavdevice.pc| |-- libavfilter.pc| |-- libavformat.pc| |-- libavutil.pc| |-- libswresample.pc| `-- libswscale.pc`-- share|-- doc| `-- ffmpeg| |-- bootstrap.min.css| |-- default.css| |-- developer.html| |-- faq.html| |-- fate.html| |-- ffmpeg-all.html| |-- ffmpeg-bitstream-filters.html| |-- ffmpeg-codecs.html| |-- ffmpeg-devices.html| |-- ffmpeg-filters.html| |-- ffmpeg-formats.html| |-- ffmpeg-protocols.html| |-- ffmpeg-resampler.html| |-- ffmpeg-scaler.html| |-- ffmpeg-utils.html| |-- ffmpeg.html| |-- ffprobe-all.html| |-- ffprobe.html| |-- general.html| |-- git-howto.html| |-- libavcodec.html| |-- libavdevice.html| |-- libavfilter.html| |-- libavformat.html| |-- libavutil.html| |-- libswresample.html| |-- libswscale.html| |-- mailing-list-faq.html| |-- nut.html| |-- platform.html| `-- style.min.css|-- ffmpeg| |-- examples| | |-- Makefile| | |-- README| | |-- avio_list_dir.c| | |-- avio_reading.c| | |-- decode_audio.c| | |-- decode_video.c| | |-- demuxing_decoding.c| | |-- encode_audio.c| | |-- encode_video.c| | |-- extract_mvs.c| | |-- filter_audio.c| | |-- filtering_audio.c| | |-- filtering_video.c| | |-- http_multiclient.c| | |-- hw_decode.c| | |-- metadata.c| | |-- muxing.c| | |-- qsv_transcode.c| | |-- qsvdec.c| | |-- remuxing.c| | |-- resampling_audio.c| | |-- scaling_video.c| | |-- transcode_aac.c| | |-- transcoding.c| | |-- vaapi_encode.c| | `-- vaapi_transcode.c| |-- ffprobe.xsd| |-- libvpx-1080p.ffpreset| |-- libvpx-1080p50_60.ffpreset| |-- libvpx-360p.ffpreset| |-- libvpx-720p.ffpreset| `-- libvpx-720p50_60.ffpreset`-- man|-- man1| |-- ffmpeg-all.1| |-- ffmpeg-bitstream-filters.1| |-- ffmpeg-codecs.1| |-- ffmpeg-devices.1| |-- ffmpeg-filters.1| |-- ffmpeg-formats.1| |-- ffmpeg-protocols.1| |-- ffmpeg-resampler.1| |-- ffmpeg-scaler.1| |-- ffmpeg-utils.1| |-- ffmpeg.1| |-- ffprobe-all.1| `-- ffprobe.1`-- man3|-- libavcodec.3|-- libavdevice.3|-- libavfilter.3|-- libavformat.3|-- libavutil.3|-- libswresample.3`-- libswscale.3
19 directories, 234 fileslhj@lhj:~/FFmpeg$
开发板上部署
将bin文件复制到windows下
cp /home/lhj/opt/ffmpeg/board/bin/* /mnt/d
将lib文件复制到windows下
cp /home/lhj/opt/ffmpeg/board/lib/* /mnt/d
再将上述lib文件*.a导入到开发板的/usr/lib目录下
将ffmpeg和ffprobe导入到~目录下
测试
chmod +x ffmpeg ffprobe
root@myd-jx8mma7:~# ./ffmpegffmpeg version N-109734-g806ecace91 Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)configuration: --cross-prefix=aarch64-linux-gnu- --enable-cross-compile --target-os=linux --cc=aarch64-linux-gnu-gcc --arch=arm64 --prefix=/home/lhj/opt/ffmpeg/board --enable-ffmpeg --disable-armv5te --disable-armv6 --disable-armv6t2libavutil 57. 44.100 / 57. 44.100libavcodec 59. 60.100 / 59. 60.100libavformat 59. 37.100 / 59. 37.100libavdevice 59. 8.101 / 59. 8.101libavfilter 8. 56.100 / 8. 56.100libswscale 6. 8.112 / 6. 8.112libswresample 4. 9.100 / 4. 9.100Hyper fast Audio and Video encoderusage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
Use -h to get full help or, even better, run "man ffmpeg"root@myd-jx8mma7:~#
root@myd-jx8mma7:~# ./ffprobeffprobe version N-109734-g806ecace91 Copyright (c) 2007-2023 the FFmpeg developersbuilt with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)configuration: --cross-prefix=aarch64-linux-gnu- --enable-cross-compile --target-os=linux --cc=aarch64-linux-gnu-gcc --arch=arm64 --prefix=/home/lhj/opt/ffmpeg/board --enable-ffmpeg --disable-armv5te --disable-armv6 --disable-armv6t2libavutil 57. 44.100 / 57. 44.100libavcodec 59. 60.100 / 59. 60.100libavformat 59. 37.100 / 59. 37.100libavdevice 59. 8.101 / 59. 8.101libavfilter 8. 56.100 / 8. 56.100libswscale 6. 8.112 / 6. 8.112libswresample 4. 9.100 / 4. 9.100Simple multimedia streams analyzerusage: ffprobe [OPTIONS] INPUT_FILE
You have to specify one input file.Use -h to get full help or, even better, run "man ffprobe".root@myd-jx8mma7:~#
性能测试
https:://www.sample-videos.com/index.php#sample-mp4-video下下载测试视频改名为test.mp4
导入到开发板。
./ffmpeg -benchmark -i test.mp4 -f null -
打印如下
root@myd-jx8mma7:~# ffmpeg -benchmark -i test.mp4 -f null --sh: ffmpeg: command not foundroot@myd-jx8mma7:~# ./ffmpeg -benchmark -i test.mp4 -f null -ffmpeg version N-109734-g806ecace91 Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)configuration: --cross-prefix=aarch64-linux-gnu- --enable-cross-compile --target-os=linux --cc=aarch64-linux-gnu-gcc --arch=arm64
--prefix=/home/lhj/opt/ffmpeg/board --enable-ffmpeg --disable-armv5te --disable-armv6 --disable-armv6t2libavutil 57. 44.100 / 57. 44.100libavcodec 59. 60.100 / 59. 60.100libavformat 59. 37.100 / 59. 37.100libavdevice 59. 8.101 / 59. 8.101libavfilter 8. 56.100 / 8. 56.100libswscale 6. 8.112 / 6. 8.112libswresample 4. 9.100 / 4. 9.100Input #0, mov,mp4,m4a,3gp,3g2,mj2, from "test.mp4":Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41creation_time : 1970-01-01T00:00:00.000000Zencoder : Lavf53.24.2Duration: 00:02:50.86, start: 0.000000, bitrate: 1474 kb/sStream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1086 kb/s, 25 fps, 25 tbr, 12800 tbn (default)Metadata:creation_time : 1970-01-01T00:00:00.000000Zhandler_name : VideoHandlervendor_id : [0][0][0][0]Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 383 kb/s (default)Metadata:creation_time : 1970-01-01T00:00:00.000000Zhandler_name : SoundHandlervendor_id : [0][0][0][0]Stream mapping:Stream #0:0 -> #0:0 (h264 (native) -> wrapped_avframe (native))Stream #0:1 -> #0:1 (aac (native) -> pcm_s16le (native))Press [q] to stop, [?] for helpOutput #0, null, to "pipe:":Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf59.37.100Stream #0:0(und): Video: wrapped_avframe, yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 25 fps, 25 tbn (default)Metadata:creation_time : 1970-01-01T00:00:00.000000Zhandler_name : VideoHandlervendor_id : [0][0][0][0]encoder : Lavc59.60.100 wrapped_avframeStream #0:1(und): Audio: pcm_s16le, 48000 Hz, 5.1, s16, 4608 kb/s (default)Metadata:creation_time : 1970-01-01T00:00:00.000000Zhandler_name : SoundHandlervendor_id : [0][0][0][0]encoder : Lavc59.60.100 pcm_s16leframe= 4271 fps=222 q=-0.0 Lsize=N/A time=00:02:50.83 bitrate=N/A speed=8.87xvideo:2002kB audio:96108kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknownbench: utime=67.061s stime=2.796s rtime=19.272sbench: maxrss=40720kBroot@myd-jx8mma7:~#
对比在PC上的测试结果
bench: utime=8.169s
bench: maxrss=107384kB
开板上大概是PC上2.5分之一的效率。这相对对于2th Gen Intel(R) Core(TM) i5-12500H 2.50 GHz处理器切实固态硬盘的电脑来说,嵌入式开发板的性能已经算不错了,单纯针对这一点几乎可以媲美PC使用了。
./ffmpeg -re -i test.mp4 -an -vcodec copy -f rtp rtp://192.168.2.100:5004
打印如下
root@myd-jx8mma7:~# ./ffmpeg -re -i test.mp4 -an -vcodec copy -f rtp rtp://192.168.2.100:5004ffmpeg version N-109734-g806ecace91 Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 9 (Ubuntu 9.4.0-1ubuntu1~20.04.1)configuration: --cross-prefix=aarch64-linux-gnu- --enable-cross-compile --target-os=linux --cc=aarch64-linux-gnu-gcc --arch=arm64 --prefix=/home/lhj/opt/ffmpeg/board --enable-ffmpeg --disable-armv5te --disable-armv6 --disable-armv6t2libavutil 57. 44.100 / 57. 44.100libavcodec 59. 60.100 / 59. 60.100libavformat 59. 37.100 / 59. 37.100libavdevice 59. 8.101 / 59. 8.101libavfilter 8. 56.100 / 8. 56.100libswscale 6. 8.112 / 6. 8.112libswresample 4. 9.100 / 4. 9.100Input #0, mov,mp4,m4a,3gp,3g2,mj2, from "test.mp4":Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41creation_time : 1970-01-01T00:00:00.000000Zencoder : Lavf53.24.2Duration: 00:02:50.86, start: 0.000000, bitrate: 1474 kb/sStream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1086 kb/s, 25 fps, 25 tbr, 12800 tbn (default)Metadata:creation_time : 1970-01-01T00:00:00.000000Zhandler_name : VideoHandlervendor_id : [0][0][0][0]Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, 5.1, fltp, 383 kb/s (default)Metadata:creation_time : 1970-01-01T00:00:00.000000Zhandler_name : SoundHandlervendor_id : [0][0][0][0]Output #0, rtp, to "rtp://192.168.2.100:5004":Metadata:major_brand : isomminor_version : 512compatible_brands: isomiso2avc1mp41encoder : Lavf59.37.100Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 1086 kb/s, 25 fps, 25 tbr, 90k tbn (default)Metadata:creation_time : 1970-01-01T00:00:00.000000Zhandler_name : VideoHandlervendor_id : [0][0][0][0]SDP:v=0o=- 0 0 IN IP4 127.0.0.1s=No Namec=IN IP4 192.168.2.100t=0 0a=tool:libavformat 59.37.100m=video 5004 RTP/AVP 96b=AS:1086a=rtpmap:96 H264/90000a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z01AH9oBQBbsBEAAAAMAQAAADIPGDKg=,aO88gA==; profile-level-id=4D401F
Stream mapping:Stream #0:0 -> #0:0 (copy)Press [q] to stop, [?] for helpframe= 683 fps= 25 q=-1.0 size= 3102kB time=00:00:27.28 bitrate= 931.5kbits/s speed= 1x
复制如下部分:
在PC端新建demo.sdp文件,粘体上述内容,然后使用VLC打开该sdp文件(VLC的安装网上搜索即可)。
可以看到视频开始播放:
本文进行了ARM+fpga开发板的ffmpeg开发环境的搭建,并在ARM+fpga开发板上测试了ffmpeg的解码性能,以及实现了网络视频播放的Demo。综上可以看出米尔这块ARM+fpga开发板开发板的多媒体性能是非常不错的,完全满足多媒体终端的应用场景。
01 前言米尔这款ARM+fpga开发板具备高性能的ARMMPU+多媒体能力,采...
4月12日下午,2023猫儿山高山杜鹃花文化旅游节新闻发布会在南宁的广...
4月13日消息,江苏南京一只网红暴猴被收编至动物园,现在被动物园的...
青海春天:不好意思,昨天开会没能及时接听你的来电,欢迎您的下次来电
为激发大学生的实践能力和创新能力,引领青年大学生通过光影世界讲...
近日,商务部表示,力争到2025年,让有条件的城市行动起来,真正把...
CLE63要搭载插混动力?大家好,这里是火星汽车。日前,奔驰AMGCLE63...
1、说到空谷,有人想到悬崖,有人想到栈道、桥梁。根据这句话,写一...
日前,别克E4(ElectraE4)现身工信部第370批《道路机动车辆生产企...
苹果正式宣布,将于下周在印度开设第一家苹果官方零售店,凸显出这
如果要评选2023LPL春季赛比较让人失望的队伍,由仁川双C所组成的TES...
欧普照明:欧普照明股份有限公司关于2023年限制性股票激励计划内幕信...
1、日语“林檎”是苹果的意思。2、日语中“苹果”读作“りんご”,...
新华社乌鲁木齐4月12日电题:昔日戈壁荒滩今朝果蔬飘香——新疆设施...
失业保险领取期间医保怎么办来看看接下来跟社保网小编一起来看看吧...
4月12日,国家电力投资集团有限公司物资装备分公司、电能易购(北京...
1、四川一位医生神似岳云鹏,有那么多与岳云鹏相似的路人甲最主要的...
多样化的博物馆教育与服务不仅多层次地传播了商学文化、优秀传统文...
今天小编肥嘟来为大家解答以上的问题。cad布局怎样批量打印,cad怎...
分时图快速拉升意味此时存在大单买入,在大单的推动下,股价快速地...
日前,徐汇区党建引领律师行业高质量发展工作推进会召开。现场,徐...
智通财经获悉,中金发布研究报告称,维持阿里巴巴(09988)“跑赢行业...
1、在KeePass官网下载KeePass工具。2、打开KeePass工具。3、点击“...
树欲静而风不止!近日,汪峰又登上了热搜。他的前妻葛荟婕在直播间...
25年的军旅生涯锻炼了吴邺武顽强拼搏的意志和吃苦耐劳的精神。转业...
读特客户端·深圳新闻网2023年4月12日讯(深圳特区报记者何泳)深圳...
经中国证券监督管理委员会(以下简称“中国证监会”)核发的《关于...
当地时间11日,美国首都华盛顿一殡仪馆附近发生一起枪击案,警方表
近日,记者从朝晖街道了解到,朝晖公园即将新添1000平方米多功能运...
【有一种叫云南的生活】4月底,丽江全景观光山地旅游列车即将通车运行