0

StackExchangeを使用するのはこれが初めてなので、何か見落としがあった場合はお詫び申し上げます。

WebカメラとRED5メディアサーバーを使用してビデオを録画するAS3フラッシュを作成しようとしています。私は立ち往生しています(私はプログラマーではなく、すべてを行うコンピューターの便利屋です)。RED5に付属している例は正常に機能しますが(AS2にあり、何らかの理由で特定の作業を行うことができませんでした)、ファイルがないため、コードはストリームを記録していないようです、RED5コンソール言うだけ:

[INFO][NioProcessor-3]org.red5.server.adapter.ApplicationAdapter-ファイルlecture.flvが削除されました

これがこれまでのコードです。(2012年9月7日更新)

import flash.display.Sprite;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.media.Camera;
import flash.events.MouseEvent;
import flash.media.Microphone;
import flash.events.*;
import flash.media.Video;

var _cam:Camera
var _mic:Microphone

// create basic netConnection object
var _nc:NetConnection = new NetConnection();

_nc.client = this
// connect to the local Red5 server
_nc.connect("rtmp://localhost/myapp");
_nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

//Add listeners for buttons
record_btn.addEventListener( MouseEvent.CLICK, recordvid );
stop_btn.addEventListener( MouseEvent.CLICK, stopvideo );
//submit_btn.addEventListener( MouseEvent.CLICK, onSubmit );
//Listeners

function netStatusHandler(event:NetStatusEvent):void{
trace("start netstatus handler");
if (event.info.code == "NetConnection.Connect.Success"){
   attachCamera();
                                                      }
}

function attachCamera(e:Event = null):void {
    trace("attach");
        //Attach Camera to field
        _cam=Camera.getCamera();
        _mic=Microphone.getMicrophone()
        vid.attachCamera(_cam);

}

function stopvideo(e:MouseEvent):void {
    //_ns.close();
}

function recordvid(e:MouseEvent):void {
    var _ns:NetStream = new NetStream(_nc);
     trace("publish");
     _ns.attachCamera(_cam);
     _ns.attachAudio(_mic);
     _ns.publish("lecture", "record");
}
4

2 に答える 2

0

極端なグーグルで答えを見つけたので、関数の外でNetstream変数を宣言する必要がありました。それ以外の場合、ガベージコレクターがある時点で変数を破棄していたため、「公開」ビデオは「空」でした。

だから私が宣言する関数の外

var _ns:NetStream;

そして私が宣言する関数の中で:

function recordvid(e:MouseEvent):void {
     _ns = new NetStream(_nc);
     _ns.attachCamera(_cam);
     _ns.attachAudio(_mic);
     _ns.publish("lecture", "record");

驚くべきことに、私はここでスタックオーバーフローで答えを見つけまし

于 2012-10-07T06:28:41.430 に答える
0

ストリームを公開する前に、接続して成功ステータスを待つ必要があります。

例えば ​​:

var nc:NetConnection = new NetConnection();
nc.connect("rtmp://fms.example.com/lectureseries");
nc.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);

function netStatusHandler(event:NetStatusEvent):void{
   if (event.info.code == "NetConnection.Connect.Success"){
         var ns:NetStream = new NetStream(nc);
         ns.publish("lecture", "record");
   }
}

詳細については、Netstream のドキュメントを参照してください。

于 2012-10-04T07:01:53.080 に答える