技术福利:最全实时音视频开发要用到的开源工程汇总
[轉自]?https://my.oschina.net/jb2011/blog/1619628
1、前言
實時音視頻的開發學習有很多可以參考的開源項目。一個實時音視頻應用共包括幾個環節:采集、編碼、前后處理、傳輸、解碼、緩沖、渲染等很多環節。每一個細分環節,還有更細分的技術模塊。比如,前后處理環節有美顏、濾鏡、回聲消除、噪聲抑制等,采集有麥克風陣列等,編解碼有VP8、VP9、H.264、H.265等。?
典型的實時音視頻應用數據流轉過程如下:
下面這張圖可能更具體一點:
本文匯總了一些能幫助到正在學習或進行實時音視頻開發的同行們的開源工程,這些工程分為幾類:音視頻編解碼類、視頻前后處理、服務端類等,希望能加速您的學習或研究過程。
學習交流:
- 即時通訊開發交流群:320837163[推薦]
- 移動端IM開發入門文章:《新手入門一篇就夠:從零開發移動端IM》
(本文同步發布于:http://www.52im.net/thread-1395-1-1.html)
2、音視頻編解碼類開源工程
視頻編解碼的作用就是:在設備的攝像頭采集畫面和前處理后,將圖像進行壓縮、進行數字編碼、用于傳輸。
編解碼器的優劣基本在于:壓縮效率的高低、速度和功耗。
目前,主流的視頻編碼器分為3個系列:
1)VPx(VP8,VP9):
VPx系列是由Google開源的視頻編解碼標準。在保證相同質量情況下,VP9相比VP8碼率減少約50%;
2)H.26x(H.264,H.265):H.26x系列在硬件支持上比較廣泛,H.265的編碼效率能比上一代提高了30-50%,但是復雜度和功耗會比上一代大很多,所以純軟件編碼實現的話有一定瓶頸,現有的技術下,還是需要依靠硬件編解碼為主;
3)AVS(AVS1.0,AVS2.0):
AVS是我國具備自主知識產權的第二代信源編碼標準,目前已經發展到第二代。
2.1 WebRTC工程
首先會用到的肯定是WebRTC,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的開源項目。它提供了包括音視頻的采集、編解碼、網絡傳輸、顯示等功能。如果你想基于WebRTC開發實時音視頻應用,需要注意,由于WebRTC缺少服務端設計和部署方案,你還需要將WebRTC與Janus等服務端類開源項目結合即可。
官網地址:https://webrtc.org/
更多WebRTC的技術文章請見:
《開源實時音視頻技術WebRTC的現狀》
《簡述開源實時音視頻技術WebRTC的優缺點》
《訪談WebRTC標準之父:WebRTC的過去、現在和未來》
《良心分享:WebRTC 零基礎開發者教程(中文)[附件下載]》
《WebRTC實時音視頻技術的整體架構介紹》
《新手入門:到底什么是WebRTC服務器,以及它是如何聯接通話的?》
《WebRTC實時音視頻技術基礎:基本架構和協議棧》
《淺談開發實時視頻直播平臺的技術要點》
《[觀點] WebRTC應該選擇H.264視頻編碼的四大理由》
《基于開源WebRTC開發實時音視頻靠譜嗎?第3方SDK有哪些?》
《開源實時音視頻技術WebRTC中RTP/RTCP數據傳輸協議的應用》
《簡述實時音視頻聊天中端到端加密(E2EE)的工作原理》
《實時通信RTC技術棧之:視頻編解碼》
《開源實時音視頻技術WebRTC在Windows下的簡明編譯教程》
《網頁端實時音視頻技術WebRTC:看起來很美,但離生產應用還有多少坑要填?》
>>?更多同類文章 ……
2.2 x264工程
H.264是目前應用最廣的碼流標準。x264則是能夠產生符合H.264標準的碼流的編碼器,它可以將視頻流編碼為H.264、MPEG-4 AVC格式。它提供了命令行接口與API,前者被用于一些圖形用戶接口例如Straxrip、MeGUI,后者則被FFmpeg、Handbrake等調用。當然,既然有x264,就有對應HEVC/H.265的x265。
官網地址:https://www.videolan.org/developers/x264.html
2.3 FFmpeg工程
FFmpeg大家應該不陌生,提供了編碼、解碼、轉換、封裝等功能,以及剪裁、縮放、色域等后期處理,支持幾乎目前所有音視頻編碼標準(由于格式眾多,我們就不一一列列舉了,可以在Wikipedia中找到)。
同時,FFmpeg還衍生出了libav項目,從中誕生了視頻解碼器LAV,許多播放軟件都可調用LAV進行解碼,并且LAV本身也支持利用顯卡進行視頻硬解。很多主流視頻播放器中都以FFmpeg作為內核播放器。不僅僅是視頻播放器,就連Chrome這類可以播放網頁視頻的瀏覽器也受益于FFmpeg。很多開發者也基于FFmpeg做過很多開發并開源出來,比如大神雷霄驊(代碼可見他的sourceforge)。
官網地址:http://ffmpeg.org/
2.4 ijkplayer工程
在介紹ijkplayer之前,要先提到ffplay。ffplay是一個使用了FFmpeg和sdl庫的可移植的媒體播放器。ijkplay是Bilibili開源的基于ffplay.c實現的輕量級iOS/Android視頻播放器,API易于集成,且編譯配置可裁剪,利于控制安裝包大小。
在編解碼方面,ijkplayer支持視頻軟解和硬解,可以在播放前配置,但在播放過程中則不能切換。iOS和Android上視頻硬解可分別使用大家熟悉的VideoToolbox和MediaCodec。但ijkplayer對音頻僅支持軟解。
Github地址:https://github.com/Bilibili/ijkplayer
2.5 JSMpeg工程
JSMpeg是一個基于JavaScript的MPEG1視頻的解碼器。如果要做H5端的視頻直播,可以考慮使用JSMpeg在移動端進行解碼。在H5端做音視頻直播,可以使用JSMpeg進行視頻解碼,這也是最近比較火的H5抓娃娃的主流策略。
Github地址:https://github.com/phoboslab/jsmpeg
2.6 Opus音頻編碼器
Opus是用C語言開發的一個高靈活度的音頻編碼器,針對ARM、x86有特殊優化,fix-point實現。Opus在各方面都有著明顯優勢。它同時支持語音與音樂的編碼,比特率為6k-510k。它融合了SILK編碼方法和CELT編碼方法。SILK原本被用于Skype中,基于語音信號的線性預測分析(LPC),對音樂支持并不好。而CELT盡管適用于全帶寬音頻,但對低比特率語音的編碼效率不高,所以兩者在Opus中形成了互補。
Opus是“取代”了Speex。但是Speex中有的功能,Opus卻沒有,比如回聲消除。這個功能已經從編碼器中獨立出來。所以如果想實現好的回聲消除,可以配合WebRTC的AEC和AECM模塊做二次開發。
官網地址:https://opus-codec.org/
2.7 live555工程
live555是一個C++流媒體開源項目,其中不僅包括了傳輸協議(SIP、RTP)、音視頻編碼器(H.264、MPEG4)等,還包括流媒體服務器的例子,是流媒體項目的首選,里面的傳輸模塊是非常值得視頻會議開發作為參考的。
官網地址:http://www.live555.com/
3、音視頻前后處理開源工程
前后處理包含很多細分技術,應用正確的話,對視頻質量或多或少都有提升。不過每增加一個處理環節,必然會增加運算量與延時,所以如何取舍,還要大家各自斟酌。
3.1 Seetaface工程
Seetaface是由中科院山世光老師開源的一套完整的人臉檢測,人臉對齊和人臉驗證方案。代碼基于C++實現,開源協議為BSD-2,可供學術界和工業界免費使用。且不依賴于任何第三方的庫函數,在使用對齊好的LFW圖片上,檢測對齊全部使用該開源軟件的情況下可達到97.1%。
Github地址:https://github.com/seetaface/SeetaFaceEngine
3.2 GPUImage工程
現在在iOS端做美顏效果、加水印,基本都會采用GPUImage,它內置了125種渲染效果, 還支持腳本自定義。該項目實現了圖片濾鏡、攝像頭實時濾鏡。它優勢在于處理效果是基于GPU實現,相對于CPU處理性能更高。
Github地址:https://github.com/BradLarson/GPUImage
3.3 Open nsfw model工程
Open nsfw model是雅虎開源項目,全名是Open Not suitable for work model,專門鑒別不適合工作時間瀏覽的圖片(言而言之就是小黃圖)。它是基于Caffe框架訓練的模型,用于音視頻后處理。不過,它還不能鑒別恐怖、血腥圖片。
Github地址:https://github.com/yahoo/open_nsfw
3.4 Soundtouch工程
Soundtouch是一個開源的音頻處理框架,主要功能對音頻變速、變調,實現變聲的效果。同時,它也能對媒體流實時處理。采用32位浮點或者16位定點,支持單聲道或者雙聲道,采樣率范圍為8k - 48k。
官網地址:http://www.surina.net/soundtouch/
4、服務端類開源項目
正如開始時我們所說,WebRTC缺少服務端的設計與部署,利用MCU、SFU實現多人聊天,提高傳輸質量,都需要開發者自己動手。而下面這些開源項目能夠幫到你。
4.1 Jitsi工程
Jitsi是開源的視頻會議系統,可以實現在線視頻會議,文檔共享和即時消息的分享。它支持網絡視頻會議,使用SFU模式實現視頻路由器功能。開發語言是Java。它支持SIP帳號注冊電話呼叫。不僅支持單機本地安裝方式,還支持云平臺安裝。
官網地址:https://jitsi.org/
4.2 JsSIP工程
JsSIP是基于WebRTC的JavaScript SIP協議實現的庫,可以在瀏覽器和Node.js中運行。它可以與 OverSIP、Kamailio、Asterisk、OfficeSIP等SIP Server一起運行。
Github地址:https://github.com/versatica/JsSIP
4.3 SRS工程
SRS是一個采用MIT協議授權的國產的簡單的RTMP/HLS 直播服務器。最新版還支持FLV模式,同時具備了RTMP的實時性,以及HLS中屬于HTTP協議對各種網絡環境高度適應性,并且支持更多播放器。它的功能與nginx-rtmp-module類似, 可以實現RTMP/HLS的分發。
Github地址:https://github.com/ossrs/srs
4.4 JRTPLIB工程
JRTPLIB 是一個開源的 RTP協議實現庫,支持Windows和unix平臺。它支持多線程,處理性能較好。它還支持RFC3550、UDP IPV6,支持自定義擴展傳輸協議。但它不支持TCP傳輸,這需要開發者自己來實現。同時,它也不支持音視頻的分包,代碼要你自己來實現。
Github地址:https://github.com/j0r1/JRTPLIB
4.5 OPAL工程
OPAL是OpenH323的下一個版本,繼承了Openh323協議,其新包含了SIP協議棧,是實現SIP協議的首選,缺點是參考例子較少。
代碼地址:http://sourceforge.net/projects/opalvoip/files/
4.6 Kurento工程
Kurento是一個基于WebRTC的媒體服務端,并包含了一系列API,可以簡化web與移動端實時視頻應用的開發。
官網地址:http://www.kurento.org/
Github地址:https://github.com/Kurento
4.7 Janus工程
Janus是一個WebRTC媒體網關。不論是做流媒體、視頻會議、錄制、網關,都可以基于Janus來實現。
Github地址:https://github.com/Kurento
5、其它資源
5.1 Callstats公司
實時通信過程中的,延時、丟包、接通率、掉線率等質量問題,都影響用戶體驗。商用項目尤其需要關注。Callstats是一家通過對WebRTC呼叫進行專業監測,來幫助用戶搜集通訊數據,提升通話質量的服務商。
Callstats也通過Github開放很多案例,可供使用Jitsi-videobridge,、turn-server、JsSIP的開發者參考。
官方地址:https://www.callstats.io/
Github地址:https://github.com/callstats-io
5.2 Meetecho團隊
Meetecho是著名的開源WebRTC網關項目Janus的開發團隊。他們還提供基于Janus開發的技術咨詢與部署服務、建立視頻會議直播與錄制服務等。
官網地址:https://github.com/carlhuda/janus
附錄:更多實時音視頻開發資料
《即時通訊音視頻開發(一):視頻編解碼之理論概述》
《即時通訊音視頻開發(二):視頻編解碼之數字視頻介紹》
《即時通訊音視頻開發(三):視頻編解碼之編碼基礎》
《即時通訊音視頻開發(四):視頻編解碼之預測技術介紹》
《即時通訊音視頻開發(五):認識主流視頻編碼技術H.264》
《即時通訊音視頻開發(六):如何開始音頻編解碼技術的學習》
《即時通訊音視頻開發(七):音頻基礎及編碼原理入門》
《即時通訊音視頻開發(八):常見的實時語音通訊編碼標準》
《即時通訊音視頻開發(九):實時語音通訊的回音及回音消除概述》
《即時通訊音視頻開發(十):實時語音通訊的回音消除技術詳解》
《即時通訊音視頻開發(十一):實時語音通訊丟包補償技術詳解》
《即時通訊音視頻開發(十二):多人實時音視頻聊天架構探討》
《即時通訊音視頻開發(十三):實時視頻編碼H.264的特點與優勢》
《即時通訊音視頻開發(十四):實時音視頻數據傳輸協議介紹》
《即時通訊音視頻開發(十五):聊聊P2P與實時音視頻的應用情況》
《即時通訊音視頻開發(十六):移動端實時音視頻開發的幾個建議》
《即時通訊音視頻開發(十七):視頻編碼H.264、VP8的前世今生》
《實時語音聊天中的音頻處理與編碼壓縮技術簡述》
《網易視頻云技術分享:音頻處理與壓縮技術快速入門》
《學習RFC3550:RTP/RTCP實時傳輸協議基礎知識》
《基于RTMP數據傳輸協議的實時流媒體技術研究(論文全文)》
《聲網架構師談實時音視頻云的實現難點(視頻采訪)》
《淺談開發實時視頻直播平臺的技術要點》
《還在靠“喂喂喂”測試實時語音通話質量?本文教你科學的評測方法!》
《實現延遲低于500毫秒的1080P實時音視頻直播的實踐分享》
《移動端實時視頻直播技術實踐:如何做到實時秒開、流暢不卡》
《如何用最簡單的方法測試你的實時音視頻方案》
《技術揭秘:支持百萬級粉絲互動的Facebook實時視頻直播》
《簡述實時音視頻聊天中端到端加密(E2EE)的工作原理》
《移動端實時音視頻直播技術詳解(一):開篇》
《移動端實時音視頻直播技術詳解(二):采集》
《移動端實時音視頻直播技術詳解(三):處理》
《移動端實時音視頻直播技術詳解(四):編碼和封裝》
《移動端實時音視頻直播技術詳解(五):推流和傳輸》
《移動端實時音視頻直播技術詳解(六):延遲優化》
《理論聯系實際:實現一個簡單地基于HTML5的實時視頻直播》
《IM實時音視頻聊天時的回聲消除技術詳解》
《淺談實時音視頻直播中直接影響用戶體驗的幾項關鍵技術指標》
《如何優化傳輸機制來實現實時音視頻的超低延遲?》
《首次披露:快手是如何做到百萬觀眾同場看直播仍能秒開且不卡頓的?》
《Android直播入門實踐:動手搭建一套簡單的直播系統》
《網易云信實時視頻直播在TCP數據傳輸層的一些優化思路》
《實時音視頻聊天技術分享:面向不可靠網絡的抗丟包編解碼器》
《P2P技術如何將實時視頻直播帶寬降低75%?》
《專訪微信視頻技術負責人:微信實時視頻聊天技術的演進》
《騰訊音視頻實驗室:使用AI黑科技實現超低碼率的高清實時視頻聊天》
《微信團隊分享:微信每日億次實時音視頻聊天背后的技術解密》
《近期大熱的實時直播答題系統的實現思路與技術難點分享》
《福利貼:最全實時音視頻開發要用到的開源工程匯總》
>>?更多同類文章 ……
(本文同步發布于:http://www.52im.net/thread-1395-1-1.html)
總結
以上是生活随笔為你收集整理的技术福利:最全实时音视频开发要用到的开源工程汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机链接投影蓝屏,日立投影仪蓝屏原因及
- 下一篇: 阿里云创建管理bucket(一)