直播质量与帧丢弃?

时间:2011-10-20 00:09:24

标签: flash live flash-media-server

我有一个自定义FMS应用和Flash Player播放器,它使用带宽检测来设置质量,例如:

camera.setQuality( detected_bandwidth, 0 );

这可以很好地避免帧速度下降与广播机构的上传速度较慢,但​​现在我想支持丢帧而不是视频质量。问题是无论其他任何setQuality命令如何:

camera.setQuality( detected_bandwidth, 90 );

camera.setQuality( 0, 90 );

我可以根据需要使用丢帧来获得更好的图像质量,但帧的丢弃方式非常不一致,并且会产生非常不稳定的视频。例如,似乎大约有3或4帧播放,然后是暂停,然后是3或4,然后是另一个暂停,依此类推。

我也尝试过很多缓冲设置而没有运气。有没有办法平滑掉帧,所以更像是1帧,暂停,1帧,暂停等?

2 个答案:

答案 0 :(得分:1)

没有银弹,但我有一些你可以尝试的黑客。

您可以考虑根据带宽检测结果修改摄像头捕获帧速率。 (我假设您允许发送任何音频的空间?)。

我从来没有试过这个,但是如果摄像机还需要在全FPS本地显示,你可以尝试动态地将摄像机连接到网络上或从网络上拆下以模拟你选择的低帧率 - 尽管这可能结果是每个帧都是一个关键帧,这是浪费带宽。

如果您还没有将相机关键帧间隔提高到最大值48 - 每个关键帧肯定会在低带宽情况下导致暂停。或者 - 您可以使用1的关键帧间隔,这意味着每个帧都是一个关键帧。你会浪费带宽,但因为每个帧都需要一段时间来发送运行时不应该在出站缓冲区中将它们排成一堆,并且最终可能会得到一个更稳定的流。

答案 1 :(得分:1)

尝试修改cam.setMode()以获得较小的分辨率。 setQuality会修改质量并减少带宽,但如果您的相机模式具有高分辨率,则每帧都会发送大量像素数据。

另外,尝试不同的网络摄像头,因为不同的网络摄像头有时会产生不同的结果。