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

Подключаться к IP камере и делать несколько "снимков"

15.07.2014, 10:04. Показов 3138. Ответов 5
Метки нет (Все метки)

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

Подскажите, совсем зарылся.
Задача подключаться к IP камере и делать несколько "снимков"... т.е. слушать поток, и вырезать оттуда пору фреймов.

Есть большая загвоздка - работает всё это на просмотр через IE + плагин SLWXctrl.msi.
Мануала про него я вообще не нашел, но достал из него ocx файл и прикрутил к своему C# проекту.
Сделал авторизацию, и в итоге я вижу на форме (в ActiveX плагине). Но как мне взять картинку и сохранить?

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using WXIECTRLLib;
 
namespace SteamLab4
{
    public partial class Form1 : Form
    {
        //protected WXIECtrl wx;
 
        public Form1()
        {
            InitializeComponent();
 
            WebClient client = new WebClient();
            client.UseDefaultCredentials = true;
            client.Credentials = new NetworkCredential("admin", "admin");
            client.DownloadString(@"http://192.168.0.129");
 
            axWXIECtrl1.INTFWXConnect(@"http://192.168.0.129/");
            Thread.Sleep(500);
            axWXIECtrl1.INTFVideoOn(1);
            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            int width = axWXIECtrl1.Width;
            int height = axWXIECtrl1.Height;
            Bitmap bitMap = new Bitmap(width, height);
            axWXIECtrl1.DrawToBitmap(bitMap, new Rectangle(0, 0, width, height));
            bitMap.Save(@"C:\test1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
        }
    }
}
По нажатию на кнопку - серный прямоугольник... Да и вообще мне кажется сохранять через форму - как то не правильно, но дальше не понимаю даже как и быть, гугл уже до 15-й страницы доходит (
Вложения
Тип файла: zip WXIECtrl.zip (65.8 Кб, 23 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.07.2014, 10:04
Ответы с готовыми решениями:

Как запретить камере делать фото?
Как запретить камере делать фото ?? Есть ли такая настройка в андроид?? то есть если я даже нажимаю в приложении камера сделать фото, но...

Отключил микрофон в веб камере что делать?
На компе стоит windows 7. Через записывающие устройства я как то удалил микрофон веб камеры. Как мне его теперь включить..Что делать?? ...

Сбиты цвета на встроенной в ноутбук веб-камере. Что делать?
Ноутбук Asus F402W Скиншот:

5
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
15.07.2014, 14:28
...если ActiveX не имеет методов граббинга, а судя по всему:
Кликните здесь для просмотра всего текста
Delphi
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
197
198
199
200
unit WXIECTRLLib_TLB;
 
// ************************************************************************ //
// WARNING                                                                    
// -------                                                                    
// The types declared in this file were generated from data read from a       
// Type Library. If this type library is explicitly or indirectly (via        
// another type library referring to this type library) re-imported, or the   
// 'Refresh' command of the Type Library Editor activated while editing the   
// Type Library, the contents of this file will be regenerated and all        
// manual modifications will be lost.                                         
// ************************************************************************ //
 
// $Rev: 17244 $
// File generated on 15.07.2014 13:25:11 from Type Library described below.
 
// ************************************************************************  //
// Type Lib: WXIECtrl.ocx (1)
// LIBID: {73233D42-8C74-4218-8AFE-74997407869E}
// LCID: 0
// Helpfile: D:\User\Badlo_arhiv_ntc\active\Portable_TDLite\ _activex_ex\WXIECtrl.hlp
// HelpString: WXIECtrl ActiveX Control module
// DepndLst: 
//   (1) v2.0 stdole, (C:\WINDOWS\system32\STDOLE2.TLB)
// Errors:
//   Error creating palette bitmap of (TWXIECtrl) : No Server registered for this CoClass
// Cmdline:
//   tlibimp -p+ WXIECtrl.ocx
// ************************************************************************ //
// *************************************************************************//
// NOTE:                                                                      
// Items guarded by $IFDEF_LIVE_SERVER_AT_DESIGN_TIME are used by properties  
// which return objects that may need to be explicitly created via a function 
// call prior to any access via the property. These items have been disabled  
// in order to prevent accidental use from within the object inspector. You   
// may enable them by defining LIVE_SERVER_AT_DESIGN_TIME or by selectively   
// removing them from the $IFDEF blocks. However, such items must still be    
// programmatically created via a method of the appropriate CoClass before    
// they can be used.                                                          
{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers. 
{$WARN SYMBOL_PLATFORM OFF}
{$WRITEABLECONST ON}
{$VARPROPSETTER ON}
{$ALIGN 4}
interface
 
uses Windows, ActiveX, Classes, Graphics, OleCtrls, OleServer, StdVCL, Variants;
  
 
 
// *********************************************************************//
// GUIDS declared in the TypeLibrary. Following prefixes are used:        
//   Type Libraries     : LIBID_xxxx                                      
//   CoClasses          : CLASS_xxxx                                      
//   DISPInterfaces     : DIID_xxxx                                       
//   Non-DISP interfaces: IID_xxxx                                        
// *********************************************************************//
const
  // TypeLibrary Major and minor versions
  WXIECTRLLibMajorVersion = 1;
  WXIECTRLLibMinorVersion = 0;
 
  LIBID_WXIECTRLLib: TGUID = '{73233D42-8C74-4218-8AFE-74997407869E}';
 
  DIID__DWXIECtrl: TGUID = '{54AF5209-1502-41D1-B400-07688A852908}';
  DIID__DWXIECtrlEvents: TGUID = '{2B37B898-163C-46FA-A643-348ABEE23535}';
  CLASS_WXIECtrl: TGUID = '{DE5F1875-24A5-422A-A6F6-CC434D510411}';
type
 
// *********************************************************************//
// Forward declaration of types defined in TypeLibrary                    
// *********************************************************************//
  _DWXIECtrl = dispinterface;
  _DWXIECtrlEvents = dispinterface;
 
// *********************************************************************//
// Declaration of CoClasses defined in Type Library                       
// (NOTE: Here we map each CoClass to its Default Interface)              
// *********************************************************************//
  WXIECtrl = _DWXIECtrl;
 
 
// *********************************************************************//
// DispIntf:  _DWXIECtrl
// Flags:     (4112) Hidden Dispatchable
// GUID:      {54AF5209-1502-41D1-B400-07688A852908}
// *********************************************************************//
  _DWXIECtrl = dispinterface
    ['{54AF5209-1502-41D1-B400-07688A852908}']
    function INTFWXConnect(const docURL: WideString): Integer; dispid 1;
    procedure INTFWXDisconnect; dispid 2;
    function INTFVideoOn(videoON: Integer): Integer; dispid 3;
    function INTFWXCommandEx(cmd: Integer; prm0: Integer; prm1: Integer; prm2: Integer): Integer; dispid 4;
  end;
 
// *********************************************************************//
// DispIntf:  _DWXIECtrlEvents
// Flags:     (4096) Dispatchable
// GUID:      {2B37B898-163C-46FA-A643-348ABEE23535}
// *********************************************************************//
  _DWXIECtrlEvents = dispinterface
    ['{2B37B898-163C-46FA-A643-348ABEE23535}']
  end;
 
 
// *********************************************************************//
// OLE Control Proxy class declaration
// Control Name     : TWXIECtrl
// Help String      : WXIECtrl Control
// Default Interface: _DWXIECtrl
// Def. Intf. DISP? : Yes
// Event   Interface: _DWXIECtrlEvents
// TypeFlags        : (34) CanCreate Control
// *********************************************************************//
  TWXIECtrl = class(TOleControl)
  private
    FIntf: _DWXIECtrl;
    function  GetControlInterface: _DWXIECtrl;
  protected
    procedure CreateControl;
    procedure InitControlData; override;
  public
    function INTFWXConnect(const docURL: WideString): Integer;
    procedure INTFWXDisconnect;
    function INTFVideoOn(videoON: Integer): Integer;
    function INTFWXCommandEx(cmd: Integer; prm0: Integer; prm1: Integer; prm2: Integer): Integer;
    property  ControlInterface: _DWXIECtrl read GetControlInterface;
    property  DefaultInterface: _DWXIECtrl read GetControlInterface;
  published
    property Anchors;
  end;
 
procedure Register;
 
resourcestring
  dtlServerPage = 'Servers';
 
  dtlOcxPage = 'ActiveX';
 
implementation
 
uses ComObj;
 
procedure TWXIECtrl.InitControlData;
const
  CControlData: TControlData2 = (
    ClassID: '{DE5F1875-24A5-422A-A6F6-CC434D510411}';
    EventIID: '';
    EventCount: 0;
    EventDispIDs: nil;
    LicenseKey: nil (*HR:$80040154*);
    Flags: $00000000;
    Version: 401);
begin
  ControlData := @CControlData;
end;
 
procedure TWXIECtrl.CreateControl;
 
  procedure DoCreate;
  begin
    FIntf := IUnknown(OleObject) as _DWXIECtrl;
  end;
 
begin
  if FIntf = nil then DoCreate;
end;
 
function TWXIECtrl.GetControlInterface: _DWXIECtrl;
begin
  CreateControl;
  Result := FIntf;
end;
 
function TWXIECtrl.INTFWXConnect(const docURL: WideString): Integer;
begin
  Result := DefaultInterface.INTFWXConnect(docURL);
end;
 
procedure TWXIECtrl.INTFWXDisconnect;
begin
  DefaultInterface.INTFWXDisconnect;
end;
 
function TWXIECtrl.INTFVideoOn(videoON: Integer): Integer;
begin
  Result := DefaultInterface.INTFVideoOn(videoON);
end;
 
function TWXIECtrl.INTFWXCommandEx(cmd: Integer; prm0: Integer; prm1: Integer; prm2: Integer): Integer;
begin
  Result := DefaultInterface.INTFWXCommandEx(cmd, prm0, prm1, prm2);
end;
 
procedure Register;
begin
  RegisterComponents(dtlOcxPage, [TWXIECtrl]);
end;
 
end.

не имеет, то ловить поток с камеры самому. Только вот формат выяснить, хорошо если MJPEG, тогда поток чистые фреймы. Еще есть опен-сурсные DirectShow-фильтры для работы с IP камерами (ваша сетевая камера будет представлена в системе как локальная).
0
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 49
15.07.2014, 15:39  [ТС]
Благодарю за ответ, а я так понял этот плагин дешифратор какой-то, раз они стандартный не использовали!? Как без него ловить поток? (

А так же авторизация еще, но это вроде еще поддается моему осмыслению...
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
15.07.2014, 16:15
...это плагин-модуль из разряда, "возьми и пользуйся" без раскрытия кишочков.
0
1 / 1 / 0
Регистрация: 07.02.2013
Сообщений: 49
16.07.2014, 20:23  [ТС]
Сегодня узнал что некий софт в своё время мог спокойно подключаться к данным камерам, как я понимаю без всяких плагинов. Причем софт далеко не той компании что и камера. И не просто отображалось, а и запись велась, как раз то что нужно.
Значит шанс есть, а вот понимания совсем не осталось, прошу помочь кто чем может!!!!
0
 Аватар для raxper
10237 / 6615 / 498
Регистрация: 28.12.2010
Сообщений: 21,154
Записей в блоге: 1
16.07.2014, 20:55
...говорил же, есть фильтры DS_JPEG-MJPEG, возьмите их и используйте DirectShow для подключения, грабинга.

http://msdn.microsoft.com/ru-r... s.85).aspx
http://directshownet.sourceforge.net/about.html
http://habrahabr.ru/post/174867/
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.07.2014, 20:55
Помогаю со студенческими работами здесь

Агент моментальных снимков не находит папку моментальных снимков
Здравствуйте, я пытаюсь сделать репликации, но у меня почему-то агент моментальных снимков не может найти папку куда их сохранять(я пока...

Как делать несколько операций
Хочу чтобы в консольном приложении вместе с циклом (while) играл звук (PlaySound). Последовательность: int main PlaySound ...

Делать перенаправление через несколько секунд
Здравствуйте! Подскажите, как из этого перенаправления: header('location: index.php'); сделать перенаправление через несколько...

В одном контроле MVC делать несколько ActionResult
Добрый день Подскажите пожалуйста. Я хочу расположить в одном контроле несколько методов типа public ActionResult...

Совет - делать несколько блоков или 1 на все страницы?
3-х уровневый проект. (в глубину). Типы Баннеров везде одинаковые. Верно будет, для каждого уровня сделать свои блоки? Или можно 1...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru