音视频流的发布(服务端)

 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直播的更多相关文章

  1. [ActionSprit 3.0] FMS服务器带宽检测

    package { import flash.display.Sprite; import flash.net.NetConnection; import flash.events.NetStatus ...

  2. [ActionSprit 3.0] FMS客户端调用服务器端命令或方法

    有时候客户端需要和服务器端进行通信,服务器端会有个main.asc文件(当然,文件名可以自己定义),这个就是服务器端程序,是在服务器上执行的,你可以用trace调试,trace的内容会在管理服务器的页 ...

  3. [ActionSprit 3.0] FMS安装与测试

    1.运行Flash Media Server4.5.exe,安装选项可全默认,序列号可不填:输入用户名和密码需记住,登录时要用. 2.安装完成,在安装目录C:\Program Files\Adobe\ ...

  4. [ActionSprit 3.0] FMS远程共享

    package { import flash.display.Sprite; import flash.events.NetStatusEvent; import flash.events.SyncE ...

  5. [ActionSprit 3.0] FMS接收正在播放的视频中嵌入的描述性信息(onMetaData事件)

    package { import flash.display.MovieClip; import flash.net.NetConnection; import flash.events.NetSta ...

  6. [ActionSprit 3.0] FMS客户端与服务器端交互(传参)

    客户端as: import flash.net.NetConnection; import flash.events.NetStatusEvent; var nc:NetConnection = ne ...

  7. [AS3.0] FMS改变录制视频的默认地址

    FMS默认的视频录制或点播的地址是在{FMS-Install-Dir}\applications,如何指向到其他目录. 1.改变applications的目录指向: 在FMS安装目录下找到/conf/ ...

  8. FMS直播流发布时 Microphone Speex 编码设置注意事项

    1.为何要用 Speex?FP的默认音频编码是 NellyMoser,而FP10之后加入了 Speex.实际应用中,用默认的 NellyMoser 编码音频,会有个很大的问题,就是无法控制流码率浮动. ...

  9. swift3.0 简单直播和简单网络音乐播放器

    本项目采用swift3.0所写,适配iOS9.0+,所有界面均采用代码布局. 第一个tab写的是简单直播,传统MVC模式,第二个tab写的是简单网络音乐播放器.传说MVVM模式(至于血统是否纯正我就不 ...

随机推荐

  1. Linux实战教学笔记55:开源虚拟化KVM(三)管理虚拟网络

    六,管理虚拟网络 [x] Linux网桥基本概念 [x] qemu-kvm支持的网络 [x] 向虚拟机添加虚拟网络连接 [x] 基于NAT的虚拟网络 [x] 基于网桥的虚拟网络 [x] 用户自定义的隔 ...

  2. Gouraud Shading

    [Gouraud Shading] Gouraud Shading (高洛德着色/高氏着色) 这种着色的效果要好得多,也是在游戏中使用最广泛的一种着色方式.它可对3D模型各顶点的颜色进行平滑.融合处理 ...

  3. poolmanager1.path-o-logical 很好的prefab preload工具

    http://docs.poolmanager1.path-o-logical.com/ 提高性能的不错选择

  4. java实现文件的拷贝以及文件的删除

    /** * 将文件拷贝到指定目录 * @param oldAddress 文件所在目录(文件的全路径) * @param newAddress 指定目录(包含复制文件的全名称) * @throws E ...

  5. EasyBuy项目总结_20180409

    一.项目技术点 1.熟练使用jsp及el和jstl表达式 el: $() jstl: 1.导包; 2.声明<%@ taglib uri=" " preffix="c ...

  6. zabbix结合grafana

    一.下载grafana 下载地址: http://docs.grafana.org/installation/rpm/ https://s3-us-west-2.amazonaws.com/grafa ...

  7. OpenNebula 4.0 Beta 新特性介绍

    http://blog.chinaunix.net/uid-20940095-id-3561376.html 2013年3月26号,OpenNebula社区发布了OpenNebula 4.0 Beta ...

  8. [C++] struct memory allocation

    MAX-byte alignment (最大单位对齐) typedef struct user USER; typedef struct employee E; struct user{ ]; //t ...

  9. 1、SSH框架整合

    1.建立项目 2.导入SSHjar包 http://pan.baidu.com/s/1hsELr04 3.引入web.xml文件 <?xml version="1.0" en ...

  10. nginx内置变量详解-乾颐堂

    nginx的配置文件中可以使用的内置变量以美元符$开始,也有人叫全局变量.其中,部分预定义的变量的值是可以改变的. $arg_PARAMETER 这个变量值为:GET请求中变量名PARAMETER参数 ...