網路音訊和影片直播

直播技術通常用於轉播體育賽事、音樂會以及更普遍的電視和廣播節目。直播通常簡稱為流媒體,它是將媒體“即時”傳輸到計算機和裝置的過程。這是一個相當複雜且新興的課題,有很多變數,因此在本文中,我們將向您介紹這個主題,並告訴您如何入門。

將媒體流式傳輸到瀏覽器的關鍵考慮因素是,我們傳輸的是一個動態建立的檔案,而不是播放一個有限的檔案,它沒有預先確定的開始或結束。

流媒體和靜態媒體之間的主要區別

在本例中,我們使用靜態媒體來描述由檔案表示的媒體,無論是 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

RTSP 2.0 目前正在開發中,與 RTSP 1.0 不相容。

警告:儘管<audio><video> 標籤與協議無關,但目前沒有瀏覽器支援除 HTTP 之外的任何協議,而無需外掛,儘管這種情況看起來即將改變。除 HTTP 之外的協議也可能受到防火牆或代理伺服器的阻止。

使用流媒體協議

如果您習慣於透過 HTTP 使用媒體,那麼使用各種協議的過程令人欣慰地熟悉。

例如

html
<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> 元素播放的流中。例如,如果我們檢測到網路速度緩慢,我們可以開始請求下一段的較低質量(較小)塊。此技術還允許將廣告片段附加/插入到流中。

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)。

存在諸如 souphttpclientsinkshout2send 之類的 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 這樣的軟體,但您也會發現許多第三方流媒體服務,這些服務可以為您完成大部分工作。

另請參閱