面向内网无纸化会议/智慧教室/实时同屏,组播还是RTMP?
一、背景
為滿足內網無紙化/電子教室等內網超低延遲需求,避免讓用戶配置單獨的服務器,我們研發了輕量級RTSP服務開發包。
單播不再贅述,這里重點介紹下我們的組播技術方案:
組播解決的主要痛點是服務器部署和帶寬占用問題,一般來說,內網電子教室/無紙化/實時同屏場景用RTMP推送+RTMP服務器,然后其他端從服務器拉取RTMP流,這個方案的劣勢在于,如果單獨部署服務器,需要額外的機器,增加了成本開銷,如果教師端機器作為服務器,網絡和機器性能雙重壓力下,負荷過重。
通過組播技術方案,只要網絡設備支持組播組網,輕松實現多并發的同屏/攝像頭直播場景。
但是,組播的劣勢在于,高碼率的無線網絡環境體驗很差,也就是說,如果是Windows或者Android平臺推送,Android無線PAD播放,真正好用的,還是RTMP推拉流技術解決方案。
二、基于組播的技術方案
1. 設置需要共享的視音頻,設置碼率后,點擊“配置查看Rtsp服務”,選中“組播”和“SSM”選項,點擊啟動服務即可:
2. 確定后,返回主界面,點擊“發布Rtsp流”,拷貝回調的RTSP url,用我們的SmartPlayer.exe或移動端播放器,播放即可。
注意:需要內網網絡設備支持組播功能。
經長時間測試,毫秒級延遲,完全滿足內網同屏技術指標。
內置RTSP服務核心接口(以Windows C++ 接口為例:nt_smart_publisher_sdk.h):
/*+++rtsp server操作接口+++*//** 創建一個rtsp server * pRtspServerHandle: rtsp server 句柄* reserve:保留參數傳0* 成功返回 NT_ERC_OK*/NT_UINT32(NT_API *OpenRtspServer)(NT_PHANDLE pRtspServerHandle, NT_INT32 reserve);/** 設置rtsp server 監聽端口, 在StartRtspServer之前必須要設置端口* rtsp_server_handle: rtsp server 句柄* port: 端口號,可以設置為554,或者是1024到65535之間,其他值返回失敗* 成功返回 NT_ERC_OK*/NT_UINT32(NT_API *SetRtspServerPort)(NT_HANDLE rtsp_server_handle, NT_INT32 port);/** 設置rtsp server 鑒權用戶名和密碼, 這個可以不設置,只有需要鑒權的再設置* rtsp_server_handle: rtsp server 句柄* user_name: 用戶名,必須是英文* password:密碼,必須是英文* 成功返回 NT_ERC_OK*/NT_UINT32(NT_API *SetRtspServerUserNamePassword)(NT_HANDLE rtsp_server_handle, NT_PCSTR user_name, NT_PCSTR password);/** 設置rtsp server 組播, 如果server設置成組播就不能單播,組播和單播只能選一個, 一般來說單播網絡設備支持的好,wifi組播很多路由器不支持* rtsp_server_handle: rtsp server 句柄* is_multicast: 是否組播, 1為組播, 0為單播, 其他值接口返回錯誤, 默認是單播* 成功返回 NT_ERC_OK*/NT_UINT32(NT_API *SetRtspServerMulticast)(NT_HANDLE rtsp_server_handle, NT_INT32 is_multicast);/** 設置rtsp server 組播組播地址 * rtsp_server_handle: rtsp server 句柄* multicast_address: 組播地址* 如果設置的不是組播地址, 將返回錯誤* 組播地址范圍說明: [224.0.0.0, 224.0.0.255] 為組播預留地址, 不能設置. 可設置范圍為[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);/** 獲取rtsp server當前的客戶會話數, 這個接口必須在StartRtspServer之后再調用* rtsp_server_handle: rtsp server 句柄* session_numbers: 會話數* 成功返回 NT_ERC_OK*/NT_UINT32(NT_API *GetRtspServerClientSessionNumbers)(NT_HANDLE rtsp_server_handle, NT_INT32* session_numbers);/** 啟動rtsp server* rtsp_server_handle: rtsp server 句柄* reserve: 保留參數傳0* 成功返回 NT_ERC_OK*/NT_UINT32(NT_API *StartRtspServer)(NT_HANDLE rtsp_server_handle, NT_INT32 reserve);/** 停止rtsp server* rtsp_server_handle: rtsp server 句柄* 成功返回 NT_ERC_OK*/NT_UINT32(NT_API *StopRtspServer)(NT_HANDLE rtsp_server_handle);/** 關閉rtsp server* 調用這個接口之后rtsp_server_handle失效,* 成功返回 NT_ERC_OK*/NT_UINT32 (NT_API *CloseRtspServer)(NT_HANDLE rtsp_server_handle);/*---rtsp server操作接口---*/三、基于RTMP的技術方案
注意事項
1. 組網:無線組網,需要好的AP模塊才能撐得住大的并發流量,推送端到AP,最好是有線網鏈接;
2. 服務器部署:如果Windows平臺,可以考慮NGINX,如果是Linux,可以考慮SRS或NGINX,服務器可以和Windows平臺的教師機部署在一臺機器;
3. 教師端:如教師有移動的PAD,可以直接推到RTMP服務器,然后共享出去;
4. 學生端:直接拉取RTMP流播放即可;
5. 教師和學生互動:學生端如需作為示范案例,屏幕數據共享給其他同學,只需請求同屏,數據反推到RTMP服務器,其他學生查看即可。
6. 擴展監控:如果需要更進一步的技術方案,如教師端想監控學生端的屏幕情況,可以有兩種方案,如學生端直接推RTMP過來,或者,學生端啟動內置RTSP服務,教師端想看的時候,隨時看即可(亦可輪詢播放)。
RTMP延遲大,這種說法,相對片面,好多是由于推拉流模塊本身問題導致(如果服務器系NIGNX或SRS,基本可排除服務器轉發導致的大時延,不要再賴服務器了),從我們官方和實際場景來看,RTMP整體技術方案,延遲可做到1秒內,毫秒級。
總結
以上是生活随笔為你收集整理的面向内网无纸化会议/智慧教室/实时同屏,组播还是RTMP?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【深度学习】解决物体检测中的小目标问题
- 下一篇: 荒唐!获得杰青的北大教授,竟被本科生质疑