gpt4 book ai didi

我们可以在同一个进程中托管多个 vnc 服务器(使用 LibVNCServer 库)吗?

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

LibVNCServer 库中有一个名为 camera.c 的示例,它捕获相机快照并每隔一段时间填充 vnc 服务器使用的帧缓冲区。我的要求是对 mpeg 传输流(许多来源而不是像相机这样的单一来源)做同样的事情。因此,每个传输流需要一个 vnc 服务器。

我在 RFB 协议(protocol)中读到我们可以在同一主机上从 5900 (5900+x) 开始的端口上托管多个 vnc 服务器。但是,最好在同一个进程中托管多个 vnc 服务器,这样可以避免 vnc 服务器和生成数据的进程之间不需要的 I/O。

LibVNCServer 是否支持该用例,或者我是否必须为每个视频流启动一个 vnc 服务器进程?

注意:我翻遍了图书馆,看到rfbScreenInfoPtr到处都在流传,不是静态的。但由于我对 C 不熟悉,无法断定 LibVNCServer 是否线程安全。

最佳答案

我尝试写了一个具有服务器端缩小能力的vnc服务器,这是一个源多流。

int main(int argc, char** argv)
{
...

rfbScreenInfoPtr rfbScreen_1080 = rfbGetScreen(&argc,argv,1920,1080,8,3,bpp);
rfbScreenInfoPtr rfbScreen_720 = rfbGetScreen(&argc,argv,1280,720,8,3,bpp);
rfbScreen_1080->frameBuffer = (char*)_aligned_malloc(1920*1080*bpp,256);
rfbScreen_720->frameBuffer = (char*)_aligned_malloc(1280*720*bpp,256);

rfbScreen_1080->progressiveSliceHeight = 1080/2;
rfbScreen_720->progressiveSliceHeight = 720/2;
rfbScreen_1080->cursor = rfbMakeXCursor(0,0,NULL,NULL);
rfbScreen_720->cursor = rfbMakeXCursor(0,0,NULL,NULL);


rfbScreen_1080->port = 5900;
rfbScreen_720->port = 5901;

rfbScreen_1080->alwaysShared = 1;
rfbScreen_720->alwaysShared = 1;
rfbInitServer(rfbScreen_1080);
rfbInitServer(rfbScreen_720);

int begin = clock();
while(rfbIsActive(rfbScreen_1080) || rfbIsActive(rfbScreen_720))
{
int end = clock();
if(end - begin >= UPDATE_INTERVAL)
{
//printf("%d\n",end-begin);
begin = clock()-(end - begin - UPDATE_INTERVAL);
CaptureScreen(rfbScreen_1080, rfbScreen_720);

rfbMarkRectAsModified(rfbScreen_1080,0,0,1920,1080);
rfbMarkRectAsModified(rfbScreen_720,0,0,1280,720);

}
rfbProcessEvents(rfbScreen_1080,40);
rfbProcessEvents(rfbScreen_720,40);
//Sleep(1);
}
...
}
void CaptureScreen(rfbScreenInfoPtr rfbScreen1, rfbScreenInfoPtr rfbScreen2)
{
//capture screen to bmp, resize and copy data to rfbScreen->frameBuffer;
}

关于我们可以在同一个进程中托管多个 vnc 服务器(使用 LibVNCServer 库)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50940621/

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