Ali Onur Cinar
Articles

SonySNC.js
JavaScript API to Control
SONY SNC-RZ30N Network Camera

1. Introduction

SonySNC.js is a JavaScript API to control a SONY SNC-RZ30N Network Camera within a web page.

Here is an example code which demonstrate how the SonySNC.js can be used within a web page:


   <script type="text/javascript" src="SonySNC.js"></script>

   <script type="text/javascript">
     var camera = new SonySNC('labcam', 'http://192.168.1.1');
 
     camera.goPreset(2);  // go preset 2
   </script>

   <!-- Capture Frame Link -->
   <a href="javascript:camera.capture();">Capture Frame</a>

   <!-- Move Camera Up -->
   <a href="javascript:camera.move('u');">Up</a>

   <!-- Zoom In -->
   <a href="javascript:camera.move('i');">Zoom In</a>
 

2. API

Here is a list of provided fuctions:

SonySNC Constructor. Gets two parameters a unique id and the camera's address.
move Moves camera in given direction. Gets a single parameter direction. Direction can be:
  • u - up
  • d - down
  • l - left
  • r - right
  • h - home
  • i - zoom in
  • o - zoom out
goPreset Moves camera to given preset position. Gets a single parameter preset number.
capture Capture the current frame and show in a popup window.
delay Set command delay. Picking a large number makes bigger movements.

3. Source Code

Click to Download SonySNC.js.

/**
 * Copyright (c) 2004
 *      Ali Onur Cinar &060;cinar(a)zdo.com&062;
 *
 * SONY is the registered trademark of SONY Corporation.
 *
 * JavaScript to control SONY SNC-RZ30N cameras.
 * http://www.zdo.com/articles/SonySNC.php 
 *
 * Usage:
 *
 * <script type="text/javascript" src="SonySNC.js"></script>
 *
 * <script type="text/javascript">
 *   var camera = new SonySNC('labcam', 'http://192.168.1.1');
 *
 *   camera.goPreset(2);  // go preset 2
 *   camera.move('u');    // move camera up
 *   camera.capture();    // capture it 
 * </script>
 * 
 */

/**
 * Constructor.
 *
 * @param id  a unique id for camera
 * @param url camera's address
 */
function SonySNC (id, url)
{
  this.init(id, url);
}

SonySNC.prototype =
{
  /**
   * Initialize.
   *
   * @param url sony camera url
   */
  init : function (id, url)
  {
    this.id = id;
    this.url = url;
    this.cmdDelay = 500;
    
    this.createForm();
  },

  /**
   * Moves camera in given direction.
   *
   * @param d movement direction, can be
   *          u - up
   *          d - down
   *          l - left
   *          r - right
   *          h - home
   *          i - zoom in
   *          o - zoom out
   */
  move : function (d)
  {
    switch (d)
    {
      case 'u':
        this.send('8101060103030302FF');
        setTimeout("this.stop()", cmdDelay);
        break;
      case 'd':
        this.send('8101060103030301FF');
        setTimeout("this.stop()", cmdDelay);
        break;
      case 'l':
        this.send('8101060103030203FF');
        setTimeout("this.stop()", cmdDelay);
        break;
      case 'r':
        this.send('8101060103030103FF');
        setTimeout("this.stop()", cmdDelay);
        break;
      case 'h':
        this.send('81010604FF');
        break;
      case 'i':
        this.send('8101040724FF');
        setTimeout("this.send('8101040700FF')", cmdDelay);
        break;
      case 'o':
        this.send('8101040734FF');
        setTimeout("this.send('8101040700FF')", cmdDelay);
        break;
    }
  },

  /**
   * Moves camera to given preset position.
   *
   * @param n preset number
   */
  goPreset : function (n)
  {
    if (n < 9)
    {
      n = '0' + n;
    }

    this.send('8101043F02'+n+'FF');
  },

  /**
   * Send message to camera.
   *
   * @param s message string
   */
  send : function (s)
  {
    var form = eval('document.sncForm_' + this.id);
    form.visca.value = s;
    form.submit();
  },

  /**
   * Send stop message to camera.
   *
   */
  stop : function ()
  {
    this.send('8101060103030303FF');
  },

  /**
   * Set command delay.
   *
   * @param d command delay
   */
  delay : function (d)
  {
    cmdDelay = d;
  },

  /**
   * Capture the current frame and show
   * in a popup window.
   *
   */
  capture : function ()
  {
    var body =
      '<?xml version="1.0" encoding="iso-8859-1"?>'
    + '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
    + '       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
    + '<html xmlns="http://www.w3.org/1999/xhtml">'
    + '<head>'
    + '  <meta http-equiv="Content-Type"'
    + '    content="text/html; charset=iso-8859-1" />'
    + '  <title>Camera Capture</title>'
    + '  <meta http-equiv="Pragma" content="no-cache">'
    + '  <meta http-equiv="Cache-Control" content="no-cache">'
    + '</head>'
    + '<body xml:lang="en" lang="en">'
    + '<div>'
    + '<img src="'
    + this.url
    + '/oneshotimage.jpg" style="width:320px; height:240px;"'
    + ' alt="Captured" />'
    + '<form><input type="button" value="Close" '
    + 'onClick="self.close();" /></form>'
    + '</div></body></html>';

    var win = window.open('', 'captured_'+this.id,
      'width=320 height=240 screenX=100,screenY=75,left=100,top=75');
    win.document.writeln(body);
  },

  /**
   * Creates the communication form.
   *
   */
  createForm : function ()
  {
    var body =
      '<ilayer name="clear" width="1" height="1"></ilayer>'
    + '<form name="sncForm_' + this.id + '"'
    + '  action="' + this.url + '/command/ptzf.cgi"'
    + '  method="post"'
    + '  target="clear">'
    + '  <input type="hidden" name="visca" value="" />'
    + '</form>';
    
    document.writeln(body);
  }
}


Your Comments


12/31/69 17:00

Name:
Comment:

Valid XHTML 1.0! Valid CSS! FuseBox Inside This is my Google PageRank. - SmE Rank free service Powered by Scriptme

This page was last updated on Sun January 21 2007 06:55:16 PM