0

Axis から多数のカメラでビデオを録画するための単純な RTSP/RTP クライアントである C 言語アプリケーションに取り組んでいます。RTP セッションを確立するカメラごとに pthread を起動し、recvfrom() 呼び出しを使用してキャプチャされたパケットの記録を開始します。単一のカメラの単一の pthread は、問題なく 1 日以上問題なく記録します。

しかし、約 25 (つまり 25 pthreads) のより多くのカメラを使用してテストすると、ファイルへの記録は 15 ~ 20 分間正常に行われ、その後記録が停止します。アプリケーションは引き続き実行されます。さまざまな実装を試してから 1 か月半以上が経過しましたが、何も役に立たないようです。提案を提供してください。

CentOS 5 プラットフォームを使用しています

4

2 に答える 2

0

「レコード」とは、ファイルにデータを書き込むということですか?ファイルへのアクセスをどのように制御しますか?

複数のスレッドがまったく同時に書き込みを試みることはできません。したがって、アロンのコメントは適切であるように思われます。書き込みアクセス制御メカニズムに問題があります。

于 2010-06-14T19:46:00.220 に答える
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 に答える