這是我參與8月更文挑戰的第10天,活動詳情查看:8月更文挑戰git
隨着短視頻的火爆,手機端的直播也愈來愈流行,某音某手的催生下,不少app中也加入了直播功能。按產品經理的話來講:有沒有人看是一方面,可是你的有。 因而乎苦逼的程序員在威逼利誘下苦苦的啃着流媒體等從未接觸過的字眼。程序員
graph LR PC[PC] -- 推流 --> server[流媒體服務器] Android[Android] -- 推流 --> server[流媒體服務器] IOS[IOS] -- 推流 --> server[流媒體服務器] server -- 播放 --> web[web] server -- 播放 --> Android1[Android] server -- 播放 --> IOS1[IOS]
流媒體並非單獨的一門技術,而是一套網絡傳輸和音視頻編解碼的解決方案。github
若是再詳細一些,它能夠分爲如下部分:web
網絡傳輸 socket技術瀏覽器
協議層 rtmp服務器
封裝層 flvmarkdown
編解碼 h264 aac網絡
能夠說上面隨便提到的技術對開發者來講都是難點!app
那麼咱們應該怎麼辦?socket
隨着直播愈來愈火,相應的直播解決方案也應運而生。
若是app上不是專門作直播,只是須要有直播功能,建議使用第三方平臺的解決方案,不少大廠都有了一整套的解決方案,爲了不廣告嫌疑,這裏我就不推薦了,有興趣你們自行搜索看看。
接着一款開源的流媒體的搭建 - Red5
我研究過一個現象,使用某遠程軟件,局域網中使用Android手機控制Windows,畫面不復雜時,居然能夠達到20ms以內,可把我驚呆了。畢竟編解碼速度加上網絡的速度傳輸,可能到達了極限。
我後來嘗試過Android設置之間進行屏幕共享,使用硬編碼硬解碼能夠達到100ms,並以爲沒有思路能夠再優化了。
因此某軟件確實牛啊牛啊!
這樣再思考一下。
若是對穩定性高實時性要求不那麼高的場景,可使用流媒體,好比直播。
若是對實時性要求高,可使用點對點技術,好比無紙化會議、遠程控制、遠程測試平臺。
安裝以前須要配置jdk的環境變量。
下載後移動red5文件夾到某個目錄
配置red5的環境變量。
添加變量名:red5_home
變量值:E:\red5-server
添加變量名:ClassPath
變量值:.(不配置此變量,或者此變動的值不是「.」,red5啓動的過程會拋異常)
到red5目錄下,雙擊「red5.bat」文件,啓動red5
找到red5-server\conf\red5.properties文件,進行編輯
http.host、http.port 對應 可訪問的地址和端口(無需求可不更改)
rtmp.host、rtmp.port 對應推送流的地址和端口
如圖:
此時,一個簡單的流媒體服務器已經搭建完成。咱們再使用Android的app進行推流或者播放就能夠了。