Форум программистов, компьютерный форум, киберфорум
C/C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C/C++ Ожидание Com сервера https://www.cyberforum.ru/ c-cpp/ thread1712311.html
Доброго времени суток. Есть две программы а.exe b.exe. b.exe содержит com объекты. Из а по средствам CreateOleObject запускаем b. При попытке закрытия b выскакивает предупреждение что в b имеются активные Com объекты и они станут не доступны тому приложению которое их вызвало. Если все таки нажимаю на ОК то b закрывается. При следующем открытии b из a происходит "Ошибка сервера". Подозреваю что...
Задание диапазона ячеек при объединении (OLE-сервер Excel) C/C++
Добрый день. Столкнулась с такой проблемой: при работе с OLE-сервером Excel, при задании диапазона объединения ячеек, появилась необходимость задавать его не конкретным значением, а переменной . Т.е. когда пишу так: App.OlePropertyGet("Range", WideString("A9:J9")).OleProcedure("Select"); App.OlePropertyGet("Selection").OleProcedure("Merge"); Программа отлично все отрабатывает. Но если...
C/C++ DirectShow, проиграть видео в своем окне? IGraphBuilder::RenderFile играет в отдельном окне, реально ли как то проиграть файл в своем уже существующем окне? Добавлено через 20 часов 43 минуты не могу понять это - https://msdn.microsoft.com/en-us/library/dd390536(v=vs.85).aspx , то что мне нужно ,или нет? https://www.cyberforum.ru/ c-cpp/ thread1683402.html C/C++ Реализация ActiveX-контейнера (без MFC) https://www.cyberforum.ru/ c-cpp/ thread1682113.html
Подскажите как реализовать activex контейнер на winapi, без MFC
C/C++ Как из CPictureHolder получить Bitmap(GDI+) ?
Здравствуйте! Подскажите пожалуйста, как из CPictureHolder получить Bitmap(GDI+) ? Решение использовать GDI+ пришло потому, что мне надо вращать картинки в моем activex (написан на C++ и MFC). Я знаю, что это можно сделать и на GDI через StretchBlt, но я хочу на GDI+ :) Ниже приведу код моей функции OnDraw, чтобы было понятнее, что я хочу сделать. Graphics graphics(pdc->m_hDC); Bitmap...
C/C++ DirectShow + Adobe Flash Player PPAPI Админы, прошу прощение если темы не туда сунул. Передвинет плз, если не там. Есть задачка создать виртуальную камеру на локальном ПК. В общих чертах проект сделан. Основой для решения был этот пост http://www.codeproject.com/Articles/437617/DirectShow-Virtual-Video-Capture-Source-Filter-in Есть маленькая загвоздка. Камеры, отлично работают с внешним флеш плеером (тип: NSAPI), но эта... https://www.cyberforum.ru/ c-cpp/ thread1674364.html
C/C++ Связь клиента с локальным exe-сервером без регистрации в реестре добрый вечер. есть готовый ATLExeServer, и консольный клиент. нужно осуществить взаимодействие между ними без необходимости регистрации в реестре. сразу скажу, что вариант с регистрацией в реестре - рабочий. нужно получить аналогичный эффект, https://www.cyberforum.ru/ c-cpp/ thread1672874.html Найти к какому COM порту подключено устройство C/C++
Добрый день. Подскажите пожалуйста, как можно получить список активных COM портов в винде(тот что я вижу в диспетчере устройств). Задачу у меня следующая: на ардуино собрал простенькую схему и написал простенькую прогу которая считывает с COM порта символы. COM порт задан фиксировано, а я хочу сделать так, чтобы порт выбирался автоматом. Подскажите в какую сторону рыть?
C/C++ Взаимодействие exe64 с dll32. COM объект без регистрации в реестре добрый вечер. windows7 (или выше), visual studio 2013, c++ есть 64 битное приложение (для простоты пусть будет обычное консольное) и 32 битная библиотека. нужно наладить взаимодействие при помощи COM объекта. при этом критично обойтись без регистрации в реестре. https://www.cyberforum.ru/ c-cpp/ thread1664128.html C/C++ Activex перенести на задний план (позиция по оси z) Здравствуйте! Проблема состоит в следующем... При добавлении в СКАДу (omron cx-supervisor) мой activex (написан в MFC C++) в RunTime режиме всегда идет поверх объектов, которые созданы в СКАДе (например Ellipse), даже если для объекта СКАДы я указываю Rise -> To Top, хотя в режиме разработки все нормально (axtivex можно передвинуть на задний план). Как сделать так чтобы мой activex оказался... https://www.cyberforum.ru/ c-cpp/ thread1643286.html
ActiveX Color Property Page не позволяет выбрать цвет из палитры C/C++
Здравствуйте. Я создал в Visual Studio ActiveX на MFC, добавил туда стандартную страницу свойств для выбора цвета, создал свойство BackColor. Страница свойств появилась, но выбор цвета можно осуществить только если выбираешь его из "Системный цвет". Если выбирать цвет из палитры, то ничего не происходит. Подскажите как это побороть... Если писать значение цвета напрямую в свойство, минуя...
C/C++ MS Word получить плоский текст с ячейки https://www.cyberforum.ru/ c-cpp/ thread1638975.html
Есть код нечто вроде: Variant Cell= Table.OleFunction("Cell", r, 2); Variant Range= Cell.OlePropertyGet("Range"); Variant Text= Range.OlePropertyGet("Text"); (Использую С++Builder) Но проблема в том что в ячейке таблицы содержится не только текст но и формула, мне нужно из
Модератор
3386 / 2158 / 352
Регистрация: 13.01.2012
Сообщений: 8,375
23.04.2016, 00:37 0

Воспроизведение видео с ip камеры - C/C++ - Ответ 9058429

23.04.2016, 00:37. Показов 54981. Ответов 78
Метки (Все метки)

Ответ

Как и обещал выкладываю пример дружбы FFMPEG с Borland C++ Builder через DLL созданную в Visual C++
демонстрируется подключение к IP-камере (RTSP)
для тех кто не хочет качать привожу текст
заголовочный файл DLL
Кликните здесь для просмотра всего текста
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
//------------------------------------------------------------------------------
//ffmpeg_test 1.0
//------------------------------------------------------------------------------
#ifndef ffmpeg_test_h
#define ffmpeg_test_h
//------------------------------------------------------------------------------
#include <windows.h>
//------------------------------------------------------------------------------
#ifdef EXPORT
#define DECL_SPEC __declspec(dllexport) __stdcall
#else
#define DECL_SPEC __declspec(dllimport) __stdcall
#endif
 
#ifdef __cplusplus
extern "C" {
#endif
//------------------------------------------------------------------------------
void DECL_SPEC ffmpeg_test_start(char *src, void (*cb_fn)(void));
void DECL_SPEC ffmpeg_test_stop(void);
int DECL_SPEC ffmpeg_test_get_bmp(void *bmp_bits, int w, int h); //32 bit
//------------------------------------------------------------------------------
#ifdef __cplusplus
} //extern "C"
#endif
 
#undef EXPORT
//------------------------------------------------------------------------------
#endif //ffmpeg_test_h

тело DLL
Кликните здесь для просмотра всего текста
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#define EXPORT
#include "ffmpeg_test.h"
 
extern "C" {
#include <libavformat/avformat.h>
#include <libavdevice/avdevice.h>
#include <libswscale/swscale.h>
}
 
#include <stdio.h>
 
static AVFormatContext *format_ctx;
 
static int stream;
 
static AVCodecContext *codec_ctx;
 
static AVFrame *frame;
 
static AVFrame *x_bgr_frame;
 
static SwsContext *x_bgr_ctx;
 
static HANDLE thread_h;
static int terminated;
 
void (*cb_fn)(void);
 
static DWORD WINAPI proc(LPVOID arg)
{
    AVPacket packet;
    int finished;
    while (!terminated)
    {
        if (av_read_frame(format_ctx, &packet) != 0)
        {
            ExitThread(0);
        }
        else if (packet.stream_index == stream)
        {
            if (avcodec_decode_video2(codec_ctx, frame, &finished, &packet) > 0)
            {
                if (finished)
                {
                    cb_fn();
                }
            }
        }
        av_free_packet(&packet);
    }
 
    ExitThread(0);
}
 
void DECL_SPEC ffmpeg_test_start(char *src, void (*cb_fn)(void))
{
    ::cb_fn = cb_fn;
 
    av_register_all();
 
    format_ctx = avformat_alloc_context();
    if (!format_ctx)
    {
        return;
    }
 
    AVDictionary *opts = 0;
    av_dict_set(&opts, "rtsp_transport", "tcp", 0);
 
    if (avformat_open_input(&format_ctx, src, 0, &opts) != 0)
    {
        return;
    }
 
    if (avformat_find_stream_info(format_ctx, 0) < 0)
    {
        return;
    }
  
    stream = -1;
    for (int i = 0; i < format_ctx->nb_streams; i++)
        if (format_ctx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
        {
            stream = i;
            break;
        }
    if (stream == -1)
    {
        return;
    }
  
    codec_ctx = format_ctx->streams[stream]->codec;
  
    AVCodec *codec = avcodec_find_decoder(codec_ctx->codec_id);
    if (!codec)
    {
        return;
    }
 
    if (avcodec_open2(codec_ctx, codec, 0) != 0)
    {
        return;
    }
 
    frame = av_frame_alloc();
    if (!frame)
    {
        return;
    }
 
    x_bgr_frame = 0;
 
    terminated = 0;
    DWORD thread_id;
    thread_h = CreateThread
    (
        0,
        0,
        proc,
        0,
        0,
        &thread_id
    );
}
 
void DECL_SPEC ffmpeg_test_stop(void)
{
    terminated = 1;
 
    WaitForSingleObject(thread_h, INFINITE);
    CloseHandle(thread_h);
 
    sws_freeContext(x_bgr_ctx);
 
    av_free(x_bgr_frame);
    av_free(frame);
  
    avcodec_close(codec_ctx);
  
    avformat_close_input(&format_ctx);
 
    avformat_free_context(format_ctx);
}
 
int DECL_SPEC ffmpeg_test_get_bmp(void *bmp_bits, int w, int h)
{
    if (!x_bgr_frame || x_bgr_frame->width != w || x_bgr_frame->height != h)
    {
        x_bgr_frame = av_frame_alloc();
        if (!x_bgr_frame)
        {
            return 0;
        }
 
        x_bgr_frame->width = w;
        x_bgr_frame->height = h;
 
        if 
        (
            avpicture_fill((AVPicture *)x_bgr_frame, 0, PIX_FMT_RGB32, w, h) < 0
        )
        {
            return 0;
        }
 
        x_bgr_ctx = sws_getContext(codec_ctx->width, codec_ctx->height, codec_ctx->pix_fmt, w, h, PIX_FMT_RGB32, SWS_BICUBIC, 0, 0, 0);
        if (!x_bgr_ctx)
        {
            return 0;
        }
    }
 
    x_bgr_frame->data[0] = (uint8_t *)bmp_bits;
    x_bgr_frame->data[0] += x_bgr_frame->linesize[0] * (h - 1);
    x_bgr_frame->linesize[0] = -x_bgr_frame->linesize[0];   
    sws_scale(x_bgr_ctx, frame->data, frame->linesize, 0, codec_ctx->height, x_bgr_frame->data, x_bgr_frame->linesize);
    x_bgr_frame->linesize[0] = -x_bgr_frame->linesize[0]; 
 
    return 1;
}
 
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

заголовочный файл формы
Кликните здесь для просмотра всего текста
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
//---------------------------------------------------------------------------
 
#ifndef main_form_unitH
#define main_form_unitH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class Tmain_form;
//---------------------------------------------------------------------------
class repaint_thread_t : public TThread
{
public:
    Tmain_form *form;
 
    repaint_thread_t(bool CreateSuspended, Tmain_form *form);
 
    void __fastcall repaint(void);
 
    virtual void __fastcall Execute(void);
};
//---------------------------------------------------------------------------
class Tmain_form : public TForm
{
__published:    // IDE-managed Components
        void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);
        void __fastcall FormResize(TObject *Sender);
private:    // User declarations
public:     // User declarations
        __fastcall Tmain_form(TComponent* Owner);
 
        void __fastcall WMPaint(TWMPaint& Message);
        void __fastcall WMEraseBkgnd(TWMEraseBkgnd& Message);
 
        BEGIN_MESSAGE_MAP
            VCL_MESSAGE_HANDLER(WM_PAINT, TWMPaint, WMPaint)
            VCL_MESSAGE_HANDLER(WM_ERASEBKGND, TWMEraseBkgnd, WMEraseBkgnd)
        END_MESSAGE_MAP(TForm)
 
        HANDLE h_a;
        HANDLE h_b;
 
        int buffer_w, buffer_h;
 
        char *form_bmp_bits;
        HBITMAP form_bmp_h;
 
        TCanvas *mem_c;
 
        repaint_thread_t *repaint_thread;
 
        void create_frame_buffer(void);
        void destroy_frame_buffer(void);
 
        void draw_text(TCanvas *c, int w, int h);
};
//---------------------------------------------------------------------------
extern PACKAGE Tmain_form *main_form;
//---------------------------------------------------------------------------
#endif

тело формы
Кликните здесь для просмотра всего текста
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "main_form_unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
Tmain_form *main_form;
//---------------------------------------------------------------------------
#include "ffmpeg_test.h"
//---------------------------------------------------------------------------
class mt_obj
{
public:
    mt_obj(void) {InitializeCriticalSection(&cs);}
    virtual ~mt_obj(void) {DeleteCriticalSection(&cs);}
 
    void lock(void) {EnterCriticalSection(&cs);}
    void unlock(void) {LeaveCriticalSection(&cs);}
 
private:
    CRITICAL_SECTION cs;
 
private:
    mt_obj(const mt_obj &) {}
    const mt_obj &operator =(const mt_obj &) {}
};
 
static mt_obj cs;
//---------------------------------------------------------------------------
repaint_thread_t::repaint_thread_t(bool CreateSuspended, Tmain_form *form): TThread(CreateSuspended), form(form) {}
 
void __fastcall repaint_thread_t::repaint(void)
{
    form->Repaint();
}
 
void __fastcall repaint_thread_t::Execute(void)
{
    while (!Terminated)
    {
        WaitForSingleObject(form->h_a, 250);
        Synchronize(repaint);
        WaitForSingleObject(form->h_b, 250);
    }
}
//---------------------------------------------------------------------------
void cb_fn(void)
{
    cs.lock();
    ffmpeg_test_get_bmp(main_form->form_bmp_bits, main_form->buffer_w, main_form->buffer_h);
    cs.unlock();
 
    ResetEvent(main_form->h_b);
    SetEvent(main_form->h_a);
    ResetEvent(main_form->h_a);
    SetEvent(main_form->h_b);
}
//---------------------------------------------------------------------------
void Tmain_form::create_frame_buffer(void)
{
    buffer_w = ClientWidth;
    buffer_h = ClientHeight;
 
    BITMAPINFOHEADER form_bmi_hdr;
    form_bmi_hdr.biSize = sizeof(BITMAPINFOHEADER);
    form_bmi_hdr.biWidth = buffer_w;
    form_bmi_hdr.biHeight = buffer_h;
    form_bmi_hdr.biPlanes = 1;
    form_bmi_hdr.biBitCount = 32;
    form_bmi_hdr.biCompression = BI_RGB;
    form_bmi_hdr.biSizeImage = form_bmi_hdr.biWidth * form_bmi_hdr.biHeight * 4;
    form_bmi_hdr.biXPelsPerMeter = 0;
    form_bmi_hdr.biYPelsPerMeter = 0;
    form_bmi_hdr.biClrUsed = 0;
    form_bmi_hdr.biClrImportant = 0;
 
    form_bmp_h = CreateDIBSection(0, (BITMAPINFO *)&form_bmi_hdr, DIB_RGB_COLORS, (void **)&form_bmp_bits, 0, 0);
}
//---------------------------------------------------------------------------
void Tmain_form::destroy_frame_buffer(void)
{
    DeleteObject(form_bmp_h);
}
//---------------------------------------------------------------------------
__fastcall Tmain_form::Tmain_form(TComponent* Owner)
        : TForm(Owner)
{
    ClientWidth = 400;
    ClientHeight = 300;
 
    h_a = CreateEvent(0, FALSE, FALSE, 0);
    h_b = CreateEvent(0, FALSE, FALSE, 0);
 
    DoubleBuffered = true;
 
    mem_c = new TCanvas;
 
    create_frame_buffer();
 
    repaint_thread = new repaint_thread_t(false, this);
 
    ffmpeg_test_start("rtsp://admin:12345@192.168.1.2/h264/ch1/sub/av_stream", cb_fn);
}
//---------------------------------------------------------------------------
void Tmain_form::draw_text(TCanvas *c, int w, int h)
{
    AnsiString s = "...HELLO WORLD...";
 
    c->Brush->Style = bsClear;
    c->Font->Color = clWhite;
    c->Font->Size = 24;
    c->Font->Style = TFontStyles()<< fsBold;
    c->TextOutA(w / 2 - c->TextWidth(s) / 2, h / 2 - c->TextHeight(s) / 2, s);
}
//---------------------------------------------------------------------------
void __fastcall Tmain_form::WMPaint(TWMPaint& Message)
{
    if (form_bmp_h)
    {
        PAINTSTRUCT ps;
        HDC paint_hdc = BeginPaint(Handle, &ps);
 
        HDC hdc_1 = CreateCompatibleDC(paint_hdc);
        HDC hdc_2 = CreateCompatibleDC(paint_hdc);
        mem_c->Handle = hdc_1;
 
        HBITMAP h_1 = CreateCompatibleBitmap(paint_hdc, buffer_w, buffer_h);
        HBITMAP old_h_1 = (HBITMAP)SelectObject(hdc_1, h_1);
 
        HBITMAP old_h_2 = (HBITMAP)SelectObject(hdc_2, form_bmp_h);
        BitBlt(hdc_1, 0, 0, buffer_w, buffer_h, hdc_2, 0, 0, SRCCOPY);
 
        // ...do something with hdc_1...
        draw_text(mem_c, buffer_w, buffer_h);
 
        BitBlt(paint_hdc, 0, 0, buffer_w, buffer_h, hdc_1, 0, 0, SRCCOPY);
 
        SelectObject(hdc_1, old_h_1);
        SelectObject(hdc_2, old_h_2);
 
        DeleteObject(h_1);
 
        DeleteDC(hdc_1);
        DeleteDC(hdc_2);
 
        EndPaint(Handle, &ps);
    }
}
//---------------------------------------------------------------------------
void __fastcall Tmain_form::WMEraseBkgnd(TWMEraseBkgnd& Message)
{
    Message.Result = 1;
}
//---------------------------------------------------------------------------
void __fastcall Tmain_form::FormCloseQuery(TObject *Sender, bool &CanClose)
{
    CloseHandle(h_a);
    CloseHandle(h_b);
 
    ffmpeg_test_stop();
 
    delete repaint_thread;
 
    destroy_frame_buffer();
}
//---------------------------------------------------------------------------
void __fastcall Tmain_form::FormResize(TObject *Sender)
{
    cs.lock();
    destroy_frame_buffer();
    create_frame_buffer();
    cs.unlock();
}
//---------------------------------------------------------------------------

для работы нужен ffmpeg-...-win32-shared и ffmpeg-...-win32-dev качаем здесь
моменты настройки проектов описаны в файле ffmpeg_test_bcb/HELP/HELP.txt

Вернуться к обсуждению:
Воспроизведение видео с ip камеры C/C++
Миниатюры
Воспроизведение видео с ip камеры  
Вложения
Тип файла: rar ffmpeg_test_bcb.rar (278.5 Кб, 235 просмотров)
Тип файла: rar ffmpeg_test.rar (224.9 Кб, 254 просмотров)
4
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2016, 00:37
Готовые ответы и решения:

Запись видео с веб камеры
Новичок в этом деле. Я даже не знаю в какую тему мой вопрос опубликовать. Сейчас набираю теорию...

Захват видео с веб-камеры (C++)
Здравствуйте! Я установил Visual Studio 2015 Community и библиотеку OpenCV 3.1.0 на Windows 10....

DirectShow: захват видео с веб-камеры, воспроизведение
Посоветуйте для начала понятный мануал, что-бы можно было с нуля разобраться (желательно без воды)....

Наложить видео с альфа каналом поверх картинки с камеры, чтобы видео не перекрывало картинку
всем привет! стоит такая задача: есть видео в контейнере .mov, которое содержит альфаканал...

78
23.04.2016, 00:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.04.2016, 00:37
Помогаю со студенческими работами здесь

Обработка видео с камеры видео наблюдения (для экспертов)
Обработка видео с камеры видео наблюдения (для экспертов) Имеются несколько каналов видео с камер...

дырка для захвата видео с видео камеры
На моем компе стоит Geforce 7600 GS на ней нет порта для видеокамеры как на ноуте:wall: можно ли...

Как сделать так что бы обычное видео из жесткого диска подавалось как видео с вэб-камеры?
кто знает?

Воспроизведение видео
Как в Windows.Forms загрузить видео? Когда я жмякаю на кнопку - &gt; появляется видео и без сигнала...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru