jscam.jsのソースコード「SWFの初期化」
説明
「crocro.jscam」は、クロノス・クラウンの柳井政和が開発しているJavaScirptのライブラリです。「crocro.jscam」を使うと、JavaScriptからWebカメラを扱うことができます。また、簡単な図形認識などを行えます。
このページでは、この「crocro.jscam」のコアになる「jscam.js」(ver 1.1.0)のソースコードのうち、「SWFの初期化」に相当する部分を掲載します。
ソースコード
以下、ソースコードです。
/* jscam <http://crocro.com/html5/jscam/wiki.cgi>
is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
in a Japanese translation <http://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license>
Copyright (c) 2012 Masakazu Yanai / (c) 2012 Cronus Crown <webmaster@crocro.com>
*/
//== パッケージの初期化
if (typeof crocro == "undefined") var crocro = function() {};
if (typeof crocro.jscam == "undefined") crocro.jscam = function() {};
//== ======================================
/**
* @variable crocro.jscam.information
* @title 基本情報
* @description
*
* 「jscam」の基本情報が入ったオブジェクトです。
*
* 各情報は「crocro.jscam.information.version」のようにして取得できます。
*
* <div>name - ライブラリ名。</div>
* <div>descriptionJa - 説明(日本語)。</div>
* <div>descriptionEn - 説明(英語)。</div>
* <div>version - バージョンのフル表記。「1.0.0」など。</div>
* <div>versionMajor - メジャーバージョンのみの数字。「1」など。</div>
* <div>author - 作者名。</div>
* <div>publisher - 配布元。</div>
* <div>lastModified - 最終更新日。</div>
* <div>url - 配布元のWebサイト。</div>
* <div>urlDownload - 配布元のダウンロード・サイト。</div>
* <div>copyright - 著作権表示。</div>
*
* @param arg パラメータをオブジェクトで指定します。空の場合は無視されます。
*/
//== 基本情報
crocro.jscam.information = {
name: "crocro.jscam"
,descriptionJa: "JavaScriptでWebカメラの画像を取得するライブラリ"
,descriptionEn: "The library which operates a Web camera by JavaScript."
,version: "1.1.0"
,versionMajor: "1"
,author: "Masakazu Yanai"
,publisher: "Cronus Crown"
,lastModified: "2012/01/25"
,url: "http://crocro.com/"
,urlDownload: "http://crocro.com/html5/jscam/wiki.cgi"
,copyright: "(c) 2012 Masakazu Yanai / (c) 2012 Cronus Crown"
};
//== ======================================
/**
* @variable crocro.jscam.write(arg)
* @title jscamのswfを書き出し
* @description
*
* bodyタグ内で使います。この場所にjscamのオブジェクトを書き出します。
*
* argは「{fps: 8, dir: "./js/"}」のようにオブジェクトで指定します。
* argに指定可能な値は以下の通りです。
*
* <div>fps - fps。</div>
* <div>dir - jscam.swfの置いてあるディレクトリ。</div>
* <div>w - 横幅。</div>
* <div>h - 高さ。</div>
*
* @param arg パラメータをオブジェクトで指定します。空の場合は無視されます。
*/
/**
* @variable crocro.jscam.option
* @title jscamの設定
* @description
*
* writeで作成されたjscamの設定が格納されたオブジェクトです。
*
* 「crocro.jscam.option.w」のようにして、値を取得できます。
* 利用できる設定は以下の通りです。
*
* <div>fps - fps。</div>
* <div>dir - jscam.swfの置いてあるディレクトリ。</div>
* <div>w - 横幅。</div>
* <div>h - 高さ。</div>
*
* @param arg パラメータをオブジェクトで指定します。空の場合は無視されます。
*/
//== Flash初期化用
crocro.jscam.option = {};
crocro.jscam.write = function(arg) {
// 設定
if (! arg) arg = {};
var opt = {};
var defaults = {
fps: 8
,dir: ""
,w: 320
,h: 240
};
var flVarsArr = [];
for (var key in defaults) {
opt[key] = defaults[key];
if (key in arg) opt[key] = arg[key];
flVarsArr.push(key + "=" + opt[key]);
}
crocro.jscam.option = opt;
var flVars = flVarsArr.join("&");
// HTML出力
var flArr = [];
flArr.push('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" \
width="' + opt.w + '" height="' + opt.h + '" id="externalSwfCam" align="middle">');
flArr.push('<param name="allowScriptAccess" value="always" />');
flArr.push('<param name="allowFullScreen" value="false" />');
flArr.push('<param name="movie" value="' + opt.dir + 'jscam.swf" />');
flArr.push('<param name="quality" value="high" />');
flArr.push('<param name="bgcolor" value="#cccccc" />');
flArr.push('<param name="FlashVars" value="' + flVars + '" />');
// ↑↓scrW=?&scrH=?&fps=? が設定可能
flArr.push('<embed src="' + opt.dir + 'jscam.swf" FlashVars="' + flVars + '"');
flArr.push('quality="high" bgcolor="#ffffff" \
width="' + opt.w + '" height="' + opt.h + '" align="middle" \
name="externalSwfCam" allowScriptAccess="always" allowFullScreen="false" \
type="application/x-shockwave-flash" \
pluginspage="http://www.macromedia.com/go/getflashplayer" />');
flArr.push('</object>');
document.writeln(flArr.join("\n"));
};
//== SWFのブラウザ対応呼び出し
crocro.jscam.getSwf = function(str) {
if (navigator.appName.indexOf("Microsoft") >= 0
&& new String(document[str]).indexOf("ObjectElement") < 0)
return window[str]; // IE8以下
return document[str]; // IE以外、IE9以上
};
/**
* @variable crocro.jscam.initSwfCam()
* @title カメラ初期化
* @description
*
* Flashのカメラ取得用オブジェクトを初期化します。
*/
//== SwfCamの初期化
crocro.jscam.swfCam = null;
crocro.jscam.initSwfCam = function() {
var swfCam = crocro.jscam.getSwf("externalSwfCam");
swfCam.enable = true;
// キャンバスが使えるか確認
if (! window.HTMLCanvasElement) {
swfCam.enable = false; // キャプチャ不可
alert("Don't use this browser.");
}
crocro.jscam.swfCam = swfCam; // 外部から参照利用可能に
};
/**
* @variable crocro.jscam.ready(fnc)
* @title カメラ開始時のコールバック
* @description
*
* カメラが開始した時にコールバック実行したいfunctionオブジェクトを指定します。
*
* @param fnc コールバック実行させるfunctionオブジェクト。
*/
//== SwfCamの準備完了コールバック
crocro.jscam.callbackReady = null;
crocro.jscam.ready = function(fnc) {
if (typeof fnc == "function") crocro.jscam.callbackReady = fnc;
};
crocro.jscam.readyFromSwf = function(prm) {
if (crocro.jscam.callbackReady) {
setTimeout(function() {
crocro.jscam.callbackReady(prm)
}, 10);
}
}







