#vb6 #ffmpeg #streaming #webcam
#vb6 #ffmpeg #потоковая передача #Вебкам
Вопрос:
Извините, я знаю, что VB6 выпущен десятилетия назад, но я нахожусь в ситуации, когда я должен использовать VB6 для доставки прямой трансляции с веб-камеры между 2 ПК в программе серверно-клиентской модели. Vb6-code поддерживает соединение, тогда у меня нет выбора, кроме как передавать все данные через это соединение.
Я пробовал недели для этого, бесчисленные подходы, но ничего не вышло. Мои усилия были сосредоточены на 3 основных подходах:
1 / Используйте ffmpeg для записи веб-камеры в режиме реального времени в виде файла «.avi» на жесткий диск, перенесите части файла на другой конец и воспроизведите его. Но я застрял с медиаплеером, который может воспроизводить «записываемый» avi-файл.
Управление проигрывателем Windows Media сообщило мне, что «файл уже используется …», а плагин VLC даже не может быть добавлен в VB6 (axvlc.dll ).
2 / Используйте ffmpeg для сохранения веб-камеры в режиме реального времени в виде файла avi, передайте каждый бит этого файла на другой конец, затем на другом конце извлекайте 24 изображения в секунду из avi для непрерывного отображения в окне изображения. Этот подход подходит, за исключением того, что мой жесткий диск заполняется изображениями во время подмигивания, и моя программа становится очень медленной перед зависанием.
3/ Используйте ffmpeg для потоковой передачи веб-камеры в реальном времени на rtp-порт, подобный этому:
ffmpeg -f dshow -i video="Lenovo EasyCamera" -vcodec mpeg2video -pix_fmt yuv422p -f rtp -an rtp://224.1.2.3:8191
Я успешно просматривал поток в VLC, но VLC (axvlc.dll ) отказался быть интегрированным в древний VB6. И что более важно, я не знаю, как перенаправить поток rtp на другой компьютер с VB6.
Кто-нибудь, пожалуйста, просветите меня? (Приветствуется любой сторонний компонент)
Комментарии:
1. Если все, что вы делаете, это выгружаете работу в ffmpeg или VLC, почему это должен быть VB6? А) Не существует ли множества готовых к использованию приложений для веб-камеры? Б) Рассматривали ли вы DirectShow? Есть и другие олд-тек опции (но ссылки на некоторые, которые я использовал, теперь такие же мертвые, как и VB6), просто трудно точно сказать, что вам нужно, основываясь на том, что вы пробовали. Наконец, если # 2 работает, почему бы не уточнить это, чтобы удалить уже показанные изображения?
2. @Plutonix: Это сложная ситуация, когда я должен использовать VB6. Но основная причина в том, что я должен передавать все данные между 2 ПК, используя TCP / UDP-соединение, созданное кодом VB6. И я никогда не слышал о какой-либо технике, которая может совместно использовать соединение между двумя разделенными программами, поэтому я застрял с VB6 и небольшим набором компонентов / методов, которые совместимы с VB6. Причина, по которой # 2 неосуществимо, заключается в том, что создание / отображение / удаление 24 изображений размером ~ 100 кб каждые секунды не является стабильным решением, оно требует ресурсов, и жесткий диск скоро фрагментируется.
3. @Plutonix: Тот факт, что мне приходится передавать все данные через предварительно установленное соединение с помощью VB6, устранил почти все готовые к использованию решения, которые несовместимы с VB6
Ответ №1:
После некоторых исследований кажется, что Microsoft использует rtsp, который является разновидностью протокола rtp. К счастью, ffmpeg поддерживает мультиплексирование и демультиплексирование в этом формате. https://www.ffmpeg.org/ffmpeg-protocols.html#rtsp . Возможно, вам придется скорректировать указанные параметры.
Если сервер должен быть интерфейсом vb6, вы можете запустить ffmpeg в качестве серверной части из командной строки. Это распространенный метод, и я нашел его пример здесь:https://www.ehow.com/how_6038708_use-ffmpeg-visual-basic-6.html для справки.
Следующим этапом является возможность воспроизведения этих потоков в visual Basic 6. Что вы можете сделать, так это добавить элемент управления Windows Media Player и присвоить его свойству WindowsMediaPlayer1.URL значение {список с вашим URL, добавленным к нему в виде строки}.
Одна версия элемента управления имеет идентификатор {6BF52A50-394A-11D3-B153-00C04F79FAA6}, а dll является wmp.dll . Убедитесь, что для элемента управления autoStart amp; invokeURLs установлено значение true.
Некоторые другие вещи, о которых стоит упомянуть, — это попытка использовать WMP-совместимые кодеки и такие компоненты, как Windows media video.
Комментарии:
1. Спасибо, что нашли время на изучение этого материала. Ваше решение было бы идеальным, за исключением того факта, что VB6 поддерживает соединение. Когда FFMPEG транслирует прямой сигнал, он может транслировать только RTSP локально , но именно VB6 передает сигнал через Интернет на другой конец. Итак, есть ли у вас какой-нибудь трюк, чтобы заставить VB6 перенаправлять локальный протокол rtsp через Интернет на другой компьютер?
2. Ваша ситуация кажется довольно ограниченной, и мне немного трудно понять, насколько вы ограничены в своем заявлении. Возможно, эхо-сервер будет работать, он будет получать локальные трансляции, и вы сможете изменять пакеты, включая их адрес, а затем отправлять их стольким клиентам, скольким пожелаете. Вот пример: planetsourcecode.com/vb/scripts /…
3. Я не думаю, что это сложно понять. Если вы используете ffmpeg для широкого приведения: «ffmpeg …. rtsp: 1.2.3.4: 1234», ffmpeg будет прослушивать свой собственный порт, когда кто-то подключится к этому порту, ffmpeg установит свое собственное соединение. Это не удалось, потому что я могу использовать VB6 только для прослушивания определенного порта и установления собственного соединения VB6, когда кто-то подключается. Итак, решение состоит в том, чтобы заставить ffmpeg транслироваться на localhost, тогда VB6 ДОЛЖЕН каким-то образом притворяться / имитировать, что это настоящий ffmpeg, на другой компьютер. Но я не знаю, как притворяться / имитировать!