在做智慧教室同屏、會議同屏之類的方案時,基於Andriod平台的采集,往往遇到各種各樣的問題,以下就幾個點,拋磚引玉:
1. 內網環境下,組播還是RTMP?
回答:這個問題,被無數的開發者問到,為此,單獨寫了篇博客論證:https://blog.csdn.net/renhui1112/article/details/86741428,感興趣的可以參考下,簡單來說,能RTMP的,就RTMP,如果真是內網環境下,沒有並發瓶頸的同屏,可以啟動內置RTSP服務(走單播),然后,其他終端拉流也不失為一個好的方案。
2. 推送分辨率如何設定或縮放?
回答:一般來說,好多Android設備,特別是高分屏,拿到的視頻原始寬高非常大,如果推原始分辨率,編碼和上行壓力大,所以,一般建議,適當縮放,比如寬高縮放至2/3,縮放一般建議等比例縮放,此外,縮放寬高建議16字節對齊。
廢話不多說,上實例代碼:
3. 橫豎屏自動適配
回答:因為橫豎屏狀態下,采集的屏幕寬高不一樣,如果橫豎屏切換,這個時候,需要考慮到橫豎屏適配問題,確保比如豎屏狀態下,切換到橫屏時,推拉流兩端可以自動適配,橫豎屏自動適配,編碼器需要重啟,拉流端,需要能自動適配寬高變化,自動播放。
4. 一定的補幀策略
回答:好多人不理解為什么要補幀,實際上,屏幕采集的時候,屏幕不動的話,不會一直有數據下去,這個時候,比較好的做法是,保存最后一幀數據,設定一定的補幀間隔,確保不會因為幀間距太大,導致播放端幾秒都收不到數據,當然,如果服務器可以緩存GOP,這個問題迎刃而解。
5. 異常網絡處理、事件回調機制
回答:如果是走RTMP,網絡抖動或者其他網絡異常,需要有好重連機制和狀態回饋機制。
6. 部分屏幕數據采集
回答:我們遇到的好多場景下,教室端,會拿出來3/4的區域用來投遞給學生看,1/4的區域,用來做一些指令等操作,這個時候,就需要考慮屏幕區域裁剪,接口可做如下設計:
7. 文字、圖片水印
回答:好多場景下,同屏者會把公司logo,和一定的文字信息展示在推送端,這個時候,需要考慮到文字和圖片水印問題,具體可參考如下接口設置:
總結:其實一個好的同屏系統,需要考慮的地方遠不止以上幾點,比如編碼參數策略等,都需要考量,后續有機會再和大家做進一步分享。