如何在NetStream帧到达时立即播放,而不需要任何附加的框架逻辑?
我从RTMP协议中录制了一些由Red5接收的音频和视频数据包,现在我试图通过递增时间戳将数据包推到NetStream,从而将其在循环中发送回闪存客户端。环形序列的长度约为20秒,nad由大约200个RTMP数据包(VideoData/AudioData)构成。
环境: Flash客户端和服务器都在本地主机上,没有网络瓶颈,视频是H.264之前由同一个Flash客户端编码的。
它一般的工作,但视频不是很流利-有大量的冻结,减速和长期停顿。传输速度较慢的数据包会导致更多的停顿和冻结。,甚至非常长的停顿,如传输整个序列2x-3x次(~60秒)而没有效果--当转发速度低于每秒2个RTPM数据包时,就会出现这种情况。
这个问题看起来就像一些逻辑一样,试图强迫视频的帧化,而不仅仅是输出接收到的帧,所以我的问题之一是在实时流媒体中查找视频帧fps信息?为什么可以播放得更快,但不能播放得更慢?我如何播放视频“按帧”不同步视频fp与RTPM数据包时间戳?
另一方面,如果我推包比录音机快,视频只是更快,但几乎流畅-我只是不能得到更慢或稳定的流(仍然非常不规则的速度)。
我分析了一些NetStream值:
.bufferLength = ~0或0.001,当我以极快的速度转发数据包时(比如目标为~90 fast ).currentFPS =显示在Video对象中看到的实际FPS计数,而不是传入帧/s。.info.currentBytesPerSecond =~8kB/s至~50 kB/s取决于转发速度.info.droppedFrames =经常增加,即使我像2/秒那样传输数据包!在长时间自启动暂停之后也会跳转(但是缓冲区始终是0!).info.isLive =真.info.dataBufferLength =与.bufferLength相同看起来就像丢弃帧一样,因为太罕见的RTMP数据包接收--就像期望它们会以帧编码的fps速度到达。
我目前最好的NetStream配置:
chatStream.videoReliable = false;
chatStream.audioReliable = false;
chatStream.backBufferTime = 0;
chatStream.bufferTime =0;请注意,如果我将bufferTime设置为1,视频会暂停,直到收集“1秒的视频”,但是--这不是真正的--缓冲非常慢,就像假设视频的FPS为100或200 --即使我正在快速转发数据包(比如在没有缓冲区的情况下以15 FPS为目标),缓冲区正在归档大约10-20秒。
循环,当然,从关键帧视频数据开始,序列的关键帧间隔约为15帧。
发布于 2013-11-20 07:48:21
你试过netStream.step(1)吗?
US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#step()
另外,我也会把“live”从剧本()电话中删除。
最后,也许flash试图与音频同步,就像它在常规时间线中所做的那样。你试过没有音频频道的视频吗?
https://stackoverflow.com/questions/19812309
复制相似问题