音視頻知識(shí)2

視頻在我們生活中應(yīng)用越來越廣了,不可避免的,我們在使用視頻時(shí),會(huì)遇到一些最常見的專業(yè)術(shù)語:視頻編碼格式、視頻碼率、視頻幀率、視頻分辨率,這些專業(yè)術(shù)語在一個(gè)視頻文件中,到底是指的什么呢?聽阿酷來說說吧。

編碼格式:一個(gè)視頻文件本身,通常由音頻和視頻兩部分組成。例如上圖的視頻文件,就是由avc視頻編碼+AAC音頻編碼組成的,常見的視頻編碼格式有Xvid,AVC/H.264,MPEG1,MPEG2等,常見的音頻編碼有MP3、AAC等。

視頻碼率:是指視頻文件在單位時(shí)間內(nèi)使用的數(shù)據(jù)流量,也叫碼流率。碼率越大,說明單位時(shí)間內(nèi)取樣率越大,數(shù)據(jù)流精度就越高,這樣表現(xiàn)出來的的效果就是:視頻畫面更清晰畫質(zhì)更高。

視頻幀率:通常說一個(gè)視頻的25幀,指的就是這個(gè)視頻幀率,即1秒中會(huì)顯示25幀;視頻幀率影響的是畫面流暢感,也就是說視頻幀率超高,表現(xiàn)出來的效果就是:畫面越顯得流暢。你也可以這樣理解,假設(shè)1秒只顯1幀,那么一段視頻看起來,就是有很明顯的卡頓感,不流暢不連慣。當(dāng)然視頻幀率越高,意味著畫面越多,也就相應(yīng)的,這個(gè)視頻文件的大小也會(huì)隨之增加,占用存儲(chǔ)空間也就增大了。

視頻分辨率:分辨率就是我們常說的600x400分辨率、1920x1080分辨率,分辨率影響視頻圖像的大小,與視頻圖像大小成正比:視頻分辨率越高,圖像越大,對(duì)應(yīng)的視頻文件本身大小也會(huì)越大。

GOP(Group of picture)

關(guān)鍵幀的周期,也就是兩個(gè)IDR幀之間的距離,一個(gè)幀組的最大幀數(shù),一般而言,每一秒視頻至少需要使用 1個(gè)關(guān)鍵幀。增加關(guān)鍵幀個(gè)數(shù)可改善質(zhì)量,但是同時(shí)增加帶寬和網(wǎng)絡(luò)負(fù)載。

需要說明的是,通過提高GOP值來提高圖像質(zhì)量是有限度的,在遇到場景切換的情況時(shí),H.264編碼器會(huì)自動(dòng)強(qiáng)制插入一個(gè)I幀,此時(shí)實(shí)際的GOP值被縮短了。另一方面,在一個(gè)GOP中,P、B幀是由I幀預(yù)測得到的,當(dāng)I幀的圖像質(zhì)量比較差時(shí),會(huì)影響到一個(gè)GOP中后續(xù)P、B幀的圖像質(zhì)量,直到下一個(gè)GOP開始才有可能得以恢復(fù),所以GOP值也不宜設(shè)置過大。

同時(shí),由于P、B幀的復(fù)雜度大于I幀,所以過多的P、B幀會(huì)影響編碼效率,使編碼效率降低。另外,過長的GOP還會(huì)影響Seek操作的響應(yīng)速度,由于P、B幀是由前面的I或P幀預(yù)測得到的,所以Seek操作需要直接定位,解碼某一個(gè)P或B幀時(shí),需要先解碼得到本GOP內(nèi)的I幀及之前的N個(gè)預(yù)測幀才可以,GOP值越長,需要解碼的預(yù)測幀就越多,seek響應(yīng)的時(shí)間也越長。

上述這些延遲無法避免,而直播協(xié)議的選擇對(duì)直播遲延影響比較大。目前國內(nèi)比較常見的三種直播協(xié)議

RTMP、HLS、HTTP-FLV,下面來簡單介紹下。RTMP 是專為流媒體開發(fā)的協(xié)議,對(duì)底層的優(yōu)化比其它協(xié)議更加優(yōu)秀,同時(shí)它 Adobe Flash支持好,基本上所有的編碼器(攝像頭之類)都支持 RTMP 輸出?,F(xiàn)在 PC 市場巨大,PC 主要是 Windows,Windows 的瀏覽器基本上都支持Flash。另外 RTMP 適合長時(shí)間播放,曾經(jīng)有過測試,連續(xù) 100 萬秒,即 10 天多連續(xù)播放沒有出現(xiàn)問題。最后 RTMP 的延遲相對(duì)較低,一般延時(shí)在1-3s 之間,一般的視頻會(huì)議,互動(dòng)式直播,完全是夠用的。當(dāng)然 RTMP并沒有盡善盡美,它也有不足的地方。一方面是它是基于 TCP 傳輸,非公共端口,可能會(huì)被防火墻阻攔;另一方面,也是比較坑的一方面是 RTMP 為 Adobe私有協(xié)議,很多設(shè)備無法播放,特別是在 iOS 端,需要使用第三方解碼器才能播放。

HLS 是由蘋果公司提出的基于HTTP 的流媒體網(wǎng)絡(luò)傳輸協(xié)議。是蘋果公司 QuickTime X 和 iPhone 軟件系統(tǒng)的一部分。主要應(yīng)用于 iOS 設(shè)備,包含(iPhone,iPad, iPod touch) 以及 Mac OSX 提供音視頻直播服務(wù)和錄制內(nèi)容(點(diǎn)播)等服務(wù)。它的工作原理是把整個(gè)流分成一個(gè)個(gè)小的基于 HTTP的文件來下載,每次只下載一些。當(dāng)媒體流正在播放時(shí),客戶端可以選擇從許多不同的備用源中以不同的速率下載同樣的資源,允許流媒體會(huì)話適應(yīng)不同的數(shù)據(jù)速率??梢酝ㄟ^CDN 進(jìn)行網(wǎng)絡(luò)分發(fā)。而 HLS的劣勢也非常明顯,首先 HLS 實(shí)時(shí)性差,延遲高,HLS 的延遲基本在 10s+ 以上。另外由于 HLS 請求的并不是完整的數(shù)據(jù)流,導(dǎo)致它產(chǎn)生文件碎片多。ts切片較小,會(huì)造成海量小文件,對(duì)存儲(chǔ)和緩存都有一定的挑戰(zhàn)。

FLV是一種在網(wǎng)絡(luò)上傳輸?shù)牧髅襟w數(shù)據(jù)存儲(chǔ)容器格式。而我們所說的HTTP-FLV 即將流媒體數(shù)據(jù)封裝成 FLV 格式,然后通過 HTTP 協(xié)議傳輸給客戶端。HTTP-FLV 能夠好的穿透防火墻,它是基于 HTTP/80傳輸,有效避免被防火墻攔截。另外,它可以通過 HTTP 302 跳轉(zhuǎn)靈活調(diào)度/負(fù)載均衡,支持使用 HTTPS 加密傳輸,也能夠兼容支持 Android,iOS的移動(dòng)端。FLV 也有一個(gè)缺點(diǎn),由于它的傳輸特性,會(huì)讓流媒體資源緩存在本地客戶端,在保密性方面不夠好。

RTMP:其原理是將大塊的視頻幀和音頻幀“剁碎”,然后以小數(shù)據(jù)包的形式進(jìn)行傳輸,且支持加密,因此隱私性相對(duì)比較理想,但由于拆包組包的過程較復(fù)雜,所以在海量并發(fā)時(shí)也容易出現(xiàn)一些不可預(yù)期的穩(wěn)定性問題。

HLS:蘋果推出的流媒體協(xié)議,將視頻分成5-10秒的視頻小分片,然后用m3u8索引表進(jìn)行管理,由于客戶端下載到的視頻都是5-10秒的完整數(shù)據(jù),故視頻的流暢性很好。但一般播放器會(huì)在緩存3-4個(gè)分片后才啟動(dòng)播放,因此也引入了10-30s左右的延時(shí)。

HTTP-FLV:由Adobe公司主推,格式極其簡單,只是在大塊的視頻幀和音視頻頭部加入一些標(biāo)記頭信息,在延遲表現(xiàn)和大規(guī)模并發(fā)方面都很成熟。但需要注意的是HTTP-FLV在手機(jī)瀏覽器上的支持非常有限。

因此,在降低延時(shí)方面,選擇HTTP-FLV作為播放協(xié)議能有效地降低時(shí)延。但HLS對(duì)瀏覽器兼容比較友好,且支持跨終端,所以HLS也是很多用戶的首選。




直播推流問題

1.檢查域名狀態(tài)

若域名處于“配置中”或“停用”狀態(tài)都會(huì)導(dǎo)致推流失敗,您可以通過以下步驟檢查域名狀態(tài)是否正常。

登錄視頻直播控制臺(tái),在左側(cè)導(dǎo)航樹中選擇“域名管理”。

在域名列表中,檢查域名狀態(tài)是否為“正?!?。

若狀態(tài)為“停用”,請?jiān)凇安僮鳌绷袉螕簟皢⒂谩薄?/p>

若狀態(tài)為“配置中”,可能是由于域名還未生效、域名過期、賬號(hào)涉黃涉賭等原因?qū)е?,?a target="_blank" class="md-opjjpmhoiojifppkkcdabiobhakljdgm_doc">提交工單聯(lián)系華為云技術(shù)客服協(xié)助處理。

2.檢查CNAME是否生效

視頻直播服務(wù)默認(rèn)開啟直播上行加速服務(wù),即推流加速。若您的推流域名未配置CNAME解析,則將由于無法解析推流域名,從而導(dǎo)致推流失敗。請您參照如下步驟,驗(yàn)證推流域名的CNAME是否配置成功。

3.檢查推流地址是否正確

您需要根據(jù)是否配置了Key防盜鏈的情況來拼接對(duì)應(yīng)的原始推流地址或鑒權(quán)推流地址。若開啟了Key防盜鏈加密鑒權(quán),則需要使用鑒權(quán)后的推流地址,否則,請使用原始推流地址進(jìn)行推流。

請您對(duì)照推流地址拼接規(guī)則,確認(rèn)當(dāng)前的推流地址是否正確,若不正確,請使用正確的地址進(jìn)行推流。

原始推流地址拼接規(guī)則如下:

rtmp://推流域名/AppName/StreamName

請您按照實(shí)際使用的AppName和StreamName拼接推流地址。

鑒權(quán)推流地址請參見推流鑒權(quán)進(jìn)行拼接。

4.檢查推流地址是否被占用

由于推流地址被占用導(dǎo)致推流失敗的,建議您參照如下步驟進(jìn)行確認(rèn)并處理。

登錄視頻直播控制臺(tái),在左側(cè)導(dǎo)航樹中選擇“直播管理?> 直播流管理”。

在下拉框中選擇您的播放域名,若“在線流”頁簽顯示該域名下正在推流的直播流信息,檢查您使用的直播流名是否已被占用。

若您的推流地址被非法占用,請?jiān)凇安僮鳌绷袉螕簟敖啤?,禁用后,該推流地址將無法進(jìn)行直播推流。建議您再更換新的直播流名(StreamName)進(jìn)行直播推流。

5.檢查直播流是否被禁推

若直播推流地址已被加入禁推名單,則會(huì)導(dǎo)致推流失敗,請您參照以下步驟恢復(fù)直播流的推送。

登錄視頻直播控制臺(tái),在左側(cè)導(dǎo)航樹中選擇“直播管理?> 直播流管理”。

在下拉框中選擇需要恢復(fù)直播流推送的域名。選擇“禁推流”頁簽。在對(duì)應(yīng)直播流行,單擊“操作”列中的“恢復(fù)”。

直播播放端

檢查播放地址是否正確

您需要根據(jù)是否配置了Key防盜鏈的情況來拼接對(duì)應(yīng)的原始播放地址和鑒權(quán)播放地址。若開啟了Key防盜鏈加密鑒權(quán),則需要使用鑒權(quán)后的播放地址,否則,請使用原始播放地址進(jìn)行播放。

請您對(duì)照播放地址拼接規(guī)則,確認(rèn)當(dāng)前的播放地址是否正確,若不正確,請使用正確的地址進(jìn)行播放。

原始播放地址支持FLV、M3U8、RTMP三種格式,對(duì)應(yīng)的拼接規(guī)則如下所示:

RTMP格式:rtmp://播放域名/AppName/StreamName

FLV格式:http://播放域名/AppName/StreamName.flv

M3U8格式:http://播放域名/AppName/StreamName.m3u8

請您按照實(shí)際使用的AppName和StreamName拼接播放地址。

若您的播放域名部署在新版視頻直播服務(wù)下,則鑒權(quán)播放地址請參見Key防盜鏈(新版)進(jìn)行拼接,否則,請參見Key防盜鏈(舊版)進(jìn)行拼接。

說明:

播放地址中的AppName和StreamName必須與推流地址中的一致。

檢查播放域名是否已關(guān)聯(lián)推流域名

推流域名和播放域名添加后,需要進(jìn)行域名的關(guān)聯(lián)才能進(jìn)行直播推流和播放。您可以參照如下方法排查播放域名和推流域名是否已關(guān)聯(lián)。

登錄視頻直播控制臺(tái),在左側(cè)導(dǎo)航樹中選擇“域名管理”。

在目標(biāo)播放域名行右側(cè)單擊“管理”。

在“推流信息”區(qū)域,若已有對(duì)應(yīng)的推流信息,則表示播放域名已關(guān)聯(lián)推流域名。否則,您需要單擊“關(guān)聯(lián)推流域名”,選擇目標(biāo)推流域名,完成關(guān)聯(lián)。

檢查CNAME是否生效

由于視頻直播服務(wù)默認(rèn)開啟直播下行加速服務(wù),即播放加速,若您未配置CNAME解析,將由于無法解析播放域名,導(dǎo)致播放失敗。請您參照如下方法,驗(yàn)證播放CNAME是否配置成功。

登錄視頻直播控制臺(tái),在左側(cè)導(dǎo)航樹中選擇“域名管理”。

在域名列表中,獲取播放域名的CNAME。

打開Windows操作系統(tǒng)中的cmd程序,通過nslookup加速域名的方式進(jìn)行查詢。

若回顯的是系統(tǒng)分配的CNAME域名,則表示已配置CNAME。否則,您需要參考CNAME配置完成配置。

檢查播放端

在第三方播放器中輸入播放地址進(jìn)行播放,檢查播放器是否存在問題,建議可以使用VLC播放器檢測。

檢查播放設(shè)備是否存在問題,建議可以換一個(gè)手機(jī)和PC進(jìn)行檢測。

檢查播放器是否支持對(duì)應(yīng)的格式。

以下為華為云視頻直播播放器對(duì)直播流格式的支持情況:

Web端播放器:支持的格式有M3U8和FLV。

移動(dòng)端播放器:支持的格式有RTMP、FLV和M3U8。

若檢查是播放器不支持導(dǎo)致,建議切換播放器播放。

直播播放卡頓

問題描述

直播推流成功后,在播放端播放直播視頻時(shí)出現(xiàn)卡頓現(xiàn)象。直播的整個(gè)主流程涉及推流端、播放端和直播源站(CDN),因此每個(gè)階段都可能會(huì)有因素導(dǎo)致視頻播放卡頓,如圖1所示。建議您參照如下方法初步排查直播視頻卡頓的原因。

圖1?直播主流程圖

檢查推流端

視頻播放時(shí)出現(xiàn)卡頓,有一部分原因是由于直播推流時(shí)出現(xiàn)了卡頓影響了片源質(zhì)量。其中,設(shè)備的配置、視頻采集參數(shù)的設(shè)置、網(wǎng)絡(luò)環(huán)境等因素都可能導(dǎo)致推流端出現(xiàn)卡頓。當(dāng)推流端出現(xiàn)卡頓時(shí),您可以參照如下幾方面逐一排查問題。

設(shè)備配置

推流過程中會(huì)占用一定比例的CPU,硬件配置較差的低端設(shè)備,在推流過程中若整體CPU使用率超過80%以上,畫面會(huì)出現(xiàn)不同程度的卡頓,花屏等現(xiàn)象,會(huì)影響到視頻的采集,導(dǎo)致片源質(zhì)量下降影響用戶端的觀看。您可以通過更換設(shè)備配置、系統(tǒng)版本等較高的設(shè)備,以保障推流端設(shè)備的穩(wěn)定性盡量避免可能導(dǎo)致卡頓的因素產(chǎn)生。

例如,使用

視頻云App推流時(shí),可以在推流界面,單擊頁面右下角的

查看CPU使用率及總CPU使用率情況。


?查看CPU使用率

推流開發(fā)工具配置

由于編碼端設(shè)置的碼率、幀率以及編碼檔位過高,且受硬件條件限制,會(huì)導(dǎo)致編碼速度變慢,無法達(dá)到流暢播放的幀率要求。因此對(duì)于推流設(shè)備的使用,iOS版的移動(dòng)端建議您使用硬編碼,因?yàn)閕OS系統(tǒng)和硬件設(shè)備統(tǒng)一性高,而且省電。而Android版的移動(dòng)端因?yàn)闄C(jī)型復(fù)雜,CPU類型眾多,支持程度不一,推薦4.3及以上版本使用硬編碼。若使用的華為云推流SDK是iOS版的,默認(rèn)為硬編碼,不需要設(shè)置;若使用的是Android版的,請參見

設(shè)置軟硬編碼進(jìn)行配置。

視頻采集參數(shù)配置

一般情況下,為保障視頻的流暢度幀率會(huì)設(shè)置在每秒15幀以上,如果幀率低于每秒10幀,畫面就會(huì)出現(xiàn)較明顯的卡頓,如無特殊情況,盡量將視頻幀率設(shè)置在每秒15-30幀之間。幀率超過每秒30幀后,人眼就無法識(shí)別出畫面的效果,且?guī)试黾雍笠曨l傳輸?shù)膸挸杀疽矔?huì)上升,建議您合理設(shè)置視頻的采集參數(shù)。

網(wǎng)絡(luò)帶寬大小

使用

在線帶寬測試檢查推流端的上行網(wǎng)絡(luò)帶寬情況?,一般建議上行帶寬最好穩(wěn)定在10M以上。

系統(tǒng)資源占用

檢查后臺(tái)是否運(yùn)行了大量的程序,建議刪除和停止正在運(yùn)行的程序,空出資源。

檢查播放端

大部分播放器都有接收緩存的,緩存收滿后,才進(jìn)行解碼顯示,這部分接收緩存的大小也會(huì)影響播放的卡頓情況,建議通過調(diào)整接收緩存的大小,減少卡頓影響。

如果播放設(shè)備使用的是硬編碼,在網(wǎng)絡(luò)環(huán)境較差的情況下,為減少卡頓影響,可以實(shí)時(shí)改變硬編碼率,即降低碼率,進(jìn)行丟幀處理,在丟幀的同時(shí)也可降低音頻的碼率。具體詳情請參見直播播放器SDK。

使用在線帶寬測試檢查播放端下行網(wǎng)絡(luò)帶寬情況,若播放端的帶寬不夠或發(fā)生抖動(dòng),會(huì)導(dǎo)致播放畫面出現(xiàn)卡頓。同時(shí),檢查是否有下載數(shù)據(jù)占用網(wǎng)絡(luò)帶寬,建議在同一網(wǎng)絡(luò)環(huán)境下,不要有大量的帶寬占用行為出現(xiàn),比如下載等。

檢查直播源站(CDN)

若推流端和播放端排查結(jié)果均正常,請提交工單聯(lián)系技術(shù)客服排查直播源站(CDN)是否存在問題,提交工單時(shí),請附上配置的推流域名和播放域名。

OBS推流延時(shí)過長


使用推流工具進(jìn)行推流操作時(shí),需手動(dòng)調(diào)節(jié)直播流延時(shí)時(shí)間,HLS的播放延時(shí)在10~35秒之間為正常范圍。如您的延時(shí)已超過正常范圍,請您參照以下步驟設(shè)置參數(shù)。

選擇“輸出 > 高級(jí)”。

將“關(guān)鍵幀間隔(秒,0=自動(dòng))”設(shè)置為“2”。


?OBS推流延時(shí)設(shè)置


域名配置后,針對(duì)不同的播放協(xié)議,對(duì)應(yīng)的播放地址格式如下所示:

RTMP格式:rtmp://播放域名/AppName/StreamName

FLV格式:http://播放域名/AppName/StreamName.flv

M3U8格式:http://播放域名/AppName/StreamName.m3u8

若配置了轉(zhuǎn)碼模板,需要播放直播轉(zhuǎn)碼流,則在“StreamName”后加上“_轉(zhuǎn)碼模板ID”即可。

若配置了Key防盜鏈,則需要使用鑒權(quán)地址進(jìn)行播放,在如上的原始播放地址后加上鑒權(quán)串即可。

鑒權(quán)播放地址:原始播放地址?auth_info=加密串.EncodedIV

具體播放地址的拼接方法請參見拼接播放地址

播放地址中StreamName表示直播流名稱,每個(gè)AppName可以創(chuàng)建多個(gè)直播流,您可以根據(jù)實(shí)際情況進(jìn)行自定義

,不支持中文字符。具體可以參見

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容