標籤:

如何用C++實現一個視頻聊天伺服器,要用到那些協議和庫?

想了解這些方面的底層是如何實現的,只用TCP或者UDP的話可以做嗎,如果可以是怎麼做的


Socket + Direct2D + Windows Media Foundation,所有東西都是現成的。如果你用Windows Azure的話,連伺服器架構也不用自己寫。


Qt5.7

socket

視頻音頻用udp

聊天文字用tcp

協議包自己定義

還可以加入彈幕、火箭等等自定義功能

伺服器就用自己電腦也沒問題,容器建議map

(不是一定用map,想表達的是map嵌套很好用,比如map&&>

歡迎斧正)

UDP可以不通過伺服器,讓兩個客戶端之間自己使用UDP直連,伺服器只轉發客戶端的IP和埠。


主播模式(只能看一方的視頻),比較簡單,不需造輪子:

客戶端A用OBS採集攝像頭麥克風數據,推流到伺服器,伺服器用開源的項目轉發直播流,如srs,客戶端B可以在瀏覽器或者將開源的播放器項目嵌入自己的客戶端,就可以看客戶端A的直播了

至於需要雙方互相看音視頻的話。可能需要一點音視頻知識了,無非就是分別對圖像和聲音信息進行採集,編碼,合成,傳輸,分離,解碼,顯示。每一步技術難點都很多

我也是個菜鳥,一直向大神們在學習。


你是要實現1對1的視頻聊天

還是1對多的直播

還是多對多的視頻會議

每種都有不同的特點,在實現方面需要用到的內容也不同。

要支持端點的註冊,呼叫,能力協商,收發碼流,音視頻編解碼。

了解323、sip呼叫通信協議,了解音視頻碼流分包組幀、碼流轉發,了解H.264、H.265、G7221.c等音視頻格式編解碼知識。

要支持多對多的視頻聊天的話,每個人能看到所有人的圖像,能聽到除自己外的其他人的聲音。就更麻煩了。


視頻聊天包括音視頻採集,編碼,傳輸,解碼,播放等系列過程。

採集播放不同平台有相應的api,自己找一下就可以,編解碼有H263 H264 VP8等,看具體需求,可以看下x264 ffmpeg等開源庫。

視頻聊天一般都要保證實時性,所以傳輸一般都用udp,看下rtp協議,如何打包視頻數據。如果考慮傳輸質量,還要做網路自適應,像FEC NACK什麼可以了解下。

如果涉及多人通過,還要考慮視頻混屏,音頻混音等。這個專業術語叫MCU。

上面說的都是媒體相關的,還有信令相關,標準協議有sip h323 xmpp什麼的。

如果真要搞,可以看下webrtc作為入門。還有一些穿透的東西,看ICE。


我覺得實現一個視頻聊天伺服器,並不全在軟體技術,如果是實時視頻傳輸,高清,不卡,多人,還需要很好的網路基礎設施的支持。


首先,題主說的是伺服器,也就是不需要界面。

其次,題主說的是需要什麼庫,意思就是不會造輪子。

那好辦了,librtmp解決問題。


像qq一樣的需要用webrtc,像yy一樣的需要用ffmpeg


ffmpeg live555


WebRTC


推薦閱讀:

在c++中,可以使用一個分配了內存空間但是沒有構造的struct里的值類型變數嗎?
c++里,函數返回一個局部數組名可以嗎?
C++中String問題?

TAG:CC | 網路編程 |