Захват видео пакетов через несколько IP-камер - PullRequest
0 голосов
/ 14 июня 2010

Мы работаем над приложением на языке C, которое является простым клиентом RTSP / RTP для записи видео с нескольких камер Axis.Мы запускаем pthread для каждой камеры, которая устанавливает сеанс RTP, и начинаем записывать пакеты, захваченные с помощью вызова recvfrom ().Одна-единственная камера хорошо записывает в течение дня без проблем.

Но при тестировании с большим количеством доступных камер, около 25 (так что 25 потоков), запись в файл идет нормально в течение 15-20 минут, а затемзапись просто останавливается.Приложение продолжает работать.Прошло уже более полутора месяцев, которые мы пробовали с различными реализациями, но, похоже, ничего не помогло.Пожалуйста, предоставьте предложения.

Мы используем платформу CentOS 5

Ответы [ 2 ]

0 голосов
/ 15 июня 2010
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 голосов
/ 14 июня 2010

Определить «запись» Означает ли это запись данных в файл?Как вы контролируете доступ к файлу?

У вас не может быть нескольких потоков, пытающихся писать одновременно.Так что комментарий Алона кажется уместным.У вашего механизма контроля доступа к записи есть проблемы.

...