0. 前言
這段時(shí)間在搭建一個(gè)IPCamera項(xiàng)目服務(wù)器。視頻點(diǎn)對(duì)點(diǎn)通話,客戶端會(huì)查看設(shè)備端的音視頻實(shí)時(shí)流。為了省流量,是通過(guò)P2P進(jìn)行穿透。但是由于NAT設(shè)備的原因和IPV4的枯竭。有些設(shè)備是無(wú)法進(jìn)行點(diǎn)對(duì)點(diǎn)傳輸實(shí)時(shí)流。所以需要進(jìn)行服務(wù)器轉(zhuǎn)發(fā)。這里為了快速實(shí)現(xiàn)原型,同時(shí)參考現(xiàn)在主流的流媒體協(xié)議。發(fā)現(xiàn)很多使用的是RTMP協(xié)議。
下圖是總體設(shè)計(jì)圖,為了整合多平臺(tái),會(huì)自建RTMP流媒體服務(wù)器和使用云廠商SaaS的RTMP流媒體服務(wù)。但是由于有時(shí)候會(huì)傳輸一些非流媒體數(shù)據(jù),需要傳輸一些二進(jìn)制文件,所以會(huì)需要自定義媒體轉(zhuǎn)發(fā)服務(wù)。
以下是我實(shí)際項(xiàng)目中,用到的架構(gòu)實(shí)現(xiàn)流程圖。
1. 客戶端A無(wú)法進(jìn)行P2P穿透,請(qǐng)求業(yè)務(wù)服務(wù)器要進(jìn)行轉(zhuǎn)發(fā)。 2. 業(yè)務(wù)服務(wù)器根據(jù)客戶端A,請(qǐng)求類型,返回對(duì)應(yīng)的轉(zhuǎn)發(fā)服務(wù)器地址和對(duì)應(yīng)的房間號(hào)RoomID/Token等信息 3. 上述請(qǐng)求類型,可以是請(qǐng)求自建RTMP流媒體服務(wù),購(gòu)買(mǎi)于云廠商RTMP流媒體服務(wù)或者自定義協(xié)議媒體轉(zhuǎn)發(fā)服務(wù) 4. 客戶端A得到業(yè)務(wù)服務(wù)器返回的媒體服務(wù)器地址和RoomID/Token 5. 通過(guò)信令服務(wù)器或者M(jìn)QTT服務(wù)器,把對(duì)應(yīng)的媒體服務(wù)器地址和RoomID/Token告訴另一端客戶端B 6. 客戶端A和客戶端B同時(shí)進(jìn)入相同房間Room,客戶端A進(jìn)行推流,客戶端B進(jìn)行拉流 7. 其他媒體信息,如編解碼格式,清晰度,播放,暫停,拍照等命令,通過(guò)上述信令或MQTT服務(wù)器進(jìn)行命令控制
1. 編譯Nginx
RTMP流媒體服務(wù)器,現(xiàn)成的開(kāi)源方案有很多,有SRS,Red5,wowoza,F(xiàn)MS等,我這里使用的是Nginx的rtmp插件實(shí)現(xiàn)實(shí)時(shí)流轉(zhuǎn)發(fā)。
下載 nginx-rtmp-module https://github.com/arut/nginx-rtmp-module
重新編譯nginx
--prefix=/opt/nginx --with-stream --with-http_ssl_module --with-stream_ssl_module --with-debug --add-module=../nginx-rtmp-module
2. 配置Nginx.conf
基本的nginx配置,這里就不進(jìn)行介紹了,需要了解的可以參考我其他博客,里面有介紹。這里只介紹rtmp段的定義。
rtmp{ server{ listen 8081; access_log logs/rtmp_access.log; on_connect http://127.0.0.1:8080/v1/rtmp/on_connect; application rtmp { live on; notify_method get; on_play http://127.0.0.1:8080/v1/rtmp/on_play; on_publish http://127.0.0.1:8080/v1/rtmp/on_publish; on_done http://127.0.0.1:8080/v1/rtmp/on_done; on_play_done http://127.0.0.1:8080/v1/rtmp/on_play_done; on_publish_done http://127.0.0.1:8080/v1/rtmp/on_publish_done; on_record_done http://127.0.0.1:8080/v1/rtmp/on_record_done; on_update http://127.0.0.1:8080/v1/rtmp/on_update; notify_update_timeout 10s; } application vod { play /opt/openresty/video; } }}
新聞熱點(diǎn)
疑難解答
圖片精選