首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以来自NetStream in ActionScript的“传入帧速度”(非视频内部)播放FLV视频

如何以来自NetStream in ActionScript的“传入帧速度”(非视频内部)播放FLV视频
EN

Stack Overflow用户
提问于 2013-11-06 12:35:59
回答 1查看 1.1K关注 0票数 3

如何在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配置:

代码语言:javascript
复制
chatStream.videoReliable = false;
chatStream.audioReliable = false;
chatStream.backBufferTime = 0;
chatStream.bufferTime =0;

请注意,如果我将bufferTime设置为1,视频会暂停,直到收集“1秒的视频”,但是--这不是真正的--缓冲非常慢,就像假设视频的FPS为100或200 --即使我正在快速转发数据包(比如在没有缓冲区的情况下以15 FPS为目标),缓冲区正在归档大约10-20秒。

循环,当然,从关键帧视频数据开始,序列的关键帧间隔约为15帧。

EN

回答 1

Stack Overflow用户

发布于 2013-11-20 07:48:21

你试过netStream.step(1)吗?

US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#step()

另外,我也会把“live”从剧本()电话中删除。

最后,也许flash试图与音频同步,就像它在常规时间线中所做的那样。你试过没有音频频道的视频吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19812309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档