国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

入門級嵌入式板卡的視頻工具FFmpeg移植與測試開發——米爾i.MX6UL/i.MX6ULL開發板

米爾電子 ? 2023-03-02 09:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本篇測評由電子發燒友的優秀測評者“ALSET”提供。

48f59cf2-b899-11ed-ad0d-dac502259ad0.gif

電子發燒友網發布了一款產品:米爾 MYD-Y6ULX-V2 開發板,基于 NXP i.MX6UL/i.MX6ULL處理器,該開發板被米爾稱之為經典王牌產品。也是是一款嵌入式Linux入門級的開發板。本次測試目標是在此開發板上進行視頻工具FFmpeg的移植與測試開發,測試FFmpeg在此開發板上的視頻應用效果。

48fcca90-b899-11ed-ad0d-dac502259ad0.jpg

01.

FFmpeg是什么

FFmpeg是一套開源的音視頻代庫,具有非常強大的功能包括視頻采集功能、視頻格式轉換、視頻抓圖、給視頻加水印等。

FFmpeg視頻采集功能非常強大,不僅可以采集視頻采集卡或USB攝像頭的圖像,還可以進行屏幕錄制,同時還支持以RTP方式將視頻流傳送給支持RTSP/RTMP 的流媒體服務器,支持直播應用。采用LGPL或GPL許可證。它提供了錄制、轉換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,具有高可移植性和編解碼質量。它幾乎實現了所有當下常見的數據封裝格式、多媒體傳輸協議以及音視頻編解碼器。

很多Linux桌面環境中的開源播放器VLC、MPlayer,Windows下的KMPlayer、暴風影音以及Android下幾乎全部第三方播放器都是基于FFmpeg的,可見它的應用非常廣泛,也是嵌入式系統中音視頻使用最多的代碼庫。

FFmpeg工程的幾個主要目錄libavformat:用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結構和讀取音視頻幀等功能;libavcodec:用于各種類型聲音/圖像編解碼;libavutil:包含一些公共的工具函數;libswscale:用于視頻場景比例縮放、色彩映射轉換;libpostproc:用于后期效果處理;ffmpeg:該項目提供的一個工具,可用于格式轉換、解碼或電視卡即時編碼等;ffsever:一個 HTTP 多媒體即時廣播串流服務器;ffplay:是一個簡單的播放器,使用ffmpeg 庫解析和解碼,通過SDL顯示。49189f90-b899-11ed-ad0d-dac502259ad0.jpg

02.

FFmpeg移植編譯

1. 首先切換為交叉編譯環境493cf3b8-b899-11ed-ad0d-dac502259ad0.jpg
2.從github 上拉取ffmpeg源碼,考慮ffmpeg版本比較多,最新的版本增加了許多的擴展功能,同時也增加了對硬件資源的需求。考慮該開發板為ARMv7的初級開發版,因此這里不使用最新的版本,而是使用一個兩年前的版本。使用 ffmpeg-4.1.3版本。

4970b6c6-b899-11ed-ad0d-dac502259ad0.jpg4977d618-b899-11ed-ad0d-dac502259ad0.jpg
3. 寫配置執行腳本

FFmpeg代碼編譯配置有非常多的選項,為了更好的進行配置,這里寫一個腳本用來進行配置執行。

腳本內容如下:4999ffc2-b899-11ed-ad0d-dac502259ad0.jpg
腳本文件名:config_for_mx6ull.sh放到ffmpeg工程根目錄下這里特別注意,因為項目放到是主機的虛擬機外掛的共享目錄里,共享目錄的文件系統是fat32,它不支持軟鏈接,因此需要設置鏈接命令為硬復制,即如下:--ln_s="cp-R"4. 執行配置執行腳本編寫好文配置腳本后,然后可以直接執行,執行完畢,輸出結果如下:4a0b4c36-b899-11ed-ad0d-dac502259ad0.jpg
5.開始多線程編譯配置腳本執行完畢后,會產生makefile文件,然后就可以進行編譯,執行make–j44a2dbfaa-b899-11ed-ad0d-dac502259ad0.jpg
編譯需要大概30分鐘左右,整體編譯順利,最后編譯出結果:4a551bc2-b899-11ed-ad0d-dac502259ad0.jpg
6.檢查編譯的庫文件使用命令 file檢查編譯輸出的動態庫文件和ffmpeg文件,可見是armv7執行文件。4a6b8a1a-b899-11ed-ad0d-dac502259ad0.jpg
經過檢查,目標文件已經編譯成功。7. 編譯FFmpeg附帶的測試例子程序編譯完ffmpeg 庫后,就可以編譯附帶的例子程序,可以更好的定制開發ffmpeg. 先編譯例子程序。例子帶的makefile 文件是x86 平臺的,需要修改一下才能編譯開發板上的版本,進入目錄 /mnt/hgfs/MYD-Y6ULX/Proj/ffmpeg.4.1.3/ffmpeg/doc/examples下,修改Makefile.example修改如下:4a7496e6-b899-11ed-ad0d-dac502259ad0.jpg
修改完,就可以執行編譯,命令如下:make-f Makefile.example4aa28b96-b899-11ed-ad0d-dac502259ad0.jpg4b765016-b899-11ed-ad0d-dac502259ad0.jpg
編譯很順利,一次通過。8. 瘦身動態庫文件和ffmpeg執行文件編譯完的庫文件體積都比較大,像| libavcodecs.so 文件達40M+,所有文件一起傳到開發板上,將非常占用開發板文件空間,因此可以對動態庫和ffmepg執行文件進行瘦身一下。所謂瘦身,就是把執行文件帶的gdb符號信息全部去掉,即可大大減少文件的體積。4ba8c014-b899-11ed-ad0d-dac502259ad0.jpg
9.把編譯瘦身后的文件傳送到開發板然后就可以把編譯好的庫文件和執行文件全部傳送到開發板上,執行命令:scplibavcodec/libavcodec.so.58root@192.168.50.150:/home/rootscplibavformat/libavformat.so.58 root@192.168.50.150:/home/rootscplibavdevice/libavdevice.so.58root@192.168.50.150:/home/rootscplibavfilter/libavfilter.so.7 root@192.168.50.150:/home/rootscplibavutil/libavutil.so.56 root@192.168.50.150:/home/rootscplibswresample/libswresample.so.3root@192.168.50.150:/home/rootscplibswscale/libswscale.so.5 root@192.168.50.150:/home/root4c6982ae-b899-11ed-ad0d-dac502259ad0.jpg

03.

測試FFmpeg程序

因此把FFmpeg的動態庫和主程序都復制到板上的/home/root目錄下了,因此執行FFmpeg時,會提示找不到依賴的運行庫,因此在開發板環境下首先設置一個動態連接庫的路徑。
export LD_LIBRARY_PATH=/home/root

1.查看FFmpeg運行輸出信息

然后執行ffmpeg –version ,看一下版本信息;

4c7631ca-b899-11ed-ad0d-dac502259ad0.jpg

可見輸出了FFmpeg版本庫正確的信息。

2. 使用FFmpeg采集視頻

執行命令:
./ffmpeg-f v4l2 -s 320*240 -r 10 -i /dev/video2 output.yuv
4cc5b8f8-b899-11ed-ad0d-dac502259ad0.jpg


把從攝像頭采集到的yuv數據,使用yuvview播放器上播放,播放如圖:

4cdc7a7a-b899-11ed-ad0d-dac502259ad0.jpg

顯示采集視頻成功。

3. 使用FFmpeg采集編碼視頻

板上執行命令:

./ffmpeg -f v4l2 -s 640*360 -r 10 -i /dev/video2output1.mp4
4d0231d4-b899-11ed-ad0d-dac502259ad0.jpg4d4f342a-b899-11ed-ad0d-dac502259ad0.jpg

傳輸到主機上,查看采集編碼的視頻內容。

4d8053ac-b899-11ed-ad0d-dac502259ad0.jpg

可見,能夠正確的采集并編碼出視頻文件了。

3. 使用FFmpeg采集編碼并進行推送rtsp視頻流

因為在編譯ffmpeg時,沒加入X264編碼庫,因此這里只能使用mpeg4編碼器,因此執行命令如下:
./ffmpeg -t 10 -f video4linux2 -s176*144 -r 8 -i /dev/video2 -vcodec mpeg4 -f rtp rtp://192.168.50.171:554 >/ffmpeg.sdp

Rtsp推流測試,需要一個rtsp服務,推流軟件先使用rtsp協議把流推送到rtsp服務上,然后播放器通過連接rtsp服務器進行拉流播放。Rtsp服務這里使用了 RtspServer 開源rtsp服務器,地址為:

https://github.com/PHZ76/RtspServer.git

在ubuntu主機上編譯成rtsp服務程序,添加接收上行的流,再進行進入隊列,并進行分發即可。操作為啟動rtsp服務后,等待ffmpeg推流,在ffmpeg推流后,即可通過VLC 進行播放測試。

4d95b3d2-b899-11ed-ad0d-dac502259ad0.jpg4db2d58e-b899-11ed-ad0d-dac502259ad0.jpg

04.

測試FFmpeg例子程序

再測試一下基于FFmpeg庫的例子程序,這里測試一下example下的幾個例程,把例程copy到板子上:

4dce9d0a-b899-11ed-ad0d-dac502259ad0.jpg

然后進入開發板執行一個視頻合成例程 muxing,這個例程是調用ffmpeg庫,來生成一段機器合成視頻文件。

4e90f63e-b899-11ed-ad0d-dac502259ad0.jpg

看一下輸出的視頻文件:

4eb86cf0-b899-11ed-ad0d-dac502259ad0.jpg

05.

開發FFmpeg應用程序

也可以基于FFmpeg庫進行視頻應用的開發,這里從網上下載一段FFmpeg的應用程序內容,來測試一下基于上面編譯的FFmpeg庫,來開發應用程序。

代碼如下:

int main(int argc, char **argv){ uint8_t *src_data[4], *dst_data[4]; int src_linesize[4], dst_linesize[4]; int src_w = 320, src_h = 240, dst_w, dst_h; enum AVPixelFormat src_pix_fmt = AV_PIX_FMT_YUV420P, dst_pix_fmt = AV_PIX_FMT_RGB24; const char *dst_size = NULL; const char *dst_filename = NULL; FILE *dst_file; int dst_bufsize; struct SwsContext *sws_ctx; int i, ret;
if (argc != 3) { fprintf(stderr, "Usage: %s output_file output_size\n" "API example program to show how to scale an image with libswscale.\n" "This program generates a series of pictures, rescales them to the given " "output_size and saves them to an output file named output_file\n." "\n", argv[0]); exit(1); } dst_filename = argv[1]; dst_size = argv[2];
if (av_parse_video_size(&dst_w, &dst_h, dst_size) < 0) { fprintf(stderr, "Invalid size '%s', must be in the form WxH or a valid size abbreviation\n", dst_size); exit(1); }
dst_file = fopen(dst_filename, "wb"); if (!dst_file) { fprintf(stderr, "Could not open destination file %s\n", dst_filename); exit(1); }
/* create scaling context */ sws_ctx = sws_getContext(src_w, src_h, src_pix_fmt, dst_w, dst_h, dst_pix_fmt, SWS_BILINEAR, NULL, NULL, NULL); if (!sws_ctx) { fprintf(stderr, "Impossible to create scale context for the conversion " "fmt:%s s:%dx%d -> fmt:%s s:%dx%d\n", av_get_pix_fmt_name(src_pix_fmt), src_w, src_h, av_get_pix_fmt_name(dst_pix_fmt), dst_w, dst_h); ret = AVERROR(EINVAL); goto end; }
/* allocate source and destination image buffers */ if ((ret = av_image_alloc(src_data, src_linesize, src_w, src_h, src_pix_fmt, 16)) < 0) { fprintf(stderr, "Could not allocate source image\n"); goto end; }
/* buffer is going to be written to rawvideo file, no alignment */ if ((ret = av_image_alloc(dst_data, dst_linesize, dst_w, dst_h, dst_pix_fmt, 1)) < 0) { fprintf(stderr, "Could not allocate destination image\n"); goto end; } dst_bufsize = ret;
for (i = 0; i < 100; i++) { /* generate synthetic video */ fill_yuv_image(src_data, src_linesize, src_w, src_h, i);
/* convert to destination format */ sws_scale(sws_ctx, (const uint8_t * const*)src_data, src_linesize, 0, src_h, dst_data, dst_linesize);
/* write scaled image to file */ fwrite(dst_data[0], 1, dst_bufsize, dst_file); }
fprintf(stderr, "Scaling succeeded. Play the output file with the command:\n" "ffplay -f rawvideo -pix_fmt %s -video_size %dx%d %s\n", av_get_pix_fmt_name(dst_pix_fmt), dst_w, dst_h, dst_filename);
end: fclose(dst_file); av_freep(&src_data[0]); av_freep(&dst_data[0]); sws_freeContext(sws_ctx); return ret < 0;}

編譯后,板上運行:4ed4ee16-b899-11ed-ad0d-dac502259ad0.jpg

成功地輸出 rgb 格式的原始視頻文件,傳輸到PC上,使用yuvplayer 播放,可以看到生成的內容:

4ef19048-b899-11ed-ad0d-dac502259ad0.jpg

06.

Y6ULX板上FFmpeg移植測試開發總結

通過從這次在MYD-Y6ULL開發板上進行FFmpeg的移植編譯與應用開發測試過程看,FFmpeg在該開發板上移植非常容易,而且基本上代碼不做任何改動,能夠一次編譯通過。也說明了該開發板的C/C++的開發工具與庫支持比較完善,對這樣復雜的工程也有很好的支持。 這也大大方便了試用該方案進行音視頻開發的可能性,能夠利用開源社區大量的音視頻應用資源,開發出多種嵌入式的音視頻應用。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5198

    文章

    20442

    瀏覽量

    333964
  • 開發板
    +關注

    關注

    26

    文章

    6289

    瀏覽量

    118041
  • 米爾
    +關注

    關注

    0

    文章

    55

    瀏覽量

    8412
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FRDM-i.MX 91開發板刷機指南

    解決方案,支持工業和消費HMI、豐富用戶體驗、沉浸音頻處理、語音解決方案以及互聯設備等應用。下面,我將根據NXP官方的用戶指南,一步步為大家介紹如何設置和刷機。 文件下載: NXP Semiconductors FRDM i.MX
    的頭像 發表于 12-24 11:30 ?688次閱讀

    FRDM i.MX 9平臺選型指南:FRDM i.MX 9系列開發平臺解析

    恩智浦的FRDM平臺解決方案旨在提供易于獲取的開發工具,有效彌合原型制作與量產之間的鴻溝。FRDM經濟高效、易于使用,具備專業功能,助力從概念到產品上市的全過程加速推進。在FRDM i.M
    的頭像 發表于 12-11 15:15 ?3.2w次閱讀
    FRDM <b class='flag-5'>i.MX</b> 9平臺選型指南:FRDM <b class='flag-5'>i.MX</b> 9系列<b class='flag-5'>開發</b>平臺解析

    既要穩定性,還要性價比的工業開發板米爾i.MX91

    之前我介紹過NXPi.MX8系列的開發板,最近它的下一代產品i.MX9系列產品也有了,我就拿到了這個基于NXPi.MX9系列的米爾MYD-L
    的頭像 發表于 11-20 08:05 ?2044次閱讀
    既要穩定性,還要性價比的工業<b class='flag-5'>級</b><b class='flag-5'>開發板</b> — <b class='flag-5'>米爾</b><b class='flag-5'>i.MX</b>91

    簡單認識NXP FRDM i.MX 93開發板

    FRDM i.MX 93開發板是一款入門級、緊湊型開發板,采用i.MX93應用處理器。該配備板
    的頭像 發表于 11-17 09:45 ?1348次閱讀
    簡單認識NXP FRDM <b class='flag-5'>i.MX</b> 93<b class='flag-5'>開發板</b>

    【干貨分享】米爾NXP i.MX 91開發板移植運行IGH EtherCAT主站

    米爾基于NXPi.MX91的核心開發板,搭載新一代入門級NXPi.MX91處理器,內核Cor
    的頭像 發表于 09-02 08:04 ?1058次閱讀
    【干貨分享】<b class='flag-5'>米爾</b>NXP <b class='flag-5'>i.MX</b> 91<b class='flag-5'>開發板</b><b class='flag-5'>移植</b>運行IGH EtherCAT主站

    瑞芯微RK3506 vs NXP i.MX6ULL

    NXPi.MX6ULL核心進行多方面對比。性能與能效對比性能優勢對比:RK3506在接口方面比i.MX6ULL少2個UART,其他性能方面,RK3506以三核A7(1.
    的頭像 發表于 06-19 16:26 ?1242次閱讀
    瑞芯微RK3506 vs NXP <b class='flag-5'>i.MX6ULL</b>

    618盛夏狂歡,米爾電子攜手恩智浦開啟年度技術盛宴!

    即日起-2025.06.30,米爾恩智浦多系列開發板限時折扣!米爾基于i.MX91、i.MX93、i.M
    的頭像 發表于 06-13 08:03 ?900次閱讀
    618盛夏狂歡,<b class='flag-5'>米爾</b>電子攜手恩智浦開啟年度技術盛宴!

    米爾NXP i.MX 91核心發布,助力新一代入門級Linux應用開發

    本帖最后由 blingbling111 于 2025-5-30 16:17 編輯 米爾電子基于與NXP長期合作的嵌入式處理器開發經驗,在i.MX
    發表于 05-30 11:20

    新品!米爾NXP i.MX 91核心,賦能新一代入門級Linux應用

    推出的米爾基于?NXPi.MX91核心開發板?(MYC-LMX91),延續了米爾嵌入式模組
    的頭像 發表于 05-29 08:01 ?2864次閱讀
    新品!<b class='flag-5'>米爾</b>NXP <b class='flag-5'>i.MX</b> 91核心<b class='flag-5'>板</b>,賦能新一代<b class='flag-5'>入門級</b>Linux應用

    飛凌嵌入式ElfBoard ELF 1板卡-Uboot

    /SourceCode下載。不過我們目前使用的uboot源碼不是在這個網站下載的,而是由NXP公司提供的。NXP公司在推廣i.MX6ULL芯片時,會開發出一套i.MX6ULL EVK評估
    發表于 05-22 10:44

    NXP i.MX 91開發板#支持快速創建基于Linux?的邊緣器件

    NXP Semiconductors FRDM i.MX 91開發板設計用于評估i.MX 91應用處理器,支持快速創建基于Linux ^?^ 的邊緣器件。該開發板還設計用于
    的頭像 發表于 05-19 10:55 ?2860次閱讀
    NXP <b class='flag-5'>i.MX</b> 91<b class='flag-5'>開發板</b>#支持快速創建基于Linux?的邊緣器件

    ECB20-PG6Y28C-I 單板機深度測評報告 ——工業嵌入式開發的強力助手

    ECB20-PG6Y28C-I?是成都億佰特電子科技基于 i.MX6ULL 處理器推出的工業測試底板,搭配 ECK20-6Y28C 系列核
    的頭像 發表于 04-22 11:49 ?1204次閱讀

    如何在i.MX6ULL睡眠時停止刷新LCD?

    為了更好的 EMC,我們需要在 i.MX6ULL 進入睡眠狀態時停止 LCD 刷新。 能否實現 ? 平臺: i.MX6ULL 系統: Linux
    發表于 04-03 07:14

    如何在i.MX6ULL定制上啟用IO Expander PCA6416A的控制?

    我想知道如何在 i.MX6ULL 定制上啟用 IO Expander PCA6416A 的控制。 我嘗試修改 imx6ul-14x14-evk.dtsi,將 pca6416 節點添加到 i
    發表于 03-26 07:10

    NXP入門級Linux應用開發板,FRDM i.MX 91詳解

    FRDM平臺新品發布 FRDM i.MX 91開發板是一款低成本、體積小巧的開發板,集成了恩智浦i.MX 91應用處理器和IW610 Wi-Fi 6
    的頭像 發表于 03-14 09:43 ?3729次閱讀
    NXP<b class='flag-5'>入門級</b>Linux應用<b class='flag-5'>開發板</b>,FRDM <b class='flag-5'>i.MX</b> 91詳解