zoukankan      html  css  js  c++  java
  • FMS 录像

    代码
    var mic:Microphone = Microphone.getMicrophone();
    mic.setUseEchoSuppression(
    true);
    mic.setLoopBack(
    true);

    //但那只是得到MIC的声音流并回放到音箱上,音频数据是没法得到的~~ 
    //如果不用NetConnection和NetStream的话 

    //下面是使用FMS保存录像
    var server_uri:String = "rtmp://localhost/test";
    //FMS地址; 
    var videoName:String = "KeeRula";
    //视频名. 
    var my_nc:NetConnection = new NetConnection();
    //新建一个连接对象,用来连接FMS; 
    my_nc.connect(server_uri);
    //连接FMS; 
    var my_ns:NetStream = new NetStream(my_nc);
    //新建流,用来捕获和播放视频; 
    var my_cam:Camera = Camera.get(1);
    video_r.attachVideo(my_cam);
    //获得慑像头,并将摄像头获取的视频载入到video_r里. 
    my_cam.setQuality(102490);
    //设置带宽和质量; 
    var my_mic:Microphone = Microphone.get();
    //获得MIC; 
    my_ns.attachVideo(my_cam);
    my_ns.attachAudio(my_mic);
    //将摄像头图象和MIC声音装载到流. 
    video_p._visible = false;
    //将播放窗口设置为不可见. 
    my_nc.onStatus = function(thisObj:Object)
    {
        
    //trace (thisObj.code); 
        if (thisObj.code == "NetConnection.Connect.Success")
        {
            RecordStop(
    "空闲中");
            
    //执行录制停止方法.并将状态设置为空闲 
        }
        
    else
        {
            trace(
    "错误:服务器未启动或URI输入错误.");
        }
    };

    //onStatus这里是指服务器的连接状态. 
    function Record()
    {
        video_r._visible 
    = true;
        
    //将录制窗口设为可见. 
        video_p._visible = false;
        
    //播放窗口设置为不可见. 
        my_ns.publish(videoName, "record");
        
    //关键就在这句了.写了这么多全围绕它来的.record为录制. 
        StreamInfo("NowRecord");
        
    //执行StreamInfo方法,并将参数设置为NowRecord; 
        btn_pr.btn_text.text = "停止";
        
    //按钮文字:停止. 
        RecordInterval = setInterval(RecordTime, 1000);
        
    //统计录制时间. 
    }
    Record()
    //方法:录制. 

    var timeNum:Number 
    = 0;
    //录制时间. 
    function RecordTime()
    {
        timeNum
    ++;
        txt_status.text 
    = "正在录制" + " " + "时间:" + Math.floor(timeNum / 60+ "" + (timeNum % 60+ "";
    }

    //方法:录制时间统计. 
    function RecordStop(__status:String)
    {
        
    //__status是当前状态文字. 
        txt_status.text = "当前状态:" + __status;
        btn_pr.btn_text.text 
    = "录制";
        StreamInfo(
    "NowStop");
        
    //执行StreamInfo方法..并将参数设置为NowStop; 
        clearInterval(RecordInterval);
        timeNum 
    = 0;
        
    //不录了..要把统计时间清空. 
        if (__status == "录制完成")
        {
            Finished();
        }
        
    //这个应该不用偶说了..     
    }

    //方法:空闲或录制完成. 

    function Finished()
    {
        my_ns.close();
        
    //完成了..就要关闭录制. 
        var thisObj = this;
        var FinishAlert:MovieClip 
    = _root.attachMovie("Alert""FinishAlert"100);
        
    //这个是一个弹出框.具体看库里的MC:Alert. 
        with (FinishAlert)
        {
            alertTitle.HTML 
    = true;
            alertTitle.HTMLText 
    = "" + "录制完成!" + "";
            info.text 
    = "录制完成..请选择下一步操作.";
            _x 
    = video_r._x + (video_r._width - _width) / 2;
            _y 
    = video_r._y + (video_r._height - _height) / 2;
            btn_sub.btn_txt.text 
    = "播放";
            btn_cln.btn_txt.text 
    = "重录";
            btn_sub.onRelease 
    = function()
            {
                thisObj.PlayVideo();
                thisObj.closeAlert(FinishAlert);
            };
            btn_cln.onRelease 
    = function()
            {
                thisObj.Record();
                thisObj.closeAlert(FinishAlert);
            };
            closed.onRelease 
    = function()
            {
                thisObj.closeAlert(FinishAlert);
            };
        }
        btn_pr.enabled 
    = false;
        
    //把按钮设为不可点. 
    }

    //方法:录制完成. 

    function closeAlert(__alert:MovieClip)
    {
        btn_pr.enabled 
    = true;
        unloadMovie(__alert);
    }

    //关闭那个Alert用的. 
    function StreamInfo(__status:String)
    {
        btn_pr.onRelease 
    = function()
        {
            
    if (__status == "NowRecord")
            {
                RecordStop(
    "录制完成");
            }
            
    else if (__status == "NowStop")
            {
                Record();
            }
            
    else if (__status == "NowPlay")
            {
                Record();
            }
        };
    }

    //嘿嘿..如果把上面的仔细看了的话这个就不用我说了吧.^_^ 

    function PlayVideo()
    {
        txt_status.text 
    = "当前状态:" + "正在播放...";
        StreamInfo(
    "NowPlay");
        video_r._visible 
    = false;
        video_p._visible 
    = true;
        video_p.attachVideo(my_ns);
        
    //将视频载到播放窗口中. 
        my_ns.play(videoName);
        
    //开始播放. 
        btn_pr.btn_text.text = "重录";
        my_ns.onStatus 
    = function(PlayInfo)
        {
            
    if (PlayInfo.code == "NetStream.Play.Stop")
            {
                my_ns.seek(
    0);
                my_ns.pause();
                txt_status.text 
    = "当前状态:" + "播放完成...";
            }
        };
        
    //流状态信息...详细的请自己 trace (PlayInfo.code); 
    }
  • 相关阅读:
    CF785CAnton and Permutation(分块 动态逆序对)
    Codeforces617E XOR and Favorite Number(分块 异或)
    POJ2155 Matrix(二维树状数组||区间修改单点查询)
    阿里云重磅发布数据库专家服务
    Dataphin公共云重磅发布,提供一站式智能数据构建与管理能
    阿里大数据产品Dataphin上线公共云,将助力更多企业构建数据中台
    快速完成智能数据构建,Dataphin公共云版本全面解读
    微服务开源生态报告 No.1
    分享 KubeCon 2019 (上海)关于 Serverless 及 Knative 相关演讲会议
    MaxCompute 费用暴涨之存储压缩率降低导致SQL输入量变大
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/1615383.html
Copyright © 2011-2022 走看看