C++ 如何确定何时增加比特率?(TCP流媒体解决方案)

C++ 如何确定何时增加比特率?(TCP流媒体解决方案),c++,tcp,real-time,delay,C++,Tcp,Real Time,Delay,我们有一个正在生成数据的应用程序。例如,从摄像机捕获实时视频并对其进行编码。我们需要知道一个编码帧的大小,以便在网络上发送并毫不延迟地接收。也就是说,TCP上的实时视频流。它的主要问题是什么?用户个人流量负载和服务器总体负载。我们的帧在这里必须具有这样的大小==服务器以最小延迟接收的比特率。在我的例子中必须使用TCP,我们必须发送所有捕获的帧,即使它们的质量会下降 我们有一个带框架的流。每个帧都有一个时间戳。帧具有比特率属性,这实际上是它们的大小。我们使用我们的应用程序生成帧,并将它们逐个流式传

我们有一个正在生成数据的应用程序。例如,从摄像机捕获实时视频并对其进行编码。我们需要知道一个编码帧的大小,以便在网络上发送并毫不延迟地接收。也就是说,TCP上的实时视频流。它的主要问题是什么?用户个人流量负载和服务器总体负载。我们的帧在这里必须具有这样的大小==服务器以最小延迟接收的比特率。在我的例子中必须使用TCP,我们必须发送所有捕获的帧,即使它们的质量会下降


我们有一个带框架的流。每个帧都有一个时间戳。帧具有比特率属性,这实际上是它们的大小。我们使用我们的应用程序生成帧,并将它们逐个流式传输到我们的TCP服务器套接字。同时,服务器会发布回复,所以当我们尝试从套接字读取每个发送的帧后,我们会收到服务器上当前的时间戳。如果时间戳低于前一帧,我们将比特率降低20%。这项计划似乎为我提供了一种降低vbr的方法,但我想知道如何实施增加vbr?我的意思是,我们总是可以尝试每帧增加5%,直到某个有限的期望值,但每次我们有延迟,就会失去我们流的实时特性。。。一般来说,这种方案是为了找出目前有多少网络流被其他用户应用程序使用,并给出同时加载了多少服务器的图片,这样我们就可以为所有用户实时传输恰到好处的数据量。那么,我该怎么做才能增加我的计划呢?因此,当前比特率为,我认为我们可以为3帧加上+7%,然后加上一到20%,然后如果所有++7%的3帧出现在时间上,我们可以把14%加到一个重复的圆上,如果第二帧会以延迟的方式出现,它就不会真正值得注意。

< P>如果你可以接受你想用UDP来考虑的视频掉帧。TCP保证了数据包的传输,但您需要为此支付一些开销 网络条件太不稳定,因此您需要不断适应它们。测量往返延迟:让服务器用数据包id而不是时间戳发回确认。因此,您可以避免任何时间与服务器同步的复杂任务。比较数据包接收时间和数据包发送时间,以接收往返延迟值。分析往返延迟:如果它低于某个阈值,例如500毫秒-您可以稍微提高比特率,如果往返延迟大于另一个阈值,例如1秒-降低比特率。这样的阈值范围用于避免无休止的比特率修改

网络条件太不稳定,因此您需要不断地适应它们。测量往返延迟:让服务器用数据包id而不是时间戳发回确认。因此,您可以避免任何时间与服务器同步的复杂任务。比较数据包接收时间和数据包发送时间,以接收往返延迟值。分析往返延迟:如果它低于某个阈值,例如500毫秒-您可以稍微提高比特率,如果往返延迟大于另一个阈值,例如1秒-降低比特率。这样的阈值范围用于避免无休止的比特率修改

您的第一直觉是正确的-正如您在延迟上升得太高时降低比特率一样,您也可以在延迟下降得很低时提高比特率


这意味着您必须确定所需的最大延迟-您正在权衡图像质量和延迟。如果您想要网络能够提供的最佳延迟,请将所需的最大延迟设置为网络往返时间。

您的第一反应是正确的-正如您在延迟上升过高时降低比特率一样,您也可以在延迟下降非常低时提高比特率

这意味着您必须确定所需的最大延迟-您正在权衡图像质量和延迟。如果希望网络能够提供最佳延迟,请将最大期望延迟设置为网络往返时间