2016-02-29 212 views
0

我編碼H264,並使用RTP從我的Android設備作爲實時流發送到Wowza服務器。編碼器的輸出在設備上看起來很好。但是,在流式傳輸到Wowza服務器並通過RTMP將輸出視頻視爲直播視頻流後,我會在幀中出現明顯移動/變化的部分視頻中獲得相當數量的人工產物/像素。我只能猜測這與視頻幀的時間有關,但我沒有一個好方法來確定這是在我的應用的發送端還是在Wowza端。 Wowza,如果你曾經試圖從他們那裏得到支持,是完全沒用的。通過RTP,RTMP播放質量問題進行流式傳輸

我也有一個RTMP/Flash播放器在玩Wowza時出現問題。我很確定這不是帶寬問題,因爲這發生在Amazon EC2服務器以及我的本地PC實例(即相同的網絡)上。我嘗試了多個玩家,他們都展示了相同的問題(VLC,JWPlayer,MX Player等)。我必須假設問題是Wowza服務器或我的編碼。然而,由於一些幀的像素化問題,我開始懷疑這兩者是否相關。

我很好奇,如果任何人有使用Wowza或任何其他流服務器像這樣的像素化問題。我試圖使用RTMPDump,但沒有奏效,它永遠不會從Wowza中提取完整的數據包。

回答

4

編碼設置很大程度上影響像素化和工件。您應該嘗試儘可能使用最低編碼設置,然後在確認播放質量後再從那裏上傳。例如,首先測試一個188p數據流(512x188,基準,256Kbps比特率),然後上升到288p等等。對於直播數據流,最好使用2秒的關鍵幀間隔;如果你的幀速率是30fps,那麼你的關鍵幀頻率應該是每60幀。

一個很好的工具,用來檢查你的關鍵幀間隔是ffprobe:

ffprobe -select_streams v:0 -show_frames -pretty rtmp://yourserver/app/name | grep 'key_frame\|coded_picture_number' 

有時流的數據包來隔三差五給Wowza服務器,流媒體數據包流的並不順利。啓用RTP抖動緩衝器(在收到並存儲數據包之前,以規律的間隔將數據包發送到拆包器)可能有助於實現更均勻的播放。

爲此,請編輯Wowza服務器中的conf/[appName] /Application.xml文件(將[appName]替換爲實時應用程序的名稱),然後將這些屬性添加到R​​TP/Properties容器中有幾個,你需要確保將這些添加到正確的容器中)。

<Property> 
    <Name>rtpDePacketizerWrapper</Name> 
    <Value>com.wowza.wms.rtp.depacketizer.RTPDePacketizerWrapperPacketSorter</Value> 
</Property> 
<Property> 
    <Name>rtpDePacketizerPacketSorterBufferTime</Name> 
    <Value>500</Value> 
    <Type>Integer</Type> 
</Property> 
<Property> 
    <Name>rtpDePacketizerPacketSorterFlushTime</Name> 
    <Value>10</Value> 
    <Type>Integer</Type> 
</Property> 

做出更改後,請務必重新啓動您的Wowza服務。

檢查您的Wowza訪問日誌(logs/wowzastreamingengine_access.log)是否有任何超時或重置消息,因爲它們會告訴您軟件是否檢測到傳入流中存在任何問題。一個好的做法是尾巴這個日誌文件(baretail是Windows上的一個很棒的工具),發送你的流,並監視消息。

您還可以爲傳入的RTP流啓用其他調試日誌記錄以檢查數據包丟失。按照與RTP抖動緩衝區相同的步驟,將這些屬性添加到應用程序配置文件的RTP/Properties容器中。

<Property> 
    <Name>rtpDePacketizerPacketSorterLogPacketLoss</Name> 
    <Value>true</Value> 
    <Type>Boolean</Type> 
</Property> 
<Property> 
    <Name>logIncompleteMPEGTSVideoFrames</Name> 
    <Value>true</Value> 
    <Type>Boolean</Type> 
</Property> 

您可以在訪問日誌中看到額外的調試行。

+0

到目前爲止,您的答案是我所讀過的有關此問題的最全面的答案。花時間徹底解釋這一點,我無法感謝你。今晚我會得到一個實施和測試的機會,如果其他人有這個問題,我一定會更新狀態。再次,非常感謝。 –

+0

您是否有過丟包和不完整視頻幀日誌消息的例子? – Boushley

+0

在您的日誌/ wowzastreamingengine_access.log中,查找類似於以下內容的消息:RTPDePacketizerMPEGTS.flushVideoBuffer:視頻幀不完整,正在丟棄[33048:0:false] –