2010-06-14 78 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

相關問題