Spotify – Large Scale, Low Latency, P2P Music-on-Demand Streaming

Spotify – Large Scale, Low Latency, P2P Music-on-Demand Streaming

Peer-to-peer streaming of media content

former Spotify CTO-Andreas Ehn
Gunnar Kreitz
Ludvig Strigeus

Spotify 於 2008 年 10 月推出,截至2010(論文發表時間)於當時,已在六個歐洲國家擁有超過 700 萬名使用者。

服務提供兩種版本:
  • 免費版(含廣告)
  • 每月付費的高級版:高級版提供一些額外功能,例如以更高位元率串流音樂,以及同步播放清單以供離線使用。
兩種版本皆可無限制地串流音樂,而大多數使用者使用的是免費版。
Spotify 客戶端的一大特色是其低播放延遲。播放一首曲目的中位延遲時間為 265 毫秒。此服務並非根據網頁,而是使用專屬的客戶端與通訊協定。

市面上有諸多「隨選音樂串流服務」(on-demand music streaming services),在當時除Spotify之外,幾乎都是網頁型應用。通常使用 Adobe Flash 或網頁瀏覽器外掛程式進行串流。此外,它們都是純粹的Clinet-Server架構,並未採用P2P技術。在隨選串流領域中,點對點技術的應用在視訊隨選服務中更為普遍。
提供隨選串流的服務與檔案分享應用程式有許多共通之處。
例如,Spotify 用於尋找其他用戶的機制與 BitTorrent 和 Gnutella 的技術相似。

Spotify 協定是一種專為音樂串流而設計的網路協定,智慧型手機的客戶端完全不參與點對點協定,只從伺服器串流音樂。此協定設計目的是提供隨選存取大量曲目的功能,因此不適合用於即時直播。例如,客戶端必須擁有整首曲目才能上傳。省去了溝通用戶擁有哪些曲目片段的負擔。由於曲目檔案通常很小,這樣的限制影響不大。

音訊串流使用 Ogg Vorbis 編碼,預設品質為 q5,平均位元率約為 160 kbps。高級訂閱用戶可透過客戶端設定選擇 q9 品質,平均位元率約為 320 kbps。
這兩種檔案皆可由伺服器與點對點網路提供。由於點對點用戶不會重新編碼,因此擁有 q9 版本的用戶無法提供 q5 版本給其他用戶。
=>Spotify採用的OGG格式,是免費可商用的。別於MP3跟蘋果推廣的M4A(ACC)
主要是為了降低營運成本,MP3 播放並非免費技術,這項技術的擁有者是 Thomson Multimedia 和 Fraunhofer 研究所,因此使用它需要支付使用費。過去,提供 MP3 播放下載的 Sonybada 和 Apple iTunes Music Store 都支付了這筆授權費用。

Spotify Cient為封閉原始碼軟體,可免費下載,但使用者需擁有 Spotify 帳號才能使用。客戶端會自動更新,且僅允許最新版本連接服務。

使用者介面類似桌面 MP3 播放器。使用者可將曲目整理成播放清單,並以連結形式與他人分享。尋找音樂的方式主要有兩種:搜尋與瀏覽。使用者可以搜尋曲目、專輯或藝人,也可以瀏覽,例如點選藝人名稱後,會顯示包含該藝人的所有專輯頁面。

 Spotify 則選擇使用 TCP,而非串流應用中常用的UDP。
  • 首先,使用可靠的傳輸協定能簡化協定的設計與實作。
  • 其次,TCP 對網路較為友善,因為其壅塞控制機制不僅對自身友好,也對其他使用 TCP 的應用程式有利,而且明確的連線訊號有助於有狀態的防火牆運作。
    大多數情況下,初始請求能迅速獲得回應。由於客戶端已與伺服器建立 TCP 連線,無需重新進行三向交握(3-way handshake)。
  • 第三,由於串流內容會在點對點網路中分享,能重新傳送遺失的封包對應用程式而言非常有幫助。

快取機制的重要性主要有兩個原因。
  • 使用者常會重複聆聽同一首曲目,透過快取可避免重複下載。
  • 快取的音樂資料可以由用戶端在點對點網路中提供。快取可以儲存部分曲目,因此即使用戶端只下載了部分內容,該部分通常也會被快取。快取的內容是加密的,無法被其他播放器使用。
快取的清除採用「最近最少使用」(Least Recently Used, LRU)策略。根據快取大小與播放紀錄的模擬結果顯示,由於快取容量大,選擇哪種清除策略對快取效率影響不大。


預先擷取(prefetching)
  • 對串流音樂播放器而言,最簡單的情況是曲目按預測順序播放。只要頻寬充足,播放器就能提前擷取即將播放的曲目資料。Spotify 客戶端會在目前曲目尚未播放完畢前就開始預先擷取下一首曲目。
  • 大多數播放(61%)是以可預測的順序進行,例如前一首曲目播放完畢,或使用者按下「下一首」按鈕。
隨機存取(random access)
  • 較困難且更具挑戰性的情況是使用者主動選擇播放新曲目。當使用者跳轉至曲目中段(seek)時,客戶端會將此請求視為隨機存取,並立即向伺服器請求資料。
  • 由於 Ogg Vorbis 格式在串流環境中對跳轉支援有限,Spotify 為所有檔案加入自訂標頭,以改善跳轉播放的支援性。
  • 在 Spotify 中,約 39% 的播放是由隨機存取觸發(其餘則是因目前曲目播放完畢,或使用者點選「下一首」按鈕所啟動)。
  • 除非客戶端已快取該曲目資料,否則會透過既有的 TCP 連線向伺服器發出初始請求,要求約 15 秒的音樂資料。
Ref:

留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題

外貿Payment Term 付款條件(方式)常見的英文縮寫與定義