4月 142017
 

rtmp延时低,但是累计延时就不一定低。随着播放时间的久远以及网络状况的变化。rtmp延时会比较严重,甚至达到几十秒的延时。这个时候,直播的体验会很差很差。这就是rtmp的一个缺点。rtmp是基于tcp,不会丢包。所以当网络状态差时,服务器会将包缓存起来。待网络状况好了,就一起发给客户端。

对于NetStream,有一个属性叫bufferTimeMax。指定实时流内容的最大缓冲区长度(以秒为单位)。默认值为 0。由于网络和设备问题(如发送方和接收方之间存在时钟偏移),缓冲区长度可随时间不断增加。设置此属性可使实时应用(如会议和监视)的缓冲区长度最大化。当 bufferTimeMax > 0,并且 bufferLength >= bufferTimeMax 时,将加快音频的播放速度,直到 bufferLength 达到 bufferTime。如果实时流仅包含视频,则视频播放较快,直到 bufferLength 达到 bufferTime。Flash Player 将捕捉速率控制在 1.5% 和 6.25% 之间,具体取决于播放延迟量(bufferLength 和 bufferTime 差异)。如果流中包含音频,通过缩减频率域采样,使音频失真最小化,可以加快播放。设置 bufferTimeMax 属性可在以下情况下启用实时缓冲流追赶:
1,以数据流的方式从 Flash Media Server 传输实时介质。
2,以数据流的方式在数据生成模式 (NetStream.appendBytes()) 下传输实时介质。

本来以为只要设置下bufferTimeMax就可以了。使用方式(上边两点)限制了bufferTimeMax的作用。

那么,遇到问题,总要解决问题的。可以手动加一个定时器,间隔可以根据需要来做。每个这个间隔,就去检查bufferLentgh的大小。bufferLength的值越大,表示离真实的实时时间越远。实时性约差。当bufferLength的大小超过了预期的值,就对NetStream做pause和resume处理。用来释放数据。来达到及时同步的目的。当然,你也可以初始化重连,但这样容易引起黑屏。

这个方法,也是迫于无奈。公司项目用推流工具推流,客户端通过rtmp连接观看。两者之间,没加入其他的沟通环节。不知道客户端此时的流与真实流的状况。

3月 122015
 

最近在用AMS做一个多房间的聊天室。计划先做网页端,然后用air端。无论哪个平台,都有在线功能管理。比如房间踢人,权限管理,房间设置等等。

AMS对应的服务端代码还停留在as2时代。那么,用as3的代码去和as2的代码交流,会出现啥问题呢。比如as3(client)这边call server端,传了一个类对象过去。服务端接到后,原因返回的却是一个Object对象,没办法将类返回过来。

这样使得两者交互不怎么和谐。这个不是这篇文字要记录的东西,先不管这个了。进入正题。

    nc.connect("rtmp://localhost/chatroom/311");
    nc.connect("rtmp://localhost/chatroom/5100");

这里实现的是一份服务器代码,对应许多个房间。其实,这里仅仅是在后边多添加了一个数字(可以说是房间号码)。平常,我们会去这样做。

    nc.connect("rtmp://localhost/chatroom");

虽然我们没有多加数字,服务器那边会默认有一个字符分配出来。在控制台中,你可以看的到”_definst_”。而聊天室这里要做的就是一份服务器代码对应很多个客户端。每个客户端行为各不一样,各不影响。

到了这里,可以想到游戏里边的小喇叭。有全频道喇叭和当前频道喇叭。当前频道就相当于这里所说的一个房间。那么全频道喇叭又该如何呢。这里,会有另外一个server代码与之对应,它可以统筹所有的子频道。然后广播出去。

 Posted by at 下午11:50
5月 202014
 

FMS这个话题由来已久,H.264这个编码格式也由来已久。FMS不叫FMS了,改叫AMS了。因为是Adobe。
今天就说说flash发布流媒体视频,以H.264编码出现的问题。在网上找,大把的关于as3的H.264视频编码的代码。API就那么几个。可是,当你真正去做,用到流媒体发布和播放的时候,就会发现结果并不是想象的那么美。也许会遇到以下几个问题。
1.发布端的视频都不清晰。
2.发布端的视频清晰,客户端接受到的视频不清晰。
冥冥H.264视频编码备受推崇,高清的帽子早戴上了。为什么会这样呢。这里就将一点小细节说说吧。
1.不仅H.264那块的设置,你要设置好。Camera那里同样要设置好。如果你仅仅设置了H.264编码这里,却漏掉了设置Camera这块,你就会遇到上边的问题。
2.如果仅仅设置了Camera的setMode,那么你发布端的视频会是清晰的。如果还设置了setQuality。那么发布端和收看端都会有比较好的效果。
3.你H.264编码这边将视频分辨率,帧频设置成很高,并且Camera这里也这样设置。那么你的视频效果是杠杠的。不过,这个时候带来的后果就是字节量变大,占用的带宽很大很大。我将分辨率设置成640*480,帧频设置成30。上行的带宽达到400多K/S。视频获取源如果晃动下,会更厉害。所以,根据需要,可以适当的降低分辨率和帧频。即使你降低了分辨率,在Vedio那里,也是可以放大的。
Continue reading »

5月 092014
 

基于AS3丶FMS。对视频音频流的发布做一次总结。

点击右边的链接,可以先体验下:http://www.vini123.com/chatroom/

在视频音频流的发布前,先得做好第一步,NetConnecttion的连接。

然后,开始才开始视频音频流的发布。先创建一个NetStream对象,其包含一个参数就是NetConnection。

再获取摄像头,麦克风。设置摄像头,麦克风。将摄像头,麦克风附着到流上。如果是摄像头,还得建立一个Video对象,将摄像头也附着到Video对象上,使得自己也能看见视频。因为Video对象会添加到显示列表中。除非你不添加上去。

最后,发布流。

Continue reading »

4月 212014
 

FMS流媒体,貌似都销声匿迹了。不过,既然曾经做过。现在就温习回复一遍吧。

FMS是一种C/S模式,通过FMS流媒体服务器,可以实现客户端的和客户端的通信,客户端间视频流,音频流的共享。

对于FMS,第一个API就是NetConnection,它建立客户与服务端的连接。为了展示效果。我们模拟一个多个客户端,点击登录的场景。然后,可以进行群聊天或一对一私聊。不过,为了简单测试,这里没有加入视频流和音频流的推送。先对数据进行分析归类,也就是我们要创建的类。

第一个类:Main.as,文档类
第二个类:FMSEr.as,负责创建连接,断开连接等。
第三个类:FMSClient.as,他是NetConnection的client属性,服务端连接客户端的入口
第四个类:FMSEvent.as,他里边自定义了一些我们需要的事件。比如连接,断开,以及以后的更多的事情。
第五个类:UserListView.as,他是一个显示对象,里边用来放用户列表。
第六个类:Button.as,他是按钮对象。
第七个类:TextArea.as,他是文本区域对象。有个百色底色还有小边框。

Continue reading »

9月 262013
 

客户端如何与服务端之间建立连接上次已经说了。今天主要说说客户端如何与服务端通信的。简单的说就是用使用什么方法,怎么处理。
先说客户端呼叫服务端。如果不使用共享对象,客户端呼叫服务端,就一个方法:call。call方法里边,第一个参数是服务端的方法名字,第二个参数是Responder对象(可以为空,就不需要返回了),后边的参数是任意的。可以带数值类型,object,array都可以。如:

            var songName:String = "痛彻心扉";
            var obj:Object = {nickName:"vini",age:28};
            var arr:Array = [1985,10,24];
            nc.call("iWantSing",null,songName,obj,arr);

Continue reading »

9月 162013
 

差不多一年的时间没有碰FMS了,最近又弄了下。做一个拥有共享画板,在线语音,支持留言,四种权限控制的工具。如果再完善点,可以作为简单的视频会议工具了。其实,最想做的就是做一个有P2P的多人视频唱歌工具。
简单的说下重点,今天先说下怎么处理客户端多处登录的问题。就是这样一个场景。你先登录了一个账号,再登录该账号,会前边一个账号从服务器踢出,同时告诉客户端做相应的处理。

(1)。 先建立好通讯文件。定义一个Array对象,用来放登陆用户的用户名(不放也可以的)。写好函数:application.onAppStart丶application.onAppStop丶application.onConnect丶application.onDisconnect。
实现相同登陆提醒主要是每次登陆前判断该登陆用户名是否已经在服务器上了。具体代码如下,都已经写好了注释。
Continue reading »

11月 022012
 

最近一个星期,都在做flash聊天室。音频和视频是分开的。其实,在这个过程中,界面,其他的一些排队,送礼物,列表这些都不是难题。问题就出在音频和视频上。因为音频和视频是分开的。所要测试的环境也多点。当然,从最简单,消耗带宽最小的测试开始。
测试环境。fms装在远程双线服务器上。带宽具体多大的我也不知道。家里就一台笔记本,一个台式机。都连接网络。笔记本连接无线路由。
(1)单独发布音频流的情况
a,单独发布音频流,发布端缓冲时间和客户端缓冲时间都为2秒:
microphone的rate属性值有44,22,11,8,5.默认值是8.是麦克风捕捉音频的频率,单位是KHZ。网上有说声音延迟和这个参数设置有关。我分别将microphone的rate值设置为8和44,测试的结果几乎一样。也许和 麦克风还有和客户端的个数有关系吧。
先排除这个不管他。接着测试其他的参数。
b,单独发布音频流,发布端缓冲时间设置为2秒,客户端缓冲时间为0秒。发现不了延迟。
c,单独发布音频流,发布端缓冲时间设置为0秒,客户端缓冲时间为2秒。发现了延迟。
到这里。感觉发布端没有必要设置缓冲吧。客户端总是要播放发布端发布到服务器上的流。发布端设置缓冲,似乎有点掩耳盗铃的意思。

这些设置到现在还不够。不能用到实际中。测试过了,说话还可以,如果用来唱歌,感觉声音每个字都被扯了一样。很难听。最好,客户端音频缓冲0.5秒,视频缓冲1秒。参数多,测试起来是有点麻烦。网上也看了些资料。

Continue reading »

网站地图