gpt4 book ai didi

actionscript-3 - 如何在 ActionScript 中播放来自 NetStream 的 "incoming frames speed"(非视频内部)的 FLV 视频

转载 作者:行者123 更新时间:2023-11-28 21:43:09 29 4
gpt4 key购买 nike

如何在没有任何额外的 AS 帧率逻辑的情况下立即播放 NetStream 帧?

我已经记录了Red5接收到的一些来自RTMP协议(protocol)的音频和视频数据包,现在我试图通过将数据包推送到来循环发送回flash客户端带有递增时间戳的 NetStream。循环序列的长度约为 20 秒,由大约 200 个 RTMP 数据包(视频数据/音频数据)构建

环境:本地主机上的 Flash 客户端和服务器,没有网络瓶颈,视频由同一 Flash 客户端更早地编码为 H.264。

它通常有效,但视频不是很流畅 - 有很多卡住、减速和长时间停顿。 较慢的数据包传输导致更多的暂停和卡住。,即使是极长的暂停,如传输整个序列 2x-3x 次(~60 秒)也没有效果 - 当转发速度低于 ~2 RTPM 数据包时会出现这种情况每秒。

这个问题看起来像是一些 AS 逻辑试图强制视频的帧速率,而不仅仅是输出接收到的帧,所以我的问题之一是AS 是否会寻找视频内-直播中的frame fps info?为什么可以播放的更快,但不能播放的更慢?如何“按帧”播放视频而不将视频 fps 与 RTPM 数据包时间戳同步?

另一方面,如果我推送数据包的速度比录像机快,视频只是更快但几乎流畅 - 我只是无法获得更慢或稳定的流(速度仍然非常不规则)。

我已经分析了一些 NetStream 值:

  • .bufferLength = ~0 or 0.001, incrasing 当我转发数据包速度极快(比如以​​ ~90fps 为目标)
  • .currentFPS = 显示真实的 FPS在 Video 对象中看到的计数,而不是传入的帧/秒
  • .info.currentBytesPerSecond = ~8 kB/s 到 ~50kB/s 取决于转发速度
  • .info.droppedFrames = 经常增加,即使我像 2/sec 这样的流数据包! 在长时间的自启动暂停后也会跳转(但缓冲整个时间为 0!)
  • .info.isLive = true
  • .info.dataBufferLength = 与 .bufferLength 相同

看起来 AS 正在丢帧,因为收到的 RTMP 数据包太少了——就像期望它们将以内部帧编码的 fps 速度到达。

我目前最好的NetStream配置:

chatStream.videoReliable = false;
chatStream.audioReliable = false;
chatStream.backBufferTime = 0;
chatStream.bufferTime =0;

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

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

最佳答案

你试过netStream.step(1)吗

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/NetStream.html#step()

另外,我会从 play() 调用中删除“live”。

最后,也许 flash 会像在常规时间轴中那样尝试与音频同步。你试过没有音频 channel 的视频吗?

关于actionscript-3 - 如何在 ActionScript 中播放来自 NetStream 的 "incoming frames speed"(非视频内部)的 FLV 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19812309/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com