Как записать видео и звук с WEB-Camera

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 06.04.2017 (Чт) 10:16

Здравствуйте!
И снова возникла у меня вот такая производственная необходимость. Для прохождения аккредитации в нашем ВУЗе спец. комиссия обязала нас сделать видео и аудио регистрацию учебного процесса для объективности оценивания знаний студентов. Короче, делать им не хрен и нас напрягают. В общем, помогите кто чем может, Христа ради! Получать видео картинку, пока без звука, с WEB камеры у меня получилось по такому вот коду...
Код: Выделить всё
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
Private mCapHwnd As Long
Private Const CONNECT As Long = 1034
Private Const DISCONNECT As Long = 1035
Private Const GET_FRAME As Long = 1084
Private Const COPY As Long = 1054

Private Sub Form_Load()
Clipboard.Clear
STARTCAM
End Sub

Sub STARTCAM()
mCapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 0, 0, Me.hwnd, 0)
DoEvents
SendMessage mCapHwnd, CONNECT, 0, 0
Timer.Enabled = True
End Sub

Sub STOPCAM()
DoEvents
SendMessage mCapHwnd, DISCONNECT, 0, 0
Timer.Enabled = False
End Sub

Private Sub Timer_Timer() 'Interval - 50 msec
On Error Resume Next
SendMessage mCapHwnd, GET_FRAME, 0, 0
SendMessage mCapHwnd, COPY, 0, 0
Picture1.Picture = Clipboard.GetData
Clipboard.Clear
End Sub

Private Sub Form_Unload(Cancel As Integer)
STOPCAM
End Sub

Подскажите, пожалуйста, как можно получить еще и звук и потом все это записать в какой-нибудь AVI-файл??? Это очень сложно сделать или как два пальца???.. :roll:
Вложения
WEBCamera.rar
Захват изображения с WEB камеры...
(1.51 Кб) Скачиваний: 9

Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 06.04.2017 (Чт) 10:16

В интернете на форумах по Delphi нашел то, что нужно: в этом коде (см. приложение)... все захватывается и видео и звук и пишется в AVI, но я в Delphi ничего не смыслю. Если кто разбирается, посмотрите, как можно переделать этот код под VB???
Вложения
WEB Camera запись Video and Sound.rar
Delphi...
(178.73 Кб) Скачиваний: 12

Teranas
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 76
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как записать видео и звук с WEB-Camera

Сообщение Teranas » 06.04.2017 (Чт) 12:55

Посмотри в архиве там набор для Web камер, может что подойдёт.
Вложения
!_WebCamera.7z
(538.25 Кб) Скачиваний: 15
С уважением, Андрей.

Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 07.04.2017 (Пт) 9:10

Я посмотрел архив, но про запись видео там ничего не нашел. Так... воспроизводить с WEB, писать в JPEG и BMP, чаты всякие и все. Это немного не то.

Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 07.04.2017 (Пт) 9:16

Да... и еще: неплохо было бы узнать, как именно можно выбирать устройство для захвата изображения? А то у меня на тестовой машине их два - TV Tuner и USB-видеоустройство. Так иногда эти устройства путаются и программа ничего не отображает, поскольку пытается захватить видео с TV Tuner'a на котором никакой камеры нет, вместо USB камеры.

Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 07.04.2017 (Пт) 10:21

Кажется начинаю немного "врубаться"... Если я правильно понимаю, то функция сapCreateCaptureWindow создает некий объект для захвата изображения с камеры и возвращает его манипулятор. А далее мы можем управлять уже этим объектом посредством WM_CAP_ХХХ неких инструкций к определенным действиям объекта, и передаваемые объекту через функцию SendMessage. Так вот, инструкция, которая заставит объект записывать видео и звук на диск, именуется вроде как WM_CAP_FILE_SET_CAPTURE_FILEA. Попробую покопать в этом направлении, может чего и получится. :roll:

Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 07.04.2017 (Пт) 10:45

Ха!! :cheers: Все получилось!! :lol: Немного доработаю и выложу сюда код.

Teranas
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 76
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как записать видео и звук с WEB-Camera

Сообщение Teranas » 08.04.2017 (Сб) 2:57

Ждём с нетерпением... :bom:
С уважением, Андрей.

Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 10.04.2017 (Пн) 14:12

В общем, программу я немного переделал. Во-первых, я ошибся: WM_CAP_FILE_SET_CAPTURE_FILEA только создает файл, а записывает видео другая инструкция WM_CAP_SEQUENCE. Во-вторых, я убрал таймер и отвязался от системного буфера обмена. Он, по сути, не нужен. В-третьих, добавил кнопку выбора видеоустройства. Дело в том, что, как я уже говорил ранее, их в системе может быть несколько. Теперь можно выбирать источник видеосигнала с настройками изображения. В-четвертых, кнопкой «Записать видео»... в корневом каталоге создается файл с определенным именем в формате «День_Месяц_Год Часы_Минуты_Секунды» начало создания видео-файла с расширением AVI.
Все работает более-менее сносно, правда периодически глючит. Не могу понять, почему запись идет только тогда, когда окно моей программы с захваченным изображением с камеры находится в фокусе, а как только я переключаюсь куда-либо в другое окно (меняю фокус) – все... запись тут же прекращается??? Почему это происходит не могу понять. Может, кто знает из ГУРУ??? Как этого избежать???
Вот весь переделанный код...
Код: Выделить всё
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal lpszWindowName As String, ByVal dwStyle As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal nID As Long) As Long
Private Declare Function SendMessage Lib "USER32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private mCapHwnd As Long
Private Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
Private Const WM_USER = 1024
Private Const WM_CAP_START = WM_USER
Private Const WM_CAP_STOP = WM_CAP_START + 68
Private Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10
Private Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11
Private Const WM_CAP_SET_SCALE = WM_CAP_START + 53
Private Const WM_CAP_SET_PREVIEW = WM_USER + 50
Private Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
Private Const PREVIEWRATE = 30 '30 msec
Private Const WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42
Private Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
Private Const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20
Private Const WM_CAP_SEQUENCE = WM_CAP_START + 62

Private Sub Form_Load()
On Error Resume Next
'Создаем объект захвата видео и привязываем его к нашему PictureBox (PictureView)...
mCapHwnd = capCreateCaptureWindow("WebcamCapture", WS_CHILD Or WS_VISIBLE, 0, 0, _
PictureView.ScaleWidth, PictureView.ScaleHeight, PictureView.hwnd, 0)
DoEvents
If mCapHwnd = 0 Then
  MsgBox "Не удалось подключиться к видеоустройству", vbExclamation, App.Title
  End
Else 'Подключаем драйвер камеры...
  SendMessage mCapHwnd, WM_CAP_DRIVER_CONNECT, 0, 0
End If
STARTCAM 'Захват видео с камеры
End Sub

Sub STARTCAM()
  'Устанавливаем масштаб...
  'SendMessage mCapHwnd, WM_CAP_SET_SCALE, True, 0
  'Выводим изображение с камеры на объект PictureBox (PictureView)...
  SendMessage mCapHwnd, WM_CAP_SET_PREVIEW, True, 0
  SendMessage mCapHwnd, WM_CAP_SET_PREVIEWRATE, PREVIEWRATE, 0 'PREVIEWRATE - число миллисекунд
End Sub

Private Sub cmd_VideoSource_Click()
'Вызываем диалог выбора источника видеосигнала с настройками...
SendMessage mCapHwnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0
End Sub

Private Sub cmd_SaveToFile_Click()
'Записываем видео и звук с камеры в формате AVI...
Dim strDate, strTime, NameVideoFile As String
strDate = CStr(Replace(Date, ".", "_", 1))
strTime = CStr(Replace(Time, ":", "_", 1))
NameVideoFile = strDate & " " & strTime
SendMessage mCapHwnd, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, ByVal NameVideoFile & ".avi"
SendMessage mCapHwnd, WM_CAP_SEQUENCE, 0, 0 'Начало записи
DoEvents
End Sub

Sub STOPCAM()
'Останавливаем захват с камеры...
SendMessage mCapHwnd, WM_CAP_STOP, 0, 0
DoEvents
End Sub

Private Sub cmd_Stop_Click() 'Остановить запись...
STOPCAM
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call STOPCAM
'Отключаемся от видеоустройства...
SendMessage mCapHwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0
End Sub
Вложения
WEBCamera Release.rar
Переделанный рабочий вариант...
(7.15 Кб) Скачиваний: 11

Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 10.04.2017 (Пн) 20:18

И еще... по кнопке "Остановить запись" нужно кликать два раза. Тогда остановка происходит сразу, а иначе зависает... Тоже не понятно почему? :roll:

Vova_2581
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как записать видео и звук с WEB-Camera

Сообщение Vova_2581 » 11.04.2017 (Вт) 14:21

Я, кажется, понял в чем дело. Попробую сам догнать, потом отпишусь...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

    TopList  
cron