• 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.0SmartDevicesSDKSDKTools;D:Program FilesMicrosoft SDKsWindowsv6.0ABin
    
    echo "打包..."
    del /s /q tracyone.pvk tracyone.cer tracyone.spc tracyone.pfx IPNCWebDlls.CAB gffx.dll
    xcopy /y ..gffxDebuggffx.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_machineshare"
    echo "结束..."
    
    

    这是make_cab.bat的内容

    @echo off
    set path=%path%;D:Program Files (x86)Microsoft Visual Studio 9.0SmartDevicesSDKSDKTools;D:Program FilesMicrosoft SDKsWindowsv6.0ABin
    
    echo "打包..."
    del /s /q tracyone.pvk tracyone.cer tracyone.spc tracyone.pfx IPNCWebDlls.CAB gffx.dll
    xcopy /y ..gffxDebuggffx.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_machineshare"
    echo "结束..."
    pause
    
    

    我们知道首次打开IPNC设备的网页需要下载加载这个ActiveX控件,然后最原始的这个ActiveX控件是已经申请证书了,只有那些申请证书的ActiveX控件才可以顺利的加载。否则你需要改变IE的设置,取消那些关于ActiveX的安全设置。

    申请证书是要钱的,所以这就是make_cab_no_cer.bat脚本存在的意义..因为其实我们只要设置过一次IE,降低其安全性,然后加载成功后,下次就不要拉,所以申请证书的意义不大。

  • 相关阅读:
    java环境配置为1.7jdk为什么cmd java -version查看版本是1.8
    bulid path 引 jar包 步骤
    eclipse 报错
    PLSQL使用技巧
    Oracle sqlplus不是内部或外部命令
    SVN 插件安装到Myeclipse10 上(经典)
    socket学习
    Eclipse 配置 插件svn 包步骤
    如何在Eclipse中使用SVN(经典)
    linux 下搭建LAMP
  • 原文地址:https://www.cnblogs.com/tracyone/p/4441112.html
Copyright © 2020-2023  润新知