[ActionSprit 3.0] FMS直播
音视频流的发布(服务端)
package
{
import flash.display.Sprite;
import flash.events.NetStatusEvent;
import flash.media.Camera;
import flash.media.Microphone;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.net.ObjectEncoding; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-7-7 下午2:47:40
*
*/
public class LiveFMS extends Sprite
{
private var _netConnection:NetConnection = new NetConnection();
private var _netStream:NetStream = null;
private var _fms:String = "rtmp://localhost/HelloServer";//"rtmp:/HelloServer"
private var _camera:Camera = null;
private var _microphone:Microphone = null; public function LiveFMS()
{
init();
}
private function init():void
{
_netConnection.objectEncoding = ObjectEncoding.AMF3;
_netConnection.connect(_fms);
_netConnection.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
} private function onNetStatus(e:NetStatusEvent):void
{
trace(e.info.code);
switch(e.info.code)
{
case "NetConnection.Connect.Success"://连接尝试成功
publishStream();//发布流到服务器
break;
case "NetConnection.Connect.Closed"://成功关闭连接 break;
default:
break;
}
}
private function publishStream():void
{
_netStream = new NetStream(_netConnection);//创建于FMS连接相关的音视频数据流对象
_camera = Camera.getCamera("0");//获得默认摄像头
_camera.setMode(320,240,15);//经试验:320*240效果较佳而占用网络流量较小,15为keyFrame
_camera.setQuality(100*1000,90);//100*1000为上传带宽,90为图像质量;
_microphone = Microphone.getMicrophone();//获得麦克风对象
_microphone.setUseEchoSuppression(true);//抑制回音;
_netStream.attachAudio(_microphone);//将音频加入到流中;
_netStream.attachCamera(_camera);//将视频加入到流中;
_netStream.publish("my_video","live");//将音视频数据发布到FMS服务器上,流名称为:my_video,发布类型为:live(实时);
} }
}
音视频流的播放(客户端)
package
{
import flash.display.SimpleButton;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.events.NetStatusEvent;
import flash.media.Video;
import flash.net.NetConnection;
import flash.net.NetStream;
import flash.net.ObjectEncoding;
import flash.text.TextField; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-7-10 下午3:03:11
*
*/
[SWF(width="800",height="600")]
public class LiveFMSClient extends Sprite
{
private var _playBtn:Sprite;
private var _netConnection:NetConnection = new NetConnection();
private var _netStream:NetStream;
private var _fms:String = "rtmp://192.168.3.106/HelloServer";
public function LiveFMSClient()
{
initView();
}
private function initView():void
{
_playBtn = new Sprite();
_playBtn.graphics.beginFill(0xcccccc);
_playBtn.graphics.drawRoundRect(0,0,50,20,5,5);
_playBtn.graphics.endFill();
_playBtn.x = _playBtn.y = 50;
_playBtn.buttonMode = true;
var t:TextField = new TextField();
t.text = "Play";
t.autoSize = "left";
t.mouseEnabled = false;
t.x = 0.5*(_playBtn.width-t.width);
t.y = 0.5*(_playBtn.height-t.height)
_playBtn.addChild(t);
this.addChild(_playBtn);
_playBtn.addEventListener(MouseEvent.CLICK,onPlay);
} private function onPlay(e:MouseEvent):void
{
//_netConnection.objectEncoding = ObjectEncoding.AMF3;
_netConnection.connect(_fms);
_netConnection.addEventListener(NetStatusEvent.NET_STATUS,onNetStatus);
}
private function onNetStatus(e:NetStatusEvent):void
{
trace(e.info.code);
switch(e.info.code)
{
case "NetConnection.Connect.Success":
playStream();
break;
case "NetConnection.Connect.Closed": break; default: break;
}
} private function playStream():void
{
_netStream = new NetStream(_netConnection);
_netStream.bufferTime = 15;
var video:Video = new Video();
video.attachNetStream(_netStream);
video.smoothing = true;
this.addChild(video);
video.x = 80;video.y = 100;
_netStream.play("my_video");
_netStream.addEventListener(NetStatusEvent.NET_STATUS,onStreamStatus);
}
private function onStreamStatus(e:NetStatusEvent):void
{
trace(e.info.code);
switch(e.info.code)
{
case "NetStream.Play.Start": break;
case "NetStream.Play.StreamNotFound":
trace("无法找到传递给 play() 方法的 FLV。");
break;
case "NetStream.Play.UnpublishNotify":
trace("服务器取消流的发布");
break;
default: break;
}
}
}
}
[ActionSprit 3.0] FMS直播的更多相关文章
- [ActionSprit 3.0] FMS服务器带宽检测
package { import flash.display.Sprite; import flash.net.NetConnection; import flash.events.NetStatus ...
- [ActionSprit 3.0] FMS客户端调用服务器端命令或方法
有时候客户端需要和服务器端进行通信,服务器端会有个main.asc文件(当然,文件名可以自己定义),这个就是服务器端程序,是在服务器上执行的,你可以用trace调试,trace的内容会在管理服务器的页 ...
- [ActionSprit 3.0] FMS安装与测试
1.运行Flash Media Server4.5.exe,安装选项可全默认,序列号可不填:输入用户名和密码需记住,登录时要用. 2.安装完成,在安装目录C:\Program Files\Adobe\ ...
- [ActionSprit 3.0] FMS远程共享
package { import flash.display.Sprite; import flash.events.NetStatusEvent; import flash.events.SyncE ...
- [ActionSprit 3.0] FMS接收正在播放的视频中嵌入的描述性信息(onMetaData事件)
package { import flash.display.MovieClip; import flash.net.NetConnection; import flash.events.NetSta ...
- [ActionSprit 3.0] FMS客户端与服务器端交互(传参)
客户端as: import flash.net.NetConnection; import flash.events.NetStatusEvent; var nc:NetConnection = ne ...
- [AS3.0] FMS改变录制视频的默认地址
FMS默认的视频录制或点播的地址是在{FMS-Install-Dir}\applications,如何指向到其他目录. 1.改变applications的目录指向: 在FMS安装目录下找到/conf/ ...
- FMS直播流发布时 Microphone Speex 编码设置注意事项
1.为何要用 Speex?FP的默认音频编码是 NellyMoser,而FP10之后加入了 Speex.实际应用中,用默认的 NellyMoser 编码音频,会有个很大的问题,就是无法控制流码率浮动. ...
- swift3.0 简单直播和简单网络音乐播放器
本项目采用swift3.0所写,适配iOS9.0+,所有界面均采用代码布局. 第一个tab写的是简单直播,传统MVC模式,第二个tab写的是简单网络音乐播放器.传说MVVM模式(至于血统是否纯正我就不 ...
随机推荐
- Linux实战教学笔记55:开源虚拟化KVM(三)管理虚拟网络
六,管理虚拟网络 [x] Linux网桥基本概念 [x] qemu-kvm支持的网络 [x] 向虚拟机添加虚拟网络连接 [x] 基于NAT的虚拟网络 [x] 基于网桥的虚拟网络 [x] 用户自定义的隔 ...
- Gouraud Shading
[Gouraud Shading] Gouraud Shading (高洛德着色/高氏着色) 这种着色的效果要好得多,也是在游戏中使用最广泛的一种着色方式.它可对3D模型各顶点的颜色进行平滑.融合处理 ...
- poolmanager1.path-o-logical 很好的prefab preload工具
http://docs.poolmanager1.path-o-logical.com/ 提高性能的不错选择
- java实现文件的拷贝以及文件的删除
/** * 将文件拷贝到指定目录 * @param oldAddress 文件所在目录(文件的全路径) * @param newAddress 指定目录(包含复制文件的全名称) * @throws E ...
- EasyBuy项目总结_20180409
一.项目技术点 1.熟练使用jsp及el和jstl表达式 el: $() jstl: 1.导包; 2.声明<%@ taglib uri=" " preffix="c ...
- zabbix结合grafana
一.下载grafana 下载地址: http://docs.grafana.org/installation/rpm/ https://s3-us-west-2.amazonaws.com/grafa ...
- OpenNebula 4.0 Beta 新特性介绍
http://blog.chinaunix.net/uid-20940095-id-3561376.html 2013年3月26号,OpenNebula社区发布了OpenNebula 4.0 Beta ...
- [C++] struct memory allocation
MAX-byte alignment (最大单位对齐) typedef struct user USER; typedef struct employee E; struct user{ ]; //t ...
- 1、SSH框架整合
1.建立项目 2.导入SSHjar包 http://pan.baidu.com/s/1hsELr04 3.引入web.xml文件 <?xml version="1.0" en ...
- nginx内置变量详解-乾颐堂
nginx的配置文件中可以使用的内置变量以美元符$开始,也有人叫全局变量.其中,部分预定义的变量的值是可以改变的. $arg_PARAMETER 这个变量值为:GET请求中变量名PARAMETER参数 ...