最近一个星期,都在做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秒。参数多,测试起来是有点麻烦。网上也看了些资料。
注意:AIR 3.0 for iOS 中的 H.264 视频不支持此属性。默认值是 0.1(十分之一秒)。要确定当前位于缓冲区中的秒数,请使用 bufferLength 属性。要播放服务器端播放列表,请将 bufferTime 设置为至少 1 秒。如果出现播放问题,请增加 bufferTime 的长度。
录制的内容:若要避免在对预先录制的(非实时)内容进行流处理时失真,不要将 Netstream.bufferTime 的值设置为 0。对于预先录制的内容,默认情况下应用程序将使用输入缓冲区对媒体数据进行排队并正确播放媒体。对于预先录制的内容,请使用默认设置或延长缓冲时间。
实时内容:对实时内容进行流处理时,请将 bufferTime 属性设置为 0。从 Flash Player 9.0.115.0 开始,在调用 NetStream.pause() 时,Flash Player 不再清除缓冲区。在 Flash Player 9.0.115.0 之前,恢复播放之前 Flash Player 将等待缓冲区填满,这通常会导致延迟。对于一次暂停,NetStream.bufferLength 属性的限值为 60 秒或二倍的 NetStream.bufferTime 值(取二者之中的较大值)。例如,如果 bufferTime 为 20 秒,在 NetStream.bufferLength 为较大值 20*2 (40) 或 60 之前,Flash Player 将一直进行缓冲。在本例中,在 bufferLength 为 60 之前,Flash Player 将一直进行缓冲。如果 bufferTime 为 40 秒,在 bufferLength 为较大值 40*2 (80) 或 60 之前,Flash Player 将一直进行缓冲。在本例中,在 bufferLength 为 80 秒之前,Flash Player 将一直进行缓冲。bufferLength 属性还有一个绝对限制。如果对 pause() 的任何调用导致 bufferLength 增大到 600 秒以上或 bufferTime * 2 的值(取二者中的较大值),Flash Player 将刷新缓冲区并将 bufferLength 重置为 0。例如,如果 bufferTime 为 120 秒,当 bufferLength 达到 600 秒时,Flash Player 将刷新缓冲区;如果 bufferTime 为 360 秒,当 bufferLength 达到 720 秒时,Flash Player 将刷新缓冲区。
提示:例如,在查看器监视商用版的同时,可以在代码中使用 NetStream.pause() 来缓冲数据,然后在开始播放主视频时取消暂停。
有关新的暂停行为的详细信息,请参阅 http://www.adobe.com/go/learn_fms_smartpause_cn。
Flash Media Server。缓冲行为取决于缓冲时间是在发布流还是订阅流中设置的。对于发布流,bufferTime 指定在应用程序开始删除帧之前传出缓冲区可以增长多长时间。在高速连接上,不必担心缓冲时间问题;发送数据的速度几乎与应用程序将数据存入缓冲区一样快。但在速度较慢的连接上,应用程序将数据存入缓冲区与将数据发送到客户端的速度可能会有很大差异。对于订阅流,bufferTime 指定在开始显示流之前需要花多长时间将传入数据存入缓冲区。在播放录制流时,如果 bufferTime 为 0,Flash 会将其设置为较小的值(大约为 10 毫秒)。如果以后播放实时流(例如,从播放列表中),则会永久保留此缓冲时间。即,流的 bufferTime 始终为非零值。
哎,发布的fp是10.0的,发布成fp为11的时候,用6dn那个图文混排出问题了。很想用用H.264.
后来去破解六间房的发布端,找到了他的设置。其实,也没用到H.264和acc技术。他用了个插件。按照六间房的设置发布端音频和视频。结果发布端上传流量是30K/S左右。声音延迟教少。视频还是有点。
今天先测试音频部分吧。声音这个方面问题稍微小点。关键是视频方面,占宽带,还卡卡的。延迟就跟不用说了。那根本没法用。不能和yy直播间和六间房那些比啊。那些怎么弄的,真想去喵喵。先休息了。1点了。
相关的网上文章连接:
http://flash-communications.net/technotes/setMode/