Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
6 / 6 / 2
Регистрация: 07.11.2012
Сообщений: 95

Создание чата с отображением видео захваченного с видеокамеры собеседника

14.04.2015, 18:56. Показов 1794. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я решил создать что-то подобие скайпа для изучения, а как это работает. В целом чат не составило труда реализовать по средствам сокетов. Вся загвоздка как раз в потоковой передаче видео с камер. Захватить видео с камеры и тут же вывести я реализовал по аналогии [cut]. Только вывел в panel. Но вот тут я и застрял, имея видео поток я не могу придумать, а как мне его передавать клиенту. Файлы по сокетам я умею передавать, но там указывается размер файла, тут же размер не известен.
Так вот вопрос, при помощи чего мне реализовать передачу видео потока между клиентом и сервером и желательно бы ещё научиться сжимать поток по размеру.
работаю на rad studio xe4, яхык с++
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.04.2015, 18:56
Ответы с готовыми решениями:

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

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

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

3
6 / 6 / 2
Регистрация: 07.11.2012
Сообщений: 95
16.04.2015, 14:10  [ТС]
Вот реализация захвата видео с камеры и вывод в panel:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
    HRESULT hr;
 
    IGraphBuilder *pGraph = NULL; //менеджер графа фильтров
    ICaptureGraphBuilder2 *pBuild = NULL; //граф фильтра аудио\видео захвата
 
    IBaseFilter *pCapture = NULL; //видеофильтр
 
    ICreateDevEnum *pDevEnum = NULL;
    IEnumMoniker* pEnum = NULL;
    IMoniker* pMoniker = NULL;
 
    IMediaControl * pMediaControl(NULL);
    IMediaEventEx  * pEvent(NULL);
 
     TRect *pVideoRect(NULL);
 
    //Инициализируем библиотеку COM
    hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
    if(SUCCEEDED(hr))
    {
        //Создание графа-фильтров - Create the Capture Graph Builder
        hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild );
    if (SUCCEEDED(hr))
        {
            //Создание менеджера графа фильтров - Create the Filter Graph Manager
            hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph);
            if (SUCCEEDED(hr))
            {
                //Initialize the Capture Graph Builder
                pBuild->SetFiltergraph(pGraph);
 
                // Find system device enumerator to find a video capture device.
                hr = CoCreateInstance(CLSID_SystemDeviceEnum, 0, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (LPVOID*)&pDevEnum);
 
                if(SUCCEEDED(hr))
                {
                    //создает счетчик для определенной категории устройств
                    hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0);
 
                    if(SUCCEEDED(hr))
                    {
                        if( pEnum->Next(1, &pMoniker,0) == S_OK )
                        {
                            hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void **)&pCapture);
                          //hr = pGraph->AddFilter(pCapture, L"CaptureFilter");
                          //pGraph->RenderFile(L"D:\\Wildlife.wmv", NULL); //чтение файла - работает
 
                            if(SUCCEEDED(hr))
                            {
                                pGraph->AddFilter(pCapture, L"Capture Filter");
                                hr = pBuild->RenderStream(/*&PIN_CATEGORY_PREVIEW*/NULL, NULL/*&MEDIATYPE_Video*/, pCapture, NULL, NULL);  //3,4,5 Параметры - фильтры, которые объединены в граф
                                pDevEnum->Release();
                                pEnum->Release();
                                pMoniker->Release();
 
                                //Specify the owner window.
                                IVideoWindow *pVidWin = NULL;
                                OAHWND hWnd;
                                pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
 
                                pVidWin->put_Owner((OAHWND)Panel1->Handle);  //поместил в панел
                                pVidWin->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS );
                                pVidWin->SetWindowPosition(Panel1->Left,Panel1->Top, Panel1->Width - Panel1->Left,Panel1->Height - Panel1->Top);
 
                                // Run the graph.
                                pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
                                pMediaControl->Run();
 
                            }
                            else
                                pBuild->Release();
 
                        }
                    }
                }
            }
        }
    }
P.S.: Если кто знает как захватывать видео поток с камеры в более удобной форме для обмена по сети между клиент-сервером, прошу отписаться.
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
16.04.2015, 16:56
opencv

C++
1
2
3
4
5
6
7
 // получаем любую подключённую камеру
CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); //cvCaptureFromCAM( 0 );
IplImage* frame=0;
while(true)
{
frame = cvQueryFrame( capture );
}
Добавлено через 25 секунд
подробнее тут

Добавлено через 58 секунд
Цитата Сообщение от Nicrom Посмотреть сообщение
Так вот вопрос, при помощи чего мне реализовать передачу видео потока между клиентом и сервером и желательно бы ещё научиться сжимать поток по размеру
изучаем RTCP RTSP RTP, перекодировать, сжать можно поробовать в сторону ffmpeg посмотреть
1
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
17.04.2015, 08:44
Цитата Сообщение от Nicrom Посмотреть сообщение
Если кто знает
топорный но простой для понимания способ - руками передавать как MJPEG. трафик правда будет большой
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.04.2015, 08:44
Помогаю со студенческими работами здесь

Qt видео с видеокамеры
Всем привет. Возникла необходимость написать программу, которая отображает видео с видеокамеры на PC. Программу планирую писать на QT....

Оцифровка видео с видеокамеры. Некорректное изображение
Добрый день. пытаюсь оцифровать видео через "easycap usb 2.0". VHS кассеты с видеоплеера хорошо выводятся на компьютер. Квадратом. ...

Захват реального видео с охранной видеокамеры.
Требуется получать фотографию изображения с охранной видеокамеры, подключенной к плате ТВ тюнера. Print Screen не спасает так как при...

При записи видео с видеокамеры не записывается звук
Проблемка: Есть проги для записи видео с видеокамеры: Acive WebCam и Webcam Motion Detector. И обе пишут видео буз звука. При чем в...

Трабл с отображением видео
Добрый вечер,проблема следующая. Видеофайлы на компьютере в целом (в соц сетях и тд. и на самом компьютере) приобрели плохое...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru