Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.08.27;
Скачать: CL | DM;

Вниз

Как замедлить прием данных с сервера HTTP   Найти похожие ветки 

 
DVM ©   (2006-04-06 11:42) [0]

Имеется HTTP сервер, вещающий видео в формате MotionJPEG. Для тех кто не знает это данные в виде:

--разделитель
данные jpeg
--разделитель
данные jpeg

и т.д.

Работаю через сокеты Winsock и получаю данные, выделяю jpeg -и без проблем.

Но вот есть необходимость, выводить кадры реже, скажем, 2 раза в секунду. Первое решение которое приходит в голову - это после приема и выделения очередного целого jpeg-а сделать в потоке, получающем данные Sleep(500).
Это, конечно помогает, частота кадров становится 2 fps.
НО ЕСТЬ ОДНО НО!

HTTP сервер выдает данные порциями и совсем необязательно, что в одну порцию влезает jpeg целиком или jpeg влезает ровно в несколько порций. Т.е. в полученных данных после выделения очередного кадра остается хвост - начало следующего, еще непринятого jpeg-a. Осташуюся часть jpeg -а HTTP-сервер хранит и выдает мне со следующей порцией данных. А мой Sleep как раз и встревает в середине JPEG-а.
Начинаются значительные тормоза в приеме. Изображение сильно отстает от реального. FPS верный, какой и задан Sleep, но отставание достигает 5-10 секунд.

Как сделать задержку между кадрами правильно?


 
DVM ©   (2006-04-06 11:45) [1]

Я конечно понимаю, что можно принимать все кадры (25 fps) и отбрасывать jpeg-и лишние, но это нагрузка совершенно лишняя и на сеть и на комп и трафик лишний.


 
MiHoY   (2006-04-06 12:19) [2]

а ты серваком отправляй медленней  и всё
а клиентом принимай пакеты в дежурном режиме


 
DVM ©   (2006-04-06 12:28) [3]


> а ты серваком отправляй медленней  и всё

Я б с удовольствием, но сервер не мой и настройка fps у него хотя и есть, но не работает. С другими серверами, выдающими гарантированное число fps проблем нет, но нужно с этим.


 
MiHoY   (2006-04-06 12:34) [4]

а насчёт трафика: раз сервер установил с тобой соединение , то трафик полюбой к те идти будет.


 
DVM ©   (2006-04-06 12:37) [5]


> то трафик полюбой к те идти будет.

он будет идти, если я его запрашиваю, т.е. recv() вызываю.


 
Сергей М. ©   (2006-04-06 13:53) [6]


> DVM ©   (06.04.06 12:37) [5]


Что тебе сервер передает, то и изволь получать ... Ни больше ни меньше ...

А уж как ты распорядишься принятым - то ли будешь прореживать "кадры", то ли не будешь - это твои проблемы... Но получить ты должен все что тебе передал сервер !


 
DVM ©   (2006-04-06 14:00) [7]


> Сергей М. ©   (06.04.06 13:53) [6]

Тем не менее есть пара-тройка программ, делающих то же, что и моя и они реализуют как то задержку между кадрами. И не похоже, что сделано это так, как я описал в [1]


 
Сергей М. ©   (2006-04-06 14:11) [8]


> DVM ©   (06.04.06 14:00) [7]


Пойми, что соединение, использующее TCP-транспорт, подразумевает поточную трансмиссию данных .. Нельзя не выбрав из потока очередную порцию данных получить следующую за ней порцию !


 
DVM ©   (2006-04-06 15:06) [9]


> Сергей М. ©   (06.04.06 14:11) [8]

Да, действительно, проанализировал трафик этих программ - стало ясно, что просто они пропускают кадры. Но принимают все.



Страницы: 1 вся ветка

Текущий архив: 2006.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
15-1150649866
vrem
2006-06-18 20:57
2006.08.27
Галактик футбол


2-1155109317
tytus
2006-08-09 11:41
2006.08.27
Как нормально рисовать на панели?


2-1155108350
DmitryNekl
2006-08-09 11:25
2006.08.27
Можно как-то прицепить rtf-файл к форме?


4-1146747934
Ангела
2006-05-04 17:05
2006.08.27
Как создать список папок и файлов


6-1144652520
IntruderLab
2006-04-10 11:02
2006.08.27
FTP заливка файла