这是我第一次使用StackExchange,所以如果我错过了什么,我深表歉意。
我正在尝试创建一个AS3闪存,它将使用网络摄像头和RED5媒体服务器录制视频;我被困住了(我不是程序员,更像是一个做所有事情的计算机杂工)。RED5 附带的示例工作正常(尽管在 AS2 中,由于某种原因,我无法使我需要做的某些事情工作),但我的代码似乎没有记录流,因为没有文件,RED5 控制台只说:
[INFO] [NioProcessor-3] org.red5.server.adapter.ApplicationAdapter - File lecture.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");
}
在发布流之前,您必须连接并等待成功状态。
例如:
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 文档以了解更多信息。
我刚刚通过极端的谷歌搜索找到了答案,我需要在函数外部声明 Netstream 变量; 否则"发布"视频是"空的",因为垃圾收集器在某个时候正在破坏我的变量。
所以在我声明的函数之外
var _ns:NetStream;
在函数中,我声明:
function recordvid(e:MouseEvent):void {
_ns = new NetStream(_nc);
_ns.attachCamera(_cam);
_ns.attachAudio(_mic);
_ns.publish("lecture", "record");
非常棒,我在堆栈溢出中找到了答案