編者按: 對于視頻直播來說,網絡延遲的問題是一個常見的痛點。筆者單位融媒體視頻直播平臺出現的延遲問題是由于從采集到發布過程產生的延時所造成的。
筆者單位于2018年完成構建智慧校園基礎設施建設項目,構建了以“一架構、二平臺和三中心”為體系的智慧校園。該項目建成投入使用后,在應用中發現基于Windows 2012 Server 系統搭建配置視頻直播服務器的融媒體視頻直播平臺,在進行視頻直播時有約15 s的網絡延時,這對學校正常開展教育教學視頻直播任務產生了一定的影響。
在進行故障排查時,視頻采集電腦A(Windows Media Encoder 采集)和服務器 B(Media Server 9)數據傳輸網絡正常沒有丟包現象,網絡正常。但是從視頻直播到各收看終端之間的延時有約15 s。
再次分析其延時問題,可能發生在視頻采集電腦A 推流到服務器B的過程中,經排查發現,視頻采集電腦A 從采集到發布過程中就存在約15 s的延時。故障原因是Windows Media Encoder 采集自身到推流發布之間產生的延時,尚沒有其他好的優化措施。
根據故障排查原因,發現是視頻采集電腦A 從采集到發布過程產生的延時現象造成融媒體視頻直播系統的延時故障。所以,故障解決思路應優先解決視頻采購到發布的延時問題。
通過查詢相關技術資料,并結合單位網絡狀況,筆者認為采用RTMP 協議構建視頻直播平臺對網絡延時的優化比較好。經測試其可行性,最后采用Docker 方式搭建SRS 流媒體服務,視頻采集電腦A 端運用OBS 推流方式重新構建融媒體視頻直播平臺系統?;贒ocker 方式搭建SRS 流媒體服務器的具體操作步驟如下。
筆者單位的服務器采用某品牌的超融合架構方式,在虛擬機安裝的 是CentOS 7,Linux 3.10 內核。為了部署方便,采用CentOS 7系統作為服務器,運用Docker 方式搭建SRS 流媒體系統。基于Docker目前屬于基礎性軟件了,在本文中就不再細述如何在CentOS 7 中安裝Docker 容器。

需要對Docker 容器進行一些參數的配置,在運行容器之前,我們需要確認運行容器的一些參數,例如,RTMP默認端口是1935,HTTP 默認端口80(為了防止和宿主機的80 端口產生沖突,此處建議使用8080 端口替代80 端口)。在Docker 容器運行命令進行參數配置,如下所示:
docker run-it-p 1935:1935-p 8080:80--rm nginx-rtmp

在搭建SRS 服務過程中,需要先解決依賴,然后安裝SRS 服務,安裝完成之后需要配置服務。
(1)安裝SRS
基于SRS 官方把源碼托管在GitHub 中,建議將源碼復制出來,下載srs 執行命令如下所示:
git clone https://gitee.com/songboy/srs.git&& ls srs
(2)啟動SRS 服務
執行啟動命令如下所示:
./objs/srs-c conf/srs.conf
視頻采集電腦A 端采用OBS 進行一個推流視頻,Docker 運行的容器的服務器地址為192.168.1.1。因此這里筆者使用的推流地址如下:
rtmp://192.168.1.1:1935/stream
在Docker 容器中使用PHP+HTML 5 方式構建融媒體視頻直播平臺系統,采用HTML 5的video 元素獲取RTMP 協議的視頻流。主要代碼如下所示:


通過以上實踐,基于Docker 方式搭建SRS 流 媒體服務器融媒體視頻直播平臺,在進行教育教學視頻直播時網絡延時能控制在1 s以內,直播延時長問題得以解決。同時,此舉有效地促進信息技術與教育教學融合應用。