Ti IPNC Web网页之ActiveX控件
Ti IPNC Web网页之ActiveX控件
本篇介绍关于TI IPNC网页中播放器相关的东西。
gStudio工程中添加播放器并控制播放器
打开IPNC网页时首先会自动下载ActiveX控件并安装。在这个基础上我们在gStudio工程中调用ActiveX控件留下的API就能顺利的控制播放器了。
在gStudio中有一个特殊的控件叫做gdo container
。
GDO is a special Loadable module that has predefined exported methods that let
GoDB VM introspect and identify the methods and properties and exposing
it as a component to the GBasic.
也就是这个控件是用于添加外部模块,使之成为GoDB的一个组件。
TI IPNC RTSP播放器就是以这种方式添加进去的。
在原有的工程中,播放器是以调用函数的方式创建的。而非显示的将gdo控件加入到frm文件中。
在common.inc
中
function createGDOControl(dims ctrlname$, dimi gdoCurX, dimi gdoCurY, dimi gdoCurWidth, dimi gdoCurHeight)
createobject("GDO", ctrlname$, " x='" + gdoCurX + "' y='" + gdoCurY + "' w='" + gdoCurWidth + "' h='" + gdoCurHeight +"' ProgID='Gffx.GFFMpeg.1'" )
#{ctrlName$}.scrollable=0
End Function
其中ProgID
是根据我们播放器ActiveX控件来设置的,这里固定不变。
让我们看liveVideo.frm页面,在liveVideo.bas
文件的from_load
中
你会看到
createGDOControl("gdoVideo",GDO_X,GDO_Y,GDO_W,GDO_H)
这样这就是创建了一个播放器,这个控件名字叫做gdoVideo
,使用#gdoVideo.method
这样的方式来调用这个控件的方法。
你在当前页面搜索gdovideo,你会发现liveVideo页面使用若干ActiveX的api,比如说Play
,Audio
,Stop
等。
比如说,当liveVideo页面加载完毕时,自动播放rtsp流,这时调用form_complete
全局事件函数。
在这个函数中,调用call disp_streams
sub disp_streams()
".......
a = #gdovideo.stop(1)
if playVideoFlag = 1 then
dispStr$ = ~Unable_To_Display_Msg$
#lblload.hidden = 0
#gdovideo.hidden = 1
else
dispStr$ = "Loading . . . . "
'Play stream
#gdovideo.hidden = 0
a = #gdovideo.play(value$)
end if
"....
End Sub
sub setAudioControl
if flagAudio=1 then
#gdovideo.Audio(1)
elseif flagAudio=0 then
#gdovideo.Audio(0)
endif
'#gdoVideo.hidden=0
'#lblLoad.hidden=1
End Sub
这个在Guide for gffx code.pdf
中的API是一一对应的,只不过里面的多了一些前缀put_
和get_
。这里暂时不理其中原理,我们要知道是如何使用。
STDMETHOD(get_Audio)(/*[out, retval]*/ long *pVal);
STDMETHOD(put_Audio)(/*[in]*/ long newVal);
STDMETHOD(get_Stop)(long TimeOut, /*[out, retval]*/ long *pVal);
STDMETHOD(get_Play)(BSTR Url, /*[out, retval]*/ long *pVal);
问题来了,这里的Audio是调用put_Audio
还是get_Audio
?为什么put_play函数明明有两个参数这里只有一个?
其实get_
前缀的,后面那个long *pVal
是作为返回值out retval
的,所以你看到如果你在gstdio中调用get_
前缀的,一般需要显示的返回,二调用put_
前缀的则不需要..有多少参数填多少参数。
a = #gdovideo.play(value$)
所以这里的Audio调用时调用put_
前缀的那个函数。
TI IPNC网页中部分功能严重依赖于这个ActiveX播放器,不少功能是依赖这个播放器的,所以你想用html完全复制IPNC网页的功能,播放器是个大问题。
比如说IPNC网页中有一个功能划定感兴趣区域
这个功能是在UIMode(2)
的情况下...
修改gffx工程,并打包ActiveX.
请用Visual Studio 2008来编译此工程,以上的版本编译无法通过。
编译成功之后生成gffx.dll
文件。我们拷贝原来的IPNCWebDlls.CAB
文件,解压释放出里面的其它dll,用于制作新的IPNCWebDlls.CAB
其中的cabarc.exe
程序在Windows XP下是自带的,在Windows7及其以上,你需要另外下载。
这是make_cab_no_cer.bat的内容
@echo off
set path=%path%;D:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools;D:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\
echo "打包..."
del /s /q tracyone.pvk tracyone.cer tracyone.spc tracyone.pfx IPNCWebDlls.CAB gffx.dll
xcopy /y ..\gffx\Debug\gffx.dll .
.\cabarc.exe -s 6144 N IPNCWebDlls.CAB FFMPEG_LICENSE.txt GDOBRIDGE.DLL GoDBATL.DLL gffx.dll GIPNC.INF
if %errorlevel% NEQ 0 (echo Failed
pause
exit
) else (
echo cararc successfully
)
del /s /q tracyone.pvk tracyone.cer tracyone.spc tracyone.pfx
move IPNCWebDlls.CAB "c:\virtual_machine\share"
echo "结束..."
这是make_cab.bat的内容
@echo off
set path=%path%;D:\Program Files (x86)\Microsoft Visual Studio 9.0\SmartDevices\SDK\SDKTools;D:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\
echo "打包..."
del /s /q tracyone.pvk tracyone.cer tracyone.spc tracyone.pfx IPNCWebDlls.CAB gffx.dll
xcopy /y ..\gffx\Debug\gffx.dll .
.\cabarc.exe -s 6144 N IPNCWebDlls.CAB FFMPEG_LICENSE.txt GDOBRIDGE.DLL GoDBATL.DLL gffx.dll GIPNC.INF
if %errorlevel% NEQ 0 (echo Failed
pause
exit
) else (
echo cararc successfully
)
echo "生成证书..."
makecert -ss tracyone -n "CN=tracyone" -sv tracyone.pvk -r tracyone.cer
cert2spc tracyone.cer tracyone.spc
pvk2pfx -pvk tracyone.pvk -pi 123 -spc tracyone.spc -pfx tracyone.pfx -f
echo "双击pfx文件导入到:受信任的根证书颁发机构,然后按任意键继续"
pause
signtool signwizard
signtool timestamp /t "http://timestamp.wosign.com/timestamp" IPNCWebDlls.CAB
del /s /q tracyone.pvk tracyone.cer tracyone.spc tracyone.pfx
xcopy /y /r IPNCWebDlls.CAB "c:\virtual_machine\share"
echo "结束..."
pause
我们知道首次打开IPNC设备的网页需要下载加载这个ActiveX控件,然后最原始的这个ActiveX控件是已经申请证书了,只有那些申请证书的ActiveX控件才可以顺利的加载。否则你需要改变IE的设置,取消那些关于ActiveX的安全设置。
申请证书是要钱的,所以这就是make_cab_no_cer.bat脚本存在的意义..因为其实我们只要设置过一次IE,降低其安全性,然后加载成功后,下次就不要拉,所以申请证书的意义不大。
Ti IPNC Web网页之ActiveX控件的更多相关文章
- TI IPNC Web网页之流程分析
流程 Appro IPNC使用的web服务器是boa. 请仔细理解下面这段话. boa这个web服务器是GUI界面和IPNC应用程序之间的通信的桥梁.它的责任是从web GUI中接收HTTP请求,并且 ...
- TI IPNC Web网页之网页修改教程
web网页程序修改 打开gStudio之后,点击菜单栏中Help->Contents.先把这个诡异的编程语言看一遍吧.这里搬一些东西出来. GoDB简介 从第一副图片中,我们可以看出,从源文件到 ...
- TI IPNC Web网页之GoDB开发环境
介绍 下面介绍DM8127/DM385 IPNC RDK中网页制作相关的东东. 具体来说,各位获得这个RDK包时有以下文件: IPNC_RDK_DM812x_DM385_Version3.5.0.ta ...
- TI IPNC Web网页之进阶修改
GoDB内嵌HTML 原始的页面里面已经有一个内嵌HTML的例子了,那就是维护支持页面.下图是稍微修改后的页面...请自行脑补. 这里使用的是上一节所说的gdo containter的方法. 打开ma ...
- WebView:是应用程序打开web网页的UI控件后端
public class WebViewActivity extends Activity { private WebView webView; @Override protected void on ...
- WebView:是应用程序打开web网页的UI控件前台
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...
- 用C#开发ActiveX控件,并使用web调用
入职差不多两个月了,由学生慢慢向职场人做转变,也慢慢的积累知识,不断的更新自己.最近的一个项目里边,涉及到的一些问题,因为SDK提供的只是winform才能使用了,但是有需求咱们必须得完成啊,所以涉及 ...
- 配置ActiveX控件在网页中下载安装
先检查客户端浏览器是否安装了ActiveX控件,如果没有安装ActiveX,就需要先给浏览器提示下载并允许安装.否则就直接使用该ActiveX控件.我们可以使用CodeBase来满足我们的要求:下面是 ...
- 如何取消IE“已限制此网页运行可以访问计算机的脚本或ActiveX控件
在本地调试html页,如果其中包含js或flash,IE经常会提示“IE已限制此网页运行可以访问计算机的脚本或ActiveX控件”.虽然IE出于安全考虑阻止本地脚本运行这个做法没错,但作为程序开发者来 ...
随机推荐
- cgwin的ssh错误解决办法
参考博客 http://hi.baidu.com/luckygirl/item/bd00a6d8a05c310d20e25039 方法一(推荐): 修改/etc/passwd文件,在其中加入 s ...
- sparkSQL——DataFrame&Datasets
对于新司机,可能看到sc与spark不知道是什么,看图知意 ********************************************************************** ...
- 20145303 《Java程序设计》第7周学习总结
20145303 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治标准时间(GMT),现已不作为标准时间使用,即使标注为GMT(格林威治时间),实际上谈到的的是U ...
- 20145333 《Java程序设计》第7周学习总结
20145333 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 1.格林威治标准时间(GMT):常被不严谨地当成是UTC时间,现已不作为标准时间使用. 2.世界时(UT ...
- Remote System Explorer Operation总是运行后台服务,卡死eclipse
阿里云 > 教程中心 > android教程 > Remote System Explorer Operation总是运行后台服务,卡死eclipse Remote System E ...
- 单调队列:temperature
题目大意:某国进行了连续n天的温度测量,测量存在误差,测量结果是第i天温度在[l_i,r_i]范围内. 求最长的连续的一段,满足该段内可能温度不降. 第一行n下面n行,每行l_i,r_i 1<= ...
- js 的胖箭头问题
我们在声明函数的时候通常是 var foo function(a){ console.log(a) }; 用ES6 我们写成了这样 var foo = a =>{ console.log(a); ...
- Gym100783C Golf Bot(FFT)
https://vjudge.net/problem/Gym-100783C 题意: 给出n个数,然后有m次查询,每次输入一个数x,问x能否由n个数中2个及2个以下的数相加组成. 思路:题意很简单,但 ...
- php入门(三)
PHP 面向对象: 在php5中 var就是public的别名. 变量 $this 代表自身的对象. PHP_EOL;为换行符 构造函数+析构函数 <?php class Site { /* 成 ...
- kubernetes源码分析 -- kube-proxy
Kube-proxy需要在每一个minion结点上运行.他的作用是service的代理,负责将业务连接到service后面具体执行结点(endpoints). 我们列一下体现kube-proxy ...