Red5和AS3 - 文件“Mystream”被删除(不记录)

时间:2012-10-03 22:21:42

标签: actionscript-3 red5

这是我第一次使用StackExchange,所以如果我遗漏了任何内容,我会道歉。

我正在尝试创建一个AS3 Flash,它将使用网络摄像头和RED5媒体服务器录制视频;我被困住了(我不是一个程序员,更像是一个完成所有事情的计算机杂工)。 RED5附带的示例工作正常(虽然是在AS2中,但由于某种原因,我无法做出我需要做的某些事情),但我的代码似乎没有记录流,因为没有文件,RED5控制台只说:

[INFO] [NioProcessor-3] org.red5.server.adapter.ApplicationAdapter - 文件讲座.flv已删除

这是迄今为止的代码。 (更新于09/07/12)

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");
}

2 个答案:

答案 0 :(得分: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 documentation了解详情。

答案 1 :(得分:0)

我刚刚通过极端谷歌找到答案,我需要在函数外声明Netstream变量;否则“发布”视频是“空的”,因为垃圾收集器在某个时刻正在破坏我的变量。

所以在函数之外我声明

var _ns:NetStream;

并在函数内部声明:

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

非常棒,我在stackoverflow

中找到了答案