什么是網(wǎng)絡(luò)視頻直播?
什么是網(wǎng)絡(luò)視頻直播?
網(wǎng)絡(luò)視頻直播是指人們可以通過網(wǎng)絡(luò)收看到遠端正在進行的現(xiàn)場音視頻實況,比如賽事、會議、教學(xué)、手術(shù)等等。網(wǎng)絡(luò)視頻直播的核心思想是利用既有的局域網(wǎng)、城域網(wǎng)甚至是萬維網(wǎng)絡(luò)條件實現(xiàn)對音視頻信號的實時傳輸,并且能夠在遠端實現(xiàn)流暢的收看!
一個完整的直播過程包括但不限于以下環(huán)節(jié):采集、處理、編碼、封裝、推流、傳輸、轉(zhuǎn)碼、分發(fā)、解碼、播放等。
一、采集
采集是整個視頻推流過程中的第一個環(huán)節(jié),它從系統(tǒng)的采集設(shè)備中獲取原始視頻數(shù)據(jù),將其輸出到下一個環(huán)節(jié)。視頻的采集涉及兩方面數(shù)據(jù)的采集:音頻采集和圖像采集,它們分別對應(yīng)兩種完全不同的輸入源和數(shù)據(jù)格式。
音頻采集:音頻采集過程主要通過設(shè)備將環(huán)境中的模擬信號采集成PCM編碼的原始數(shù)據(jù),然后將數(shù)據(jù)編碼壓縮成MP3格式分發(fā)出去。常見的音頻壓縮格式有:MP3,AAC,HE-AAC,Opus,F(xiàn)LAC,Vorbis (Ogg),Speex 和 AMR等。
圖像采集:圖像采集過程主要由攝像機和其他設(shè)備拍攝成YUV編碼的原始數(shù)據(jù),然后編碼并壓縮成H.264格式數(shù)據(jù)進行分發(fā)出去。常見的視頻封裝格式有:MP4、3GP、AVI、MKV、WMV、MPG、VOB、FLV、SWF、MOV、RMVB 和 WebM 等。
二、處理
在收集視頻或音頻之后,獲得原始數(shù)據(jù)。 為了增強一些現(xiàn)場效果或添加一些額外的效果,我們通常在壓縮之前處理代碼,例如加上時間或公司LOGO水印,美女雀斑和聲音混淆處理。在主播和觀眾連麥場景中,主播需要與一個或多個觀眾進行對話,并且將會話結(jié)果實時地與所有其他觀眾分享, 連麥的處理也有部分工作在推流端完成。
視頻處理:美顏、水印、濾鏡、自定義
音頻處理:混音、降噪、聲音特效、自定義
三、編碼
對于流媒體傳輸,編碼非常重要。 其編碼性能,編碼速度和編碼壓縮比直接影響整個流媒體傳輸?shù)挠脩趔w驗和傳輸成本。
常見的視頻編碼器:
1)H.264/AVC
2)HEVC/H.265
3)VP8
4)VP9
5)FFmpeg
音頻編碼器:Mp3, AAC等。
四、封裝
封裝可以理解為采用哪種貨車去運輸,也就是媒體的容器。所謂容器,把編碼器生成的多媒體內(nèi)容(視頻,音頻,字幕,章節(jié)信息等)混合封裝在一起。
幾種常見的封裝格式:
1)AVI 格式(后綴為 .avi)
2)DV-AVI 格式(后綴為 .avi)
3)QuickTime File Format 格式(后綴為 .mov)
4)MPEG 格式(文件后綴可以是 .mpg .mpeg .mpe .dat .vob .asf .3gp .mp4等)
5)WMV 格式(后綴為.wmv .asf)
6)Real Video 格式(后綴為 .rm .rmvb)
7)Flash Video 格式(后綴為 .flv)
8)Matroska 格式(后綴為 .mkv)
9)MPEG2-TS 格式 (后綴為 .ts)
目前,我們在流媒體傳輸,尤其是直播中主要采用的就是 FLV 和 MPEG2-TS 格式,分別用于 RTMP/HTTP-FLV 和 HLS 協(xié)議。
五、推流
推流是指使用推流工具等內(nèi)容抓取軟件把直播內(nèi)容傳輸?shù)椒?wù)器的過程。
推送協(xié)議主要有三種:
RTSP(Real Time Streaming Protocol):實時流傳送協(xié)議,是用來控制聲音或影像的多媒體串流協(xié)議, 由Real Networks和Netscape共同提出的;
RTMP(Real Time Messaging Protocol):實時消息傳送協(xié)議,是Adobe公司為Flash播放器和服務(wù)器之間音頻、視頻和數(shù)據(jù)傳輸 開發(fā)的開放協(xié)議;
HLS(HTTP Live Streaming):是蘋果公司(Apple Inc.)實現(xiàn)的基于HTTP的流媒體傳輸協(xié)議;
RTMP是目前主流的流媒體傳輸協(xié)議,廣泛用于直播領(lǐng)域,市面上絕大多數(shù)的直播產(chǎn)品都采用了這個協(xié)議。
RTMP協(xié)議基于 TCP,是一種設(shè)計用來進行實時數(shù)據(jù)通信的網(wǎng)絡(luò)協(xié)議,主要用來在 flash/AIR 平臺和支持 RTMP 協(xié)議的流媒體/交互服務(wù)器之間進行音視頻和數(shù)據(jù)通信。支持該協(xié)議的軟件包括 Adobe Media Server/Ultrant Media Server/red5 等。
它有三種變種:
RTMP工作在TCP之上的明文協(xié)議,使用端口1935;
RTMPT封裝在HTTP請求之中,可穿越防火墻;
RTMPS類似RTMPT,但使用的是HTTPS連接;
RTMP協(xié)議就像一個用來裝數(shù)據(jù)包的容器,這些數(shù)據(jù)可以是AMF格式的數(shù)據(jù),也可以是FLV中的視/音頻數(shù)據(jù)。一個單一的連接可以通過不同的通道傳輸多路網(wǎng)絡(luò)流。這些通道中的包都是按照固定大小的包傳輸?shù)摹?/span>
六、傳輸
推送出去的流媒體需要傳輸?shù)接^眾,整個鏈路就是傳輸網(wǎng)絡(luò)。
七、轉(zhuǎn)碼
視頻直播播流端的碼率是根據(jù)推流端決定的,即播流端的碼率是與推流端的碼率一致的。但是遇到以下場景會造成直播效果不佳:
推流端碼率與播流端帶寬不相匹配。當(dāng)推流端碼率較高而客戶端帶寬資源有限就會導(dǎo)致播放出現(xiàn)卡頓,而當(dāng)推流端碼率較低但是客戶端對于直播效率要求較高時會導(dǎo)致播放效果較差。
播放器插件需要實現(xiàn)多碼率切換。前端播放器插件??梢栽O(shè)置碼率切換,這就需要同一路推流可以同時提供多種碼率的播流地址。
因此,視頻直播提供了實時轉(zhuǎn)碼功能對同一路推流地址同時提供多路不同碼率播流地址提供服務(wù)。
八、分發(fā)
流媒體服務(wù)器的作用是負責(zé)直播流的發(fā)布和轉(zhuǎn)播分發(fā)功能。
九、解碼
編碼器(Encoder):壓縮信號的設(shè)備或程序
解碼器(Decoder):解壓縮信號的設(shè)備或程序
編解碼器(Codec):編解碼器
十、播放
主要是實現(xiàn)直播節(jié)目在終端上的展現(xiàn)。因為這里使用的傳輸協(xié)議是RTMP, 所以只要支持 RTMP 流協(xié)議的播放器都可以使用,譬如:
電腦端:VLC等
手機端:Vitamio以及ijkplayer等