前言
我們在進行音視頻開發(fā)過程中不可避免的需要使用一些工具進行協(xié)助開發(fā),本文重點講解音視頻開發(fā)過程中常用工具以及常用功能。
1、簡介
VLC 支持多種常見音視頻格式,支持多種流媒體傳輸協(xié)議,也可當(dāng)做本地流媒體服務(wù)器使用,功能十分強大。
2、下載
官網(wǎng)下載地址: https://www./
或者在電腦的應(yīng)用商店下載也可以
3、VLC media player
VLC 是一款自由、開源的跨平臺多媒體播放器及框架,可播放大多數(shù)多媒體文件,以及 DVD、音頻 CD、VCD 及各類流媒體協(xié)議。
VLC 的全名是 Video Lan Client,是一個開源的、跨平臺的視頻播放器。
VLC 支持大量的音視頻傳輸、封裝和編碼格式,下面給出一個簡要的不完整的列表:
- 操作系統(tǒng): Windows、 WinCE、 Linux、 MacOSX、 BEOS、 BSD
- 訪問形式: 文件、 DVD/VCD/CD、 http、 ftp、 mms、 TCP、 UDP、 RTP、 IP 組播、 IPv6、 rtsp
- 編碼格式: MPEG*、 DIVX、 WMV、 MOV、 3GP、 FLV、 H.263、 H.264、 FLAC
- 視頻字幕: DVD、 DVB、 Text、 Vobsub
- 視頻輸出: DirectX、 X11、 XVideo、 SDL、 FrameBuffer、 ASCII
- 控制界面: WxWidgets、 QT4、 Web、 Telnet、 Command line
- 瀏覽器插件: ActiveX、 Mozilla(firefox)
4、VLC 打開網(wǎng)絡(luò)串流
http://devimages.apple.com/iphone/samples/bipbop/gear1/prog_index.m3u8
媒體 -> 打開網(wǎng)絡(luò)串流 將上面的網(wǎng)絡(luò)復(fù)制并粘貼到此處,并點擊播放 可以看到播放效果
5、VLC 作為流媒體服務(wù)器
VLC 的功能很強大, 它不僅僅是一個視頻播放器, 也可作為小型的視頻服務(wù)器, 更可以一邊播放一邊轉(zhuǎn)碼, 把視頻流發(fā)送到網(wǎng)絡(luò)上。
①、搭建 RTSP 流媒體服務(wù)器
媒體 -> 流 添加一個本地的 mp4 格式視頻文件,再點擊串流 點擊下一個
選擇 RTSP,再點擊添加 例如我這里指定一個 RTSP 默認的 554 端口,路徑為 /test,再點擊下一個 配置文件選擇 Video - H.264 + MP3 (TS) TS 流是一個一個的片段,在任意時刻我們可以找到同步頭,可以播放出來,這是 TS 流的好處
可以看到如下內(nèi)容,并點擊流
- vcodec=h264:H264 編碼
- vb=800:視頻的比特率
- acodec=mpga:音頻的編碼
- ab=128:音頻的比特數(shù)
- channels=2:聲道數(shù)
- samplerate=44100:采樣率
- rtsp://:554/test:播放路徑
rtp 是傳輸協(xié)議,rtsp 是控制協(xié)議
可以看到進度條開始動了,這樣一個 RTSP 流媒體服務(wù)器就搭建好了
②、新建播放器
再打開一個 VLC media player 媒體 -> 打開網(wǎng)絡(luò)串流,將上面的播放路徑復(fù)制到 URL 處,并點擊播放 可以看到視頻文件正在被播放 左邊是 VLC 作為流媒體服務(wù)器,作為推流,右邊是 VLC 播放器打開網(wǎng)絡(luò)串流,是一個小型的播放器
可以打開多個播放器打開網(wǎng)絡(luò)串流
二、MediaInfo
1、簡介
MediaInfo 用來分析視頻和音頻文件的編碼和內(nèi)容信息。
①、使用 MediaInfo 可以獲得多媒體文件的哪些信息?
- 內(nèi)容信息: 標(biāo)題, 作者, 專輯名, 音軌號, 日期, 總時間……
- 視頻: 編碼器, 長寬比, 幀頻率, 比特率……
- 音頻: 編碼器, 采樣率, 聲道數(shù), 語言, 比特率……
- 文本: 語言和字幕
- 段落: 段落數(shù), 列表
②、MediaInfo 支持哪些文件格式?
- 視頻:MKV,OGM,AVI,DivX,WMV,QuickTime,Real,MPEG-1,MPEG-2,MPEG-4,DVD (VOB)…
- (編碼器:DivX,XviD,MSMPEG4,ASP,H.264,AVC…)
- 音頻:OGG,MP3,WAV,RA,AC3,DTS,AAC,M4A,AU,AIFF…
- 字幕:SRT,SSA,ASS,SAMI…
2、下載
官網(wǎng)下載地址:https:///en/MediaInfo
或者在電腦的應(yīng)用商店下載也可以
3、MediaInfo
①、主界面
主頁面如下圖所示:
②、主要功能特點
支持眾多視頻和音頻文件格式
多種查看方式: 文本, 表格, 樹形圖, 網(wǎng)頁…… 自定義查看方式
信息導(dǎo)出: 文本, CSV, HTML……
③、使用方法
如果是查看少數(shù)媒體文件的信息, 直接把文件拖入 Mediainfo 應(yīng)用界面即可,然后就會直接顯示出文件的相關(guān)信息。 Mediainfo 也可以直接查看整個文件夾下中的媒體文件信息, 可以點擊界面左側(cè)中間的圖標(biāo)即可。 Mediainfo 能夠查看視頻、 音頻、 圖片的格式信息。
④、Mediainfo 相關(guān)參數(shù)和含義簡介
準(zhǔn)備一個 mp4 文件的視頻文件將其拖入到主界面,并且以 HTML 方式查看,此處先把視圖切換為 HTML(View 菜單 -> HTML)
可以看出,主要包括三個部分的參數(shù),分別是: General、 Video、 Audio。
General 主要是視頻封裝格式的信息,包括:文件大小、文件時長、比特率、編碼時間等。 Video 主要是視頻編碼的相關(guān)信息,包括:編碼器、Profile & Level、是否使用算術(shù)熵編碼、比特率、視頻文件大小、視頻尺寸、幀率模式、幀率、色彩空間、掃描類型(逐行/隔行)、編碼設(shè)置等 Audio 主要是音頻編碼的相關(guān)信息,包括:格式、聲道數(shù)、編碼格式、Profile、時長、比特率、是否有損壓縮、音頻的幀率等信息。
三、FlvAnalyzer
1、簡介
直播推流的時候需要用到 RTMP 的視頻數(shù)據(jù)格式。RTMP 的視頻格式和 FLV 相似,通過查看 FLV 的格式文檔,可以通過分析 FLV 協(xié)格式來解析 RTMP 格式。
RTMP 中的數(shù)據(jù)就是由 FLV 的 TAG 中的數(shù)據(jù)區(qū)構(gòu)成。FLV 是流媒體封裝格式,可以將其數(shù)據(jù)看為二進制字節(jié)流。
總體上看,F(xiàn)LV 包括文件頭(File Header)和文件體(File Body)兩部分,其中文件體由一系列的 Tag 及 Tag Size 對組成,如下圖所示。
2、下載
下載鏈接:flvAnalyser v0.1.2.005
3、基本功能特點
FlvAnalyser 是一款強大的 flv 文件分析工具,包括以下基本功能特點:
- 文件格式分析
- 數(shù)據(jù)分析: Tag 列表, 16 進制分析
- 時間戳分析
- 碼率分析
- 音視頻同步分析
- 日志記錄
- 語法指南(FLV 基本語法)
- 視頻、 音頻 ES 提取存文件;
- 時間信息提取存文件;
4、FlvAnalyzer
①、主界面
②、格式分析
file -> open file
這里和上面的講過的 Mediainfo 很相似
④、時間分析
⑤、碼率分析
⑥、同步分析
上面最常用的是格式分析和數(shù)據(jù)分析
四、Elecard Stream Analyzer 碼流分析工具
1、簡介
Elecard Stream Analyzer 是一款簡單小巧的碼流分析工具,通過該軟件,用戶可以快速的分析查看視頻序列碼流;用戶只需將視頻文件導(dǎo)入軟件內(nèi),系統(tǒng)就會自動幫您分析文件,分析后就會顯示視頻碼的文件大小、碼流類型、數(shù)據(jù)包數(shù)等內(nèi)容了
2、下載
鏈接:https://pan.baidu.com/s/1hMGBTPB58xYTmYysPwlrCA
3、碼流
碼流(Data Rate)是指視頻文件在單位時間內(nèi)使用的數(shù)據(jù)流量,也叫碼率,是視頻編碼中畫面質(zhì)量控制中最重要的部分。
同樣分辨率下,視頻文件的碼流越大,壓縮比就越小,畫面質(zhì)量就越好。
4、使用
打開一個 aac 文件,查看相關(guān)編解碼信息
5、特色介紹
- 顯示和保存流摘要和圖片信息
- 顯示的解碼,預(yù)測和未經(jīng)過濾的幀數(shù)據(jù)(YUV 和單機)
- 顯示剩余,轉(zhuǎn)換和反量化系數(shù)
- 保存的解碼,預(yù)測,未經(jīng)過濾和殘余信息
- 顯示 VPS,SPS,PPS 的片頭與偏移和位大小指示(如標(biāo)準(zhǔn)文檔中)
- 顯示的編碼樹組數(shù)據(jù):位置,分片索引,瓷磚指數(shù),大小,編碼,預(yù)測(MV,MVD及 MV 候選人),變換單元信息
- 切片和小塊邊界,分區(qū),運動矢量,種類,比特大小,量化的可視化
- 通過圖表欄或縮略圖導(dǎo)航
- 顯示器內(nèi)部的視頻流比特分配。能夠選擇的比特流元素的顯示
- 流導(dǎo)航和顯示 I,P,B,IP 和關(guān)鍵幀模式
- 顯示參考幀的
- 十六進制查看器
- 流瀏覽器 - 文件內(nèi)容(頭層)呈現(xiàn)在文本模式下
- 查看參考原始數(shù)據(jù)
- 指標(biāo)計算
- 參照原始數(shù)據(jù)可視化比較(溫度,減,比較,塊 PSNR 模式)
6、多碼流
多碼流技術(shù)是通過在編碼過程中同時產(chǎn)生多種不同碼流及分辨率的流媒體數(shù)據(jù), 根據(jù)用戶實際網(wǎng)絡(luò)帶寬條件為之自動分配相對最佳解碼畫質(zhì)的解決方案。
五、FFmpeg
這里僅對 FFmepg 做簡要介紹,因其內(nèi)容龐大,具體部分準(zhǔn)備放到后面講解
1、簡介
ffmpeg 是一個跨平臺的音視頻處理庫, 為了跨平臺那么就需要編譯出適用于各個平臺的 ffmpeg 庫。
FFmpeg 是一套可以用來記錄、 轉(zhuǎn)換數(shù)字音頻、 視頻, 并能將其轉(zhuǎn)化為流的開源計算機程序。它提供了錄制、 轉(zhuǎn)換以及流化音視頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫 libavcodec, 為了保證高可移植性和編解碼質(zhì)量,libavcodec 里很多 code 都是從頭開發(fā)的。
2、FFmpeg 項目組成
- libavformat:用于各種音視頻封裝格式的生成和解析,包括獲取解碼所需信息以生成解碼上下文結(jié)構(gòu)
- libavcodec:用于各種類型聲音/圖像編解碼;
- libavutil:包含一些公共的工具函數(shù);
- libswscale:用于視頻場景比例縮放、色彩映射轉(zhuǎn)換;
- libpostproc:用于后期效果處理;
①、ffmpeg:該項目提供的一個工具,可用于格式轉(zhuǎn)換、解碼或電視卡即時編碼等 ②、ffsever:一個 HTTP 多媒體即時廣播串流服務(wù)器; ③、ffplay:是一個簡單的播放器,使用 ffmpeg 庫解析和解碼,通過 SDL 顯示;
3、FFmpeg 組成
官網(wǎng)介紹 FFMPEG 是一個多媒體框架,其包含了多個模塊庫:AVFormat,AVCodec,AVFilter,AVDevice,AVUtil 等,并且提供了基于這些庫的三個命令行工具: ffmpeg, ffplay, ffprobe。
4、使用 ffmpeg 的方式分為兩種
- 一種方式是直接使用 ffmpeg 提供的這三個命令行工具來進行多媒體處理;
- 另一種是使用 ffmpeg 封裝的這些庫進行二次開發(fā)
5、FFmpeg 命令行
- 列出支持的格式
- 剪切一段媒體文件
- 提取一個視頻文件中的音頻文件
- 從 MP4 文件中抽取視頻流導(dǎo)出為裸的 H264 數(shù)據(jù)
- 視頻靜音, 即只保留視頻 -an,-vn
- 使用 AAC 音頻數(shù)據(jù)和 H264 視頻生成 MP4 文件
- 音頻格式轉(zhuǎn)換
- 從 WAV 音頻文件中導(dǎo)出 PCM 裸數(shù)據(jù)
- 將一個 MP4 的文件轉(zhuǎn)換為一個 GIF 動圖
- 使用一組圖片生成 gif
- 淡入效果器使用
- 將兩路聲音合并,比如加背景音樂
- 為視頻添加水印效果
- 視頻提亮效果器
- 視頻旋轉(zhuǎn)效果器的使用
- 視頻裁剪效果器的使用
- 將一段視頻推送到流媒體服務(wù)器上
- 將流媒體服務(wù)器上的流 dump 到本地
- 將兩個音頻文件以兩路流的形式封裝到一個文件中
6、FFmpeg 下載及安裝
①、FFmpeg 下載
官方下載地址:https:///download.html 選擇 windows build from gyan.dev 選擇其中一個進行下載
②、安裝
<1>、下載好解壓到本地目錄 D:\FFmpeg 下 <2>、設(shè)置環(huán)境變量 此電腦 -> 屬性 -> 高級系統(tǒng)設(shè)置 -> 環(huán)境變量 -> 系統(tǒng)環(huán)境變量 -> PATH -> 編輯 新增 D:\FFmpeg\ffmpeg-6.0-essentials_build\bin 到環(huán)境變量中
③、測試
<1>、 查看 FFmpeg 的版本 cmd 中輸入 ffmpeg -version 檢查一下是否安裝成功 這個回顯說明安裝成功
<2>、視頻格式轉(zhuǎn)換測試 我們再做一個測試將 mp4 格式文件轉(zhuǎn)換成 flv 格式文件 D:\Work\test 目錄下有一個 mp4 文件 輸入以下命令
ffmpeg -i SampleVideo_1280x720_20mb.mp4 -c copy -f flv SampleVideo_1280x720_20mb.flv
完整的回顯信息
D:\Work\test>ffmpeg -i SampleVideo_1280x720_20mb.mp4 -c copy -f flv SampleVideo_1280x720_20mb.flv
ffmpeg version 6.0-essentials_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-ffnvcodec --enable-nvdec --enable-nvenc --enable-d3d11va --enable-dxva2 --enable-libvpl --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 58. 2.100 / 58. 2.100
libavcodec 60. 3.100 / 60. 3.100
libavformat 60. 3.100 / 60. 3.100
libavdevice 60. 1.100 / 60. 1.100
libavfilter 9. 3.100 / 9. 3.100
libswscale 7. 1.100 / 7. 1.100
libswresample 4. 10.100 / 4. 10.100
libpostproc 57. 1.100 / 57. 1.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SampleVideo_1280x720_20mb.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
creation_time : 1970-01-01T00:00:00.000000Z
encoder : Lavf53.24.2
Duration: 00:01:57.31, start: 0.000000, bitrate: 1436 kb/s
Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], 1048 kb/s, 25 fps, 25 tbr, 12800 tbn (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
vendor_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.000000Z
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Output #0, flv, to 'SampleVideo_1280x720_20mb.flv':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf60.3.100
Stream #0:0(und): Video: h264 (Main) ([7][0][0][0] / 0x0007), yuv420p(progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 1048 kb/s, 25 fps, 25 tbr, 1k tbn (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : VideoHandler
vendor_id : [0][0][0][0]
Stream #0:1(und): Audio: aac (LC) ([10][0][0][0] / 0x000A), 48000 Hz, 5.1, fltp, 383 kb/s (default)
Metadata:
creation_time : 1970-01-01T00:00:00.000000Z
handler_name : SoundHandler
vendor_id : [0][0][0][0]
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame= 2932 fps=0.0 q=-1.0 Lsize= 20659ktimeB =00:01:57.29 bitrate=1442.9kbits/s speed=1.27e+03x
video:15013kB audio:5497kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.726677%
D:\Work\test>
此刻再看 D:\Work\test 目錄下多了一個名為 SampleVideo_1280x720_20mb.flv 的文件
測試視頻素材下載
各種格式,MP4, flv, mkv, 3gp 視頻下載地址: https://www./index.php#sample-mp4-video https://docs./projects/esp-adf/en/latest/design-guide/audio-samples.html
我的qq:2442391036,歡迎交流!
|