管理人のトップページ管理人ブログ戻る
     Planex CS-WMV02Gをハックする(2)

Date Written : 2010/12/28
mail : beatlesoft@gmail.com
※注意 一応ここでの操作はUnix系(LinuxFreeBSDなど)のOSを知っていて、サーバーを構築した経験のある方が対象です。また結果としてメーカー保障は受けられなくなる可能性がありますし、トラブルが発生した場合は全て自己責任となりますので、ご了解ください。
また、Planex CS-WMV02Gをハックする(1)を読んでいただいて、フォルダー構造をご存知であることを前提といたしまして、プログラムソースのみをメインに掲載します。プログラムの説明は適当に省略いたしますが、htmlなんで難しくないとおもいます。
You Tubeに4300枚の動態検知された画像ファイルを全自動でdivx5動画に変換したファイルをアップロードしてあります。監視カメラから一日24時間の動きを3分35秒で確認できます。動画はvga,qvgaに対応しておりますが、便利ですよ。
本カメラの組み込みサーバーではActiveXを利用しています。そこで、全く見えないブラウザーも出てきますし、AndroidやiPadでは表示できませんでした。そこで、今回は殆ど全てのデバイスで表示とカメラコントロールができることを前提に作りました。

画像見本
Android携帯IS01でネットワークカメラを表示

駐車場を写してみた

自宅マンションを写してみた

カメラコントロール
1)パンとチルトが出来る。(左右上下にカメラの首フリが出来る)
2)パンとチルトのスピードを変更できる。
3)ホームポジションに移動できる。

htmlはフレームを利用しているので3つの構成となっています。
1)smt.html (フレーム設定用)
2)snp.html (カメラの画像表示部分)
3)tp.html (コントール部品配置用:これがキモ)
4)gifの部品

配置
/mnt/flash/www/
  +--smt.html
  +--snp.html
  +--tp.html
  +--pic/
       +---部品gifファイル
tp.htmlをよく見るともっといろんなことが出来るんだがスマートフォン用なので設定をやめました。

カメラコントロール用画像部品






smt.html
<HTML><HEAD><meta charset="shift-jis">
<TITLE></TITLE>
<script language="JavaScript1.2">
var message = "Wireless Network Camera with Pan/Tilt"
var message = message+"         " i = "0"
var temptitle = ""
var speed = "150"
function titler(){
    if (!document.all && !document.getElementById) return
    document.title = temptitle + message.charAt(i)
    temptitle = temptitle + message.charAt(i)
    i++
    if(i == message.length){
      i = "0"
      temptitle = ""
    }
    setTimeout("titler()",speed)
}
window.onload=titler
</script>
</HEAD>
<FRAMESET border=0 ROWS="0,*">
  <FRAMESET border="0" cols="50,*">
    <frame name=leftframe marginWidth=0 marginHeight=0 noResize scrolling="auto" >
    <frame  name=mainframe marginWidth=0 marginHeight=0  noResize scrolling="auto">
  </FRAMESET>

  <FRAMESET border=0 cols="50,0,*,0">
     <FRAME name=leftframe marginWidth=0 marginHeight=0 src="tp.html" noResize scrolling="auto">
     <FRAME name=center marginWidth=0 marginHeight=0  noResize scrolling="auto">
     <FRAME name=mainframe marginWidth=0 marginHeight=0 src="snp.html" noResize scrolling="auto">
     <FRAME name=retframe marginWidth=0 marginHeight=0  scrolling="auto">
  </FRAMESET>
</FRAMESET>
</HTML>

snp.html
<html>
<head>
<meta http-equiv="Refresh" content="10">
<style type="text/css">
@import url(default.css);
</style>
<!-- load the public info -->
<script type="text/javascript" src="/cgi-bin/pubinfo.cgi"></script>
<!-- Load the plugin define -->
<script type="text/javascript" src="plugindef.js"></script>
<script type="text/javascript">
<!--
function Resize() {
  window.resizeTo((Width + ss_width_offset),(Height + ss_height_offset));
}
//-->
</script>
</head>
<body onload="Resize()">
<img border="0" src="/cgi-bin/video.jpg">
</body>
</html>

tp.html
<html>
<head>
<meta charset="shift-jis">
<title>PT7137</title>

<script type="text/javascript" src="/cgi-bin/pubinfo.cgi"></script>
<script type="text/javascript" src="camctrl.js"></script>
<script type="text/javascript" src="/plugindef.js"></script>
<script type="text/javascript" src="audiovideo.js"> </script>
<script language=JavaScript>
<!--
function SubmitPanspeed(selObj) {
  for (var i=0; i < selObj.options.length; i++)
    if (selObj.options[i].selected)
      break;
  parent.retframe.location.href='/cgi-bin/camctrl.cgi?speedpan=' + (i-5);
}
function SubmitTiltspeed(selObj) {
  for (var i=0; i < selObj.options.length; i++)
    if (selObj.options[i].selected)
      break;
  parent.retframe.location.href='/cgi-bin/camctrl.cgi?speedtilt=' + (i-5);
}
function SubmitPreset(selObj) {
  for (var i=0; i < selObj.options.length; i++)
    if (selObj.options[i].selected)
      break;
  parent.retframe.location.href='/cgi-bin/recall.cgi?recall=' + selObj.options[i].text;
}
//-->
</script>
<SCRIPT language=JavaScript>
<!--
function MM_openBrWindow(theURL,winName,features) {
  var win = window.open(theURL,winName,features);
  win.focus();
}
//-->
</SCRIPT>
<SCRIPT language=JavaScript>
<!--
function MM_swapImgRestore() {
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() {
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document); return x;
}
function MM_swapImage() {
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
//-->
</SCRIPT>
<!--
<div id="waterMark" style="position:absolute;">
<dd>
<img SRC="pic/bgleft4.gif" BORDER=0 height=50 width=50></dd>
</div>
//-->
<script language="JavaScript1.2">
<!--
markW = 17;
markH = 17;
markX = 0;
markY = 0;
markRefresh = 1;
if (!document.all) document.all = document;
if(!document.all.waterMark.style)document.all.waterMark.style=document.all.waterMark;
wMark = document.all.waterMark.style;
wMark.width = markW;
wMark.height = markH;
navDOM = window.innerHeight;
function setVals() {
barW = 0;
barH = 0;
if (navDOM) {
if (document.height > innerHeight) barW = 20;
if (document.width > innerWidth) barH = 20;
} else {
innerWidth = document.body.clientWidth;
innerHeight = document.body.clientHeight;
}
posX = ((innerWidth - markW)-barW) * (markX/100);
posY = ((innerHeight - markH)-barH) * (markY/100);
}
function wRefresh() {
wMark.left = posX + (navDOM?pageXOffset:document.body.scrollLeft);
wMark.top = posY + (navDOM?pageYOffset:document.body.scrollTop);
}
function markMe() {
setVals();
window.onresize=setVals;
markID = setInterval ("wRefresh()",markRefresh);
speedpan.selectedIndex=parseInt(panspeed)+5;
speedtilt.selectedIndex=parseInt(tiltspeed)+5;
if (ConfigPriv == 1)
        {
                document.getElementById("config_icon").style.display = "block";
        }
}
window.onload=markMe;
function loadCurrentSetting()
{
        var avForm = document.AVOption;
        selectTheRadioButton(avForm.system_viewmode, 2, system_viewmode);
        checkViewMode(false);
        avForm.video_text.value = video_text;
        selectTheDropdownEnt(avForm.video_resolution, video_resolution);
        /*
        selectTheDropdownEnt(avForm.video_color, video_color);
        selectTheDropdownEnt(avForm.video_maxframe, video_maxframe);
        selectTheDropdownEnt(avForm.video_keyinterval, video_keyinterval);
        selectTheDropdownEnt(avForm.video_bitrate, video_bitrate);
        selectTheDropdownEnt(avForm.video_quant, video_quant);
        selectTheRadioButton(avForm.video_quality, 2, video_quality);
        selectTheDropdownEnt(avForm.video_mode, video_mode);
        */
        checkPowerLineFreq();
        selectTheDropdownEnt(avForm.video_whitebalance, video_whitebalance);
        /*
        if (video_imprinttimestamp == 1) {
                avForm.imprinttimestamp.checked = true;
        }
        if (video_flip == 1) {
                avForm.flip.checked = true;
        }
        if (video_mirror == 1) {
                avForm.mirror.checked = true;
        }
        selectTheRadioButton(avForm.audio_type, 2, audio_type);
        selectTheDropdownEnt(avForm.audio_aacbitrate, audio_aacbitrate);
        selectTheDropdownEnt(avForm.audio_amrbitrate, audio_amrbitrate);
        if (audio_transfermode == 4) {
                avForm.audiomute.checked = true;
        }
        */
}
//-->
</script>
</head>
<body onLoad="loadCurrentSetting()">
  <TABLE width="50">
        <tr><td height="30"><br></td></tr>
        <tr><TD align="center"><A onmouseover="MM_swapImage('up','','pic/u.gif',1)" onmouseout=MM_swapImgRestore()
            href="/cgi-bin/camctrl.cgi?move=up" target=retframe><IMG src="pic/u.gif" border=0 name=left></A></TD></tr>
        <tr><TD align="center"><A onmouseover="MM_swapImage('left','','pic/l.gif',1)" onmouseout=MM_swapImgRestore()
            href="/cgi-bin/camctrl.cgi?move=left" target=retframe><IMG src="pic/l.gif" border=0 name=left></A></TD></tr>
        <tr><TD align="center" valign="center" height="45"><A onmouseover="MM_swapImage('home','','pic/h.gif',1)" onmouseout=MM_swapImgRestore()
            href="/cgi-bin/camctrl.cgi?move=home" target=retframe><IMG src="pic/h.gif" border=0 name=home></A></TD></tr>
        <tr><TD align="center"><A onmouseover="MM_swapImage('right','','pic/r.gif',1)" onmouseout=MM_swapImgRestore()
            href="/cgi-bin/camctrl.cgi?move=right" target=retframe><IMG src="pic/r.gif" border=0 name=right></A></TD></tr>
        <tr><TD align="center"><A onmouseover="MM_swapImage('down','','pic/d.gif',1)" onmouseout=MM_swapImgRestore()
            href="/cgi-bin/camctrl.cgi?move=down" target=retframe><IMG src="pic/d.gif" border=0 name=down></A></TD></tr>
        <tr>
            <TD align=left>
            <br>Pan<br>
            <SELECT class=choFont onchange=SubmitPanspeed(this) name=speedpan>
            <option  value=-5>-5</option>
            <option  value=-4>-4</option>
            <option  value=-3>-3</option>
            <option  value=-2>-2</option>
            <option  value=-1>-1</option>
            <option selected value=0>0</option>
            <option  value=1>1</option>
            <option  value=2>2</option>
            <option  value=3>3</option>
            <option  value=4>4</option>
            <option  value=5>5</option></SELECT>
          </TD>
        </TR>
        <tr>
            <TD align=left>
            Tilt<br>
           <SELECT class=choFont onchange=SubmitTiltspeed(this) name=speedtilt>
            <option  value=-5>-5</option>
            <option  value=-4>-4</option>
                <option  value=-3>-3</option>
                <option  value=-2>-2</option>
                <option  value=-1>-1</option>
                <option selected value=0>0</option>
                <option  value=1>1</option>
                <option  value=2>2</option>
                <option  value=3>3</option>
                <option  value=4>4</option>
                <option  value=5>5</option></SELECT>
<!----
            <br>
            TCY<br>
            <select name="video_resolution"  size="1">
            <option>160x120</option>
            <option>176x144</option>
            <option>320x240</option>
            <option>640x480</option>
            </select>
//-->
                </TD>
           </TR>
    <tr>
  </table>
</body>
</html>