Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 17.05.2018
Сообщений: 11
.NET 4.x

Отправка видео по сети

13.06.2018, 17:04. Показов 7310. Ответов 55

Студворк — интернет-сервис помощи студентам
с помощью Aforge либы получаю изображение с web камеры формата bitmap, как можно отправить его по сети? либо запустить видеопоток, который могут считывать любые клиенты?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.06.2018, 17:04
Ответы с готовыми решениями:

Захват и передача видео по сети ?(Видео есть , нету передачи)
Нужно реализовать захват видео с веб камеры и передача его по сети. (НАпример телемост). 1) Захват видео с веб камеры есть 2) НЕ могу...

Отправка видео на Ubuntu
В одной локальной сети находятся телефон на android, планшет на нём же и миникомпьютер на arm64 с Ubuntu на борту, подключённый к...

Okhttp3 Отправка видео на сервер
Отправляю видео на сервер. public void DownloadVideoServer(){ File file = new...

55
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
20.07.2018, 15:08
Студворк — интернет-сервис помощи студентам
Именно потоковое видео.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
20.07.2018, 15:20
Jman, посмотрите вот это - Introduction to DirectShow

Добавлено через 2 минуты
Если мне не изменяет память, то в AForge есть реализация DirectShow для .Net
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
20.07.2018, 17:02
Цитата Сообщение от Shogun31337 Посмотреть сообщение
Если мне не изменяет память, то в AForge есть реализация DirectShow для .Net
Так точно. Но вот что мне ответил разработчик:
Hello,

AForge.NET Framework does not provide any API for streaming video to network.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
20.07.2018, 17:37
Цитата Сообщение от Jman Посмотреть сообщение
AForge.NET Framework does not provide any API for streaming video to network.
Есть еще вот такая либа: DirectShowNet Library. Судя по тому, что они ссылаются на официальную документацию от MS, нужно понимать, что библиотека реализует все доступные функции... Но вот в оригинальной DirectShow я что то не нашел функционала для работы с сетью...
1
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
20.07.2018, 17:49
Я нашел в using Microsoft.Expression. Поделюсь, что бы люди днями не искали...
Не знаю, меня модерация не побъет за шаг доброй воли? Захват с вебкамеры и транслирование в сеть
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/// <summary>
        ///  Broadcast
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Broadcast_Click(object sender, EventArgs e)
        {
            EncoderDevice video = null;
            EncoderDevice audio = null;
 
            GetSelectedVideoAndAudioDevices(out video, out audio);
            StopJob();
 
            if (video == null)
            {
                return;
            }
            
            _job = new LiveJob();
 
            _deviceSource = _job.AddDeviceSource(video, audio);
            _job.ActivateSource(_deviceSource);         
            
            // Finds and applys a smooth streaming preset        
            _job.ApplyPreset(LivePresets.VC1256kDSL16x9);
 
            // Creates the publishing format for the job
            PullBroadcastPublishFormat format = new PullBroadcastPublishFormat();
            format.BroadcastPort = 8080;
            format.MaximumNumberOfConnections = 2;
 
            // Adds the publishing format to the job
            _job.PublishFormats.Add(format);
 
            // Starts encoding
            _job.StartEncoding();
 
            toolStripStatusLabel1.Text = "Broadcast started on localhost at port 8080, run WpfShowBroadcast.exe now to see it";
        }
Но тут тоже загвоздка. Я не нашел в этой штуке работы чтением видеофайла... Только граббер устройства (вебкамеры например). И пожалуйста, стрим камеры можно отправлять в сеть. Фреймворк по вашей ссылке я находил, но пока не изучал еще.

Добавлено через 7 минут
UPD - Еее, через рефлексию нашел там класс - AudioVideoFile
2
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
20.07.2018, 19:15
Цитата Сообщение от Jman Посмотреть сообщение
нашел там класс - AudioVideoFile
А он там и не нужен! У меня вот так получилось файл транслировать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
        private LiveFileSource _fileSource;
 
        private void Broadcast_Click(object sender, EventArgs e)
        {
            _job = new LiveJob();
 
            _fileSource = _job.AddFileSource(@"Путь к файлу");
            _job.ActivateSource(_fileSource);
      
            _job.ApplyPreset(LivePresets.VC1256kDSL16x9);
 
            PullBroadcastPublishFormat format = new PullBroadcastPublishFormat();
            format.BroadcastPort = 8080;
            format.MaximumNumberOfConnections = 2;
 
            _job.PublishFormats.Add(format);
 
            _job.StartEncoding();
 
            toolStripStatusLabel1.Text = "Broadcast started on localhost at port 8080, run WpfShowBroadcast.exe now to see it";
        }
1
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
23.07.2018, 11:35
С avi файлом заработало, а вот с mp4 exception идет... Типо неподдерживаемый видеоформа..
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
24.07.2018, 16:03
Цитата Сообщение от Jman Посмотреть сообщение
а вот с mp4 exception идет
Так Вы же все равно самостоятельно формируете видеофайл из набора картинок. Создавайте avi, раз с ним проблем нет.
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
25.07.2018, 13:49
Да, так и оставлю... У меня теперь такой вопрос. Я вот как-то не пойму, как формируется ссылка?
C#
1
PullBroadcastPublishFormat format = new PullBroadcastPublishFormat();
Получается что он берет адрес машины на которой я запускаю трансляцию? Я могу руками поменять?
И еще такой вопрос, вот я имею ссылку на выходе типа
Беру VLC плеер и по этой ссылке нифига не работает.
Видимо необходимо формировать что-то наподобии -
. Как короче правильно, я что-то не пойму. По второй ссылке подхват видео в VLC плеере происходит.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
25.07.2018, 16:12
Цитата Сообщение от Jman Посмотреть сообщение
Я вот как-то не пойму, как формируется ссылка?
C#
1
PullBroadcastPublishFormat format = new PullBroadcastPublishFormat();
Получается что он берет адрес машины на которой я запускаю трансляцию?
Ну, насколько я понимаю, он просто запускает сервер на локальной машине и открывает указанный порт.
Кстати, помимо PullBroadcastPublishFormat, есть еще PushBroadcastPublishFormat. Он, насколько я понял, нужен для трансляции потока на определенный Url. Т.е. не запускает сервер, а выступает в роли клиента. Правда, сам я его не пробовал использовать.

Цитата Сообщение от Jman Посмотреть сообщение
Я могу руками поменять?
Руками можно поменять только порт. По сути, менять то больше ничего и не нужно.

Цитата Сообщение от Jman Посмотреть сообщение
Беру VLC плеер и по этой ссылке нифига не работает.
Тут, думаю, дело в реализации самого VLC. Обычный виндовый медиаплеер нормально подключается по адресу http://localhost:8080. А вот поймать поток на VLC мне так и не удалось. Ссылка вида http://192.х.х.х/video.cgi у меня тоже не сработала...
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
25.07.2018, 16:26
А если у меня локальная машина сервер? То получается я просто по IP адрессу смогу подключаться. Тут еще такой момент, я вот не знаю чем воспроизвести это видео кроме MediaElement. Например во многих фреймворках есть захват видео по ссылки с ip камеры.

Добавлено через 9 минут
И еще такой момент. Я так понял, что когда видео заканчивается. Поток тоже останавливается, но не очищается судя по профилировщику. Как сделать постоянную трансляцию, типа зацикливания?
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
25.07.2018, 18:42
Цитата Сообщение от Jman Посмотреть сообщение
я вот не знаю чем воспроизвести это видео кроме MediaElement
Ну, как я говорил в прошлом посте, Windows Media Player нормально подключается к потоку и воспроизводит его. Соответственно, можно его использовать (компонент в смысле). Насчет чего то стороннего не подскажу.

Цитата Сообщение от Jman Посмотреть сообщение
Как сделать постоянную трансляцию, типа зацикливания?
В смысле, чтобы после окончания файла он заново начинал воспроизводиться? Тогда так:
C#
1
_fileSource.PlaybackMode = FileSourcePlaybackMode.Loop;
Добавлено через 21 минуту
Кстати, если я правильно понял, проблема с mp4 и с качеством передаваемого видео должна решаться изменением пресетов. Но у меня почему то почти на всех выскакивает исключение: could not find a preset with name matching name parameter. Т.е. их нужно то ли где то брать, то ли создавать самостоятельно... Но с этим пока не очень понятно.

Добавлено через 18 минут
С пресетами разобрался - они доступны только в полной (Pro) версии энкодера...
1
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
26.07.2018, 10:05
Спасибо за
C#
1
_fileSource.PlaybackMode
=)
По поводу WMP. Клиент у меня на mono блин. И там скорее всего буду юзать или FFMPEG или gstreamer.
По поводу пресетов, аналогично, похоже что половина (особенно те которые мне необходимы с кодеком H.264). Кстати смотрели само приложение Microsoft Expression? Там в графической среде в три клика можно стрим сформировать.
А вообще очень интересная тема, и вот на C#, я особо не нашел ничего кроме этого инструмента для потокового видео из файла.

Добавлено через 54 минуты
Ида, еще такой момент. Я сейчас делал кнопки Старт - Стоп, типо на старте начинаю работу, на стопе делаю StopEncoding(), а вот как порт сбросить... Порт после метода StartEncoding почему то всегда открыт и занят. Я пробовал даже другой номер присвоеить на Стопе, но все равно ошибка выскакивает.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
26.07.2018, 14:17
Цитата Сообщение от Jman Посмотреть сообщение
Спасибо за
На здоровье!

Цитата Сообщение от Jman Посмотреть сообщение
Клиент у меня на mono блин.
Тут, к сожалению, ничего не могу посоветовать. С моно пару раз всего сталкивался и то задачи без GUI были...

Цитата Сообщение от Jman Посмотреть сообщение
Кстати смотрели само приложение Microsoft Expression? Там в графической среде в три клика можно стрим сформировать.
Я буквально мельком его глянул. Особенно не вникал.

Цитата Сообщение от Jman Посмотреть сообщение
Ида, еще такой момент. Я сейчас делал кнопки Старт - Стоп, типо на старте начинаю работу, на стопе делаю StopEncoding(), а вот как порт сбросить... Порт после метода StartEncoding почему то всегда открыт и занят. Я пробовал даже другой номер присвоеить на Стопе, но все равно ошибка выскакивает.
Я так подозреваю, что примерно так:
C#
1
2
3
4
_job.StopEncoding();
_job.RemoveFileSource(_fileSource);
_fileSource = null;
_job.Dispose();
1
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
26.07.2018, 14:19
Кстати, а вот реально нет инструмента кроме этого для бродкастинга. Разве что самому полезть в соккеты...
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
26.07.2018, 14:42
Цитата Сообщение от Jman Посмотреть сообщение
Разве что самому полезть в соккеты..
Ну, по большому счету, основная задача это захват видео. А организовать поток с помощью тех же сокетов - не такая уж сложная задача. По крайней мере, при поверхностном рассмотрении... Возможно, конечно, в случае с видеопотоком есть какие то свои нюансы, но обычный поток данных при помощи сокета делается в несколько строк кода.

Добавлено через 2 минуты
Кстати, посмотрите вот этот проект: Motion JPEG Streaming Server. Сам еще не смотрел, только нашел...
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
26.07.2018, 15:57
Кстати, если я возьму видеофайл, прочитаю Streamerом, упакую в массив байт и отправлю в соккет? Правильный ход мыслей?
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
26.07.2018, 16:29
Цитата Сообщение от Jman Посмотреть сообщение
Кстати, если я возьму видеофайл, прочитаю Streamerом, упакую в массив байт и отправлю в соккет? Правильный ход мыслей?
Ну, по идее, да. Как то так и должно быть. Единственное, не уверен насчет файла целиком. Возможно, нужно отправлять покадрово... Хотя, это, наверное, зависит от принимающей стороны... Вероятно, можно и так и так, в зависимости от того как на клиенте воспроизведение реализовано.
0
 Аватар для Jman
89 / 77 / 38
Регистрация: 11.10.2015
Сообщений: 860
26.07.2018, 18:00
Странно, но у меня приложение вешается
C#
1
2
3
4
_job.StopEncoding();
_job.RemoveFileSource(_fileSource);
_fileSource = null;
_job.Dispose();
Если оборачиваю в
C#
1
Task.Run(() => )
То при нажатии кнопки приложение не вешается, но вот порт в этом случае занят и не освобождается. Думаю что из-за того, что поток другой. Пробовал ТАР
C#
1
return new Task (() =>)
Та же беда.

Добавлено через 1 час 5 минут
Я наследовал класс свой класс VideoMaker от IDisposable что бы удалять работу. Вешается из-за этого:
C#
1
2
3
4
5
  public void Dispose()
        {
            _job?.Dispose();
            _fileSource?.Dispose();
        }
Пока убрал.
Дале сделал следующее...

Создал метод в классе VideoMaker = new VideoMaker();
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 public void  StopBroadCasting()
        {
            Task.Run(() =>
            {
 
                try
                {
                    //_format.BroadcastPort = 10;
                    _job.StopEncoding();
                    _job.RemoveFileSource(_fileSource);
                    _fileSource = null;
                    _job.Dispose();
                    Debug.WriteLine($"The Broadcast port is: {_format.BroadcastPort}");
                }
                catch (Exception e)
                {
                    Debug.WriteLine(e);
                }
 
            });
 
        }
В форме на кнопку стоп повесил следующе:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
   private void btnStopTraslation_Click(object sender, EventArgs e)
        {
            Invoke((MethodInvoker)delegate
            {
 
                btnBroadcast.Enabled = true;
                btnStopTraslation.Enabled = false;
                _videoBroadcaster.StopBroadCasting();
                // Вешает все на свете...
                //_videoBroadcaster.Dispose();
                Debug.WriteLine("Stop broadcasting");
 
            });
 
        }
Кнопка стоп не освобождает почему-то порт. При последующем запуске трансляции вылетает ошибка...

Добавлено через 2 минуты
Вот такая ошибка прет....
Ошибка : The current broadcast port is already in use. Please choose another port and try again.
0
 Аватар для Shogun31337
557 / 534 / 225
Регистрация: 02.11.2016
Сообщений: 1,538
26.07.2018, 18:22
Хз. У меня все норм работает. Поток прекращается, порт закрывается. При повторном открытии потока проблем не возникает... Может быть этот порт используется еще какой то прогой? Или эта некорректно завершается и остается висеть в памяти, занимая порт?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.07.2018, 18:22

Создание и отправка видео/аудио потоков
Здравствуйте. Мне дали задание написать сервлет для сервера по созданию видео/аудио потоков и отправки их на страницу созданную на html5. Я...

Странная отправка по сети
Есть к отправке две строчки. Если их писать так: char ответ_на_заголовок = &quot;{\&quot;type\&quot;:\&quot;handshake\&quot;,\&quot;server...

Отправка файла по сети
Добрый день. Пробовал передать файл по сети как описано тут...

Отправка видео через 3G в тяжелых погодных условиях
Здравствуйте. Есть такая задача : отправлять видео с IP камеры на сервер. IP камера установлена грубо говоря в поле. Считаем что GSM...

Отправка по сети русских букв
Подскажите как отправить через сокет слово &quot;Привет&quot;. Делаю так: PrintWriter out = new PrintWriter(new...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru