Flash 平台音视频直播的实现
开发环境及工具准备: 本功能的实现方式基于FMS为主,ActionScript为辅,双方交互的原则,示意图如下: 描述:教师端采集本地摄像头视频及MIC音频通过AS发布到FMS,学生端通过AS连接FMS服务器或者教师传输的音视频数据进行播放。至此为止,即可实现教师的音视频数据共享(即直播效果)。 private?var?conn:NetConnection?=?new?NetConnection();//用来连接FMS private?var?stream:NetStream?=?null;//盛放音视频数据 //FMS连接串(例如:rtmp://192.168.1.101/fmsapp) //其中需要在FMS_HOME/applications/新建一个fmsapp的文件夹 private?var?fms:String?=?""; private?function?init():void?{ //轨道通信,必须要设置 conn.objectEncoding?=?ObjectEncoding.AMF0?; //共享对象轨道通信设置 SharedObject.defaultObjectEncoding?=?ObjectEncoding.AMF0;? //连接FMS服务器 conn.connect(fms)?; //连接FMS结果事件处理器 conn.addEventListener(NetStatusEvent.NET_STATUS,connectFMS)?; }
private?function?connectFMS(e:NetStatusEvent):void?{ var?result:String?=?e.info.code?;//连接FMS的返回代码 ????switch(result)?{ ??????????case?"NetConnection.Connect.Success"://连接FMS成功 ???????playStream();//开发传送音视频数据 ???????break; ??????????case?"NetStream.Play.StreamNotFound": ??????????Alert.show(?"视频流没有找到"); ??????????break; ?????????default?: ?????????Alert.show(?"连接服务器失败,检查网络环境"); ??????????break?; ????????} } public?var?cam1:Camera?=?null;//摄像头对象 private?var?mir:Microphone?=?null;//麦克对象 private?function?playStream():void?{ stream?=?new?NetStream(conn);//创建于FMS连接相关的音视频数据流对象 ???????????cam1?=?Camera.getCamera("0");//获得默认摄像头 ???????????cam1.setMode(320,240,15);?//经试验:320*240效果较佳而占用网络流量较小?15为keyFrame ?????????????????cam1.setQuality(100?*?1000,90);?//100*1000为上传带宽?90为图像质量 ????????????mir?=?Microphone.getMicrophone();//获得麦克对象 ????????????mir.setUseEchoSuppression(true);//抑制回声 ????????????stream.attachAudio(mir);//将音频加入到流中 ????????????stream.attachCamera(cam1);//将视频加入到流中 ????????????vd.attachCamera(cam1);//在Flex?Application中放一个VideoDisplay对象,用来本地观看图像 ????????????stream.publish("conf","live");//将音视频数据发布到FMS服务器上,流名称为:conf?发布类型为:live(实时) }
stream?=?new?NetStream(conn);//学生端的流对象?conn为NetConnection对象 //学生端的缓冲时间。此参数很重要,很多朋友反应:播放视频不流畅。 //要明确一个观点:没有绝对的实时直播,所谓的直播其实就是在不断的播放缓冲区的数据 stream.bufferTime?=?15;? //按照道理来说这里应该是检测缓冲区的代码 //但本程序为展示直播的核心将此代码略掉,有兴趣的朋友可以问我 v?=?new?Video();? v.attachNetStream(stream);?//将音视频流附加到video对象中 v.width?=?vd.width; v.height?=?vd.height; v.smoothing?=?true; vd.addChildAt(v,1);//VideoDisplay通过对Video的添加来播放音视频流 stream.play("conf");//播放教师发布的conf流 至此,学生将实现音视频流的播放。 原文地址:http://mhqawjh.iteye.com/blog/726913 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |