Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23

Простая имплементация видео чата

08.12.2023, 15:23. Показов 1403. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Ищу способ реализации видео чата межу двумя wpf приложениями.
Пробовал MixedReality-WebRTC, но к сожалению после сборки приложение падает, да и проект уже не поддерживается.
WebRTC очень навороченный с кучей тонких настроек.
Вроде на SignalR можно запилить видео чат, но потребуется самому снимать и кодировать видео/аудио, в общем нужно разбираться...
Прошу совета - есть ли более простое решение с более низким входным порогом?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.12.2023, 15:23
Ответы с готовыми решениями:

Идеи по созданию видео чата на сервере.
Есть сервер, нужно сделать чтото типа видео чата на сервере. Т.е. чтобы 2 клиента могли обмниваться видео. Вопрос 1) Реально ли это...

Приложение видео чата
Доброе время суток. Хочу написать собственное(простое) приложение видео чата\онлайн конференций на подобии скайпа\дискорда\зума. ...

Создание Видео-чата
Здравствуйте! С С Новым Годом всех ) Пишу сюда с очень большой надеждой на помощь, т.к. курсовую надо уже скоро сдавать... Вобщем...

16
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.12.2023, 02:15
Цитата Сообщение от armtechnics Посмотреть сообщение
Прошу совета - есть ли более простое решение с более низким входным порогом?
Я бы сказал что C#, в частности WPF, особенно всякие клиент-серверный или P2P приложения -- не для "низкого порога вхождения". Это не CMS-конструкторы аля WordPress, где натыкал нужные компоненты и готово.

SignalR -- не более чем прикладная реализация обменами данных, причем с подходом через "дергаем удаленные методы" (очень грубо, так как реальные Remote Methods выглядят всё же иначе). Причем по дефолту там json, что очень раздувает трафик. Я бы сказал что эта либа нужна для случаев когда нужно написать единый подход для разношерстных клиентов: веб-браузер, десктоп, мобилка.

По идеи вам нужно смотреть в сторону реализации основанной на UDP-протоколе. Но это в идеале. Если чисто "абы работало" для курсовой/побаловаться... в целом с чем сможете разобраться -- с тем и работайте.
0
 Аватар для IamRain
4694 / 2702 / 734
Регистрация: 02.08.2011
Сообщений: 7,233
09.12.2023, 05:11
Вот он, синдром out-of-box разработчика - дайте мне что-нибудь, чтобы можно было написать очень сложное простым способом.
Не все вещи делаются легко и просто, просто потому что они сложнее остальных по объему работы и логике.
Те же пайплайны в машинном обучении - допусти где-нибудь в одном месте небольшую ошибку - все пойдет по одному месту..
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23
09.12.2023, 15:59  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
SignalR -- не более чем прикладная реализация обменами данных, причем с подходом через "дергаем удаленные методы" (очень грубо, так как реальные Remote Methods выглядят всё же иначе). Причем по дефолту там json, что очень раздувает трафик. Я бы сказал что эта либа нужна для случаев когда нужно написать единый подход для разношерстных клиентов: веб-браузер, десктоп, мобилка.
Не знал что SignalR упаковывает в JSON, вы правы что для видео стрима не лучший выбор.
Конечно, идеально чтобы либа поддерживала работу с разношерстными клиентами.
Цитата Сообщение от Wolfdp Посмотреть сообщение
По идеи вам нужно смотреть в сторону реализации основанной на UDP-протоколе. Но это в идеале. Если чисто "абы работало" для курсовой/побаловаться... в целом с чем сможете разобраться -- с тем и работайте.
Было бы идеально гнать трафик по UDP напрямую, он в моем случае это невозможно, т.к. нет прямого доступа к IP адресам клиентов которые будут находиться в DMZ.
Схема обмена видео потоком
[C#/WPF клиент 1] <-> [рутер 1] <-> (интернет) <-> [сигнальный сервер] <-> (интернет) <-> [рутер 2]<->[C#/WPF клиент 2].
Цитата Сообщение от IamRain Посмотреть сообщение
Вот он, синдром out-of-box разработчика - дайте мне что-нибудь, чтобы можно было написать очень сложное простым способом.
Не все вещи делаются легко и просто, просто потому что они сложнее остальных по объему работы и логике.
Те же пайплайны в машинном обучении - допусти где-нибудь в одном месте небольшую ошибку - все пойдет по одному месту..
Вот уже и синдром мне какой-то придумали))) разве .DOTNET не построен на концепции применения подключения сторонних либ в виде нагитов...?
Зачем заниматься оверхедом если имеется простое рабочее решение, например простую имплантацию имеет видео
стрима файлов.
Если нужно разработать коммерческий нагруженный видео сервис, то конечно логично разработать собственную реализацию либы для видео стрима или запилить на WebRTC, но в моем случае требуется простая реализация на базе существующих решений.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
09.12.2023, 23:40
Цитата Сообщение от armtechnics Посмотреть сообщение
Не знал что SignalR упаковывает в JSON, вы правы что для видео стрима не лучший выбор.
На прошлом рабочем проекте мне говорили что переводили SignalR подключение на бинарный формат (хз как, быстрый поиск не вывел статьи по этому вопросу).

Цитата Сообщение от armtechnics Посмотреть сообщение
Было бы идеально гнать трафик по UDP напрямую, он в моем случае это невозможно, т.к. нет прямого доступа к IP адресам клиентов которые будут находиться в DMZ.
Дык, TCP ровно так же нужно прокидывать.

По "есть ли либа": думаю прям единой либы сразу со всем готовым вы наврядли найдете (и с большой вероятностью будет платным). Возможно есть смысл глянуть два момента:
- форматирование видео+звука в потоковое. Возможно webp, как на том же ютубе. Если я не ошибаюсь, там сейчас дробят видео отдельно от аудио, что поидеи дает дополнительную гибкость -- всегда можно отрубить один из каналов, не дергая второй.
- udp-реализацию передачи данных (в целом примитивную можно написать и самому)

сразу скажу: либо я не шарю, либо задача таки не из легких. За пару дней наврядли без практики такое можно реализовать.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,768
10.12.2023, 00:03
Цитата Сообщение от Wolfdp Посмотреть сообщение
На прошлом рабочем проекте мне говорили что переводили SignalR подключение на бинарный формат
MessagePack:
https://learn.microsoft.com/en... ubprotocol

Но только надо предварительно гуглить/тестировать на предмет производительности и качества реализации на конкретной плафтформе/языке. Например, вот:
Our benchmark shows that json protocol is faster than messagepack when transfering a lot of data.

https://github.com/dotnet/aspnetcore/issues/31793
2
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23
11.12.2023, 03:04  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
- форматирование видео+звука в потоковое. Возможно webp, как на том же ютубе. Если я не ошибаюсь, там сейчас дробят видео отдельно от аудио, что поидеи дает дополнительную гибкость -- всегда можно отрубить один из каналов, не дергая второй.
С точки зрения функциональности, можно рассматривать, грабли могут вылезти в виде рассинхрона видео+звука.
Цитата Сообщение от Wolfdp Посмотреть сообщение
- udp-реализацию передачи данных (в целом примитивную можно написать и самому)
Стримить на сервер по UDP элементарно, вопрос как второму клиенту стрим забирать..?

Цитата Сообщение от kotelok Посмотреть сообщение
MessagePack:
https://learn.microsoft.com/en... ubprotocol
Спасибо, вопрос только в том - пофиксен ли баг с производительностью.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
11.12.2023, 05:10
Цитата Сообщение от armtechnics Посмотреть сообщение
Стримить на сервер по UDP элементарно, вопрос как второму клиенту стрим забирать..?
Также как и всё в этом мире: либо прогонять трафик через общи сервер, либо P2P (что не избавляет от общего сервера, но позволяет не гонять через него килотонны трафика).
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23
11.12.2023, 18:13  [ТС]
Цитата Сообщение от Wolfdp Посмотреть сообщение
Также как и всё в этом мире: либо прогонять трафик через общи сервер, либо P2P (что не избавляет от общего сервера, но позволяет не гонять через него килотонны трафика).
Пока остановился на организации стрима через сервер по TCP. Сервер выступает в роли моста прокидывающего трафик между клиентами.
P2P подходящий вариант, его применяют некоторые мессенджеры для передачи аудио/видео. С P2P работать не приходилось, пока вникаю в особенности и принцип его работы.
Сделал захват, масштабирование и сжатие картинки, после выбора метода доставки можно будет поиграться с элементарным видео стримом)
p.s. вообще я несколько удивлен что в сообществе не встретился ни один спец по видео стриму, видимо это коммерческая тема и народ просто не хочет делиться наработками.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
12.12.2023, 10:25
Цитата Сообщение от armtechnics Посмотреть сообщение
вообще я несколько удивлен что в сообществе не встретился ни один спец по видео стриму
Полно различных сервисов в интернете. Команды разработчиков общаются используя сторонние сервисы а не изобретая свой говновелосипед.
Цитата Сообщение от armtechnics Посмотреть сообщение
разве .DOTNET не построен на концепции применения подключения сторонних либ в виде нагитов...?
дак вроде полно либ в по кодированию видео, вот например https://github.com/secile/OpenH264Lib.NET
и полно реализаций по передачи данных - websocket, protobuf
надо только погуглить
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
12.12.2023, 13:04
Цитата Сообщение от Рядовой Посмотреть сообщение
полно либ в по кодированию видео, вот например
может подкините либ для кросс платформы?
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
12.12.2023, 16:12
Andreyip, быстрым гуглением эти, но я не пользовался
https://github.com/CryShana/CryMedia
https://github.com/radek-k/FFMediaToolkit
0
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23
13.12.2023, 15:25  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
дак вроде полно либ в по кодированию видео, вот например https://github.com/secile/OpenH264Lib.NET
и полно реализаций по передачи данных - websocket, protobuf
надо только погуглить
С захватом видео с камеры и записью его в mp4 разобрался, но нифига не поманю как его передавать(
В целом ясно, что формируется буферный видео файл который отдается на стрим, но каким именно образом это происходит хоть через тот же SignalR никак не вкуриваю.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
13.12.2023, 15:58
TcpClient -> Stream

Но это чисто передать и посмотреть на том конце. Как только в сети будет просадка -- пойдет рассинхрон по времени, что с каждым новым подлагивание будет только нарастать. Правда вы всё равно взялись за формат mp4, я не уверен что он позволит начать воспроизведение "с середины", когда нужно будет проскочить пару кадров.

Если таки хочется через SignalR -- пилите свой метод Write, который на другом конце будет восприниматься как Read. Главное json не юзайте, а то трафик лопнет.
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
14.12.2023, 09:52
armtechnics, лучше использовать grpc, оно умеет и стримы передавать
https://metanit.com/sharp/grpc/2.5.php
1
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 23
15.12.2023, 06:02  [ТС]
Цитата Сообщение от Рядовой Посмотреть сообщение
лучше использовать grpc, оно умеет и стримы передавать
https://metanit.com/sharp/grpc/2.5.php
grpc вполне пригоден, имеется введу стрим видео а не картинок?
0
 Аватар для Рядовой
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
15.12.2023, 09:18
armtechnics, Из либы, которая кодировала видео получаете объект Stream и скармливаете его grpc. На другом конце декодируете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2023, 09:18
Помогаю со студенческими работами здесь

Создание Видео Чата!
Есть сервер, нужно сделать чтото типа видео чата на сервере. Т.е. чтобы 2 клиента могли обмниваться видео. Вопрос 1) Реально ли это...

Организация видео чата
Здравствуйте, сразу извините за возможно неправильный выбранный раздел под тему. У меня следующий вопрос, как можно реализовать небольшой...

Структура видео-чата в mxml
Понасоздавал по незнанию кучу тем, а должен был создать только эту, так как корень зла таится в нижеописанной проблеме. Итак, проблема...

Создание видео чата со случайным собеседником
Всем здравствуйте. Всех с новым годом! Итак, вопрос хочу сделать видео чат типо Chatroulette, пример накидал в Paint : Для тех...

Как создать видео чата с использованием red5 и eclipse?
Добрый день, форумчане! Задумал создать простой видео чат с авторизацией. Нарыскал в ютюбе, гугле, яндексе, на хабре и на киберфоруме,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru