18個實時音視頻開發中會用到開源項目

本文源自 RTC 開發者社區,歡迎訪問,與更多實時音視頻開發者交流經驗,參與更多技術活動。html

實時音視頻的開發學習有不少能夠參考的開源項目。一個實時音視頻應用共包括幾個環節:採集、編碼、先後處理、傳輸、解碼、緩衝、渲染等不少環節。每個細分環節,還有更細分的技術模塊。好比,先後處理環節有美顏、濾鏡、回聲消除、噪聲抑制等,採集有麥克風陣列等,編解碼有VP八、VP九、H.26四、H.265等。nginx

咱們今天彙總了一些能幫助到正在學習或進行音視頻開發的實時音視頻開發者們的開源項目與幾個也在爲開源社區貢獻力量的商業服務。這些項目分爲幾類:音視頻編解碼類、視頻先後處理、服務端類等。git

音視頻編解碼類開源項目

視頻編解碼的做用,就是在設備的攝像頭採集畫面和前處理後,將圖像進行壓縮,進行數字編碼,用於傳輸。編解碼器的優劣基本在於:壓縮效率的高低,速度和功耗。github

目前,主流的視頻編碼器分爲3個系列:VPx(VP8,VP9),H.26x(H.264,H.265),AVS(AVS1.0,AVS2.0)。VPx系列是由Google開源的視頻編解碼標準。在保證相同質量狀況下,VP9相比VP8碼率減小約50%。H.26x系列在硬件支持上比較普遍,H.265的編碼效率能比上一代提升了30-50%,可是複雜度和功耗會比上一代大不少,因此純軟件編碼實現的話有必定瓶頸,現有的技術下,仍是須要依靠硬件編解碼爲主。AVS是我國具有自主知識產權的第二代信源編碼標準,目前已經發展到第二代。web

WebRTC小程序

首先會用到的確定是WebRTC,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的開源項目。它提供了包括音視頻的採集、編解碼、網絡傳輸、顯示等功能。若是你想基於WebRTC開發實時音視頻應用,須要注意,因爲WebRTC缺乏服務端設計和部署方案,你還須要將WebRTC與Janus等服務端類開源項目結合便可。瀏覽器

官網地址:webrtc.org/服務器

x264網絡

H.264是目前應用最廣的碼流標準。x264則是可以產生符合H.264標準的碼流的編碼器,它能夠將視頻流編碼爲H.26四、MPEG-4 AVC格式。它提供了命令行接口與API,前者被用於一些圖形用戶接口例如Straxrip、MeGUI,後者則被FFmpeg、Handbrake等調用。固然,既然有x264,就有對應HEVC/H.265的x265。多線程

官網地址:www.videolan.org/developers/…

FFmpeg

FFmpeg你們應該不陌生,提供了編碼、解碼、轉換、封裝等功能,以及剪裁、縮放、色域等後期處理,支持幾乎目前全部音視頻編碼標準(因爲格式衆多,咱們就不一一列列舉了,能夠在Wikipedia中找到)。

同時,FFmpeg還衍生出了libav項目,從中誕生了視頻解碼器LAV,許多播放軟件均可調用LAV進行解碼,而且LAV自己也支持利用顯卡進行視頻硬解。不少主流視頻播放器中都以FFmpeg做爲內核播放器。不只僅是視頻播放器,就連Chrome這類能夠播放網頁視頻的瀏覽器也受益於FFmpeg。不少開發者也基於FFmpeg作過不少開發並開源出來,好比大神雷霄驊(代碼可見他的sourceforge)。

官網地址:ffmpeg.org/

ijkplayer

在介紹ijkplayer以前,要先提到ffplay。ffplay是一個使用了FFmpeg和sdl庫的可移植的媒體播放器。ijkplay是Bilibili開源的基於ffplay.c實現的輕量級iOS/Android視頻播放器,API易於集成,且編譯配置可裁剪,利於控制安裝包大小。

在編解碼方面,ijkplayer支持視頻軟解和硬解,能夠在播放前配置,但在播放過程當中則不能切換。iOS和Android上視頻硬解可分別使用你們熟悉的VideoToolbox和MediaCodec。但ijkplayer對音頻僅支持軟解。

Github地址:github.com/Bilibili/ij…

JSMpeg

JSMpeg是一個基於JavaScript的MPEG1視頻的解碼器。若是要作H5端的視頻直播,能夠考慮使用JSMpeg在移動端進行解碼。在H5端作音視頻直播,可使用JSMpeg進行視頻解碼,這也是最近比較火的H5抓娃娃的主流策略。

Github地址:github.com/phoboslab/j…

Opus

Opus是用C語言開發的一個高靈活度的音頻編碼器,針對ARM、x86有特殊優化,fix-point實現。Opus在各方面都有着明顯優點。它同時支持語音與音樂的編碼,比特率爲6k-510k。它融合了SILK編碼方法和CELT編碼方法。SILK本來被用於Skype中,基於語音信號的線性預測分析(LPC),對音樂支持並很差。而CELT儘管適用於全帶寬音頻,但對低比特率語音的編碼效率不高,因此二者在Opus中造成了互補。

Opus是「取代」了Speex。可是Speex中有的功能,Opus卻沒有,好比回聲消除。這個功能已經從編碼器中獨立出來。因此若是想實現好的回聲消除,能夠配合WebRTC的AEC和AECM模塊作二次開發。

官網地址:opus-codec.org/

live555

live555是一個C++流媒體開源項目,其中不只包括了傳輸協議(SIP、RTP)、音視頻編碼器(H.26四、MPEG4)等,還包括流媒體服務器的例子,是流媒體項目的首選,裏面的傳輸模塊是很是值得視頻會議開發做爲參考的。

官網地址:www.live555.com/

音視頻先後處理開源項目

先後處理包含不少細分技術,應用正確的話,對視頻質量或多或少都有提高。不過每增長一個處理環節,必然會增長運算量與延時,因此如何取捨,還要你們各自斟酌。 Seetaface

Seetaface是由中科院山世光老師開源的一套完整的人臉檢測,人臉對齊和人臉驗證方案。代碼基於C++實現,開源協議爲BSD-2,可供學術界和工業界無償使用。且不依賴於任何第三方的庫函數,在使用對齊好的LFW圖片上,檢測對齊所有使用該開源軟件的狀況下可達到97.1%。

Github地址:github.com/seetaface/S…

GPUImage

如今在iOS端作美顏效果、加水印,基本都會採用GPUImage,它內置了125種渲染效果, 還支持腳本自定義。該項目實現了圖片濾鏡、攝像頭實時濾鏡。它優點在於處理效果是基於GPU實現,相對於CPU處理性能更高。

Github地址:github.com/BradLarson/…

Open nsfw model

Open nsfw model是雅虎開源項目,全名是Open Not suitable for work model,專門鑑別不適合工做時間瀏覽的圖片(言而言之就是小黃圖)。它是基於Caffe框架訓練的模型,用於音視頻後處理。不過,它還不能鑑別恐怖、血腥圖片。

Github地址:github.com/yahoo/open_…

Soundtouch

Soundtouch是一個開源的音頻處理框架,主要功能對音頻變速、變調,實現變聲的效果。同時,它也能對媒體流實時處理。採用32位浮點或者16位定點,支持單聲道或者雙聲道,採樣率範圍爲8k - 48k。

官網地址:www.surina.net/soundtouch/

服務端類開源項目

正如開始時咱們所說,WebRTC缺乏服務端的設計與部署,利用MCU、SFU實現多人聊天,提升傳輸質量,都須要開發者本身動手。而下面這些開源項目可以幫到你。

Jitsi

Jitsi是開源的視頻會議系統,能夠實如今線視頻會議,文檔共享和即時消息的分享。它支持網絡視頻會議,使用SFU模式實現視頻路由器功能。開發語言是Java。它支持SIP賬號註冊電話呼叫。不只支持單機本地安裝方式,還支持雲平臺安裝。

官網地址:jitsi.org/

JsSIP

JsSIP是基於WebRTC的JavaScript SIP協議實現的庫,能夠在瀏覽器和Node.js中運行。它能夠與 OverSIP、Kamailio、Asterisk、OfficeSIP等SIP Server一塊兒運行。

Github地址:github.com/versatica/J…

SRS

SRS是一個採用MIT協議受權的國產的簡單的RTMP/HLS 直播服務器。最新版還支持FLV模式,同時具有了RTMP的實時性,以及HLS中屬於HTTP協議對各類網絡環境高度適應性,而且支持更多播放器。它的功能與nginx-rtmp-module相似, 能夠實現RTMP/HLS的分發。

Github地址:github.com/ossrs/srs

JRTPLIB

JRTPLIB 是一個開源的 RTP協議實現庫,支持Windows和unix平臺。它支持多線程,處理性能較好。它還支持RFC3550、UDP IPV6,支持自定義擴展傳輸協議。但它不支持TCP傳輸,這須要開發者本身來實現。同時,它也不支持音視頻的分包,代碼要你本身來實現。

Github地址:github.com/j0r1/JRTPLI…

OPAL

OPAL是OpenH323的下一個版本,繼承了Openh323協議,其新包含了SIP協議棧,是實現SIP協議的首選,缺點是參考例子較少。

代碼地址:sourceforge.net/projects/op…

Kurento

Kurento是一個基於WebRTC的媒體服務端,幷包含了一系列API,能夠簡化web與移動端實時視頻應用的開發。

Github地址:github.com/Kurento

Janus

Janus是一個WebRTC媒體網關。不管是作流媒體、視頻會議、錄製、網關,均可以基於Janus來實現。

Github地址:github.com/Kurento

其它商業服務

Callstats.io

實時通訊過程當中的,延時、丟包、接通率、掉線率等質量問題,都影響用戶體驗。商用項目尤爲須要關注。Callstats是一家經過對WebRTC呼叫進行專業監測,來幫助用戶蒐集通信數據,提高通話質量的服務商。

Callstats也經過Github開放不少案例,可供使用Jitsi-videobridge,、turn-server、JsSIP的開發者參考。

Github地址:github.com/callstats-i…

Meetecho

Meetecho是著名的開源WebRTC網關項目Janus的開發者。他們還提供基於Janus開發的技術諮詢與部署服務、創建視頻會議直播與錄製服務等。

Github地址:github.com/carlhuda/ja…

聲網Agora

聲網提供了從編解碼到端到端傳輸的全套服務,開發者能夠接入上文所述的音視頻先後處理的開源項目,配合使用聲網SDK能夠創建高質量的實時音視頻應用。在Web端,Agora Web SDK能夠幫助WebRTC開發者解決服務端傳輸中會遇到的卡頓、延時、回聲、多人視頻不穩定等問題。同時,聲網SDK還對多個系統平臺的應用提供實時音視頻通信服務。

聲網在Github上有許多可供開發者參考、實踐的demo源碼,覆蓋了從網頁端、iOS到Android平臺,以及音視頻直播、遊戲連麥、企業會議、AR、直播答題、小程序等多種實時互動應用場景。

Github地址:github.com/AgoraIO-Com…

咱們在這裏列出了18個開源項目,以及3個能有效保證明時音視頻傳輸質量的服務。不過篇幅有限,還有不少開源項目咱們沒有詳細列出,好比在音視頻方面,Xiph.org的Speex、FLAC,還有Xvid、libvpx、Lagarith、Daala、Thor等。歡迎你們繼續補充。

最後給但願開發實時音視頻App,或但願學習 WebRTC 的開發者推薦一些博文與資料:rtcdeveloper.com/t/topic/435

相關文章
相關標籤/搜索