如何用C++實現一個視頻聊天伺服器,要用到那些協議和庫?
01-31
想了解這些方面的底層是如何實現的,只用TCP或者UDP的話可以做嗎,如果可以是怎麼做的
Socket + Direct2D + Windows Media Foundation,所有東西都是現成的。如果你用Windows Azure的話,連伺服器架構也不用自己寫。
Qt5.7
socket
視頻音頻用udp聊天文字用tcp協議包自己定義還可以加入彈幕、火箭等等自定義功能
伺服器就用自己電腦也沒問題,容器建議map(不是一定用map,想表達的是map嵌套很好用,比如map&主播模式(只能看一方的視頻),比較簡單,不需造輪子:
客戶端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問題?