Linux 的應用 -- Video Streaming 探討1

Linux 的應用 -- Video Streaming 探討 (1)
作者: 陳俊宏
www.jollen.org
Video Streaming 的技術已經出現多年,在 Internet 上的應用也已經相當廣泛,而利用 Linux 建構 Video Streaming Server 也是相當熱門的話題。如果您想了解什麼是 Video Streaming,本文對 Video Streaming 的觀念與技術將做了清楚而基本的介紹

Video Streaming
來的正是時候
看到 "Video" Streaming 就知道這個技術與影音有關。Video Streaming 是一種經由網絡來撥放影音檔案的技術,Video "Streaming" 的基本概念爲「一邊下載一邊播放」,我們稱之爲「Play as received」。
經由 Internet 如果要收看遠程服務器的電視檔案,最原始的做爲是「下載後再播放」,也就是經由 FTP 或 HTTP 將整個檔案下載至本地端後再利用撥放程序來撥放,我們稱之爲「Play after download」。
以最常見的例子來講,我們可以經由網絡將 MP3 完整下載後再播放,也就是 Play after download,或者我們也可以一邊下載 MP3 一邊聽音樂,這種方式則稱爲 Play as received。其它的應用範例還很多,例如利用 RealPlayer「實時觀看影片或是聽音樂」,這種實時撥放的方式即是 Play as received,我們稱這樣的技術爲 Video Streaming Technology。
爲什麼說 Video Streaming 的技術來的正是時候呢?舉個最簡單的情況,你可能在下載 MP3 之前想要試聽一下音樂的內容,而下載音樂片段的方式又顯得不夠友善,這時如果利用 Video Streaming 的技術來讓網友視聽,不但方便,而且不必浪費時間來下載不喜歡的音樂的。
隨着網絡頻寬的改進與 IPv6 的出現,Video Streaming 的應用將越來越廣泛,利用 Video Streaming 來設計的信息家電也會越來越多,例如較常被提及的網絡電話 (InterPhone)。
除了寬帶網絡的普及外,儲存設備的大進步也是加速 Video Streaming 進用普及的最大動力,例如利用 Linux 設計的 NAS 可以被用來當做大型的影音服務器或是動態電影數據庫 (DMD)。

VCD & MPEG-1
要提到播放動態影音的先軀,絕對要先從 VCD 說起,因爲這是在計算機出現後,最能深入消費者市場的產品
想當年,要播放VCD 除了要有一臺當時算是高擋貨的 1x CD-ROM 外,還要再另外加裝也是高擋貨的 MPEG 卡。撥放 VCD 其實就是 Video Streaming 的技術,因爲 VCD 的數據是一邊讀取一邊播放,那爲什麼要有 MPEG Card 呢?理所當然的,這是因爲MPEG-1 的標準
MPEG-1 被設計在 1x CD-ROM 上播放VCD,而 VCD 上的數據必須經由 MPEG Card 譯碼 (decode) 後才能播放。但是隨着硬件的進步,現在可以經由軟件來做 MPEG-1 解碼的工作。我們將在後文介紹 MPEG-1 的設計概念

DVD & MPEG-2
MPEG-2 常被提到則是由於DVD的流行。不管是 MPEG-1 或是 MPEG-2,其實是一種編碼的技術,而 DVD-ROM 則是選擇了 MPEG-2 來當做它的壓縮標準
而 DVD 之所以無法像 VCD 一樣能被「備份到硬盤」,則是由於其中又加進了三道的保護,第二道保護就是玩家們耳熟能詳的 CSS。在 Linux 下之所以無法有「合法」的 DVD Player,就是受制於 CSS 的關係。
利用 NAS 來設計 Video Server,要儲存並廣撥 VCD 已經沒有技術上的障礙,但是要儲存並擴撥 DVD,則有法律上的問題,這點是值得我們深思的一個問題。因爲目前 CSS 的技術掌握在日本人手裏,要取得這項技術必須簽署 NDA,不過 CSS 並非不可破解想必大家都知道,但是就是有版權上的問題。

影像編碼技術介紹
目前學術界已經發展出許多處理影像訊號壓縮及編碼的技術 (codecs),談到這些技術,應用最廣泛的編碼標準底下四種:
  1. ) H.261
  2. ) H.263
  3. ) JPEG, MJPEG
  4. ) MPEG
底下將分別簡單介紹這四種編碼技術。

H.261
標準
H.261 的影像編碼標準出現在 1990 年的 ITU。一開始的用途主要是支持影像電話 (video phone) 與視訊會議 (video conferencing)。H.261 的格式有二種,分別有不同的分辨率
  1. ) QCIF:176x144
  2. ) CIF:352x288
H.261 的 fps (frames per second) 可以達到 7.5, 10, 15 與 30 fps。由於 H.261 一開始是架構在 ISDN B 上面,而 ISDN B 的傳輸速度爲 64 Kbps,所以 H.261 也被稱爲 Px64 (x = 1 to 30)。
CIF 全名爲 (Common Intermediate Format),主要是爲了要支持各種不同分辨率的電影而被定義出來,例如 NTSC, PAL, SECAM 電視系統。而 QCIF 則是 Quarter-CIF 也就是 CIF 分辨率的一半
除此之外,H.261 也可以說是 MPEG-1 標準的前輩。

H.263
標準
H.263 是 H.261 的加強版,誕生於 1994 年 (ITU)。H.263 開始支持 PSTN,不過要特別說明一點,H.263 比 MPEG-1 還要晚出現,而且 H.263 還是基於 MPEG-1 而發展
H.263 的標準共支持五種不同的分辨率,分別爲
  1. ) Sub-QCIF:128x96
  2. ) QCIF:176x144
  3. ) CIF:352x288
  4. ) 4CIF:704x576
  5. ) 16CIF:1408x1152
傳輸速度爲 8 Kbps ~ 1.5 Mbps。除此之外,H.263 也是 MPEG-4 標準的基礎。

JPEG
提到 JPEG 的標準,大家可就不莫生了,由其是在 GIF 發出禁令後,JPEG 更是被廣泛應用。JPEG 的全名大家一定不莫生,他可是赫赫有名的一羣技術團隊的縮寫 - Joint Photographic Experts Group。
JPEG 是 24-bit 的 "true-color" 影像標準,JPEG 的工作是將 RGB 格式的影像轉換成 YCrCB 格式,目的是爲了減少檔案大小,一般約可減少 1/3 ~ 1/2 左右。
不過 MJPEG 纔是我們的主角,MJPEG 全名爲 "Motion" JPEG,也就是會動的 JPEG 圖檔。許多 Video Streaming 的場合,像是簡單的視訊會議軟件都會使用 MJPEG 來取代 MPEG,原因無它,因爲 MJPEG 格式簡單,但缺點是不支持聲音。

MPEG-1
標準
MPEG 的標準由 ISO (International Standards Organization) 所制定,全名爲 Moving Pictures Experts Group (MPEG 爲 ISO 工作),這些團隊制定了包括 MPEG-1、MPEG-2、MPEG-4 等標準
MPEG-1 的標準比 H.263 早出現,MPEG-1 制定於 1992 年,主要用途爲:視訊會議、影像電話、計算機遊戲與支持第一代的 CD-ROM。MPEG-1 被設計來支持大部份的影像與 CD-ROM 的音效,傳輸速度爲 1.5 Mbps (30 fps)
除此之外,MPEG-1 也支持 playback,例如快轉、倒帶或是跳躍,這也是 MPEG-1 好用的地方。稍後我們會簡單介紹一下 MPEG-1 的原因,以明白 MPEG-1 如何做到這些功能。

MPEG-2
標準
MPEG-2 的標準出現於 1994 年,MPEG-2 兼容於 MPEG-1。MPEG-2 的出現並不是爲了要取代 MPEG-1 的舊標準,而是要加強 MPEG-1 不足的地方。因此 MPEG-2 更能升任其它工作環境,例如 HDTV、視訊廣播
同時,MPEG-2 的分辨率也支持到 HDTV 1280x720。在音效方面,MPEG-2 也支持到 6 個頻道 (MPEG-1 只支持 2 個頻道)。MPEG-2 的傳輸速度也提升至 2Mbps ~ 10 Mbps,因此需要 4x 的 CD-ROM,但也因此 4x CD-ROM 只能儲存 18 分種的影像,所以我們利用 DVD-ROM 來儲存 MPEG-2 格式的影像,而且 DVD-ROM 也支持 Dolby 音效。

MPEG-4
標準
MPEG-4 的標準在 1993 年被提出,主要的應用用途比較廣,包括:視訊會議、影音郵件、無線裝置等等,支持的傳輸速度爲 8Kbps ~ 35Mbps
MPEG-4 可以傳送影像的對象,而不是隻有影像的 "frame",例如一連串的動作指令。因此,MPEG-1 與 MPEG-2 皆是 "frame-based" 的標準,而 MPEG-4 則是 "object-based" 的標準,未來在網絡與多媒體的應會也會更普遍
MPEG-4 目前在 Linux 上已經有 OpenMPEG 的項目計劃,發起本計劃的目地在希望可以在 Linux 上發展完整的 MPEG-4 支持環境

Video Streaming
的網絡技術
要建置一個完整的 Video Streaming 環境,在整體來看,要準備的硬件包括:服務器、CCD、影像補捉卡等等,而在底層的技術面方面,除了前面提到的影像編碼技術外,也要配合通訊協議才能實作出 Video Streaming 的應用程序。

Video Streaming
的方式
Video 在做 Streaming 時,有三種方式可以應用:broadcasting、unicasting、multicasting
broadcasting 的方式比較單純,他是在 LAN 上直接將一個個的影像封包丟到網絡上 (server 端),再由 client 的應用程序自網絡上取回封包播放。但網絡硬件層上,仍有許多需要考慮的問題,例如在 Shared Non-Switched Enthernet 上時,就會發生一些小問題
unicasting 與 multicasting 都是屬於 IP 的傳輸方式。unicasting 採取 1 對 1 的方向傳影像給遠程,稱爲 Video-on-Demand (VoD),multicasting 則是 1 對多的傳輸方式,稱爲 Near-Video-on-Demand (NVoD)。未來 IPv6 將支持 IP Multicasting,因此 Video Streaming 的應用將更爲廣泛

IPv6
IPv6 全名爲 IP version 6,未來將取代目前所使用的 IPv4。IPv6 新增許多對多媒體傳輸的支持,例如 multicasting、authentication/encryption等。不過目前尚仍未全面升級,所以應用仍受限

UDP
通訊協議
UDP 全名是 Universal Datagram Protocol,UDP 通訊協議是 Video Streaming 的基石。UDP 與 TCP 不同的是,UDP 並沒有錯誤檢查,不過這在 Video Streaming 的應用是影向不太的

RTP
通訊協議
RTP 全名爲 Real-Time Protocol,RTP 是在 UDP 封包之前多加 10 bytes 的文件頭,裏面記載有時間、序號、壓縮型態等信息。RTP 是目前大多數 Video Streaming 軟件所使用的通訊協議
RTP 可用來針對各種不同的多媒體格式做 Streaming 的工作,因爲我們將影像分解成數個 RTP 封包再傳送出去,因此會遇到許多網絡技術常會遇到的問題。例如,因爲封包送達的時間不一,造成播放時會畫面不流暢的現像,因此,在播發時就必須使用一個緩衝區 (playout buffer) 來暫時存放並處理網絡上接受到的封包
由網絡上接收的影像封包因爲彼此之間到達的時間間隔不同 (Synchronous Data Packets),所以必須利用緩衝區將這些封包做緩衝,讓彼此之間的時間間隔一樣 (Isochronous Data Packets)。

MPEG-1 的原理
MPEG-1 的編碼原理大家都應該要認識一下。MPEG-1 將影像分成一個 Group,即 GOP (Group of Pictures),每個 GOP 有一個 Entry Point,稱爲 I-frame,每個 I-frame 的大小爲 15KB,另外還有 P-frame 與 B-frame
I-frame 稱爲 Independent-frame,爲每個 GOP 的起點,緊接着的是二個 B-frame,B-frame 稱爲 Bi-directional frame,每個 B-frame 大小爲 3KB,每二個 B-frame 之間再插入一個 P-frame,即 Predictive-frame,每個 B-frame 的大小爲 8KB
GOP 共有三種不同的 frame,每種 frame 存放的影像與性質皆不同,這在以後我們實做程序時會再做更清楚的介紹。例如,我們要將影片快轉時,可以忽略掉所有的 B-frame 與 P-frame,只撥放 I-frame,如此一來便可以節省許多貴寶的網絡頻寬與時間,但前提是,I-frame 必須存放主要的影像數據,事實上也是如此
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章