我正在编码H264,并使用RTP从我的Android设备发送到Wowza服务器作为实时流。编码器的输出在设备上看起来很好。但是,在流到Wowza服务器并将输出视频看作RTMP上的实时流之后,我在帧中有重大移动/更改的部分获得了相当数量的工件/像素。我只能猜测这与视频帧的时间有关,但我没有一个很好的方法来确定这是在我的应用程序发送端还是在Wowza方面。
哇,如果你曾经试图得到他们的支持,那是完全没用的。
我也有一个问题,RTMP/闪存播放器冻结时,发挥从沃扎。我很确定这不是带宽问题,因为这发生在亚马逊的EC2服务器以及我的本地PC实例(也就是相同的网络)上。我尝试了多个球员,他们都展示了相同的问题(VLC,JWPlayer,MX播放器等)。我必须假设问题是Wowza服务器或我的编码。但是,由于一些框架存在像素化问题,我开始怀疑这两者是否相关。
我很好奇是否有人使用Wowza或任何其他流服务器出现过像这样的像素化问题。我试着使用RTMPDump,但这不起作用,它永远不会从Wowza提取完整的数据包。
发布于 2016-03-01 22:10:39
编码设置在很大程度上影响像素化和工件。您应该尝试最低的编码设置可能,然后从那里上升,一旦你已经确认了回放质量。例如,先测试一个188 p流(512x188,基线,256 key比特率),然后上升到288 key,等等。对活动流使用2秒的关键帧间隔也是最好的做法;如果您的帧速率为30 For,那么您的关键帧频率应该是每60帧。
用于检查关键帧间隔的一个很好的工具是ff探针:
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访问日志(log/wowzastreamingEngineAccess.log),查看任何超时或重置消息,因为这些消息会告诉您软件是否检测到传入流中的任何问题。一个很好的做法是跟踪这个日志文件(在Windows上,baretail是一个很好的工具),发送您的流,并监视消息。
还可以为传入的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>
您可以在访问日志中看到其他调试行。
https://stackoverflow.com/questions/35703256
复制相似问题