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

 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. 获取崩溃时的调用栈和生成dump文件,然后自动重启

    首先要说明的是:  linux 下 比较方便可以得到 崩溃时的调用栈,win下 比较难办   1. linux 获取调用栈 代码奉上: #include <execinfo.h> //在头 ...

  2. UIPanel

    [UIPanel] UIPanel is a component that collects and manages all widgets underneath it. UIPanel is res ...

  3. 150. Evaluate Reverse Polish Notation (Stack)

    Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...

  4. 146. LRU Cache (List, HashTable)

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  5. Appium+python自动化-Remote远程控制

    前言 在第三篇启动app的时候有这样一行代码driver = webdriver.Remote('http://192.168.1.1:4723/wd/hub', desired_caps),很多小伙 ...

  6. java.util.regex.PatternSyntaxException, dangling metacharacter “?” 解决方法

    今天在用正则表达式的时候遇到这样一个异常 看了相关资料后发现这是因为在正则表达式中,像"?","*","\"都是保留字符,所以在用的时候需要 ...

  7. code1214 线段覆盖

    贪心 把线段们按终止点b的先后排序,b小的在前面,b一样随便 然后设r为当前最大的b 每加入一条新的线段i,判断是否重合(i.a>=r) 如果重合就舍弃i,否则把i加入,ans++,更新r:r= ...

  8. efcore dbfirst 通过数据库表反向生成model

    创建class library并设置为启动项目 使用nuget控制台,设置当前项目为新建的class library Install-Package Microsoft.EntityFramework ...

  9. 关于HBase的memstoreFlushSize。

    memstoreFlushSize是什么呢? memstoreFlushSize为HRegion上设定的一个阈值,当MemStore的大小超过这个阈值时,将会发起flush请求. 它的计算首先是由Ta ...

  10. aspnetcore的那些actionresult们

    比MVC5多了n个actionresult,傻傻分不清,整理了下,妈妈再也不用担心了 https://docs.asp.net/projects/api/en/latest/autoapi/Micro ...