網路音訊和影片直播
直播技術通常用於轉播體育賽事、音樂會以及更普遍的電視和廣播節目。直播通常簡稱為流媒體,它是將媒體“即時”傳輸到計算機和裝置的過程。這是一個相當複雜且新興的課題,有很多變數,因此在本文中,我們將向您介紹這個主題,並告訴您如何入門。
將媒體流式傳輸到瀏覽器的關鍵考慮因素是,我們傳輸的是一個動態建立的檔案,而不是播放一個有限的檔案,它沒有預先確定的開始或結束。
流媒體和靜態媒體之間的主要區別
在本例中,我們使用靜態媒體來描述由檔案表示的媒體,無論是 mp3 還是 WebM 檔案。此檔案位於伺服器上,並且可以像大多數其他檔案一樣交付到瀏覽器。這通常稱為漸進式下載。
直播媒體沒有固定的開始和結束時間,它不是靜態檔案,而是一系列資料,伺服器將其傳遞到瀏覽器,並且通常是自適應的(見下文)。通常,我們需要不同的格式和特殊的伺服器端軟體才能實現這一點。
自適應流媒體
直播的主要優先事項之一是使播放器與流保持同步:自適應流媒體是在低頻寬情況下實現此目的的一種技術。其思想是監控資料傳輸速率,如果看起來跟不上,我們就會降到較低的頻寬(以及隨之而來的較低質量)流。為了擁有此功能,我們需要使用促進此功能的格式。直播格式通常允許自適應流媒體,方法是將流分成一系列小的片段,並以不同的質量和位元率提供這些片段。
點播音訊和影片流媒體
流媒體技術不僅用於直播。它還可以替代傳統的漸進式下載方法用於點播音訊和影片。
這樣做有幾個優點:
- 延遲通常較低,因此媒體將更快地開始播放。
- 自適應流媒體可在各種裝置上提供更好的體驗。
- 媒體是即時下載的,這使得頻寬使用更有效率。
流媒體協議
雖然靜態媒體通常透過 HTTP 提供服務,但有幾種協議用於提供自適應流;讓我們看看這些選項。
HTTP
目前,HTTP 是迄今為止最常用的協議,用於傳輸點播或直播媒體。
RTMP
即時訊息傳遞協議 (RTMP) 是 Macromedia(現為 Adobe)開發的一種專有協議,並由 Adobe Flash 外掛支援。RTMP 有多種形式,包括 RTMPE(加密)、RTMPS(透過 TLS/SSL 安全)和 RTMPT(封裝在 HTTP 請求中)。
RTSP
注意:即時流協議 (RTSP) 控制端點之間的媒體會話,並且通常與即時傳輸協議 (RTP) 和即時控制協議 (RTCP) 一起用於媒體流交付。將 RTP 與 RTCP 一起使用可以實現自適應流媒體。這在大多數瀏覽器中尚不支援。
一些供應商實施專有傳輸協議,例如 RealNetworks 及其 Real 資料傳輸 (RDT)。
RTSP 2.0
使用流媒體協議
如果您習慣於透過 HTTP 使用媒體,那麼使用各種協議的過程令人欣慰地熟悉。
例如
<video src="rtsp://myhost.com/mymedia.format">
<!-- Fallback here -->
</video>
媒體源擴充套件 (MSE)
媒體源擴充套件 是 W3C 的工作草案,計劃擴充套件 HTMLMediaElement 以允許 JavaScript 生成用於播放的媒體流。允許 JavaScript 生成流促進了各種用例,例如自適應流媒體和直播流的時移。
例如,您可以使用 JavaScript 實現 MPEG-DASH,同時將解碼解除安裝到 MSE。
注意:時移是指在直播發生一段時間後觀看直播流的過程。
影片流媒體檔案格式
一些基於 HTTP 的直播影片格式開始在瀏覽器中獲得支援。
注意:您可以在設定自適應流媒體源中找到有關編碼 HLS 和 MPEG-DASH 以在 Web 上使用的指南。
MPEG-DASH
DASH 代表動態自適應流媒體 over HTTP。它透過媒體源擴充套件獲得支援,媒體源擴充套件由諸如 DASH.js 之類的 JavaScript 庫使用。這種方法允許我們使用 XHR 下載影片流的塊,並將這些塊“附加”到 <video> 元素播放的流中。例如,如果我們檢測到網路速度緩慢,我們可以開始請求下一段的較低質量(較小)塊。此技術還允許將廣告片段附加/插入到流中。
注意:您還可以將 WebM 與 MPEG DASH 自適應流媒體系統一起使用。
HLS
HLS 或 HTTP Live Streaming 是 Apple Inc 發明的一種協議,在 iOS、Safari 和最新版本的 Android 瀏覽器/Chrome 上受支援。HLS 也是自適應的。
HLS 也可以使用 JavaScript 解碼,這意味著我們可以支援最新版本的 Firefox、Chrome 和 Safari。請參閱此HTTP Live Streaming JavaScript 播放器。
在流會話開始時,會下載一個擴充套件的 M3U (m3u8) 播放列表。其中包含所提供的各種子流的元資料。
音訊流媒體檔案格式
還有一些音訊格式:
Opus
Opus 是一種免版稅的開放格式,它能夠在各種位元率下針對不同型別的音訊最佳化質量。音樂和語音可以透過不同的方式進行最佳化,Opus 使用 SILK 和 CELT 編解碼器來實現這一點。
目前,Firefox 桌面版和移動版以及最新版本的 Chrome 桌面版和 Opera 支援 Opus。
MP3、AAC、Ogg Vorbis
大多數常見的音訊格式可以使用特定的伺服器端技術進行流式傳輸。
注意:使用非流媒體格式流式傳輸音訊可能更容易,因為與影片不同,它沒有關鍵幀。
伺服器端流媒體技術
為了流式傳輸即時音訊和影片,您需要在伺服器上執行特定的流媒體軟體或使用第三方服務。
GStreamer
GStreamer 是一個開源的跨平臺多媒體框架,允許您建立各種媒體處理元件,包括流媒體元件。透過其外掛系統,GStreamer 支援一百多種編解碼器(包括 MPEG-1、MPEG-2、MPEG-4、H.261、H.263、H.264、RealVideo、MP3、WMV 和 FLV)。
存在諸如 souphttpclientsink 和 shout2send 之類的 GStreamer 外掛,用於透過 HTTP 流式傳輸媒體,或者您也可以與 Python 的 Twisted 框架整合。
對於 RTMP 傳輸,您可以使用 Nginx RTMP 模組。
SHOUTcast
對於網頁使用,SHOUTcast 流媒體透過 HTTP 傳輸。
注意:SHOUTcast URL 可能需要附加分號。
Icecast
它由 Xiph.org 基金會維護,透過 SHOUTcast 協議流式傳輸 Ogg Vorbis/Theora 以及 MP3 和 AAC 格式。
注意:SHOUTcast 和 Icecast 是最成熟和流行的技術之一,但還有許多其他可用的流媒體系統。
流媒體服務
雖然您可以安裝像 GStreamer、SHOUTcast 和 Icecast 這樣的軟體,但您也會發現許多第三方流媒體服務,這些服務可以為您完成大部分工作。
另請參閱
- HTTP 即時流
- HLS 瀏覽器支援
- HTTP 即時流 JavaScript 播放器
- HTTP 即時流的基礎知識
- HTML 5 影片的 DASH 自適應流媒體
- 基於 HTTP 的動態自適應流 (MPEG-DASH)
- MPEG-DASH 媒體源演示
- DASH 參考客戶端
- 透過 HTTP 進行動態流式傳輸
- MPEG-DASH 部署現狀
- 無需外掛:使用 Media Source Extensions 和 MPEG-DASH 進行瀏覽器即時流
- 媒體源擴充套件 (W3C)
- Icecast
- SHOUTcast
- GStreamer
- 透過 HTTP 流式傳輸 GStreamer 管道
- GStreamer 和樹莓派
- 流媒體系統比較
- Mozilla Hacks - 使用媒體源擴充套件點播流媒體