|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
28.08.2015, 20:04 | #1 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Какие есть способы передачи потокового видео на сервер из delphi 7
Мне нужно периодическое отображение на сайте реалтаймовое ( хотя бы приблизительное, допустим с некоторой задержкой около 5 секунд допустим, но чем меньше тем лучше) области другой программы.
Сейчас могу сделать с помощью периодичекой, порядка 1 кадра в 1-3 секунды скриншота на сервер, а браузер с периодичностью в 2 раза чаще опрашивает сервер на новый рисунок и таким образом получается некое подобие очень медленного видео. Так вот, есть ли какие либо способы реализовать это настоящее видео? Хотя бы низкого качетва. Но имеется ряд ограничений: 1) можно ли будет контролировать качество и пропорционально нагрузку на ПК с которого будет видео это посылаться. 2)сервер VPS от DigitalOceane 1 ядро процессора 512 Оперативы Ubuntu, там стоит Vesta CP с php 5.3 MySql, nginx Справится ли он, при том ,что хотелось бы, параллельная работа нескольких таких потоков с разных компов. 3) И собственно самое главное, так как я очень поверхностно знаю delphi 7, и недавно начал знакомиться с не виндоус VPS, насколько это может оказаться сложным? Последний раз редактировалось Illusiony; 28.08.2015 в 21:05. |
28.08.2015, 22:40 | #2 |
Ваш К. О.
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,770
|
Если необязательно делать из Delphi 7, можно разобраться с командной строкой ffmpeg и вещать им, по RTMP и в каком-нибудь общепринятом формате, вроде FLV или MP4.
Вот у меня такой Screencast.bat, пригодный для вещания на Livecoding.tv из-под XP: Код:
Последний раз редактировалось Stilet; 29.08.2015 в 09:00. |
29.08.2015, 01:23 | #3 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Именно на delphi 7, так как мне еще нужно манипулировать действиями в чужой программе от сигналов с браузера, а кроме delphi7 ничего не знаю из клиентских языков программирования.
|
10.09.2015, 20:37 | #4 |
Регистрация: 09.09.2015
Сообщений: 2
|
спасибо, мне тоже очень помогли
|
19.09.2015, 17:49 | #5 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Делаю для теста просто загрузку скриншотов на сервер и отображение их в браузере.
Из программы делаю скриншоты каждые 2 секунды и отправляю их на сервер. На сервере php ложит их на RAM диск. Открываю страничку и с частотой 1 раз в секунду перезагружаю скриншот с сервера. Так вот, довольно часто происходит ошибка при загрузке скриншота, т.е он не загружается типо нету такого файла. Файл загружается через подстановку рандомного числа к пути до 100000 так как на сервере через nginx кэшируются файлы этого типа для браузеров. Правильнее нужно бы как нибудь запретить кеширование определенных конкретных файлов самим nginx. Неужели во время загрузки очередного скриншота сервером рисунок на некоторое время блокируется для загрузки( чтения) и в эти моменты браузер не может его загрузить? Последний раз редактировалось Illusiony; 19.09.2015 в 18:08. |
26.09.2015, 14:44 | #6 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Может кто еще знает способы выхода из ситуации?
Такой вариант наверно бессмысленный?: - делаем скриншот запоминаем его, отсылаем на сервер - следующий скриншот ( скриншоты) оцениваем пиксели которые изменились - передаем в сжатом виде информацию на сервер о изменившихся пикселей - в браузере отображается через холс с начало первоночальный ( опорный скриншот) - далее следующий( слежующие) кадры формируются путем загрузки информации о озменившихся пикселе, они перерисовываются на холсте. Но этот способ создаст огромную нагрузку на комп от delphi программы а также на браузер при отображении и изменении холста. И, скорее всего выигрыша в трафике в таком случае не будет(((. Как же сделать приемлемый вариант? |
26.09.2015, 15:00 | #7 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
26.09.2015, 15:38 | #8 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
Да но при простом попиксельном сравнение :
При частоте скриншотов 1 раз в секунду или быстрее 1) нужно пройтись по всем пикселем изображания и найти разность ( думаю при такой скорости это будет влиять на загрузку компа сильно) 2) разностных пикселей может оказаться очень много несмотря на то что они может быть изменились незначительно или допустим все цвета пикселей сдвинулись куда то на 1 пиксель. Тогда разность будет= всему изображению, хотя визуально человек этого и не заметит. Короче здесь, наверное уже задачи порядком повыше моих знаний и сложности задачи. В общем это задачи алгоритмов потокового видео ( что я неосилю, да и это не стоит свеч) Я просто хочу найти простой способ для: 1) более плавного отображения скриншотов( видео) 2) по возможности уменьшить трафик ( по сравнению с простой пересылкой скриншотов jpg) 3)при всем этом чтобы задержка скриншотов( видео) была наименьшей Пока что механизм такой: - программа на делфи с частой 1 раз в секунду посылает на сервер скриншоты размером примерно 100-150 кбайт в jpg - с такой же частотой сервер подгружает этот скриншот( покачто постоянно перезагружает картинку без проверки ее обновления, исправлю это путем посылки запросов с удвоенной частотой и только если изменился, то перезагружать) -при совершении команды с браузера информация передается на сервер ->программа на делфи при отправке скриншота проверяет пришли ли новые команды, если пришли то исполняет их. -таким образом суммарная задержка между действием в браузере и загрузкой скриншота уже после совершения действия ( чтобы уже увидеть результат) достигает около 5 секунд К тому же почему то, даже если отключу программу делфи, чтобы не слала новые скриншоты, в браузере иногда не перезагружается скриншот ( а если программа запущена то такое происходит чаще) и в это случае он отображает некий первоначальный скриншот. Походу блокируется чтение скриншота , если на сервере он в данный момент переписывается. Сейчас пытаюсь найти такую функцию(свойство) у BitBlt(), что Вы описали, пока без результатно. там куча параметров: Rop: Одна из констант теpнаpных pастpовых опеpаций: Blackness, DSTInvert, MergeCopy, MergePaint, NotSrcCopy, NotSrcErase, PatCopy, PatInvert, PatPaint, SrcAnd, SrcCopy, SrcErase, SrcInvert, SrcPaint, Whiteness. SrcCopy Последний раз редактировалось Illusiony; 26.09.2015 в 16:13. |
26.09.2015, 17:32 | #9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
26.09.2015, 18:18 | #10 |
Форумчанин
Регистрация: 17.02.2014
Сообщений: 881
|
SRCERASE Комбинирует инвертированные цвета целевого прямоугольника с цветами исходного прямоугольника при помощи использования булева оператора И (AND).
SRCINVERT Комбинирует цвета источникового и целевого прямоугольников при помощи использования булева оператора исключающее ИЛИ (XOR). NOTSRCERASE Комбинирует цвета исходных и целевых прямоугольников при помощи использования булева оператора ИЛИ (OR) и затем инвертирует получающийся в результате цвет. Но оно же походу сравнивает каждый пиксель одного и второго изображения, и если будет хоть на 1 разница внесет его свою память, т.о если просто поверх всего изображения наложить маску +1 или -1 к одному из RGB составляющих(или сместить изображение на хотя бы на 1 пиксель, то разностной информации будет почти как полное изображение) он посчитает все пиксели разные, не так ли, и в результате размер разностых изменений будет равен самому рисунку и толку =0. Последний раз редактировалось Illusiony; 26.09.2015 в 18:27. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Захват потокового видео | ded26 | C# (си шарп) | 11 | 04.02.2015 15:52 |
Какие есть способы эмуляции мыши? | sergeant.coolagin | C# (си шарп) | 1 | 14.04.2012 10:38 |
Способы передачи файлов | BoT_T | Работа с сетью в Delphi | 2 | 26.09.2010 18:32 |
Какие способы есть изменения адреса памети | kakawkin | Общие вопросы Delphi | 6 | 10.06.2010 16:39 |