通过多个IP摄像头捕获视频数据包

时间:2010-06-14 17:06:36

标签: c pthreads rtsp ip-camera

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

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

我们正在使用CentOS 5平台

2 个答案:

答案 0 :(得分:0)

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

你不能让几个线程都试图在同一时间写入。所以Alon的评论似乎是恰当的。您的写访问控制机制存在问题。

答案 1 :(得分: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分钟后不记录)..?

相关问题