【问题标题】:Red5 and AS3 - file "Mystream" is deleted (not recording)Red5 和 AS3 - 文件“Mystream”被删除(不记录)
【发布时间】:2012-10-07 14:28:41
【问题描述】:

这是我第一次使用 StackExchange,如果有任何遗漏,我深表歉意。

我正在尝试创建一个 AS3 Flash,它将使用网络摄像头和 RED5 媒体服务器录制视频;我被卡住了(我不是程序员,更像是一个可以做所有事情的电脑杂工)。 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");
}

【问题讨论】:

    标签: actionscript-3 red5


    【解决方案1】:

    在发布流之前,您必须连接并等待成功状态。

    例如:

    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 了解更多信息。

    【讨论】:

    • 更新了代码(和我的帖子一样),但我仍然遇到同样的错误,不过感谢您的帮助,我不知道如何制作,所以它会等待连接最初成立;所以你的帖子对我有一点帮助。
    【解决方案2】:

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

    所以在我声明的函数之外

    var _ns:NetStream;
    

    在我声明的函数内部:

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

    太棒了,我在stackoverflow 找到了答案

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多