IP Camera网络摄像头调用ocx实时预览
By
admin
at 2023-02-27 • 0人收藏 • 1009人看过
最近准备研究下网络摄像头, 在网上买了个100多块钱的, 内部摄像头芯片是杭州雄迈的, 官方提供了xNetSdk给我, 这个sdk只有64位的下载 , c#测试了实时性不错, 清晰度还行.
备注: 海康,大华这些大厂是有提供32和64版本dll的.
这个64位的sdk的使用会在另外的帖子里写


我在它的官网看到可以web浏览器调用, 只需要安装ocx...
安装后看了下, 它里面的netsdk.dll是32位的?! 这不是有嘛....
那么我们aar可以先用ocx, 所以有了这篇测试文章.
后面再去研究那个netsdk.dll 参看: https://chengxu.xyz/t/21434
ocx的方式经过测试比直接用64位sdk的延迟大不少 , 有种浅泥潭里的感觉(后来发现官方的vsm软件也是32位这个dll,同样的会有泥潭里的感觉,所以应该是32位动态库的问题)
import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=772;bottom=617)
winform.add(
button2={cls="button";text="获取当前镜像状态";left=287;top=398;right=470;bottom=457;z=2};
button3={cls="button";text="设置当前镜像状态";left=621;top=398;right=752;bottom=457;z=4};
button4={cls="button";text="用户配置";left=129;top=398;right=233;bottom=457;z=7};
button5={cls="button";text="驱动配置";left=8;top=398;right=116;bottom=457;z=8};
checkbox={cls="checkbox";text="Reversal 上下";left=497;top=409;right=587;bottom=431;z=5};
checkbox2={cls="checkbox";text="Mirror 左右";left=497;top=442;right=587;bottom=464;z=6};
custom={cls="custom";text="自定义控件";left=0;top=0;right=773;bottom=384;z=9};
)
/*}}*/
import console
console.open()
var video = winform.custom.createEmbedEx("{FD3BEB0C-AB43-4253-9146-C371D48FBE0D}");
var fullscreen = false;
//事件监听 双击
video.DblClick = function(){
//双击全屏 / 取消全屏
console.log("DblClick");
fullscreen = !fullscreen;
video.Fullscreen(fullscreen);
}
//单击
video.Click = function(){
console.log("Click")
}
//右键
video.RButtonDown = function(nFlag,x,y){
console.log("RButtonDown",nFlag,x,y)
}
try{
//登录
video.Login("192.168.1.153",34567,"admin","");
//开启
video.StartRealPlay(0,0,0);
}
catch(e){
winform.msgbox("打开失败")
}
winform.button2.oncommand = function(id,event){
//获取当前镜像状态 , 第三个参数0=get获取, 1=set设置,返回的时string ,如:"1,0"
var retStr = video.GetSetCamera(false,false,0);
winform.checkbox.checked = (tonumber(retStr[[1]]))?true:false;
winform.checkbox2.checked = (tonumber(retStr[[3]]))?true:false;
}
winform.button3.oncommand = function(id,event){
//设置当前镜像状态 , 第三个参数0=get获取, 1=set设置
video.GetSetCamera(winform.checkbox.checked,winform.checkbox2.checked,1)
}
winform.button4.oncommand = function(id,event){
//显示用户配置界面
video.ShowClientConfig()
}
winform.button5.oncommand = function(id,event){
//显示驱动配置界面
video.ShowDeviceConfig()
}
winform.show();
win.loopMessage();
winform.show();
win.loopMessage();附件:
我大概试了下, 其实只用下面这几个dll就行了.

sdk官方:
4 个回复 | 最后更新于 2023-03-07
加入画十字线标注功能.
模糊是录屏压缩导致的....本来也没聚焦
动图里面的拖拽区域放大时ocx自带的功能
这个ocx也支持 上下左右镜像功能, 还有对摄像头的配置窗口. 蛮全面的.

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=772;bottom=617)
winform.add(
video_Vline={cls="plus";left=373;top=0;right=374;bottom=618;bgcolor=255;db=1;dt=1;z=2};
video_hline={cls="plus";left=0;top=225;right=773;bottom=226;bgcolor=255;dl=1;dr=1;z=1}
)
/*}}*/
import console
console.open()
var video = winform.createEmbedEx("{FD3BEB0C-AB43-4253-9146-C371D48FBE0D}",,{
Click = function(){//单击事件
video.Click();
};
DblClick = function(){//双击事件
video.DblClick();
};
RButtonDown = function(nFlag,x,y){//右键事件
video.RButtonDown(nFlag,x,y);
};
});
var fullscreen = false;
video.DblClick = function(){
//双击全屏 / 取消全屏
console.log("DblClick");
fullscreen = !fullscreen;
video.Fullscreen(fullscreen);
}
video.Click = function(){
console.log("Click")
var x,y = win.getMessagePos();
x,y = win.toClient(winform.hwnd,x,y);
winform.video_hline.setPos(0,y);
winform.video_Vline.setPos(x,0);
}
video.RButtonDown = function(nFlag,x,y){
console.log("RButtonDown",nFlag,x,y)
}
try{
//登录
video.Login("192.168.1.153",34567,"admin","");
//开启
video.StartRealPlay(0,0,0);
}
catch(e){
winform.msgbox("打开失败")
}
winform.show();
win.loopMessage();登录后方可回帖

var pvideo = winform.createEmbed("{FD3BEB0C-AB43-4253-9146-C371D48FBE0D}");这个号哪来的?