找回密码
 加入
搜索
查看: 1514|回复: 4

[网络通信] [已解决]利用易语言VedioCapture.dll控制摄像头录像

[复制链接]
发表于 2021-9-14 15:19:37 | 显示全部楼层 |阅读模式
本帖最后由 king8462 于 2021-9-22 14:26 编辑

下载了这个帖子的源码:https://www.autoitx.com/forum.ph ... =%C9%E3%CF%F1%CD%B7
可以实现摄像头拍照,百度查到该dll可以支持录像,但不会写语法,请高手帮忙,谢谢。

这是易语言源码链接:https://down.easck.com/code/64783.html

#region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#endregion ;**** 参数创建于 ACNWrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 325, 319, 112)
$Pic1 = GUICtrlCreatePic("", 264, 8, 321, 233)
$List1 = GUICtrlCreateList("", 10, 8, 241, 238, 0)
$Button1 = GUICtrlCreateButton("枚举摄像头", 24, 264, 75, 25)
$Button2 = GUICtrlCreateButton("开启摄像头", 112, 264, 75, 25)
$Button3 = GUICtrlCreateButton("关闭摄像头", 200, 264, 75, 25)
$Button4 = GUICtrlCreateButton("截图", 288, 264, 75, 25)
GUICtrlCreateLabel("截图默认放在d:\1.bmp", 24, 296, 199, 17)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

$dll = DllOpen("VedioCapture.dll")

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        $list = DllCall($dll, "str", "GetCameraList")
                        If $list[0] <> "" Then
                                $t = 0
                                $CameraList = StringSplit($list[0], "|")
                                For $s = 1 To $CameraList[0]/2
                                        
                                        GUICtrlSetData($List1, $CameraList[$t+1] & "*" & $CameraList[$t + 2])
                                        $t += 2
                                Next
                        EndIf
                Case $Button2
                        $ID = StringSplit(GUICtrlRead ( $List1 ),"*")
                        MsgBox(0,"",$ID[1])
                        DllCall($dll, "int", "SetCameraID","int",$ID[1])
            DllCall($dll, "int", "StartCamera","hwnd",GUICtrlGetHandle($Pic1)  )
                Case $Button3        
                        $ID = StringSplit(GUICtrlRead ( $List1 ),"*")
                        DllCall($dll, "int", "CloseCamera","int",$ID[1])
                Case $Button4
                        ;DllCall($dll, "int", "SaveBmp","hwnd",GUICtrlGetHandle($Pic1),"str","d:\1.bmp")
                        
                        DllCall($dll, "int", "RecordVideo","hwnd",GUICtrlGetHandle($Pic1),"str","d:\1.avi")
                        Sleep(1000*30)
                        DllCall($dll, "int", "StopRecord","int",$ID[1])
                        Sleep(1000)
                        


        EndSwitch
WEnd
发表于 2021-9-16 16:48:12 | 显示全部楼层
无法录像,看精易论坛的好多都反馈无法录像,还是考虑用DirectShow吧
发表于 2021-9-18 21:54:53 | 显示全部楼层
似乎这个dll并不能录像,不管语言的事
发表于 2021-9-18 23:53:20 | 显示全部楼层
本帖最后由 繁星 于 2021-9-18 23:55 编辑

研究了下可以录像调用很简单,然并卵,底层需要微软MPEG-4解码器才能工作,
网上找了一圈没找到,去老外那边找到一个20年前的驱动安装完就可以使用了,可惜只支持32位系统,而且效果很差

inf右键安装
#region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#endregion ;**** 参数创建于 ACNWrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <Date.au3>
#region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 325)
$Pic1 = GUICtrlCreatePic("", 264, 8, 321, 233)
$List1 = GUICtrlCreateList("", 10, 8, 241, 238, 0)
$Button1 = GUICtrlCreateButton("枚举摄像头", 10, 264, 75, 25)
$Button2 = GUICtrlCreateButton("开启摄像头", 95, 264, 75, 25)
$Button3 = GUICtrlCreateButton("关闭摄像头", 180, 264, 75, 25)
$Button4 = GUICtrlCreateButton("截图", 265, 264, 75, 25)
$Button5 = GUICtrlCreateButton('开始录制', 350, 264, 75, 25)
$Button6 = GUICtrlCreateButton('停止录制', 435, 264, 75, 25)
$Button7 = GUICtrlCreateButton('生成视频', 520, 264, 75, 25)
GUICtrlCreateLabel("截图默认放在d:\1.bmp", 24, 296, 199, 17)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###

$dll = DllOpen(@ScriptDir & "\VedioCapture.dll")

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Button1
                        $list = DllCall($dll, "str", "GetCameraList")
                        If $list[0] <> "" Then
                                $t = 0
                                $CameraList = StringSplit($list[0], "|")
                                For $s = 1 To $CameraList[0]/2
                                                                        GUICtrlSetData($List1, $CameraList[$t+1] & "*" & $CameraList[$t + 2])
                                                                        $t += 2
                                Next
                        EndIf
                Case $Button2
                        $ID = StringSplit(GUICtrlRead ($List1),"*")
                        DllCall($dll, "int", "SetCameraID","int",$ID[1])
                                                DllCall($dll, "int", "StartCamera","hwnd",GUICtrlGetHandle($Pic1)  )
                Case $Button3
                        $ID = StringSplit(GUICtrlRead ( $List1 ),"*")
                        DllCall($dll, "int", "CloseCamera","int",$ID[1])
                        Case $Button4 ;截图(多截几张不然生成的视频太短了)
                                                For $i = 1 To 10
                                                        DllCall($dll, "int", "SaveBmp","hwnd",GUICtrlGetHandle($Pic1),"str", @ScriptDir & "" & $i & ".bmp")
                                                        Sleep(1000)
                                                Next
                                Case $Button5
                        DllCall($dll, "int", "RecordVideo","hwnd",GUICtrlGetHandle($Pic1),"str", @ScriptDir & "\Video.avi")
                            Case $Button6
                        DllCall($dll, "int", "StopRecord","hwnd",GUICtrlGetHandle($Pic1))
                                Case $Button7
                                                DllCall($dll, 'int', 'CreateVideoByFiles', 'str', @ScriptDir & '\', 'str', @ScriptDir & '\bmp.avi', 'str', 'bmp', 'int', '15')
        EndSwitch
WEnd



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 1金钱 +30 收起 理由
king8462 + 30 赞一个!

查看全部评分

 楼主| 发表于 2021-9-22 14:17:58 | 显示全部楼层
感谢楼上各位!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-12-22 22:37 , Processed in 0.089616 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表