流媒体音视频开发和架构等
?
國內哪些互聯網公司音視頻處理技術比較好?
https://www.zhihu.com/question/41738544
網易云信流媒體服務端架構設計與實現
https://www.livevideostack.cn/news/design-and-implementation-of-streaming-media-server-architecture/
音視頻直播--技術架構
https://www.jianshu.com/p/db3482971758
這些優秀的音視頻開源框架你值得收藏
https://www.jianshu.com/p/cc35663bcd83
音視頻架構簡述
https://zhuanlan.zhihu.com/p/25315651
音視頻開發基礎知識整理
https://blog.csdn.net/liuqiyao_01/article/details/102971563
18個實時音視頻開發中會用到開源項目
https://blog.csdn.net/tanningzhong/article/details/93883243
?
音頻編解碼器 - Opus
https://www.jianshu.com/p/be8d40b61171
開源流媒體代碼
十大流媒體開源項目
https://blog.csdn.net/u014162133/article/details/81908366
1 FFmpeg:全球領先的多媒體框架?http://ffmpeg.org/?
2 VLC:開源的跨平臺多媒體播放器及框架?http://www.videolan.org/?
3 live555:開源流媒體服務項目?http://www.live555.com/?
4 EasyDarwin: 企業級的流媒體平臺框架?https://github.com/EasyDarwin?
5 ijkplayer:B站基于ffplay 的跨平臺播放器?https://github.com/Bilibili/ijkplayer?
6 red5:Flash流媒體服務器?https://github.com/Red5/red5-server/releases?
7 NGINX-RTMP: nginx模塊 支持rtmp和HLS?https://github.com/arut/nginx-rtmp-module?
8 SRS:開源流媒體服務器系統?https://github.com/winlinvip/srs?
9 OBS:開源流媒體系統?https://sourceforge.net/projects/obsproject/?
10 絕影:移動端深度學習框架?https://github.com/in66-dev/In-Prestissimo
視頻會議及流媒體十大開源項目
https://blog.csdn.net/weixin_33686714/article/details/90309724
1、?OpenH323項目??????? ()
上榜理由:最著名的H.323開源協議棧,視頻會議開發必備協議棧,強烈推薦
最著名的H.323開源協議棧,包含了全部的H.323協議功能,并有大量視頻會議實現的參考例子,如終端、MCU服務器、gk等H.323協議的核心組成部件,Openh323是H.323協議首選協議棧,同時也是我們視頻會議開發最值得作為參考的開源項目之一。
下載地址:http://www.h323plus.org/source/
?
2、?ffmpeg項目?????????????? ()
上榜理由:最全面的開源編碼器,包括了H.264、MPEG4、G.72x等音視頻編碼,效率也非常高,強烈推薦
?? 目前最全面的開源編碼器,其中包括常用的音視頻編碼協議 h.264、MPEG4、H.263、G.721、G.726、G.729等,ffmpeg雖然是基于linux的開源項目,但可以通過交叉編譯的方式在windows下運行,其項目加入了很多優化效率的代碼,如采用匯編替代C,大大提高了編碼的效率,推薦ffmpeg用于視頻會議的實時編碼。
?下載地址:http://ffmpeg.org/download.html
?
3、webrtc項目?? ?????????????? ?() ?
上榜理由:Google收購GIPS后開源的基于瀏覽器的實時通信開源項目,強烈推薦
Google收購GIPS后開源的基于瀏覽器的實時通信開源項目,GIPS是目前世界上最好的音頻傳輸庫,但其授權費非常高,webrtc是Google收購GIPS后,公開的一個通信項目,其核心voiceEngine就是由GIPS建立的,因此視頻會議的音頻部分可以參考webrtc來實現。
?下載地址:http://www.webrtc.org
?
4、OpenMeetings項目?????? ?()
上榜理由:基于java的瀏覽器的視頻會議開源項目,java開發視頻會議的首選
OpenMeetings主要是基于OpenLaszlo的流媒體格式和Red5服務器的開源視頻會議項目,其包含的功能包括音視頻、電子白板等,其項目是用java進行開發。項目的缺點是bug較多,效率不高,但可以作為flash視頻會議的一個參考。
下載地址:http://code.google.com/p/openmeetings/downloads/list
?
5、live555項目????????????????????()
上榜理由:重量級的C++流媒體開源項目,里面一些模塊可以作為視頻會議開發參考
??????live555是最重量級的一個C++流媒體開源項目,其中不僅包括了傳輸協議(SIP、RTP)、音視頻編碼器(H.264、MPEG4)等,還包括流媒體服務器的例子,是流媒體項目的首選,里面的傳輸模塊是非常值得視頻會議開發作為參考的。
下載地址:http://www.live555.com/
?
6、OPAL項目?????????? ???????????()
上榜理由:OpenH323的下一個版本,新包含了SIP協議棧,是實現SIP協議的首選
OPAL是OpenH323的下一個版本,繼承了Openh323協議,其新包含了SIP協議棧,是實現SIP協議的首選,缺點是參考例子較少。
下載地址:http://sourceforge.net/projects/opalvoip/files/
?
7、x264項目????????????????????????()
上榜理由:應用最廣的H.264編碼器,適合于實時視頻的傳輸
X264是目前應用最廣的H.264編碼器,其省去了H.264效率較低的部分,并對其進行了優化,效率明顯比其他的H.264開源項目高很多,是最適合于實時視頻會議傳輸的H.264編解碼庫。
下載地址:http://www.x264.nl/
?
8、Speex項目???????????? ???????? ()
上榜理由: 音頻領域最著名的開源項目,窄帶和寬帶都有很好的語音質量
????? Speex是音頻領域最著名的開源項目,窄帶和寬帶都有很好的語音質量,只需8kb就可以傳輸令人滿意的語言,缺點是傳輸音樂的時候質量會下降。
下載地址:http://www.speex.org/downloads/
?
9、JRTPLIB項目??????????????????? ?()
上榜理由:C++跨平臺的 RTP傳輸開源項目,RTP傳輸必備庫
??????JRTPLIB是C++跨平臺的 RTP傳輸開源項目,實現RTP協議可以利用這個庫,JRTPLIB是RTP傳輸必備庫
下載地址:http://research.edm.uhasselt.be/~jori/page/index.php?n=CS.Jrtplib
?
10、XVid 項目????????????????????????()
上榜理由:最著名的MPEG4編碼器開源項目,但效率不及x264
?????在沒有H.264編碼協議之前,XVid的MPEG4編碼一直是視頻會議的首選視頻編碼器,但隨著x264、CoreAVC等效率更高的H.264編碼器的出現,其應用效果受到較大的沖擊,但其結合directshow的視頻采集模塊還是值得視頻會議開發人員參考的。
下載地址:http://www.xvid.org
視頻會議傳輸模塊的開發選擇
視頻會議主要是開發音視頻、數據的傳輸的軟件,在這些開發過程中,最核心的模塊是傳輸模塊,傳輸模塊的性能直接影響到視頻會議的最終質量,因此傳輸模塊的選擇在視頻會議開發當中尤其重要。傳輸模塊在開發過程中,由于考慮到QOS的影響,一般都會使用數據重發的技術,因此傳輸模塊以及成為視頻會議底層開發的一個重點,我們開發的傳輸模塊,可以選擇用TCP、UDP直接進行開發或者利用開源的傳輸庫,因為一些開源傳輸庫以及比較成熟,直接拿來用就可以,如果自己開發傳輸模塊,估計也是一個巨大工程?,F在我們介紹一下傳輸模塊的開發選擇。
1.??????利用TCP進行開發
使用TCP直接進行傳輸模塊的開發,在傳輸過程中數據不會丟包,我們可以采用OICP的完成端口來進行通訊,其優點是QOS有保證、支持大容量的數據并非,缺點是開發周期長,數據建立連接比一般UDP要長很多,而且資源占用也比一般UDP傳輸的要大。
2.??????利用UDP進行開發
UPD是一種數據報傳輸方式,其數據在傳輸過程中不能保證數據的可靠性,因此用UPD進行傳輸模塊的開發還要加入自己的QOS的丟包處理和自動重發的功能。其優點是數據傳輸較TCP快,缺點是開發周期長。
3.??????利用UDT庫進行開發
UDT建于UDP之上,并引入新的擁塞控制和數據可靠性控制機制。UDT是面向連接的雙向的應用層協議。它同時支持可靠的數據流傳輸和部分可靠的數據報傳輸。UDT的特點是不用進行開發,直接利用庫的發送函數就可以實現可靠的數據傳輸,缺點是模型較簡單,沒有OICP完成端口支持大容量的數據。
4.??????利用Ranknet庫進行開發
Raknet也是一個基于UDP網絡傳輸協議的C++網絡庫,通過庫的函數實現高效的網絡傳輸服務。其具體應用在一些游戲領域,Radnet可以實現在兩個程序之間每秒傳輸25,000條信息;其優點是不用進行開發,直接調用函數即可,缺點是大數據量在公網傳輸會由于網絡堵塞而造成的流量控制失敗的情況。
綜上所述,視頻會議的傳輸模塊開發,傳輸效率最高是用UDP開發,但開發周期較長。用Raknet開發的傳輸模塊不能適應大數據的傳輸,UDT在大數據量的傳輸有較好的優勢,缺點是支持的并發不是很多。但如果經過修改后,UDT也能進行大容量的并發,因此綜合考慮用UDT是視頻會議傳輸模塊的最佳選擇。
視頻會議的圖像清晰度由什么決定
?
?我們選購視頻會議的時候,最重要是考察系統的穩定性與音、視頻質量等因素,而視頻質量與視頻會議的什么參數有關呢?首先我們說的視頻質量,是我們平時的主觀對視頻圖像的一個看法,不能通過一個具體的數字來體系,因此我們考察視頻會議的質量只能通過主觀對視頻會議的圖像的清晰度進行判斷,而決定視頻會議的清晰度由多種因素來決定,首先最重要的是視頻會議的視頻分辨率,另外一個是視頻會議編碼器的視頻還原質量,最后一個視頻會議的圖像后處理技術。
?1、視頻分辨率
??????視頻會議分辨率就是視頻會議的視頻采集的圖像的分辨率,這個參數在視頻會議的清晰度衡量中占用非常重要的作用,視頻會議的分辨率可以分QCIF(160*120)、CIF(320*240)、720P(1280*720)、1280P(1920*1280)等分辨率,其分辨率越高,圖像顯示就越清楚,市場上所說的高清視頻會議系統,也就是圖像采集分辨率達到720P以上的高清分辨率。但是不是分辨率越高,視頻會議的視頻質量就越高呢?這個答案是否定。視頻會議的分辨率只是圖像的采集分辨率,而視頻會議系統還需要經過視頻的編碼、解碼、后期視頻處理三個環節,因此視頻會議分辨率越高不等同于視頻會議的視頻質量越高,只能說是本地的視頻質量隨圖像采集分辨率的增加而增加。圖一是各種分辨率下面的圖像。而對于高清攝像頭我們也有很大的誤區,有的廠商把自己的攝像頭標出非常高的像素,大家都認為這款肯定是高清分辨率,但測試的時候發現其分辨率只有640*480,這種攝像頭其實并不是高清攝像頭,高清攝像頭的最基本指標是在720P的分辨率之上。因此高清攝像頭決定因素是圖像的采集分辨率。
?
圖一
2、視頻編碼的還原質量
??????? 視頻編碼質量也是決定視頻會議清晰度的一個重要指標,如現在最流行的H.264編碼,其編碼質量較高,圖像的還原能力比之前的MPEG4還原能力更強,那一副圖像通過不同的視頻編碼還原后,圖像的還原度是不一樣的。我們首先要講一下視頻編碼的過程,視頻編碼首先獲得視頻采集設備的圖像,然后把圖像分成若干個塊,然后對塊進行數字轉換,通過把塊的幀內預測、幀外預測達到還原的圖像的目的,因此圖像的分塊越小,圖像的還原度會越高,如H.264采用最少4*4的塊進行塊的預測,而MPEG4、H.263采用最小8*8和16*16的塊進行預測還原,因此H.264編碼的圖像在同等數據傳輸率下,比MPEG4、H.263更清楚。因此視頻會議的清晰度還和視頻編碼的還原質量有關。
3、視頻會議圖像后處理技術
?????? 視頻會議的圖像清晰度最后也與圖像的后處理技術相關,不同的視頻會議系統對圖像的后處理技術都不盡相同,有的?視頻會議?為圖像增加圖像濾波處理,使圖像還原去除方格效應等。有的視頻會議軟件為圖像采用圖像增強技術,使圖像看起來,更清晰。
?????? 以上就是決定視頻會議清晰度的最主要的三個方面,視頻會議分辨率是決定本地的視頻質量的最關鍵因素。而視頻編碼是決定視頻在編解碼過程中的還原能的最主要因素,而圖像后處理技術是圖像還原的后期處理,在視頻會議中也占有很重要的作用。
Libav、FFmpeg、mplayer、VLC開源項目、FFDshow
ffmpeg
??
FFmpeg(現改名為Libav)
FFmpeg是一個開源免費跨平臺的視頻和音頻流方案,屬于自由軟件,采用LGPL或GPL許可證(依據你選擇的組件)。它提供了錄制、轉換以及流化音視 頻的完整解決方案。它包含了非常先進的音頻/視頻編解碼庫libavcodec,為了保證高可移植性和編解碼質量,libavcodec里很多codec 都是從頭開發的。
目錄
?
?
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的流媒体音视频开发和架构等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: myeclipse mysql 乱码_M
- 下一篇: 用strtotime()和date()函