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那里,也是可以放大的。

那么最后,还是贴出code:

            _nsVideo = new NetStream(Controller.instance.fmser.nc);
            _nsVideo.client = this;
            _nsVideo.bufferTime = 0;
            
            var h264Settings:H264VideoStreamSettings = new H264VideoStreamSettings();
            h264Settings.setProfileLevel(H264Profile.BASELINE , H264Level.LEVEL_5_1);
            h264Settings.setMode(320,240,15);
            h264Settings.setQuality(0,80);
            h264Settings.setKeyFrameInterval(15);
            _nsVideo.videoStreamSettings = h264Settings;
            
            _cam = Camera.getCamera();
            if(_cam)
            {
                _cam.setMode(320,240,15,false);
                _cam.setQuality(0,80);
                _nsVideo.attachCamera(_cam);
            }