本發(fā)明涉及實(shí)時(shí)視頻傳輸技術(shù)領(lǐng)域,特別是涉及一種直播中減少觀眾端畫面卡頓的方法及裝置以及客戶端。
背景技術(shù):
互聯(lián)網(wǎng)直播日益盛行,視頻直播需要占用大量上傳帶寬,然而我國(guó)電信運(yùn)營(yíng)商能夠提供的網(wǎng)絡(luò)上傳帶寬卻一直沒(méi)有量的變化,網(wǎng)絡(luò)經(jīng)常會(huì)有抖動(dòng),主流的直播協(xié)議是rtmp協(xié)議,這個(gè)協(xié)議的基礎(chǔ)是tcp協(xié)議,根據(jù)tcp協(xié)議當(dāng)網(wǎng)絡(luò)發(fā)生波動(dòng)時(shí),發(fā)送端沒(méi)有發(fā)送成功的數(shù)據(jù)包會(huì)等到網(wǎng)絡(luò)恢復(fù)平穩(wěn)后繼續(xù)發(fā)送,在主播端就會(huì)造成數(shù)據(jù)包堆積,這樣客戶端觀看到的直播流就會(huì)變成主播之前一小段時(shí)間的流,為減小時(shí)延,本發(fā)明人同日申請(qǐng)?zhí)岢隽嗽谥鞑ザ烁鶕?jù)網(wǎng)絡(luò)抖動(dòng)主動(dòng)丟幀的策略,但是,能減少時(shí)延的同時(shí),如何對(duì)客戶端的畫面進(jìn)行恢復(fù),減少客戶端畫面發(fā)生卡頓情況成為急需解決的問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是針對(duì)現(xiàn)有技術(shù)中存在的技術(shù)缺陷,而提供一種直播中減少觀眾端畫面卡頓的方法。
為實(shí)現(xiàn)本發(fā)明的目的所采用的技術(shù)方案是:
一種直播中減少觀眾端畫面卡頓的方法,包括,
有缺幀時(shí),當(dāng)缺幀為缺B幀或P幀,則根據(jù)前后幀進(jìn)行補(bǔ)齊,如果缺幀為I幀,則復(fù)制上一組的正常畫面進(jìn)行播放。
還包括根據(jù)上一幀和下一幀的時(shí)間戳及數(shù)據(jù)包序號(hào)計(jì)得缺失幀的時(shí)間戳。
所述的時(shí)間戳的計(jì)算方法為上一幀和下一幀的時(shí)間戳的差值除以對(duì)應(yīng)數(shù)據(jù)包的包序號(hào)的差值得到時(shí)間戳間隔,根據(jù)時(shí)間戳間隔得出缺幀的時(shí)間戳。
若缺少B幀時(shí),則根據(jù)播放的畫面根據(jù)相鄰的P幀的圖像做差值進(jìn)行圖像補(bǔ)齊,如相鄰的P幀也缺,則根據(jù)相鄰的P幀和I幀進(jìn)行B幀補(bǔ)齊;
如果缺幀為P幀則根據(jù)相鄰I幀的畫面做差值進(jìn)行圖像補(bǔ)齊。
一種直播中減少觀眾端畫面卡頓的裝置,包括,
缺幀處理模塊,當(dāng)缺幀為缺B幀或P幀,則根據(jù)前后幀進(jìn)行補(bǔ)齊,如果缺幀為I幀,則復(fù)制上一組的正常畫面進(jìn)行播放。
時(shí)間戳計(jì)算模塊,當(dāng)有缺幀時(shí),其根據(jù)上一幀和下一幀的時(shí)間戳及數(shù)據(jù)包序號(hào)計(jì)得時(shí)間戳,
所述的時(shí)間戳的計(jì)算方法為上一幀和下一幀的時(shí)間戳的差值除以對(duì)應(yīng)數(shù)據(jù)包的包序號(hào)的差值得到時(shí)間戳間隔,根據(jù)時(shí)間戳間隔得出缺幀的時(shí)間戳。
若缺少B幀時(shí),則根據(jù)播放的畫面根據(jù)相鄰的P幀的圖像做差值進(jìn)行圖像補(bǔ)齊,如相鄰的P幀也缺,則根據(jù)相鄰的P幀和I幀進(jìn)行B幀補(bǔ)齊;
如果缺幀為P幀則根據(jù)相鄰I幀的畫面做差值進(jìn)行圖像補(bǔ)齊。
一種具有所述的直播中減少觀眾端畫面卡頓的裝置的直播客戶端。
與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:
本發(fā)明的播放器對(duì)于丟幀進(jìn)行補(bǔ)齊,補(bǔ)齊的方案就是相鄰圖像的公差計(jì)算。如果只是B幀缺,P幀不缺,則利用相鄰的P幀,如果此段P幀也缺,就利用相鄰的I幀和P幀。補(bǔ)齊的B幀也進(jìn)行了差值運(yùn)算,差值為相鄰的(P-I或P)/(B幀數(shù)量+1),這樣圖像的流暢效果更好。視頻數(shù)據(jù)每秒鐘25幀圖像畫面,在缺少B幀數(shù)據(jù)恢復(fù)時(shí),人眼不會(huì)有任何不連貫的感覺,在恢復(fù)連續(xù)丟失I幀數(shù)據(jù)時(shí),也就是網(wǎng)絡(luò)很差的時(shí)候,人眼才會(huì)有比較明顯的卡頓的感覺,因?yàn)閳D像基本都一樣。但是聲音一直都是連貫的。
具體實(shí)施方式
以下結(jié)合具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
直播技術(shù)流程:主播端直播時(shí)分為3個(gè)大的模塊,音視頻數(shù)據(jù)采集,編碼,推送。觀眾端相應(yīng)的也分為3個(gè)模塊,音視頻數(shù)據(jù)接收,解碼,播放。
造成直播延時(shí)的原因,原始圖像數(shù)據(jù)通常很大,通過(guò)h.264視頻壓縮算法進(jìn)行壓縮,通過(guò)rtmp協(xié)議封裝成數(shù)據(jù)包,進(jìn)行網(wǎng)絡(luò)傳輸,圖像數(shù)據(jù)雖然進(jìn)行了壓縮,但是數(shù)據(jù)量仍然相當(dāng)大,當(dāng)網(wǎng)絡(luò)出現(xiàn)抖動(dòng)或者其他異常時(shí),根據(jù)rtmp協(xié)議,數(shù)據(jù)要緩存在發(fā)送端等待網(wǎng)絡(luò)恢復(fù)時(shí)一并發(fā)送,這樣就會(huì)到導(dǎo)致觀眾端的播放器在某個(gè)時(shí)間沒(méi)有數(shù)據(jù),過(guò)一會(huì)數(shù)據(jù)恢復(fù)了陸續(xù)播出的時(shí)候造成了延時(shí)。
為了降低網(wǎng)絡(luò)抖動(dòng)引起的時(shí)延,在主播端采用監(jiān)控?cái)?shù)據(jù)包隊(duì)列數(shù)量然后進(jìn)行選擇性丟包不使其進(jìn)入隊(duì)列的方式,有效解決了網(wǎng)絡(luò)抖動(dòng)時(shí)主播端的數(shù)據(jù)擁堵的問(wèn)題。
本發(fā)明進(jìn)一步公開了當(dāng)客戶端收到不完整的有缺失的數(shù)據(jù)包流時(shí)減少觀眾端畫面卡頓的方法,包括,
當(dāng)有缺幀時(shí),根據(jù)上一幀和下一幀的時(shí)間戳及數(shù)據(jù)包序號(hào)計(jì)得時(shí)間戳,且,
當(dāng)缺幀為缺B幀或P幀,則根據(jù)前后幀進(jìn)行補(bǔ)齊,如果缺幀為I幀,則復(fù)制上一組的正常畫面進(jìn)行播放。
首選,每個(gè)數(shù)據(jù)包都有時(shí)間戳,在客戶端即播放端,播放丟棄了部分?jǐn)?shù)據(jù)包的視頻視頻時(shí)會(huì)出現(xiàn)時(shí)間戳的斷檔,則首先根據(jù)上一幀和下一幀的時(shí)間戳及數(shù)據(jù)包序號(hào)計(jì)得時(shí)間戳,其中,所述的上一幀和下一幀是指實(shí)際接收到的數(shù)據(jù)幀,然后根據(jù)上一個(gè)和下一個(gè)視頻幀的時(shí)間戳和相應(yīng)的數(shù)據(jù)包序號(hào)來(lái)重新計(jì)算丟棄了視頻幀的時(shí)間戳,計(jì)算方法為時(shí)間戳的差值除以包序號(hào)的差值得到時(shí)間戳間隔,根據(jù)間隔,進(jìn)行正確播放。數(shù)據(jù)包分為音頻數(shù)據(jù)包和視頻數(shù)據(jù)包,音頻數(shù)據(jù)量很小微乎其微,所以在主播端丟包時(shí)不做處理,視頻的數(shù)據(jù)量很大,是網(wǎng)絡(luò)抖動(dòng)時(shí)主要是視頻數(shù)據(jù)發(fā)送不出去,所以要選在發(fā)送隊(duì)列選擇性丟棄,音頻視頻同步主要是通過(guò)數(shù)據(jù)包頭的時(shí)間戳信息來(lái)同步的,丟棄一部分視頻包,并不會(huì)影響其他視頻包的時(shí)間戳,所以不會(huì)影響同步的問(wèn)題,第一步時(shí)間戳的補(bǔ)齊計(jì)算,則是同時(shí)時(shí)間戳分辨出缺少幀的類型和數(shù)量,以便后續(xù)進(jìn)行補(bǔ)齊處理。
如果丟棄的是B幀畫面播放的畫面會(huì)根據(jù)相鄰的P幀進(jìn)行補(bǔ)齊恢復(fù),如果相鄰的P幀也有缺失,則根據(jù)相鄰的I幀和P幀的圖像做差值進(jìn)行圖像恢復(fù)播放;如果丟棄的P幀會(huì)根據(jù)相鄰I幀進(jìn)行恢復(fù)。如果丟棄的是I幀,就復(fù)制上一組的已有畫面進(jìn)行播放,視頻數(shù)據(jù)每秒鐘25幀圖像畫面,在缺少B幀數(shù)據(jù)恢復(fù)時(shí),人眼不會(huì)有任何不連貫的感覺,在恢復(fù)連續(xù)丟失I幀數(shù)據(jù)時(shí),也就是網(wǎng)絡(luò)很差的時(shí)候,人眼才會(huì)有比較明顯的卡頓的感覺,因?yàn)閳D像基本都一樣。但是聲音一直都是連貫的。
本發(fā)明公開了一種直播中減少觀眾端畫面卡頓的裝置,包括,
時(shí)間戳計(jì)算模塊,當(dāng)有缺幀時(shí),其根據(jù)上一幀和下一幀的時(shí)間戳及數(shù)據(jù)包序號(hào)計(jì)得時(shí)間戳,所述的時(shí)間戳的計(jì)算方法為上一幀和下一幀的時(shí)間戳的差值除以對(duì)應(yīng)數(shù)據(jù)包的包序號(hào)的差值得到時(shí)間戳間隔,根據(jù)時(shí)間戳間隔得出缺幀的時(shí)間戳。
缺幀處理模塊,當(dāng)缺幀為缺B幀或P幀,則根據(jù)前后幀進(jìn)行補(bǔ)齊,如果缺幀為I幀,則復(fù)制上一組的正常畫面進(jìn)行播放。
具體地,若缺少B幀時(shí),則根據(jù)播放的畫面根據(jù)相鄰的P幀的圖像做差值進(jìn)行圖像補(bǔ)齊,如相鄰的P幀也缺,則根據(jù)相鄰的P幀和I幀進(jìn)行B幀補(bǔ)齊;
如果缺幀為P幀則根據(jù)相鄰I幀的畫面做差值進(jìn)行圖像補(bǔ)齊。
缺失了B幀、P幀或者I幀,通常播放器的方案是會(huì)直接跳過(guò)缺失了的數(shù)據(jù),播放存在的B幀、P幀或者I幀,會(huì)出現(xiàn)明顯的卡頓的現(xiàn)象。本發(fā)明的播放器對(duì)于丟幀方案是進(jìn)行補(bǔ)齊,補(bǔ)齊的方案就是相鄰圖像的公差計(jì)算。如果只是B幀缺,P幀不缺,則利用相鄰的P幀,如果此段P幀也缺,就利用相鄰的I幀和P幀。補(bǔ)齊的B幀也進(jìn)行了差值運(yùn)算,差值為相鄰的(P-I或P)/(B幀數(shù)量+1),這樣圖像的流暢效果更好。視頻數(shù)據(jù)每秒鐘25幀圖像畫面,在缺少B幀數(shù)據(jù)恢復(fù)時(shí),人眼不會(huì)有任何不連貫的感覺,在恢復(fù)連續(xù)丟失I幀數(shù)據(jù)時(shí),也就是網(wǎng)絡(luò)很差的時(shí)候,人眼才會(huì)有比較明顯的卡頓的感覺,因?yàn)閳D像基本都一樣。但是聲音一直都是連貫的。
同時(shí),本發(fā)明還公開了具有所述的直播中減少觀眾端畫面卡頓的裝置的直播客戶端,采用該直播客戶端,優(yōu)化了發(fā)送端數(shù)據(jù)包發(fā)送機(jī)制,提高了其對(duì)網(wǎng)絡(luò)抖動(dòng)的適應(yīng)性,有效提高了直播的實(shí)時(shí)性。
以上所述僅是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出的是,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。