淺談流媒體


淺談流媒體
 
淺談流媒體
 
諾曹
發布於 2019-08-26 12:45:31修改於 2019-08-26 13:27:00
454
 
 

什么是流媒體

  • 所謂流媒體是指采用流式傳輸的方式在Internet播放的媒體格式。 流媒體又叫流式媒體,它是指商家用一個視頻傳送服務器把節目當成數據包發出,傳送到網絡上。用戶通過解壓設備對這些數據進行解壓后,節目就會像發送前那樣顯示出來。
  • 流媒體從本質上講也是多媒體的一種,其特性是“流式”:無需完整文件,邊傳邊播。媒體提供商在網絡上傳輸媒體的“同時”,用戶一邊不斷地接收並觀看或收聽被傳輸的媒體。“流”媒體的“流”指的是這種媒體的傳輸方式(流的方式),而並不是指媒體本身。

流媒體協議

  • 流媒體協議分類

  1. 點播
    英文稱為“Video on Demand”,所以也稱為“VOD”。是根據觀眾的要求播放節目的視頻點播系統,把用戶所點擊或選擇的視頻內容,傳輸給所請求的用戶
    點播的特點是靜態:播放的對象已經在服務器上按照文件形式准備就緒,客戶端只需要按照文件協議進行邊下載邊播放,也可以緩存后播放
    例如:HTTP/MP4/FLV HLS
  2. 直播
    直播稱為“Live Video”。是按照信號源的實際情況,將實時內容推送到客戶端進行呈現,不受客戶端控制的一種播放形式,
    直播的特點是動態:播放的對象是實時來自於信號源,客戶端和服務器都不知道下一秒鍾即將播放的內容,而且無法進行暫停等控制。
    例如:RTSP RTMP
  3. 偽直播
    將直播流進行文件化,降低直播對服務器的壓力,提升性能
    例如:HLS HDS DASH
  • 協議構成

  1. 編解碼格式
    視頻:H264(avc)、H265(hevc)、VP8、……
    音頻:AAC、MP3、…
  2. 封裝格式:
    點播:MP4、FLV、HLS、HDS、DASH、……
    直播:FLV、HLS、WEBM、……
    傳輸協議:HTTP、RTMP、RTSP、……

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  • 常見協議詳解

  1. MP4

MP4簡介
MP4是國際標准化組織(ISO)和國際電工委員會(IEC)下屬的“動態圖像專家組” (Moving Picture Experts Group,即MPEG)制定,用於封裝音視頻文件,因為
其是標准化組織制定,而並非企業標准,所以應用十分廣泛,可謂無處不見。

MP4特點
封裝能力強。由於mp4格式特點,mp4可以對多種視頻、音頻文件進行封裝,也可以加入更多的信息;
也是由於其格式特點,可以方便的添加多路視頻、音頻;
由標准化組織制定,技術支持有保障,應用廣泛;
但是相對於流媒體,MP4文件明顯臃腫,操作MP4文件難度遠大於FLV,在索引信息不完備的情況下無法正常播放,但是作為完整的點播文件還是有着明顯優勢。

MP4協議分析
MP4文件有眾多BOX組成,每個BOX可以理解為樹的一個節點。

     2.FLV

FLV簡介
FLV是一種真正意義的流媒體格式,這是他在流媒體領域不同於MP4最大區別。
FLV也是Flash的御用流媒體格式,所以在web端有着極其廣泛的應用。FLV以其封裝簡單,
特別容易被切片、拆分。而且內部格式采用標准的AMF協議格式標注,通用性強,所以在流媒體
中特別受到開發者喜愛。

FLV特點
文件結構簡單明了,對於開發者而言只需要簡單的了解FLV協議和AMF協議就可以方便的操作。
沒有過多的冗余信息,所以加載速度很快。
開源社區對該格式的支持很豐富,有很多技術支持。
對於流媒體,FLV無須整的索引即可發送並播放,這個是他在流媒體中的最大亮點。而MP4在索引不完整的情況下,使用HTTP進行分段下載是不可能的。

         FLV格式分析
         首先FLV由文件頭和若干個TAG組成,FLV可以封裝幾乎所有的音視頻格式,
         常見的FLV中大多用來封裝H264的視頻流,和MP3音頻流。

     3.RTMP

RTMP是Real Time Messaging Protocol(實時消息傳輸協議)的縮寫。該協議基於TCP,是一個協議簇,包括RTMP基本協議及RTMPT/RTMPS/RTMPE等多種變種。
RTMP是最為靈活的一種流媒體協議,支持:
Publish:將客戶端的直播流推送到流媒體服務器;
Record:接收來自客戶端推送的直播流,在本地存儲或者轉發輸出;
Live:服務器將直播流發送給客戶端;
Play:客戶端接收來自服務器的直播流並且渲染輸出;
兩種工作模式:
Pull模式:客戶端將直播流推至服務器;
Push模式:服務器主動向上級拉取直播流;

     4.HLS

HLS全稱是HTTP Live Streaming,是由Apple提出的基於HTTP的流媒體網絡傳輸協議。
它的工作原理是把整個流分成一個個小的基於HTTP文件來下載的,每次只下載一些。當媒體流正在播放時,客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會話適應不同個數據速率。
HLS支持H264/AAC和H264/MP3編解碼標准,支持普通的Web服務器。

編碼器:
對采集的原始數據(包含音視頻等數據)進行編碼,Apple采用的是H264/AAC標准,編碼后的數據封裝為MPEG2-TS格式
分割器:
將TS流讀入並將其分成一系列的等時間長度(一般為10s)的小的媒體文件。分割器也可以按照需求進行加密(DRM)。
索引文件:
對所有的小的分片文件進行列表保存,對於直播流還需要進行索引刷新,這就是所謂的M3U8文件。

     5.RTSP

Real Time Streaming Protocol的縮寫,是TCP/IP協議體系中的一個應用層協議,由哥倫比亞大學、網景和RealNetworks公司提交的IETF RFC標准。該協議定義了一對多應用程序如何有效地通過IP網絡傳送多媒體數據。RTSP在體系結構上位於RTP和RTCP之上,它使用TCP或UDP完成數據傳輸。
協議特點:
編碼格式支持H264 H263 AAC MP3等多種格式
強實時性流媒體協議,一般用於視頻直播與視頻會議
包含RTSP RTP RTCP,協議架構比較復雜,現在一般多用於視頻監控(Onvif行業標准)
SDP:
Stream Descript Protocol
RTSP的描述文件

流媒體分發

  1. 流媒體服務器特性

高並發能力、高IO吞吐量;
非線性、海量的存儲能力,查找便捷迅速,可由多個輸出通道共享;
流式傳輸,邊傳邊播;
將音視頻切換矩陣和錄像機等傳統設備的多通道、錄制、播放等功能集於一體;

    2. 流媒體系統組成

編碼工具 :用於創建、捕捉和編輯多媒體數據 ,形成流媒體格式,可以由帶視音頻硬件接口的計算機和運行其上的制作軟件共同完成;
硬件編碼器:鼎點 虹軟 卓遠……
流媒體數據;
服務器 :存放和控制流媒體的數據;
網絡 :適合多媒體傳輸協議或實時傳輸協議的網絡;
播放器 :供客戶端瀏覽流媒體文件。

     3. 流媒體系統面臨的問題

網絡抖動
網絡波動造成數據抖動;
一般通過在客戶端加入緩存的方式,來消除數據率抖動造成可能帶來的畫面抖動;
容錯處理
RTMP、HTTP協議本身基於TCP協議,已經實現了網絡傳輸容錯處理;
RTSP可基於UDP協議,通過客戶端的鏈接嘗試以及網絡打洞,處理鏈接容錯問題;而通過丟包以及動態碼率來處理數據發送錯誤。即便如此,在公網上也很少使用RTP Over UDP,一般多采用RTP Over RTSP的方式;
延遲
對於直播協議,網絡延遲是一個相對明顯的問題;
需要根據實際的場景選擇不同的直播協議

      4. 流媒體服務器功能

點播功能
多格式點播文件分發  |  客戶端Seek:字典拖動、時間拖動  |  點播格式轉換
直播功能
多協議直播協議分析  |  直播協議轉換  |  直播時移
其他功能
防盜鏈支持  |  DRM集成

      5. 流媒體服務器開源方案  參考 :阿里雲直播服務

live555:開源流媒體服務項目 http://www.live555.com/

NGINX-RTMP: nginx模塊 支持rtmp和HLS https://github.com/arut/nginx-rtmp-module

SRS:開源流媒體服務器系統 https://github.com/winlinvip/srs (目前就職阿里的楊成立大神的作品,只能膜拜

后續會詳細寫各方案的詳細實踐細節

       6. 流媒體負載均衡

開源負載均衡軟件LVS     參考 :阿里雲 SLB
性能好。LVS集成在操作系統之內,在網絡協議棧的第四層對用戶請求進行分發,自身沒有流量的產生,因此具有極高的性能;
已被LINUX及FreeBSD等支持,配置簡單,操作便捷;
工作穩定。具有完整的雙熱備方案。

開源負載均衡軟件NGINX   參考:阿里雲 Tengine
調度靈活。工作在網絡協議棧第七層,能對HTTP請求進行解析和分流,支持復雜的正則規則,有更優化的負載調度效果;
網絡依賴性低。只要網絡可達就可部署,可有效區分內網和外網流量;
支持服務器檢測。NGINX能根據上游服務器返回的狀態碼判斷服務器工作狀態,並及時將返回錯誤的請求重新提交到其他節點。

        7. CDN對流媒體分發   參考:阿里雲點播就是CDN+OSS ,用CDN對OSS中的媒體資源進行加速分發

用戶輸入訪問的域名,操作系統向 LocalDns 查詢域名的ip地址.
LocalDns向 ROOT DNS 查詢域名的授權服務器(這里假設LocalDns緩存過期)
ROOT DNS將域名授權dns記錄回應給 LocalDns
LocalDns得到域名的授權dns記錄后,繼續向域名授權dns查詢域名的ip地址
域名授權dns 查詢域名記錄后(一般是CNAME),回應給 LocalDns
LocalDns 得到域名記錄后,向智能調度DNS查詢域名的ip地址
智能調度DNS 根據一定的算法和策略(比如靜態拓撲,容量等),將最適合的CDN節點ip地址回應給 LocalDns
LocalDns 將得到的域名ip地址,回應給 用戶端
用戶得到域名ip地址后,訪問站點服務器
CDN節點服務器應答請求,將內容返回給客戶端.(緩存服務器一方面在本地進行保存,以備以后使用,二方面把獲取的數據返回給客戶端,完成數據服務過程)

流媒體播放

  1. IOS流媒體播放  參考:阿里雲ios播放器SDK

iOS對於流媒體播放支持非常完善。iOS使用HLS作為標准流媒體協議支持。並且iOS SDK內置AVFoundation完成視音頻的播放與處理
典型的iOS播放器架構基於AVPlayer+AVPlayerItem,在這套架構上,用戶可基於API自行定制視頻播放器的UI效果,並提供播放進度,緩沖進度,播放狀態等多種視頻數據的 監聽,多通道監聽視頻流信息。
自定義視頻AVPlayerLayer,可對該層添加多種縮放樣式
自定義播放控制Bar,可添加多種控制事件觸發view
視頻流數據管理對象 AVPlayerItem

     2. Android流媒體播放 參考:阿里雲Android播放器SDK

Android 系統自帶輕量級播放器Mediaplayer,它提供了幾乎所有普通播放器的操作功能的接口。作為開發者不需要考慮底層如何去網絡取視頻來進行播放,我們只需要根據API集成播放器,寫播放控制等功能。Mediaplayer完整支持H.264、AAC等常見編碼格式的解碼
MediaPlayer支持RTSP和HLS兩種直播流協議,以及HTTP/MP4、HLS等點播協議,我們可以基於MediaPlayer自定義播放器界面,實現多種多樣的流媒體播放終端。

     3. Flash流媒體播放播放 參考:阿里雲Web播放器SDK

Flash是由macromedia公司推出的交互式矢量圖和 Web 動畫的標准,於2005年12月3日被Adobe公司收購;
Flash一出現,就因為其強大的富媒體特性為BS發展帶來了前所未有的進步,特別是其在視音頻方面的處理能力,目前仍然超出HTML5很遠;
Flash定位於富文本展示工具,對流媒體直播和點播具有天然良好的支持,Flash支持的直播協議為FLV、點播協議為FLV和MP4,通過擴展能夠實現HLS的直播和點播;
目前在PC端視音頻播放領域,Flash仍然占有至少80%的市場份額,而且基於WeVideo的流媒體編輯是市面上最為出色的在線編輯工具。

      4. HTML5流媒體播放 參考:阿里雲Web播放器SDK

HTML5是萬維網的核心語言、標准通用標記語言下的一個應用超文本標記語言(HTML)的第五次重大修改;
HTML5相比前代語言的一項重大變革就是增加了視音頻和繪圖方面的能力,<video>和<audio>標簽的出現,使Flash受到空前的挑戰;
HTML5與移動OS更具有親緣性,目前Android和iOS自帶瀏覽的<video>標簽都可以支持HLS的直播協議和HLS、MP4的點播協議;而在PC平台上,<video>標簽仍然只能支持點播流媒體協議;

      5. 開源播放器方案

FFmpeg:全球領先的多媒體框架 http://ffmpeg.org/ 
VLC:開源的跨平台多媒體播放器及框架 http://www.videolan.org/ 

不管移動端還是pc端,均可以集成ffmpeg自己開發播放器,后續會詳細講解安卓集成ffmepg開發播放器

流媒體制作

      1. 流媒體編輯  參考 :阿里雲 短視頻 |  點播剪輯 |  直播導播台

流媒體編輯,是指在終端上直接基於流媒體文件進行在線剪切、拼接、特技預覽、字幕疊加、配音等媒體處理的一種媒體編輯方式。
與傳統編輯軟件的最大區別在於:
編輯的素材來自於互聯網(比如視頻網站、網絡素材庫……)
編輯后的節目直接提交到雲端進行后續處理(視音頻合成、分發到社交網絡……)

基於流媒體的編輯,在整個業界都尚處於探索階段
基於Flash:WeVideo
基於HTML5 : Popcorn

     2. 基於Flash的流媒體編輯

WeVideo是目前最為成熟的互聯網在線編輯網站  https://www.wevideo.com/
整個編輯客戶端基於Flash
支持增加多條視頻、音頻軌道  |  支持配音  |  多種過渡特技  |  多種視頻特技、音頻特技  |  多種字幕模板、所見即所得編輯
流媒體支撐
WeVideo使用http協議mp4文件進行編輯  |  后台使用標准流媒體服務器進行支撐

      3. 基於HTML5的流媒體編輯

Popcorn是一個基於HTML5的媒體框架  https://popcorn.webmaker.org
開源:https://github.com/secretrobotron/popcorn-maker/network
純HTML5 + JS  |  支持多軌視頻疊加、視頻縮放拼接  |  字幕支持淡入淡出  |  非幀精確
流媒體支撐
Popcorn使用http協議流媒體  |  文件格式由瀏覽器決定

總結

          綜上所訴,流媒體不論從技術難度還是開發成本來說,對於一家公司來說都是一件比較有難度和挑戰的事情。所以 在有直播或者點播的業務場景時,可以考慮阿里雲直播或者點播服務,從媒體編輯 | 媒體管理 |  媒體加速分發 | 媒體播放 各技術環節都有完整的解決方案或者服務提供。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM