开发环境及工具准备:
Adobe Flex Builder 3
FlashMeidaServer 2 及以上(简称:FMS 本人有一个FMS2破解版,需要的话联系我)
技能准备:
ActionScript 3 (简称:AS)
本功能的实现方式基于FMS为主,ActionScript为辅,双方交互的原则,示意图如下:
描述:教师端采集本地摄像头视频及MIC音频通过AS发布到FMS,学生端通过AS连接FMS服务器或者教师传输的音视频数据进行播放。至此为止,即可实现教师的音视频数据共享(即直播效果)。
具体实现(教师端):
STEP1:在Flex Application 的creationComplete事件调用init方法
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) ;
}
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流
至此,学生将实现音视频流的播放。
需要注意的点:缓冲区的设置,实际应用中应根据实际客户带宽来设置缓冲区大小
大家最好找个局域网环境测试下,最好不要在本机测试,这会隐藏很多问题,有什么疑问大家尽管留言!
---------------------------------------------------------
比较有用的学习FMS的资料
基于FMS的远程互动教学系统设计与实现
http://www.docin.com/p-116813055.html
分享到:
相关推荐
本课程同时也适合与想要学习ffmpeg和qt的同学,本课程学完之后你就已经将ffmpeg可以投入实际的项目应用,对于QT的基本原理你也非常清楚了,可以实现复杂的qt界面,您就可以独立开发出音视频的各种应用,包括无人机...
完成动手教程和项目,这个易于遵循的指南将教你如何使用几个Unity工具开发游戏。随着你的进步,你将学习如何使用Unity引擎,使用c#创建简单的脚本,集成图形,声音,动画和操作物理,为你的游戏创建有趣的机制。你将...
包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python...
FFMEPG入门、FFMPEG内存模型和播放器框架讲解、音视频同步分析-基于ffplay、Advanced Audio Coding (AAC)、新一代视频压缩码标准-H.264_AVC(第二版)、新一代高效视频编码H.265HEVC原理、标准与实现、FLV标准文档、...
中文名: Premiere Pro视频编辑实用教程 作者: 刘小伟 资源格式: PDF 版本: 扫描版 出版社: 电子工业出版社书号: 9787121032707发行时间: 2006年11月1日 地区: 大陆 语言: 简体中文 简介: 内容简介: Premiere...
C#编写的局域网视频会议软件,实现了音频通讯和视频通讯.rar
2.【CodeLab】手把手教你创建第一个手机“Hello World” 3.【Codelab】如此简单!一文带你学会15个HarmonyOS JS组件 4.【Codelab】懒人“看”书新法—鸿蒙语音播报,到底如何实现? 5.【Codelab】基于AI通用文字识别...
【CodeLab】手把手教你创建第一个手机“Hello World” 5-3.【Codelab】如此简单!一文带你学会15个HarmonyOS JS组件 5-4.【Codelab】懒人“看”书新法—鸿蒙语音播报,到底如何实现? 5-5.【Codelab】基于AI通用文字...
Android系统概述,Android系统的开发综述,Android的Linux内核与驱动程序,Android的底层库和程序,Android的JAVA虚拟机 ...图,Android的XML解析,牛人Android提高篇,手把手教你用Android开发新浪微博客户端
Android系统概述,Android系统的开发综述,Android的Linux内核与驱动程序,Android的底层库和程序,Android的JAVA虚拟机 ...图,Android的XML解析,牛人Android提高篇,手把手教你用Android开发新浪微博客户端
本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。 学习这门课程之前你需要至少掌握: 1: python3基础...
本书手把手教大家写写游戏,是一本非常不错的游戏入门教材,资源内有教材pdf格式的电子书,还有教材的光盘资料(必不可少),因为只允许上传50M以下的,所以就传了六个文件,这是第 2 部分 目录: 第1部分 入门 ...
本书手把手教大家写写游戏,是一本非常不错的游戏入门教材,资源内有教材pdf格式的电子书,还有教材的光盘资料(必不可少),因为只允许上传50M以下的,所以就传了六个文件,这是第 4 部分 目录: 第1部分 入门 ...
本书手把手教大家写写游戏,是一本非常不错的游戏入门教材,资源内有教材pdf格式的电子书,还有教材的光盘资料(必不可少),因为只允许上传50M以下的,所以就传了六个文件,这是第 1 部分 目录: 第1部分 入门 ...
本书手把手教大家写写游戏,是一本非常不错的游戏入门教材,资源内有教材pdf格式的电子书,还有教材的光盘资料(必不可少),因为只允许上传50M以下的,所以就传了六个文件,这是第 1 部分 目录: 第1部分 入门 ...
本书手把手教大家写写游戏,是一本非常不错的游戏入门教材,资源内有教材pdf格式的电子书,还有教材的光盘资料(必不可少),因为只允许上传50M以下的,所以就传了六个文件,这是第 3 部分 目录: 第1部分 入门 ...
本书手把手教大家写写游戏,是一本非常不错的游戏入门教材,资源内有教材pdf格式的电子书,还有教材的光盘资料(必不可少),因为只允许上传50M以下的,所以就传了六个文件,这是第 5 部分 目录: 第1部分 入门 ...
本书手把手教大家写写游戏,是一本非常不错的游戏入门教材,资源内有教材pdf格式的电子书,还有教材的光盘资料(必不可少),因为只允许上传50M以下的,所以就传了六个文件,这是第 1 部分 目录: 第1部分 入门 第...