本發明涉及實時視頻傳輸技術領域,特別是涉及一種減少直播時延和卡頓的方法及裝置、直播系統。
背景技術:
互聯網直播日益盛行,視頻直播需要占用大量上傳帶寬,然而我國電信運營商能夠提供的網絡上傳帶寬卻一直沒有量的變化,網絡經常會有抖動,主流的直播協議是rtmp協議,這個協議的基礎是tcp協議,根據tcp協議當網絡發生波動時,發送端沒有發送成功的數據包會等到網絡恢復平穩后繼續發送,在主播端就會造成數據包堆積,這樣客戶端觀看到的直播流就會變成主播之前一小段時間的流,增加了直播的延時。導致互動性降低,
直播平臺互動的方式主要是主播進行直播,觀眾通過觀看視頻直播,在文字聊天室打字和主播互動,文字信息傳輸量小基本是實時傳輸,這樣的模式決定了主播端到客戶端的直播延時在3秒以內是可以優化互動的,大于3秒就會有明顯的延時感,主播之前好長時間做的事情,觀眾很久之后才能看到,極大地降低互動性,而且因為延時還導致畫面產生卡頓等情況。
我秀直播平臺目前采用rtmp協議進行直播,經常會有觀眾端出現觀看延時的現象,極大地影響了觀眾與主播之間的互動。
技術實現要素:
本發明的目的是針對現有技術中存在的技術缺陷,而提供一種減少直播時延和卡頓的方法。
為實現本發明的目的所采用的技術方案是:
一種減少直播時延和卡頓的方法,包括,主播端和客戶端,
主播端包括,
將原數據進行編碼成預定數據格式,
將編碼后的數據打包成數據包并發送至發送隊列,
判斷數據包發送隊列中數據包數量是否正常,
如不正常則主動丟棄部分或全部數據包使其不進入發送隊列;
客戶端接收有缺幀時,當缺幀為缺B幀或P幀,則根據前后幀進行補齊,如果缺幀為I幀,則復制上一組的正常畫面進行播放。
所述的直播流的預定數據格式為H.264編解碼格式,所述的數據包的傳輸協議為Rtmp協議。
客戶端還包括根據上一幀和下一幀的時間戳及數據包序號計得缺失幀的時間戳。
所述的當網絡出現抖動時主動丟棄部分數據包直至數據包發送隊列數量正常為:
當所述的數據包發送隊列的數量不大于第一閾值,不主動丟棄數據包,
當所述的數據包發送隊列的數量大于第一閾值且不大于第二閾值,主動丟棄新傳送來的全部B幀數據包,
當所述的數據包發送隊列的數量大于第二閾值且不大于第三閾值,,主動丟棄新傳送來的全部B幀數據包,丟棄部分或全部P幀數據包,
當所述的數據包發送隊列的數量大于第三閾值,主動丟棄新傳送來的全部B幀數據包,丟棄全部P幀數據包,丟棄部分或全部I幀數據包。
客戶端若缺少B幀時,則根據播放的畫面根據相鄰的P幀的圖像做差值進行圖像補齊,如相鄰的P幀也缺,則根據相鄰的P幀和I幀進行B幀補齊;
如果缺幀為P幀則根據相鄰I幀的畫面做差值進行圖像補齊。
一種減少直播時延和卡頓的裝置,包括,主播端和客戶端,
主播端包括,
編碼模塊,用以將原數據進行編碼成預定數據格式,
傳輸模塊,用以將編碼后的數據打包成數據包并發送至發送隊列,
發送狀態監控模塊,用以監控數據包發送隊列的數據包數量并判斷是否正常,
丟包模塊,用以當發送隊列中數量不正常時主動丟棄部分或全部數據包使其不進入發送隊列;
客戶端包括,
缺幀處理模塊,當缺幀為缺B幀或P幀,則根據前后幀進行補齊,如果缺幀為I幀,則復制上一組的正常畫面進行播放。
所述的編碼模塊H.264編解碼格式,所述的傳輸模塊的傳輸協議為Rtmp協議。
客戶端還包括時間戳計算模塊,其根據上一幀和下一幀的時間戳及數據包序號計得缺失幀的時間戳。
所述的丟包模塊的控制方法為,
當所述的數據包發送隊列的數量不大于第一閾值,不主動丟棄數據包,
當所述的數據包發送隊列的數量大于第一閾值且不大于第二閾值,主動丟棄新傳送來的全部B幀數據包,
當所述的數據包發送隊列的數量大于第二閾值且不大于第三閾值,主動丟棄新傳送來的全部B幀數據包,丟棄部分或全部P幀數據包,
當所述的數據包發送隊列的數量大于第三閾值,主動丟棄新傳送來的全部B幀數據包,丟棄全部P幀數據包,丟棄部分I幀數據包;
缺幀處理模塊的控制方法為,若缺少B幀時,則根據播放的畫面根據相鄰的P幀的圖像做差值進行圖像補齊,如相鄰的P幀也缺,則根據相鄰的P幀和I幀進行B幀補齊;
如果缺幀為P幀則根據相鄰I幀的畫面做差值進行圖像補齊。
一種具有所述的減少直播時延和卡頓的裝置的直播系統。
與現有技術相比,本發明的有益效果是:
本發明針對網絡抖動時現有rtmp直播協議會引入延時,增加了主播端丟幀機制,將打包的數據在不影響觀眾端播放的情況下,將圖像數據合理的丟棄一部分,這樣就不會觸發tcp的重傳機制,其可以有效的降低這種延時,增加主播和觀眾實時互動性。
本發明的播放器對于丟幀進行補齊,補齊的方案就是相鄰圖像的公差計算。如果只是B幀缺,P幀不缺,則利用相鄰的P幀,如果此段P幀也缺,就利用相鄰的I幀和P幀。補齊的B幀也進行了差值運算,差值為相鄰的(P-I或P)/(B幀數量+1),這樣圖像的流暢效果更好。視頻數據每秒鐘25幀圖像畫面,在缺少B幀數據恢復時,人眼不會有任何不連貫的感覺,在恢復連續丟失I幀數據時,也就是網絡很差的時候,人眼才會有比較明顯的卡頓的感覺,因為圖像基本都一樣。但是聲音一直都是連貫的。
附圖說明
圖1所示為本發明的主播端丟包的流程示意圖。
具體實施方式
以下結合具體實施例對本發明作進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,并不用于限定本發明。
直播技術流程:主播端直播時分為3個大的模塊,音視頻數據采集,編碼,推送。觀眾端相應的也分為3個模塊,音視頻數據接收,解碼,播放。
造成直播延時的原因,原始圖像數據通常很大,通過h.264視頻壓縮算法進行壓縮,通過rtmp協議封裝成數據包,進行網絡傳輸,圖像數據雖然進行了壓縮,但是數據量仍然相當大,當網絡出現抖動或者其他異常時,根據rtmp協議,數據要緩存在發送端等待網絡恢復時一并發送,這樣就會到導致觀眾端的播放器在某個時間沒有數據,過一會數據恢復了陸續播出的時候造成了延時。
如圖所示,為了降低網絡抖動引起的時延,本發明減少直播時延和卡頓的方法,主播端的控制包括,
步驟101,將原數據進行編碼成預定數據格式,
視頻原數據壓縮方式可采用任意現有技術,如h.264視頻壓縮算法,根據h.264視頻壓縮算法,圖像序列會被壓縮成I幀P幀和B幀,I幀進行圖像幀內壓縮,解碼時I幀自己本身可以獨立恢復成一幀圖像畫面,P幀參考I幀進行壓縮,解碼恢復時也就是需要等I幀解碼成完整圖像才能恢復,B幀參考P幀恢復。整個圖像序列是由多個重復的IPBBPBBPIPBBPBBP序列組成的。在觀眾端只要能解碼完畢第一個I幀就會顯示圖像,相應的解碼P和B幀時顯示連貫的圖像。
步驟102,將編碼后的數據打包成數據包并發送至發送隊列,
I幀、B幀和P幀各自封裝成對應的rtmp數據包類型,每幀對應一個數據包,封裝的主要目的就是增加視頻流的時間戳,丟包時不影響后續時間戳的正確封裝,因此不會出現音畫不同的問題。
步驟103,根據數據包發送隊列的數量判定網絡狀態,
原數據持續地進行編碼成IPBBBPBBBP數據格式,然后被打包成RTMP數據包,網絡抖動時發送數據包的隊列會因為發送的數據包的速度小于實時編碼封裝數據包的速度,出現隊列的逐漸增大的情況,根據實際測驗當發送隊列內的元素數目大于第一閾值,如64時判斷為網絡出現抖動,大于第二閾值,如128判斷為較嚴重,大于第三閾值,如256時判斷為很嚴重,
步驟104,當網絡出現抖動時主動丟棄部分數據包直至數據包發送隊列正常。丟包的邏輯處理在數據包生成和數據包進入隊列線程之間,也就是不讓封裝好的rtmp數據包繼續進入發送的隊列,造成發送隊列堵塞越來越嚴重的情況。即每當有新的rtmp數據包進入發送隊列時會進行對發送隊列已有數據包元個數的判斷,并根據隊列中數據包個數進行具體區別對待,
具體地,當所述的數據包發送隊列的數量大于第一閾值且不大于第二閾值,視為網絡出現抖動,主動丟棄新傳送來的全部B幀數據包,此時陸續產生的P幀和I幀依然會進入到發送隊列中;
當所述的數據包發送隊列的數量大于第二閾值且不大于第三閾值,視為網絡抖動較嚴重,主動丟棄新傳送來的全部B幀數據包,丟棄部分或全部P幀數據包,當出現較嚴重的網絡抖動,為保證傳輸的實時性,根據情況進行P幀的選擇性或者全部丟棄,如隔一丟一,隔二丟一等,在網絡許可情況下盡可能保證在兩個I幀之間有一個P幀存在;當部分丟棄模式不足以遏制隊列增長時,可選擇全部丟棄P幀;
當所述的數據包發送隊列的數量大于第三閾值,視為網絡抖動嚴重,主動丟棄新傳送來的全部B幀數據包,丟棄全部P幀數據包,丟棄部分或全部I幀數據包。通過主動丟棄數據包,犧牲一定畫面質量甚至一段視頻信息,保證網絡抖動時的小時延,提升網絡主播的溝通實時性。
當客戶端收到不完整的有缺失的數據包流時減少觀眾端畫面卡頓的方法,包括,
當有缺幀時,根據上一幀和下一幀的時間戳及數據包序號計得時間戳,且,
當缺幀為缺B幀或P幀,則根據前后幀進行補齊,如果缺幀為I幀,則復制上一組的正常畫面進行播放。
首選,每個數據包都有時間戳,在客戶端即播放端,播放丟棄了部分數據包的視頻視頻時會出現時間戳的斷檔,則首先根據上一幀和下一幀的時間戳及數據包序號計得時間戳,其中,所述的上一幀和下一幀是指實際接收到的數據幀,然后根據上一個和下一個視頻幀的時間戳和相應的數據包序號來重新計算丟棄了視頻幀的時間戳,計算方法為時間戳的差值除以包序號的差值得到時間戳間隔,根據間隔,進行正確播放。數據包分為音頻數據包和視頻數據包,音頻數據量很小微乎其微,所以在主播端丟包時不做處理,視頻的數據量很大,是網絡抖動時主要是視頻數據發送不出去,所以要選在發送隊列選擇性丟棄,音頻視頻同步主要是通過數據包頭的時間戳信息來同步的,丟棄一部分視頻包,并不會影響其他視頻包的時間戳,所以不會影響同步的問題,第一步時間戳的補齊計算,則是同時時間戳分辨出缺少幀的類型和數量,以便后續進行補齊處理。
如果丟棄的是B幀畫面播放的畫面會根據相鄰的P幀進行補齊恢復,如果相鄰的P幀也有缺失,則根據相鄰的I幀和P幀的圖像做差值進行圖像恢復播放;如果丟棄的P幀會根據相鄰I幀進行恢復。如果丟棄的是I幀,就復制上一組的已有畫面進行播放,視頻數據每秒鐘25幀圖像畫面,在缺少B幀數據恢復時,人眼不會有任何不連貫的感覺,在恢復連續丟失I幀數據時,也就是網絡很差的時候,人眼才會有比較明顯的卡頓的感覺,因為圖像基本都一樣。但是聲音一直都是連貫的。
本發明針對網絡抖動時現有rtmp直播協議會引入延時,增加了主播端丟幀機制,將打包的數據在不影響觀眾端播放的情況下,將圖像數據合理的丟棄一部分,這樣就不會觸發tcp的重傳機制,其可以有效的降低這種延時,增加主播和觀眾實時互動性。同時在客戶端針對丟棄幀進行了差值補齊,保證圖像播放的流暢性和畫面的順暢度,提高客戶使用感受。
同時,本發明還公開了減少直播時延和卡頓的裝置,主播端包括,
編碼模塊,用以將原數據進行編碼成預定數據格式,如H.264編解碼格式;
傳輸模塊,用以將編碼后的數據打包成數據包并發送至發送隊列,所述的傳輸模塊的傳輸協議為Rtmp協議。
發送狀態監控模塊,用以根據數據包發送隊列的數量判定網絡狀態,
丟包模塊,用以當網絡出現抖動時主動丟棄部分數據包直至數據包發送隊列正常,所述的丟包模塊的控制方法為,
當所述的數據包發送隊列的數量不大于第一閾值,視為網絡正常,不主動丟棄數據包,
當所述的數據包發送隊列的數量大于第一閾值且不大于第二閾值,視為網絡出現抖動,主動丟棄隊列中全部B幀數據包,
當所述的數據包發送隊列的數量大于第二閾值且不大于第三閾值,視為網絡抖動較嚴重,主動丟棄隊列中全部B幀數據包,丟棄部分或全部P幀數據包,
當所述的數據包發送隊列的數量大于第二閾值且不大于第三閾值,視為網絡抖動嚴重,主動丟棄隊列中全部B幀數據包,丟棄全部P幀數據包,丟棄部分或全部I幀數據包;
客戶端包括,
時間戳計算模塊,當有缺幀時,其根據上一幀和下一幀的時間戳及數據包序號計得時間戳,所述的時間戳的計算方法為上一幀和下一幀的時間戳的差值除以對應數據包的包序號的差值得到時間戳間隔,根據時間戳間隔得出缺幀的時間戳。
缺幀處理模塊,當缺幀為缺B幀或P幀,則根據前后幀進行補齊,如果缺幀為I幀,則復制上一組的正常畫面進行播放。
具體地,若缺少B幀時,則根據播放的畫面根據相鄰的P幀的圖像做差值進行圖像補齊,如相鄰的P幀也缺,則根據相鄰的P幀和I幀進行B幀補齊;
如果缺幀為P幀則根據相鄰I幀的畫面做差值進行圖像補齊。
缺失了B幀、P幀或者I幀,通常播放器的方案是會直接跳過缺失了的數據,播放存在的B幀、P幀或者I幀,會出現明顯的卡頓的現象。本發明的播放器對于丟幀方案是進行補齊,補齊的方案就是相鄰圖像的公差計算。如果只是B幀缺,P幀不缺,則利用相鄰的P幀,如果此段P幀也缺,就利用相鄰的I幀和P幀。補齊的B幀也進行了差值運算,差值為相鄰的(P-I或P)/(B幀數量+1),這樣圖像的流暢效果更好。視頻數據每秒鐘25幀圖像畫面,在缺少B幀數據恢復時,人眼不會有任何不連貫的感覺,在恢復連續丟失I幀數據時,也就是網絡很差的時候,人眼才會有比較明顯的卡頓的感覺,因為圖像基本都一樣。但是聲音一直都是連貫的。
同時,本發明還公開了具有所述的直播中減少觀眾端畫面卡頓的裝置的直播系統,采用該直播端優化了發送端數據包發送機制,提高了其對網絡抖動的適應性,有效提高了直播的實時性,同時在客戶端針對丟棄幀進行了差值補齊,保證圖像播放的流暢性和畫面的順暢度,提高客戶使用感受。
根據隊列中現存的數據包數量對新來的數據包進行丟棄處理,不影響正常的發送隊列,而且根據隊列變化適時調整丟包策略,能有效均衡實時性和畫面,提升整體觀看感受。
本發明還公開了一種具有所述的減少直播時延和卡頓的裝置的直播系統,采用該直播系統,主播端的數據得以及時發出,減少時延,提高觀眾與主播間的互動。同時在客戶端針對丟棄幀進行了差值補齊,保證圖像播放的流暢性和畫面的順暢度,提高客戶使用感受。
以上所述僅是本發明的優選實施方式,應當指出的是,對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。