2010-06-14 76 views
0

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

但是用更多的相机进行测试,大约25(25 pthreads),记录到文件很好,像15至20分钟,然后录制就停止。应用程序仍然继续运行。它已经过了一个半月,我们一直在尝试各种实现,但似乎没有任何帮助。请提供建议。

我们正在使用的CentOS 5平台

+0

这听起来像是一个死锁问题: 1)剂量它与少25线程发生? 2)什么时候发生? – Alon 2010-06-14 17:14:21

+0

你在做什么平台? 你使用哪个数据包捕获库? – pcent 2010-06-14 17:17:23

+0

这并不是很多信息。我会建议一个替代实现,其中有一个线程使用select()或poll()来处理所有摄像机来控制流。 – atlpeg 2010-06-14 18:06:26

回答

0

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

你不能有几个线程都试图在同一时间写入。所以阿隆的评论似乎是中肯的。您的写访问控制机制存在问题。

+0

yes Jim记录 - >将数据写入HardDisk中的文件 每台摄像机写入一个单独的文件 – user366520 2010-06-15 05:42:22

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分钟)..?

+0

并且我们尝试了openRTSP转储功能,启动了大约20个openRTSP实例,即20个摄像机..openRTSP也停止了记录只有当我们开始使用6个openRTSP实例时,它才会记录下来.. .. – user366520 2010-06-15 05:55:36

相关问题