博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flash 平台音视频直播的实现
阅读量:7254 次
发布时间:2019-06-29

本文共 2680 字,大约阅读时间需要 8 分钟。

hot3.png

开发环境及工具准备:

Adobe Flex Builder 3
FlashMeidaServer 2 及以上(简称:FMS 本人有一个FMS2破解版,需要的话联系我)
 
技能准备:
ActionScript 3 (简称:AS,本文中代码为AS)
 

本功能的实现方式基于FMS为主,ActionScript为辅,双方交互的原则,示意图如下:

描述:教师端采集本地摄像头视频及MIC音频通过AS发布到FMS,学生端通过AS连接FMS服务器或者教师传输的音视频数据进行播放。至此为止,即可实现教师的音视频数据共享(即直播效果)。

 
具体实现(教师端):
STEP1:在Flex Application 的creationComplete事件调用init方法

private var conn:NetConnection = new NetConnection();//用来连接FMSprivate 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) ;}

STEP2:连接FMS成功后,发布音视频数据到FMS服务端

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(实时)}

至此:教师已将音视频数据发布到FMS。
需要注意的点:摄像头对象的分辨率设置,这样会直接影响到图像的清晰度和传送数据量的大小。
接下来将由学生端对此数据进行读取
STEP1:如教师端STEP1进行相关设置
STEP2:成功连接FMS服务器后,进行音视频数据播放(学生端playStream方法的实现)

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流

至此,学生将实现音视频流的播放。

需要注意的点:缓冲区的设置,实际应用中应根据实际客户带宽来设置缓冲区大小
 
大家最好找个局域网环境测试下,最好不要在本机测试,这会隐藏很多问题,有什么疑问大家尽管留言!
 

原文地址:

转载于:https://my.oschina.net/leixiaohua1020/blog/301888

你可能感兴趣的文章
人生的悲哀莫过于:求而不得,舍而不能,得而不惜
查看>>
<资料收集>让使用了SQLite的.NET应用自适应32位/64位系统
查看>>
php laravel 框架搭建与运行
查看>>
Java-transient总结
查看>>
DBA_实践指南系列10_Oracle Erp R12诊断功能Diagnostic(案例)
查看>>
phpStorm配置xdebug调试总结 [Mac/Linux]
查看>>
tomcat run log
查看>>
[转载].(筆記) Qsys resource整理 (SOC) (Nios II) (Qsys)
查看>>
【洛谷日报#75】浅谈C++指针
查看>>
Spring @Transactional propagation 各个属性值的含义
查看>>
知乎背景图 canvas 效果
查看>>
Vncserver安装-Centos7
查看>>
div自身高度、屏幕高度
查看>>
HDU 1358 Period(kmp简单解决)
查看>>
PYTHON压平嵌套列表
查看>>
JavaScript -- BATweb笔试面试
查看>>
halcon算子翻译——compose7
查看>>
关于angular 自定义directive
查看>>
第五章 Python 函数(一)
查看>>
无聊的数列 线段树差分
查看>>