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