0

我们正在开发一个 C 语言应用程序,它是简单的 RTSP/RTP 客户端,用于记录来自 Axis 多个摄像机的视频。我们为每个建立 RTP 会话的相机启动一个 pthread,并开始记录使用 recvfrom() 调用捕获的数据包。单个摄像头单个 pthread 可以很好地记录一天以上而没有问题。

但是使用更多可用的摄像机进行测试,大约 25 个(所以 25 个 pthreads),录制到文件可以正常进行 15 到 20 分钟,然后录制就停止了。该应用程序仍在继续运行。一个半月以来,我们一直在尝试各种实现,但似乎没有任何帮助。请提供建议。

我们使用的是 CentOS 5 平台

4

2 回答 2

0
void *IPThread(void *ptr)
{
//Establish RTSP session
//Bind to RTP ports(video)
//Increase Socket buffer size to 625KB

record_fd=open(record_name, O_CREAT|O_RDWR|O_TRUNC, 0777);
while(1)
{
    if(poll(RTP/RTCP ports)) //a timeout value of 1
    {
        if(RTCP event)
        RTCPhandler();
        if(RTP event)
        {
            recvfrom(); //the normal socket api recvfrom
            WritePacketToFile(record_fd)
            {
            //Create new record_fd after 100MB
            }
        }
    }
}
}

即使坚持单线程实现也可以,为什么多线程方法会以这种方式表现(约 15 分钟后不记录)..?

于 2010-06-15T05:43:40.067 回答
0

定义“记录”这是否意味着将数据写入文件?你如何控制对文件的访问?

您不能让多个线程同时尝试写入。所以阿隆的评论似乎是中肯的。您的写访问控制机制有问题。

于 2010-06-14T19:46:00.220 回答