編碼設置很大程度上影響像素化和工件。您應該嘗試儘可能使用最低編碼設置,然後在確認播放質量後再從那裏上傳。例如,首先測試一個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]替換爲實時應用程序的名稱),然後將這些屬性添加到RTP/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>
您可以在訪問日誌中看到額外的調試行。
到目前爲止,您的答案是我所讀過的有關此問題的最全面的答案。花時間徹底解釋這一點,我無法感謝你。今晚我會得到一個實施和測試的機會,如果其他人有這個問題,我一定會更新狀態。再次,非常感謝。 –
您是否有過丟包和不完整視頻幀日誌消息的例子? – Boushley
在您的日誌/ wowzastreamingengine_access.log中,查找類似於以下內容的消息:RTPDePacketizerMPEGTS.flushVideoBuffer:視頻幀不完整,正在丟棄[33048:0:false] –