福利贴:最全实时音视频开发要用到的开源工程汇总
1、前言
實(shí)時(shí)音視頻的開發(fā)學(xué)習(xí)有很多可以參考的開源項(xiàng)目。一個(gè)實(shí)時(shí)音視頻應(yīng)用共包括幾個(gè)環(huán)節(jié):采集、編碼、前后處理、傳輸、解碼、緩沖、渲染等很多環(huán)節(jié)。每一個(gè)細(xì)分環(huán)節(jié),還有更細(xì)分的技術(shù)模塊。比如,前后處理環(huán)節(jié)有美顏、濾鏡、回聲消除、噪聲抑制等,采集有麥克風(fēng)陣列等,編解碼有VP8、VP9、H.264、H.265等。
典型的實(shí)時(shí)音視頻應(yīng)用數(shù)據(jù)流轉(zhuǎn)過程如下:
下面這張圖可能更具體一點(diǎn):
?本文匯總了一些能幫助到正在學(xué)習(xí)或進(jìn)行實(shí)時(shí)音視頻開發(fā)的同行們的開源工程,這些工程分為幾類:音視頻編解碼類、視頻前后處理、服務(wù)端類等,希望能加速您的學(xué)習(xí)或研究過程。
2、音視頻編解碼類開源工程
視頻編解碼的作用就是:在設(shè)備的攝像頭采集畫面和前處理后,將圖像進(jìn)行壓縮、進(jìn)行數(shù)字編碼、用于傳輸。
編解碼器的優(yōu)劣基本在于:壓縮效率的高低、速度和功耗。
目前,主流的視頻編碼器分為3個(gè)系列:
?
- 1)VPx(VP8,VP9):
VPx系列是由Google開源的視頻編解碼標(biāo)準(zhǔn)。在保證相同質(zhì)量情況下,VP9相比VP8碼率減少約50%; - 2)H.26x(H.264,H.265):H.26x系列在硬件支持上比較廣泛,H.265的編碼效率能比上一代提高了30-50%,但是復(fù)雜度和功耗會比上一代大很多,所以純軟件編碼實(shí)現(xiàn)的話有一定瓶頸,現(xiàn)有的技術(shù)下,還是需要依靠硬件編解碼為主;
- 3)AVS(AVS1.0,AVS2.0):
AVS是我國具備自主知識產(chǎn)權(quán)的第二代信源編碼標(biāo)準(zhǔn),目前已經(jīng)發(fā)展到第二代。
2.1WebRTC工程
?首先會用到的肯定是WebRTC,是一個(gè)支持網(wǎng)頁瀏覽器進(jìn)行實(shí)時(shí)語音對話或視頻對話的開源項(xiàng)目。它提供了包括音視頻的采集、編解碼、網(wǎng)絡(luò)傳輸、顯示等功能。如果你想基于WebRTC開發(fā)實(shí)時(shí)音視頻應(yīng)用,需要注意,由于WebRTC缺少服務(wù)端設(shè)計(jì)和部署方案,你還需要將WebRTC與Janus等服務(wù)端類開源項(xiàng)目結(jié)合即可。
官網(wǎng)地址:https://webrtc.org/
2.2x264工程
H.264是目前應(yīng)用最廣的碼流標(biāo)準(zhǔn)。x264則是能夠產(chǎn)生符合H.264標(biāo)準(zhǔn)的碼流的編碼器,它可以將視頻流編碼為H.264、MPEG-4 AVC格式。它提供了命令行接口與API,前者被用于一些圖形用戶接口例如Straxrip、MeGUI,后者則被FFmpeg、Handbrake等調(diào)用。當(dāng)然,既然有x264,就有對應(yīng)HEVC/H.265的x265。
官網(wǎng)地址:x264, the best H.264/AVC encoder - VideoLAN
?
2.3FFmpeg工程
FFmpeg大家應(yīng)該不陌生,提供了編碼、解碼、轉(zhuǎn)換、封裝等功能,以及剪裁、縮放、色域等后期處理,支持幾乎目前所有音視頻編碼標(biāo)準(zhǔn)(由于格式眾多,我們就不一一列列舉了,可以在Wikipedia中找到)。
同時(shí),FFmpeg還衍生出了libav項(xiàng)目,從中誕生了視頻解碼器LAV,許多播放軟件都可調(diào)用LAV進(jìn)行解碼,并且LAV本身也支持利用顯卡進(jìn)行視頻硬解。很多主流視頻播放器中都以FFmpeg作為內(nèi)核播放器。不僅僅是視頻播放器,就連Chrome這類可以播放網(wǎng)頁視頻的瀏覽器也受益于FFmpeg。很多開發(fā)者也基于FFmpeg做過很多開發(fā)并開源出來,比如大神雷霄驊(代碼可見他的sourceforge)。
官網(wǎng)地址:FFmpeg
相關(guān)視頻推薦【點(diǎn)擊免費(fèi)報(bào)名即可查看】
【免費(fèi)】FFmpeg/WebRTC/RTMP/NDK/Android音視頻流媒體高級開發(fā)-學(xué)習(xí)視頻教程
2.4ijkplayer工程
在介紹ijkplayer之前,要先提到ffplay。ffplay是一個(gè)使用了FFmpeg和sdl庫的可移植的媒體播放器。ijkplay是Bilibili開源的基于ffplay.c實(shí)現(xiàn)的輕量級iOS/Android視頻播放器,API易于集成,且編譯配置可裁剪,利于控制安裝包大小。
在編解碼方面,ijkplayer支持視頻軟解和硬解,可以在播放前配置,但在播放過程中則不能切換。iOS和Android上視頻硬解可分別使用大家熟悉的VideoToolbox和MediaCodec。但ijkplayer對音頻僅支持軟解。
Github地址:https://github.com/Bilibili/ijkplayer
?
2.5JSMpeg工程
JSMpeg是一個(gè)基于JavaScript的MPEG1視頻的解碼器。如果要做H5端的視頻直播,可以考慮使用JSMpeg在移動端進(jìn)行解碼。在H5端做音視頻直播,可以使用JSMpeg進(jìn)行視頻解碼,這也是最近比較火的H5抓娃娃的主流策略。
Github地址:https://github.com/phoboslab/jsmpeg
?
2.6Opus音頻編碼器
?
Opus是用C語言開發(fā)的一個(gè)高靈活度的音頻編碼器,針對ARM、x86有特殊優(yōu)化,fix-point實(shí)現(xiàn)。Opus在各方面都有著明顯優(yōu)勢。它同時(shí)支持語音與音樂的編碼,比特率為6k-510k。它融合了SILK編碼方法和CELT編碼方法。SILK原本被用于Skype中,基于語音信號的線性預(yù)測分析(LPC),對音樂支持并不好。而CELT盡管適用于全帶寬音頻,但對低比特率語音的編碼效率不高,所以兩者在Opus中形成了互補(bǔ)。
?Opus是“取代”了Speex。但是Speex中有的功能,Opus卻沒有,比如回聲消除。這個(gè)功能已經(jīng)從編碼器中獨(dú)立出來。所以如果想實(shí)現(xiàn)好的回聲消除,可以配合WebRTC的AEC和AECM模塊做二次開發(fā)。
官網(wǎng)地址:Opus Codec
?
2.7live555工程
?live555是一個(gè)C++流媒體開源項(xiàng)目,其中不僅包括了傳輸協(xié)議(SIP、RTP)、音視頻編碼器(H.264、MPEG4)等,還包括流媒體服務(wù)器的例子,是流媒體項(xiàng)目的首選,里面的傳輸模塊是非常值得視頻會議開發(fā)作為參考的。
官網(wǎng)地址:LIVE555.COM
分享一個(gè)音視頻高級開發(fā)交流群,需要C/C++ Linux服務(wù)器架構(gòu)師學(xué)習(xí)資料加企鵝群:788280672獲取。資料包括(C/C++,Linux,FFmpeg ?webRTC ?rtmp ?hls rtsp ffplay ?srs 等等),免費(fèi)分享。
?
?3、音視頻前后處理開源工程
前后處理包含很多細(xì)分技術(shù),應(yīng)用正確的話,對視頻質(zhì)量或多或少都有提升。不過每增加一個(gè)處理環(huán)節(jié),必然會增加運(yùn)算量與延時(shí),所以如何取舍,還要大家各自斟酌。
?
3.1Seetaface工程
Seetaface是由中科院山世光老師開源的一套完整的人臉檢測,人臉對齊和人臉驗(yàn)證方案。代碼基于C++實(shí)現(xiàn),開源協(xié)議為BSD-2,可供學(xué)術(shù)界和工業(yè)界免費(fèi)使用。且不依賴于任何第三方的庫函數(shù),在使用對齊好的LFW圖片上,檢測對齊全部使用該開源軟件的情況下可達(dá)到97.1%。
Github地址:https://github.com/seetaface/SeetaFaceEngine
?
3.2GPUImage工程
?現(xiàn)在在iOS端做美顏效果、加水印,基本都會采用GPUImage,它內(nèi)置了125種渲染效果, 還支持腳本自定義。該項(xiàng)目實(shí)現(xiàn)了圖片濾鏡、攝像頭實(shí)時(shí)濾鏡。它優(yōu)勢在于處理效果是基于GPU實(shí)現(xiàn),相對于CPU處理性能更高。
Github地址:https://github.com/BradLarson/GPUImage
?
3.3Open nsfw model工程
?
Open nsfw model是雅虎開源項(xiàng)目,全名是Open Not suitable for work model,專門鑒別不適合工作時(shí)間瀏覽的圖片(言而言之就是小黃圖)。它是基于Caffe框架訓(xùn)練的模型,用于音視頻后處理。不過,它還不能鑒別恐怖、血腥圖片。
Github地址:https://github.com/yahoo/open_nsfw
?
3.4Soundtouch工程
?Soundtouch是一個(gè)開源的音頻處理框架,主要功能對音頻變速、變調(diào),實(shí)現(xiàn)變聲的效果。同時(shí),它也能對媒體流實(shí)時(shí)處理。采用32位浮點(diǎn)或者16位定點(diǎn),支持單聲道或者雙聲道,采樣率范圍為8k - 48k。
官網(wǎng)地址:SoundTouch Sound Processing Library
4、服務(wù)端類開源項(xiàng)目
正如開始時(shí)我們所說,WebRTC缺少服務(wù)端的設(shè)計(jì)與部署,利用MCU、SFU實(shí)現(xiàn)多人聊天,提高傳輸質(zhì)量,都需要開發(fā)者自己動手。而下面這些開源項(xiàng)目能夠幫到你。
?
4.1Jitsi工程
?Jitsi是開源的視頻會議系統(tǒng),可以實(shí)現(xiàn)在線視頻會議,文檔共享和即時(shí)消息的分享。它支持網(wǎng)絡(luò)視頻會議,使用SFU模式實(shí)現(xiàn)視頻路由器功能。開發(fā)語言是Java。它支持SIP帳號注冊電話呼叫。不僅支持單機(jī)本地安裝方式,還支持云平臺安裝。
官網(wǎng)地址:Free Video Conferencing Software for Web & Mobile | Jitsi
?
4.2JsSIP工程
?JsSIP是基于WebRTC的JavaScript SIP協(xié)議實(shí)現(xiàn)的庫,可以在瀏覽器和Node.js中運(yùn)行。它可以與 OverSIP、Kamailio、Asterisk、OfficeSIP等SIP Server一起運(yùn)行。
Github地址:https://github.com/versatica/JsSIP
?
4.3SRS工程
SRS是一個(gè)采用MIT協(xié)議授權(quán)的國產(chǎn)的簡單的RTMP/HLS 直播服務(wù)器。最新版還支持FLV模式,同時(shí)具備了RTMP的實(shí)時(shí)性,以及HLS中屬于HTTP協(xié)議對各種網(wǎng)絡(luò)環(huán)境高度適應(yīng)性,并且支持更多播放器。它的功能與nginx-rtmp-module類似, 可以實(shí)現(xiàn)RTMP/HLS的分發(fā)。
Github地址:https://github.com/ossrs/srs
?
4.4JRTPLIB工程
?
JRTPLIB 是一個(gè)開源的 RTP協(xié)議實(shí)現(xiàn)庫,支持Windows和unix平臺。它支持多線程,處理性能較好。它還支持RFC3550、UDP IPV6,支持自定義擴(kuò)展傳輸協(xié)議。但它不支持TCP傳輸,這需要開發(fā)者自己來實(shí)現(xiàn)。同時(shí),它也不支持音視頻的分包,代碼要你自己來實(shí)現(xiàn)。
Github地址:https://github.com/j0r1/JRTPLIB
?
4.5OPAL工程
OPAL是OpenH323的下一個(gè)版本,繼承了Openh323協(xié)議,其新包含了SIP協(xié)議棧,是實(shí)現(xiàn)SIP協(xié)議的首選,缺點(diǎn)是參考例子較少。
代碼地址:OpalVOIP - Browse Files at SourceForge.net
?
4.6Kurento工程
?Kurento是一個(gè)基于WebRTC的媒體服務(wù)端,并包含了一系列API,可以簡化web與移動端實(shí)時(shí)視頻應(yīng)用的開發(fā)。
官網(wǎng)地址:Kurento
Github地址:https://github.com/Kurento
?
4.7Janus工程
Janus是一個(gè)WebRTC媒體網(wǎng)關(guān)。不論是做流媒體、視頻會議、錄制、網(wǎng)關(guān),都可以基于Janus來實(shí)現(xiàn)。
Github地址:https://github.com/meetecho/janus-gateway
5、其它資源
5.1Callstats公司
?
實(shí)時(shí)通信過程中的,延時(shí)、丟包、接通率、掉線率等質(zhì)量問題,都影響用戶體驗(yàn)。商用項(xiàng)目尤其需要關(guān)注。Callstats是一家通過對WebRTC呼叫進(jìn)行專業(yè)監(jiān)測,來幫助用戶搜集通訊數(shù)據(jù),提升通話質(zhì)量的服務(wù)商。
Callstats也通過Github開放很多案例,可供使用Jitsi-videobridge,、turn-server、JsSIP的開發(fā)者參考。
官方地址:Callstats.io Your WebRTC Monitoring and Analytics Solution
Github地址:callstats.io · GitHub
?
5.2Meetecho團(tuán)隊(duì)
?Meetecho是著名的開源WebRTC網(wǎng)關(guān)項(xiàng)目Janus的開發(fā)團(tuán)隊(duì)。他們還提供基于Janus開發(fā)的技術(shù)咨詢與部署服務(wù)、建立視頻會議直播與錄制服務(wù)等。
官網(wǎng)地址:RTC Experts - Meetecho
總結(jié)
以上是生活随笔為你收集整理的福利贴:最全实时音视频开发要用到的开源工程汇总的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算任意多边形的面积
- 下一篇: SAP业务顾问必备的技术能力