使用FMS和Flex 4.7实现HLS(http实时流)的问题

时间:2013-12-18 16:28:52

标签: ios flash-media-server

我正面临使用FMS 4.5实现HLS的问题(也尝试使用FMS 5)。我正在关注这篇文章http://help.adobe.com/en_US/flashmediaserver/devguide/WSd391de4d9c7bd6 09-52e437a812a3725dfa0-8000.html。

当我使用FMLE(Flash媒体直播编码器)将实时流发布到livepkgr应用程序时。它在我的ios设备上运行良好。 但是当我使用Flex 4.7代码发布时,声音不会出现,甚至视频在ios设备上停止播放一段时间。

任何人都知道为什么会这样。任何帮助将不胜感激。

我正在添加代码以供审核。 (您可以创建一个flex项目,并在creation_complete事件调用“windowedapplication1_creationCompleteHandler”。并更改FMS_serverIp以重新安装fms服务器ip。

               <fx:Script>
                <![CDATA[
                          import mx.core.UIComponent;
                          import mx.events.FlexEvent;

                          var nc:NetConnection;
                          var cam:Camera;

                      protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void{
                                    var ui:UIComponent = new UIComponent();
                                    var v:Video = new Video();
                                              ui.addChild(v);
                                              this.addElement(ui);
                                              this.cam = Camera.getCamera();
                                              this.cam.setMode(320, 240, 30);
                                              this.cam.setQuality(0, 100);

                                              v.attachCamera(this.cam);


                                    this.nc = new NetConnection();
                                    this.nc.client = this;
                                    this.nc.addEventListener(NetStatusEvent.NET_STATUS, startStream);
                                    this.nc.connect("rtmp://FMS_serverIp/livepkgr/");
                          }

                          protected function startStream(event:NetStatusEvent):void
                          {
                                    switch (event.info.code){
                                              case "NetConnection.Connect.Success":
                                                        trace("init stream "+this.nc.uri);

                                                        var s:NetStream = new NetStream(this.nc);

                                                                  var h264Settings:H264VideoStreamSettings;s
                                                                             h264Settings = new H264VideoStreamSettings();
                                                                             h264Settings.setProfileLevel(H264Profile.MAIN, H264Level.LEVEL_1_2);
                                                                             h264Settings.setMode(320,240,30);
         s.videoStreamSettings = h264Settings;
                                                                             s.client = this;
                                                                             s.addEventListener(NetStatusEvent.NET_STATUS, checkMediaStatus);

                                                                             s.attachCamera(this.cam);
                                                                             s.attachAudio(Microphone.getMicrophone());
                                                                  s.publish("livestream?adbe-live-event=liveevent");
                                                                  trace("Stream is publishing ...");

                                                        break;
                                    }


                          }


                          protected function checkMediaStatus(event:NetStatusEvent):void
                          {
                                    trace("Stream status "+event.info.code);

                          }

                ]]>
      </fx:Script>

1 个答案:

答案 0 :(得分:0)

你的NetStream对象很可能是被垃圾收集器吃掉了。 尝试将其声明为字段。相同的相机。