— 【AS3】FMSに送るWebカメラ送信機はAIRで作ってみた
Posted: Feb 6, 2008, 6:57 pm | Author: cyberryo | Category: Dialy | Tags: ActionScript
次期自社のサイトでも、相変わらずライブカメラに活躍してもらう予定だけど、今回は映像の送信はAIRでやってみることにした。ただの気まぐれっす。FMSに送信、ずきゅん!
とりあえず、asファイルだけで作ったswfものだったら簡単にAIRに移植できることがわかった。(当たり前だよね)
これでわざわざブラウザを立ち上げなくても、ライブカメラを配信できるようになったぜー。(自己満)
ササッと書いたのでかなり中途ハンパだけど晒してしまう。
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="660" height="600" borderColor="#DBDBDB">
<mx:Script>
<![CDATA[
//
// Webカメラ送信
// ver 0.1
// 2008/02/06
//import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.net.*;import mx.controls.VideoDisplay;
private var camera:Camera;
private var video:Video;
private var nc:NetConnection;
private var stream:NetStream;public function camSend():void {
init();
}private function init():void {
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
camera = Camera.getCamera();
if(camera != null){
setupCamera();
}else{
trace("カメラがありません");
return;
}
nc = new NetConnection();
nc.objectEncoding = ObjectEncoding.AMF0;
nc.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
nc.addEventListener(SecurityErrorEvent.SECURITY_ERROR,onSecurityError);
nc.connect("rtmp://myserver.com/video");
}private function setupCamera():void {
camera.setMode(640,480,30);
Cameraname.text = camera.name;
VideoDisplay.attachCamera(camera);
}private function sendVideo():void {
stream = new NetStream(nc);
stream.attachCamera(camera);
stream.publish("myvideo");
}private function onNetStatus(evt:NetStatusEvent):void {
switch(evt.info.code){
case "NetConnection.Connect.Success":
trace("接続開始");
CameraActive.text = "サイトに映像配信中";
sendVideo();
break;
case "NetConnection.Connect.Closed":
trace("接続解除");
break;
case "NetConnection.Connect.Faild":
trace("接続失敗");
break;
case "NetConnection.Connect.Rejected":
trace("接続拒否");
break;
default:
trace("evt.info.code");
}
}private function onSecurityError(evt:SecurityErrorEvent):void {
trace("セキュリティエラー");
}private function onAsyncError(evt:AsyncErrorEvent):void {
trace("同期エラー");
}
]]>
</mx:Script><mx:VideoDisplay id="VideoDisplay" width="640" height="480" autoPlay="true" horizontalCenter="0" y="25"/>
<mx:Button x="10" y="513" label="送信開始" click="camSend()" width="80" height="30" fontFamily="MSゴシック" fontSize="12" id="SendButton"/>
<mx:Text x="134" y="520" text="カメラ名" id="Cameraname"/>
<mx:Text y="520" text="接続状況" textAlign="right" id="CameraActive" right="10"/></mx:WindowedApplication>