gpt4 book ai didi

c - MJPEG 互联网流媒体 - 准确的 fps

转载 作者:太空宇宙 更新时间:2023-11-04 03:07:19 26 4
gpt4 key购买 nike

我想编写 MJPEG 图片互联网流查看器。我认为使用套接字获取 jpeg 图像不是很难的问题。但我想知道如何进行准确的流式传输。

while (1)
{
get_image()
show_image()
sleep (SOME_TIME) // how to make it accurate?
}

任何建议都会很棒。

最佳答案

为了准确,有两种可能:

使用流媒体服务器的帧率。在这种情况下,客户端需要保持相同的帧率(每次获取帧时计算,然后使用反馈显示和休眠一段可变的时间:如果计算出的帧率高于服务器上的 -> 休眠更多;如果较低-> 少睡;然后,客户端的帧率将围绕服务器的原始值漂移)。可以在流连接初始化时从服务器接收(当你得到图片大小和其他参数时),也可以配置。

实际上,最准确的方法是对每一帧使用来自服务器的时间戳(它要么由多路分解器从文件中获取,要么在相机设备的情况下在图像传感器驱动程序中生成)。如果 MJPEG 被打包到 RTP 流中,这些时间戳已经在 RTP 头中。因此,客户端的任务很简单:使用根据时间偏移、当前时间戳和时基计算的时间来显示图片。

更新对于第一个解决方案:

time_to_sleep = time_to_sleep_base = 1/framerate;
number_of_frames = 0;
time = current_time();
while (1)
{
get_image();
show_image();
sleep (time_to_sleep);

/* update time to sleep */
number_of_frames++;
cur_time = current_time();
cur_framerate = number_of_frames/(cur_time - time);
if (cur_framerate > framerate)
time_to_sleep += alpha*time_to_sleep;
else
time_to_sleep -= alpha*time_to_sleep;
time = cur_time;
}

,其中 alpha 是要使用的反馈 (0.1..0.5) react 性的常数参数。

但是,最好为输入图像组织队列,使显示过程更流畅。队列的大小可以参数化,可以是大约 1 秒的显示时间,即在数值上等于帧率。

关于c - MJPEG 互联网流媒体 - 准确的 fps,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3425659/

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