世界今亮點(diǎn)!【技術(shù)分享】無(wú)紙化會(huì)議|智慧教室同屏走RTSP組播還是RTMP?

2022-12-30 14:15:40 來(lái)源:51CTO博客

技術(shù)背景

我們?cè)谧鰞?nèi)網(wǎng)多人同屏(比如無(wú)紙化會(huì)議、智慧教室同屏)技術(shù)方案的時(shí)候,遇到個(gè)問(wèn)題:到底使用輕量級(jí)RTSP服務(wù)實(shí)現(xiàn)組播,還是基于RTMP的解決方案?

先說(shuō)為什么大家喜歡組播吧:


(相關(guān)資料圖)

組播技術(shù)方案,大家第一件事想到的就是服務(wù)器部署和帶寬問(wèn)題,直接教師端或者主講人機(jī)器,啟動(dòng)個(gè)輕量級(jí)的RTSP服務(wù),然后開(kāi)個(gè)組播選項(xiàng),看起來(lái)一切問(wèn)題迎刃而解。

為什么好多人排斥RTMP的技術(shù)方案呢?大概是覺(jué)得,RTMP的延遲控制做的不好,影響體驗(yàn),還有就是,覺(jué)得單獨(dú)部署個(gè)RTMP服務(wù),耗費(fèi)多余的資源。

方案比較

先說(shuō)輕量級(jí)RTSP組播方案吧,實(shí)際上,大牛直播SDK做輕量級(jí)RTSP服務(wù)的時(shí)候,也支持組播設(shè)置。

如何開(kāi)啟輕量級(jí)RTSP組播?

以windows平臺(tái)為例,點(diǎn)擊“配置查看Rtsp服務(wù)”,選中“組播”和“SSM”選項(xiàng),點(diǎn)擊啟動(dòng)服務(wù)即可:

點(diǎn)擊“發(fā)布RTSP流”按鈕后,會(huì)在播放地址里面,回調(diào)上來(lái)拉流的RTSP URL,經(jīng)長(zhǎng)時(shí)間測(cè)試,毫秒級(jí)延遲,完全滿足內(nèi)網(wǎng)同屏技術(shù)指標(biāo)。但需要注意的是,開(kāi)啟組播的話,需要內(nèi)網(wǎng)網(wǎng)絡(luò)設(shè)備支持組播功能。組播的劣勢(shì)在于,高碼率的無(wú)線網(wǎng)絡(luò)環(huán)境下,體驗(yàn)比較差,組網(wǎng)優(yōu)先級(jí)過(guò)低

輕量級(jí)RTSP服務(wù),對(duì)應(yīng)的組播接口選項(xiàng)如下:

/*    * nt_smart_publisher_sdk.h    * Author: daniusdk.com    */       /*    * 設(shè)置rtsp server 組播, 如果server設(shè)置成組播就不能單播,組播和單播只能選一個(gè), 一般來(lái)說(shuō)單播網(wǎng)絡(luò)設(shè)備支持的好,wifi組播很多路由器不支持    * rtsp_server_handle: rtsp server 句柄    * is_multicast: 是否組播, 1為組播, 0為單播, 其他值接口返回錯(cuò)誤, 默認(rèn)是單播    * 成功返回 NT_ERC_OK    */    NT_UINT32(NT_API *SetRtspServerMulticast)(NT_HANDLE rtsp_server_handle, NT_INT32 is_multicast);    /*    * 設(shè)置rtsp server 組播組播地址     * rtsp_server_handle: rtsp server 句柄    * multicast_address: 組播地址    * 如果設(shè)置的不是組播地址, 將返回錯(cuò)誤    * 組播地址范圍說(shuō)明: [224.0.0.0, 224.0.0.255] 為組播預(yù)留地址, 不能設(shè)置. 可設(shè)置范圍為[224.0.1.0, 239.255.255.255], 其中SSM地址范圍為[232.0.0.0, 232.255.255.255]    * 成功返回 NT_ERC_OK    */    NT_UINT32(NT_API *SetRtspServerMulticastAddress)(NT_HANDLE rtsp_server_handle, NT_PCSTR multicast_address);

下面,我們來(lái)聊聊基于RTMP的同屏技術(shù)方案,大概設(shè)計(jì)如下:

1. 組網(wǎng):無(wú)線組網(wǎng),需要好的AP模塊才能撐得住大的并發(fā)流量,推送端到AP,最好是有線網(wǎng)鏈接;

2. 服務(wù)器部署:可用業(yè)內(nèi)非常穩(wěn)定的比如nginx或SRS服務(wù),如果用windows的RTMP服務(wù)器,可以考慮和Windows平臺(tái)的教師機(jī)部署在一臺(tái)機(jī)器(教師機(jī)連有線網(wǎng));

3. 教師端(主講人):如教師有移動(dòng)的PAD,可以直接推到RTMP服務(wù)器,然后共享出去;

4. 學(xué)生端(觀眾):無(wú)論windows電腦還是android pad,直接拉取RTMP流播放即可;

5. 教師(主講人)和學(xué)生(觀眾)互動(dòng):學(xué)生端如需作為示范案例,屏幕數(shù)據(jù)共享給其他同學(xué),只需請(qǐng)求同屏,數(shù)據(jù)反推到RTMP服務(wù)器,其他學(xué)生查看即可。

6. 輪詢監(jiān)控:如果需要更進(jìn)一步的技術(shù)方案,如教師端想監(jiān)控學(xué)生端的屏幕情況,可以有兩種方案,如學(xué)生端直接推RTMP過(guò)來(lái),或者,學(xué)生端啟動(dòng)內(nèi)置RTSP服務(wù),教師端想看的時(shí)候,隨時(shí)看即可。

RTMP技術(shù)方案功能設(shè)計(jì)

功能設(shè)計(jì),我們分主講人和觀看端來(lái)列,我們目前已支持Windows、Linux(x86_64)、Android和iOS平臺(tái),由于我們是做的通用的推拉流模塊,功能支持,非常全,如果只是特定項(xiàng)目需求自研的話,沒(méi)必要做的這么復(fù)雜。

教師端(主講人):

[本地預(yù)覽]Windows平臺(tái)支持?jǐn)z像頭/屏幕/合成數(shù)據(jù)實(shí)時(shí)預(yù)覽功能,Android/iOS平臺(tái)支持本地前后置攝像頭預(yù)覽;[攝像頭反轉(zhuǎn)/旋轉(zhuǎn)]Windows平臺(tái)支持?jǐn)z像頭水平反轉(zhuǎn)、垂直反轉(zhuǎn)、0°/90°/180°/270°旋轉(zhuǎn);[攝像頭采集]除常規(guī)YUV格式外,Windows平臺(tái)還支持MJPEG格式的攝像頭采集;[麥克風(fēng)/揚(yáng)聲器采集]Windows平臺(tái)音頻輸入端支持麥克風(fēng)、揚(yáng)聲器,或麥克風(fēng)和揚(yáng)聲器混音輸入;[RTMP推流]超低延時(shí)的RTMP協(xié)議直播推流SDK(Windows/Android/iOS支持RTMP擴(kuò)展H.265推送);[視頻格式]Windows/Android平臺(tái)支持H.264/H.265編碼(Android H.265硬編碼),iOS平臺(tái)支持H.264編碼;[音頻格式]Windows/Android/iOS平臺(tái)支持AAC編碼,Windows/Android平臺(tái)支持Speex編碼;[音頻編碼]Windows/Android平臺(tái)支持Speex推送、Speex編碼質(zhì)量設(shè)置;[音量調(diào)節(jié)]Windows/Android平臺(tái)采集端支持實(shí)時(shí)音量調(diào)節(jié)(其中,Windows平臺(tái)混音模式下支持單獨(dú)控制麥克風(fēng)、揚(yáng)聲器音量);[H.264硬編碼]Windows/Android/iOS平臺(tái)支持H.264特定機(jī)型硬編碼;[H.265硬編碼]Android/iOS平臺(tái)支持H.265特定機(jī)型硬編碼;[硬編碼自適應(yīng)]Android/iOS平臺(tái)支持硬編碼自適應(yīng),如檢測(cè)到硬編碼不支持,自動(dòng)切換到軟編(iOS如H.265硬編,先切換到H.264硬編碼,如不支持再嘗試H.264軟編);[軟硬編碼參數(shù)配置]支持gop間隔、幀率、bit-rate設(shè)置;[軟編碼參數(shù)配置]支持軟編碼profile、軟編碼速度、可變碼率設(shè)置;[多實(shí)例推送]支持多實(shí)例推送(如同時(shí)推送屏幕/攝像頭和外部數(shù)據(jù));[RTMP擴(kuò)展H.265]Windows/Android/iOS推送SDK支持RTMP擴(kuò)展H.265推送,Windows針對(duì)攝像頭采集軟編碼,使用H.265可變碼率,帶寬大幅節(jié)省,效果直逼傳統(tǒng)H.265編碼攝像頭,Android/iOS平臺(tái)支持H.265硬編碼;[橫豎屏推流]Android/iOS平臺(tái)支持支持橫屏、豎屏推流;[多分辨率支持]支持?jǐn)z像頭或屏幕多種分辨率設(shè)置;[Windows推屏]Windows平臺(tái)支持屏幕裁剪、窗口采集、屏幕/攝像頭數(shù)據(jù)合成等多種模式推送;[移動(dòng)端推屏]Android平臺(tái)支持后臺(tái)service推送屏幕(推送屏幕需要5.0+版本);[移動(dòng)端推屏]iOS平臺(tái)支持后臺(tái)推送屏幕(基于ReplayKit,需要iOS 10.0+版本);[事件回調(diào)]支持各種狀態(tài)實(shí)時(shí)回調(diào);[水印]Windows平臺(tái)支持文字水印、png水印、實(shí)時(shí)遮擋,Android平臺(tái)支持文字水印、png水印;[RTMP推送模式]支持RTMP推送 live|record模式設(shè)置(需服務(wù)器支持);[鏡像]Android/iOS平臺(tái)支持前置攝像頭實(shí)時(shí)鏡像功能;[前后攝像頭實(shí)時(shí)切換]Android/iOS平臺(tái)支持采集過(guò)程中,前后攝像頭切換;[復(fù)雜網(wǎng)絡(luò)處理]支持?jǐn)嗑W(wǎng)重連等各種網(wǎng)絡(luò)環(huán)境自動(dòng)適配;[動(dòng)態(tài)碼率]支持根據(jù)網(wǎng)絡(luò)情況自動(dòng)調(diào)整推流碼率;[實(shí)時(shí)靜音]支持推送過(guò)程中,實(shí)時(shí)靜音/取消靜音;[實(shí)時(shí)快照]支持推流過(guò)程中,實(shí)時(shí)快照;[純音頻推流]支持僅采集音頻流并發(fā)起推流功能;[純視頻推流]支持特殊場(chǎng)景下的純視頻推流功能;[降噪]Windows/Android平臺(tái)支持環(huán)境音、手機(jī)干擾等引起的噪音降噪處理、自動(dòng)增益、VAD檢測(cè);[回音消除]Android平臺(tái)支持實(shí)時(shí)傳遞遠(yuǎn)端PCM數(shù)據(jù),方便回音消除處理;[外部編碼前視頻數(shù)據(jù)對(duì)接]支持YUV數(shù)據(jù)對(duì)接;[外部編碼前音頻數(shù)據(jù)對(duì)接]支持PCM對(duì)接;[外部編碼后視頻數(shù)據(jù)對(duì)接]支持外部H.264數(shù)據(jù)對(duì)接;[外部編碼后音頻數(shù)據(jù)對(duì)接]外部AAC/PCMA/PCMU/SPEEX數(shù)據(jù)對(duì)接;[推送端休眠設(shè)置]Windows平臺(tái)支持休眠接口(設(shè)置成休眠模式后CPU會(huì)適當(dāng)降低);[編碼后數(shù)據(jù)輸出]Android平臺(tái)支持輸出編碼后的H264/AAC數(shù)據(jù)到上層,方便對(duì)接第三方平臺(tái)(如GB28181)對(duì)接;[擴(kuò)展錄像功能]完美支持和錄像SDK組合使用,錄像相關(guān)功能,可參見(jiàn)”Windows/Android/iOS錄像SDK“;[裁剪模式]Android/iOS平臺(tái)支持特定分辨率攝像頭裁剪模式設(shè)置;[服務(wù)器兼容]支持自建服務(wù)器(如Nginx、SRS)或CDN。

學(xué)生(觀看端):

[多實(shí)例播放]支持多實(shí)例播放;[事件回調(diào)]支持網(wǎng)絡(luò)狀態(tài)、buffer狀態(tài)等回調(diào);[視頻格式]支持RTMP擴(kuò)展H.265,H.264;[音頻格式]支持AAC/PCMA/PCMU/Speex;[H.264/H.265軟解碼]支持H.264/H.265軟解;[H.264硬解碼]Windows/Android/iOS支持特定機(jī)型H.264硬解;[H.265硬解]Windows/Android/iOS支持特定機(jī)型H.265硬解;[H.264/H.265硬解碼]Android支持設(shè)置Surface模式硬解和普通模式硬解碼;[緩沖時(shí)間設(shè)置]支持buffer time設(shè)置;[首屏秒開(kāi)]支持首屏秒開(kāi)模式;[低延遲模式]支持低延遲模式設(shè)置(公網(wǎng)200~400ms);[復(fù)雜網(wǎng)絡(luò)處理]支持?jǐn)嗑W(wǎng)重連等各種網(wǎng)絡(luò)環(huán)境自動(dòng)適配;[快速切換URL]支持播放過(guò)程中,快速切換其他URL,內(nèi)容切換更快;[音視頻多種render機(jī)制]Android平臺(tái),視頻:SurfaceView/GLSurfaceView,音頻:AudioTrack/OpenSL ES;[實(shí)時(shí)靜音]支持播放過(guò)程中,實(shí)時(shí)靜音/取消靜音;[實(shí)時(shí)音量調(diào)節(jié)]支持播放過(guò)程中實(shí)時(shí)調(diào)節(jié)音量;[實(shí)時(shí)快照]支持播放過(guò)程中截取當(dāng)前播放畫面;[只播關(guān)鍵幀]Windows平臺(tái)支持實(shí)時(shí)設(shè)置是否只播放關(guān)鍵幀;[渲染角度]支持0°,90°,180°和270°四個(gè)視頻畫面渲染角度設(shè)置;[渲染鏡像]支持水平反轉(zhuǎn)、垂直反轉(zhuǎn)模式設(shè)置;[等比例縮放]支持圖像等比例縮放繪制(Android設(shè)置surface模式硬解模式不支持);[實(shí)時(shí)下載速度更新]支持當(dāng)前下載速度實(shí)時(shí)回調(diào)(支持設(shè)置回調(diào)時(shí)間間隔);[ARGB疊加]Windows平臺(tái)支持ARGB圖像疊加到顯示視頻;[解碼前視頻數(shù)據(jù)回調(diào)]支持H.264/H.265數(shù)據(jù)回調(diào);[解碼后視頻數(shù)據(jù)回調(diào)]支持解碼后YUV/RGB數(shù)據(jù)回調(diào);[解碼后視頻數(shù)據(jù)縮放回調(diào)]Windows平臺(tái)支持指定回調(diào)圖像大小的接口(可以對(duì)原視圖像縮放后再回調(diào)到上層);[解碼前音頻數(shù)據(jù)回調(diào)]支持AAC/PCMA/PCMU/SPEEX數(shù)據(jù)回調(diào);[音視頻自適應(yīng)]支持播放過(guò)程中,音視頻信息改變后自適應(yīng);[擴(kuò)展錄像功能]支持拉流端錄像。

技術(shù)總結(jié)

基于輕量級(jí)RTSP服務(wù)的組播方案一定好嗎?

我們覺(jué)得不一定,組播對(duì)組網(wǎng)提出了要求,而且RTSP本身的設(shè)計(jì),就是允許一定的丟包率保持時(shí)延的,大家可以實(shí)際測(cè)試看,不一定有預(yù)期的那么好。

如果是小并發(fā)場(chǎng)景下,直接啟動(dòng)輕量級(jí)RTSP服務(wù),也是個(gè)不錯(cuò)的選擇,輕量級(jí)RTSP服務(wù),本身設(shè)計(jì)如網(wǎng)絡(luò)攝像頭一樣,非常適用于無(wú)需單獨(dú)部署流媒體服務(wù)器的場(chǎng)景下。

RTMP的技術(shù)方案一定延遲大嗎?

這種說(shuō)法,相對(duì)片面,好多是由于推拉流模塊本身問(wèn)題導(dǎo)致(如果服務(wù)器系NIGNX或SRS,基本可排除服務(wù)器轉(zhuǎn)發(fā)導(dǎo)致的大時(shí)延),從我們官方和實(shí)際場(chǎng)景來(lái)看,RTMP整體技術(shù)方案,延遲可做到1秒內(nèi),毫秒級(jí),目前實(shí)際在用的公司中,采用我們技術(shù)方案的,大多都是RTMP的,現(xiàn)場(chǎng)反饋非常不錯(cuò)。

標(biāo)簽: 技術(shù)方案 網(wǎng)絡(luò)設(shè)備 網(wǎng)絡(luò)環(huán)境

上一篇:函數(shù)2
下一篇:通過(guò)應(yīng)用程序的 Aria 操作在可觀測(cè)性中查看開(kāi)放遙測(cè)指標(biāo)和跟蹤數(shù)據(jù)