Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

Как замедлить прием данных с сервера 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.138 c
2-1154951397
ProgramMaker_
2006-08-07 15:49
2006.08.27
Почему не работает следующее...


15-1154381238
ronyn
2006-08-01 01:27
2006.08.27
Count of File s


2-1154865648
Sele
2006-08-06 16:00
2006.08.27
открытие файла на 1 копии программы


15-1154599112
SerJaNT
2006-08-03 13:58
2006.08.27
8bf


15-1154593000
ALEXD31
2006-08-03 12:16
2006.08.27
Мультизагрузочный диск





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский