编码设置很大程度上影响像素化和工件。您应该尝试尽可能使用最低编码设置,然后在确认播放质量后再从那里上传。例如,首先测试一个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] –