LINUX.ORG.RU

Зависание в сторонней библиотеке

 , , ,


0

4

Для чтения потока с камеры по протоколу RTSP юзаю OpenCV. Есть такая проблема - если камеру перезагрузить, то, в большинстве случаев, происходит зависание на методе

videoCapture_->read (frame);

Как быть? Попробовал решение в лоб - удалять экземпляр класса (он вынесен в отдельный QThread), в котором читаю поток, но это вызывает краш. Вот бэктрейс при падении Как правильно поступить?

======================================================

Решили вынести чтение в отдельный процесс и убивать его при зависании.

★★★★

Последнее исправление: panter_dsd (всего исправлений: 3)
Ответ на: комментарий от MikeDM

В либе ее нет, тут я ничего не сделаю. На моем уровне что можно предпринять? Пока единственное решение - прослойка в виде процесса, который будет работать с либой и отдавать поток по локальному сокету.

panter_dsd ★★★★
() автор топика
Ответ на: комментарий от panter_dsd

В либе ее нет, тут я ничего не сделаю.

Добавь, чо.

Pavval ★★★★★
()
Ответ на: комментарий от panter_dsd

На моем уровне что можно предпринять?

Установить timeout на уровне дров ?

для v4l2 как-нить так

modprobe uvcvideo nodrop=1 timeout=5000 quirks=0x80

vtVitus ★★★★★
()
Последнее исправление: vtVitus (всего исправлений: 1)
Ответ на: комментарий от panter_dsd

Сокет в каком состоянии остаётся? ИМНО event-ы не генерятся, по идее такое монтирование камеры должно это починить. Попробуй включить трайс

sudo echo 0xffff > /sys/module/uvcvideo/parameters/trace

и посмотри чего пишет.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Камера не монтируется, я получаю доступ к ней по сети.

panter_dsd ★★★★
() автор топика
Ответ на: комментарий от Adonai

Поправил немного первый пост, на recv у меня в другом месте висло, а тут падает - бэктрейс на скриншоте.

panter_dsd ★★★★
() автор топика
Ответ на: комментарий от panter_dsd

Сорри не внимательно читал. А если добавить ?tcp на конце аля

 CvCapture *camera = cvCreateFileCapture("rtsp://admin:admin@192.168.0.1/camera1?tcp"); 

vtVitus ★★★★★
()
Ответ на: комментарий от panter_dsd

tcp и ESTABLISHED -> на вашей стороне ничего не получится сделать окромя

Решили вынести чтение в отдельный процесс и убивать его при зависании.

vtVitus ★★★★★
()
Ответ на: комментарий от panter_dsd

Хм. Оставил будущим поколениям после себя? Сделай лучше gist на гитхабе, ргхост через месяц удаляет.

Они редко зарегистрированы, так что - спасибо от них.

Adonai ★★★
()
Последнее исправление: Adonai (всего исправлений: 1)
Ответ на: комментарий от Adonai

Да что там закидывать? Кода как кот наплакал.

panter_dsd ★★★★
() автор топика

У тебя линукс? Можешь отправить сигнал SIGUSR1 через pthread_kill, recv должен отвиснуть с EINTR. Только обработчик пустой повесь.

O02eg ★★★★★
()
Ответ на: комментарий от O02eg

Кроссплатформенная прога. В итоге, вынесли в отдельную утилиту, работает отлично.

panter_dsd ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.