|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.10.2012, 11:55 | #1 |
Регистрация: 22.03.2010
Сообщений: 8
|
получение видео по idHttp. Зависший поток.
Здавствуйте!
Задача: Есть несколько IP камер Axis (P1344) и бесконечное количество клиентов для них. Клиент может подключиться к любой из камер, а также к нескольким из них. Поскольку к камерам напрямую подключаться нельзя, нужно создать что-то типа видеосервера. В задачу видеосервера входит получение от всех камер видеопотока по http и выдача их в сеть клиентам (UDP Broadcast - все клиенты в одной локальной сети). Как делаю: Для каждой камеры создаётся свой экземпляр TThread, внутри которого живёт idHTTP. Ну и естественно свой UDPClient (тоже использую Indy10). Собственно код потока для HTTP: PHP код:
PHP код:
Но где-то через час-два каринтка пропадает. Точнее от IP камеры пропадает поток (смотрела сниффером). А значит экземпояр потока TSt, привязанного к этой камере бесконечно ждёт продолжения кино (фактически висит). У меня два вопроса: 1. Почему пропадает поток от IP камеры (мой косяк или её?) 2. Как мне грамотно прибить поток висящий? Кроме TerminateThread до него ничем не достучаться. Но в этом случае все мои ресурсы остаются незакрытыми. Да и неправильно это как-то.... СПАСИТЕ МЕНЯ!!! |
08.10.2012, 12:33 | #2 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
Причиной пропадание патока может быть даже обычное нарушение связи или некачественое соединение. Это решается докачкой.
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
08.10.2012, 13:45 | #3 |
Регистрация: 22.03.2010
Сообщений: 8
|
саша40, как это обработать?
|
08.10.2012, 16:12 | #4 |
Старожил
Регистрация: 29.09.2009
Сообщений: 9,713
|
...а что это за LiveStreamer-юнит? Из какого SDK (в Axis SDK я такого не видел) или самописный модуль?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation |
08.10.2012, 16:17 | #5 |
Участник клуба
Регистрация: 12.09.2012
Сообщений: 1,030
|
Что нужно программисту: Компьютер, Среда программирование, Воображение, Прямые руки, Мозги, Знания этой среды программирования.
Программист-это профессия, а программирование-это моё хобби. |
08.10.2012, 17:25 | #6 | |||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Я бы тоже завис после такого...
Код:
Переработал ваш UDP трэд: Код:
Цитата:
Где обработка try except?(У вас она есть, НО вы же никак не знаете о том, что исключение поймано, и что за оно - вы тоже не знаете. Лог чтоль прикрутите...). Кстати очевидно же, это есмъ причина сего: Цитата:
Цитата:
Код:
Код:
Плохая идея TEvent глобальным делать, это не критическая секция. Еслион глобальный, то влияет на все TUDP одновременно. Последний раз редактировалось Человек_Борща; 08.10.2012 в 17:46. |
|||
08.10.2012, 18:28 | #7 | |
Регистрация: 22.03.2010
Сообщений: 8
|
Цитата:
Код:
|
|
08.10.2012, 21:26 | #8 | |||||||||
Регистрация: 22.03.2010
Сообщений: 8
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Код:
В TSt.Execute я дохожу до кода Цитата:
Единственная возможность завершиться (не уверена что хорошо так делать), это в функции считывания данных из буфера сделать так: Цитата:
Но данные от камеры просто перестают приходить. Просматривая сниффером пакеты от камеры я видела, как в один прекрасный момент CheckSum сетевого и транспортного протокола (IP и TCP) становятся incorrect. При этом idHTTP всё также ожидает данных Цитата:
Цитата:
Всё что, как я понимаю, можно сделать - поставить следящий поток, и отлавливая зависания idHTTP делать TerminateThread. Но это ведь не корректно. Завтра внесу правки, указанные Человек_Борща, но боюсь это мне не поможет.... |
|||||||||
08.10.2012, 21:50 | #9 | ||
Старожил
Регистрация: 30.12.2009
Сообщений: 11,426
|
Код:
ReciveTimeout - указывает кол-во секунд в течении которых клиент ждет хотя бы 1 байт информации от сервера, в противном случае соединение размыкается. В вашем случае клиент ждет отдачи сервера бесконечно, итог - поток висит. Код:
Какова гарантия что завтро кол-во TThread'ов не станет больше кол-ва TEvent'ов в массиве? Цитата:
Цитата:
Последний раз редактировалось Человек_Борща; 08.10.2012 в 21:53. |
||
08.10.2012, 22:08 | #10 | ||
Регистрация: 22.03.2010
Сообщений: 8
|
Цитата:
Цитата:
К тому же даже полное зависание tUDP (если б оно было) никак не может подвесить tST, поскольку TEvent скинут сразу, и даже из буфера Buffer[Numb] данные считываются заранее. Просто из принципа поставлю Код:
Последний раз редактировалось olikke; 08.10.2012 в 22:14. |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перехват поток песен и видео (ютуб, контакт и им подобие) | coNsept | Общие вопросы C/C++ | 14 | 07.02.2012 13:18 |
Получение ссылки скачивания видео с контакта | cargo29 | Работа с сетью в Delphi | 6 | 28.05.2011 22:50 |
Не удается связать поток+idHttp+прогресс бар | grafgrial | Общие вопросы Delphi | 1 | 24.05.2011 15:46 |
Поток видео и аудио с камеры | HarPy | Мультимедиа в Delphi | 0 | 04.03.2009 09:05 |