短視頻的卡頓優(yōu)化

視頻播放卡頓是音視頻業(yè)務(wù)里一個(gè)常見的問題,引起視頻播放卡頓的主要原因通常包括:

  • 網(wǎng)絡(luò)帶寬速度不夠特咆,造成音視頻數(shù)據(jù)無法及時(shí)完成下載季惩。
  • 設(shè)備解碼性能不足录粱,造成音視頻數(shù)據(jù)無法及時(shí)完成解碼或渲染。

基于這些原因画拾,我們可以考慮下面的方案來對(duì)播放過程中的卡頓進(jìn)行優(yōu)化啥繁。

使用 HTTPDNS 優(yōu)化網(wǎng)絡(luò)連接

在現(xiàn)在的網(wǎng)絡(luò)視頻播放場(chǎng)景中,對(duì)視頻資源的訪問通常都要經(jīng)過 CDN 網(wǎng)絡(luò)進(jìn)行內(nèi)容分發(fā)和調(diào)度青抛。如果 CDN 線路質(zhì)量不好旗闽,那么久很可能造成播放時(shí)音視頻數(shù)據(jù)下載的延遲,從而引起播放的卡頓蜜另。

這時(shí)候我們可以使用與 CDN 網(wǎng)絡(luò)配套的 HTTPDNS 服務(wù)适室。HTTPDNS 使用 HTTP 協(xié)議進(jìn)行域名解析,代替現(xiàn)有基于 UDP 的 DNS 協(xié)議举瑰,域名解析請(qǐng)求直接發(fā)送到相應(yīng)的 HTTPDNS 服務(wù)器捣辆,從而提供更優(yōu)的線路選擇。

以 iOS 上的 AVPlayer 為例此迅,當(dāng)使用 HTTPDNS 時(shí)汽畴,可以用視頻資源 URL 對(duì)應(yīng)的 Host 向 HTTPDNS 請(qǐng)求節(jié)點(diǎn) IP,然后用節(jié)點(diǎn) IP 替換 URL 中的 Host 部分邮屁,再在 HTTP Header 里設(shè)置原 Host整袁。這樣即可通過 IP 直連的方式訪問 HTTPDNS 返回的較優(yōu)節(jié)點(diǎn)。

示例代碼大致如下:

// 假設(shè)原視頻 URL 是:http://wwww.example.com/abc.mp4
// 假設(shè)從 HTTPDNS 服務(wù)獲取的 wwww.example.com 這個(gè) Host 對(duì)于的 IP 是:192.168.1.1
// 那么處理后的 URL 是:http://192.168.1.1/abc.mp4

NSMutableDictionary *headers = [NSMutableDictionary dictionary];
[headers setObject:@"wwww.example.com" forKey:@"Host"];
NSURL *videoURL = [NSURL URLWithString:@"http://192.168.1.1/abc.mp4"];
AVAsset *asset = [AVURLAsset URLAssetWithURL:videoURL options:@{@"AVURLAssetHTTPHeaderFieldsKey": headers}];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];

這種方案在使用 HTTPS 時(shí)佑吝,是會(huì)失敗的坐昙。因?yàn)?HTTPS 在證書驗(yàn)證的過程,會(huì)出現(xiàn) domain 不匹配導(dǎo)致 SSL/TLS 握手不成功芋忿。這時(shí)候的方案參考 HTTPS(含SNI)業(yè)務(wù)場(chǎng)景“IP直連”方案說明iOS HTTPS SNI 業(yè)務(wù)場(chǎng)景“IP直連”方案說明炸客。

優(yōu)化緩沖策略

在點(diǎn)播場(chǎng)景下,為了減少播放過程中的卡頓戈钢,可以在緩沖一定的數(shù)據(jù)后再解碼播放痹仙。但是這樣,就會(huì)影響視頻的首屏播放速度殉了。

增大播放器的緩沖區(qū)开仰,使得每次下載時(shí)能夠加載足夠的數(shù)據(jù)再進(jìn)行播放,能夠降低播放過程中卡頓的頻次薪铜,但是這樣也會(huì)延長首屏播放速度以及每次卡頓后恢復(fù)播放的速度众弓。所以對(duì)于緩沖區(qū)的大小的設(shè)置,需要考慮卡頓和快速開播兩個(gè)因素隔箍,盡量取得平衡谓娃。

在 iOS 平臺(tái)上,使用系統(tǒng)的 AVPlayer 時(shí)蜒滩,屬性 automaticallyWaitsToMinimizeStalling 就是控制播放器緩沖策略的滨达。當(dāng)該值為 YES 時(shí)奶稠,AVPlayer 會(huì)努力嘗試延遲開始播放,加載足夠的數(shù)據(jù)來保證整個(gè)播放過程中盡量卡頓最少捡遍。這個(gè)接口在 iOS 10 及以上版本才開放锌订,在 iOS 10 之前的版本,在播放 HLS 這種流媒體視頻時(shí)画株,效果如同 automaticallyWaitsToMinimizeStalling 為 YES瀑志,播放基于文件的視頻資源,包括通過網(wǎng)絡(luò)傳輸?shù)木W(wǎng)絡(luò)視頻文件污秆,則效果如同 automaticallyWaitsToMinimizeStalling 為 NO。

支持硬解

對(duì)于清晰度較高的視頻昧甘,對(duì)于解碼的性能消耗也會(huì)較大良拼,如果設(shè)備的性能不足,則可能會(huì)造成解碼速度趕不上播放速度充边,從而造成卡頓庸推。在實(shí)際情況中,可以盡量選擇使用硬解浇冰,通過 GPU 來進(jìn)行解碼贬媒。

碼流切換

720P、1080P 等清晰度較高的碼流肘习,對(duì)于網(wǎng)速的要求以及設(shè)備性能的要求都會(huì)相對(duì)較高际乘,在發(fā)生卡頓的情況下,可以考慮將播放的視頻切換到較低清晰度的碼流漂佩,從而優(yōu)化網(wǎng)絡(luò)加載速度脖含,降低對(duì)設(shè)備性能的消耗,優(yōu)化視頻播放的卡頓投蝉。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末养葵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瘩缆,更是在濱河造成了極大的恐慌关拒,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庸娱,死亡現(xiàn)場(chǎng)離奇詭異着绊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)涌韩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門畔柔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人臣樱,你說我怎么就攤上這事靶擦∪迹” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵玄捕,是天一觀的道長踩蔚。 經(jīng)常有香客問我,道長枚粘,這世上最難降的妖魔是什么馅闽? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮馍迄,結(jié)果婚禮上福也,老公的妹妹穿的比我還像新娘。我一直安慰自己攀圈,他們只是感情好暴凑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赘来,像睡著了一般现喳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上犬辰,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天嗦篱,我揣著相機(jī)與錄音,去河邊找鬼幌缝。 笑死灸促,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的涵卵。 我是一名探鬼主播腿宰,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼缘厢!你這毒婦竟也來了吃度?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤贴硫,失蹤者是張志新(化名)和其女友劉穎椿每,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體英遭,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡间护,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了挖诸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汁尺。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖多律,靈堂內(nèi)的尸體忽然破棺而出痴突,到底是詐尸還是另有隱情搂蜓,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布辽装,位于F島的核電站帮碰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拾积。R本人自食惡果不足惜殉挽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望拓巧。 院中可真熱鬧斯碌,春花似錦、人聲如沸肛度。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贤斜。三九已至,卻和暖如春逛裤,著一層夾襖步出監(jiān)牢的瞬間瘩绒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工带族, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锁荔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓蝙砌,卻偏偏與公主長得像阳堕,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子择克,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容