2016-02-29 201 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] –