title: Janus VideoRoom plugin subscribe operation took too much seconds before i saw remote video
body: <p><br/>Im using Janus VideoRoom plugin and i want to subscribe/unsubscribe 2 or more different publishers.
  <br/>First 4 or 5 subscriptions (start subscribe -&gt; got video visible) take 2-3 seconds.
  <br/>I call it <strong>NORMAL</strong>.
  <br/>But next subscriptions take MUCH more time.
  <br/>I call it <strong>UNNORMAL</strong>.
  <br/>Please tell me where is my mistake ?</p>
  <p>Here is my JS (TypeScript)</p>
  <pre><code>declare var Janus: any;
  export class SubscriberClientSimple {
      private login:string;
      private opaqueId:string;
      private videoPlayer:any;
      private streamName:string;
      private serverUri:string;
      private serverURL:string;
  
      private api:any;
      private plugin:any;
      private remoteStream:any;
  
      public static STARTING:string = &quot;STARTING&quot;;
      public static STARTED:string = &quot;STARTED&quot;;
      public static STOPPING:string = &quot;STOPPING&quot;;
      public static STOPPED:string = &quot;STOPPED&quot;;
  
      private state:string;
  
      constructor(login:string){
          this.login = login;
          this.opaqueId = &quot;subscriber-&quot; + this.login + &quot;-&quot; + Janus.randomString(12);
      }
  
      public destroy():void{
      }
      
      public setPlayerElement(element:any):void{
          this.videoPlayer = element;
      }
      public hasVideoPlayerElement():boolean{
          return this.videoPlayer!=null;
      }
      
      public isAudioEnabled():boolean{
          return false;
      }
      public isVideoEnabled():boolean{
          return true;
      }
  
      public getStreamName():string{
          return this.streamName;
      }
  
      public subscribe(streamName: string, serverUri: string, audio:boolean, video:boolean):void{
          this.log(&quot;Start requested&quot;);
          this.state = SubscriberClientSimple.STARTING;
          this.streamName = streamName;
          this.serverUri = serverUri;
          this.serverURL = MEDIA_SERVER_URL + MEDIA_SERVER_PATH + &quot;/janus-debug&quot;;
  
          EventBus.dispatchEvent(StreamingEvent.REMOTE_VIDEO_RECEIVE_INTENT, null);
  
          //this.log(&quot;server url : &quot;+this.serverURL);
  
          Janus.init({
              userId: parseInt(this.login),
              backendUrl: this.serverURL,
              environment: environment,
              debug: false, // fixme это вынужденно отключено, чтобы можно было использовать Janus.noop как коллбэк для логирования
              callback: () =&gt; this.initCallback()
          });
      }
  
      public unsubscribe():void{
          this.log(&quot;unsubscribe state=&quot;+this.state);
          if(this.state == SubscriberClientSimple.STARTED){
              this.state = SubscriberClientSimple.STOPPING;
              
              EventBus.dispatchEvent(StreamingEvent.SUBSCRIBER_BUSY, null);
              
              if(this.plugin){
                  this.log(&quot;sending leave command...&quot;);
                  this.plugin.send({message: {request: &quot;leave&quot;}});
              }
          }
      }
      
      public disableAudio():void{
          this.log(&quot;Disable AUDIO&quot;);
      }
      public disableVideo():void{
          this.log(&quot;Disable VIDEO&quot;);
      }
      
      public enableAudio():void{
      }
      public enableVideo():void{
      }
      
      public reset():void{
      }
      
      public setSocketService(socketService:any):void{
      }
      public setModalService(modalService):void{
      }
  
      public isMyCurrentPublisher(id:string):boolean{
          return this.streamName == id;
      }
      
      public getSubscribeState():any{
          var data:any = {userId:this.login, audio: {state:&quot;&quot;}, video:{state:&quot;OFF&quot;}};
          data.audio.state = &quot;OFF&quot;;
          
          if(this.state == SubscriberClientSimple.STARTED){
              data.video.state = &quot;ON&quot;;
          }
          return data;
      }
      
      public isSubscribing():boolean{
          return this.state == SubscriberClientSimple.STARTED;
      }
  
      private initCallback():void{
          this.log(&quot;initCallback&quot;);
          if (!Janus.isWebrtcSupported()) {
              this.onWebRTCNotSupported();
          }
          this.createSession();
      }
  
      private createSession():void {
          // Create session
          this.log(&quot;createSession&quot;);
          this.api = new Janus({
              server: this.serverUri,
              iceServers: ICE_SERVERS,
              success: () =&gt; this.onStreamingServerCreateSuccess(),
              error: (err) =&gt; this.onStreamingServerCreateError(err),
              destroyed: () =&gt; this.onStreamingServerDestroyed()
          });
      }
  
      private onStreamingServerCreateSuccess():void{
          this.log(&quot;onStreamingServerCreateSuccess&quot;);
          this.attachPlugin();
      }
  
      private attachPlugin():void{
          this.log(&quot;attachPlugin&quot;);
          let remoteFeed = null;
          this.api.attach(
              {
                  plugin: &quot;janus.plugin.videoroom&quot;,
                  opaqueId: this.opaqueId,
                  success: (pluginHandle) =&gt; {
                      this.log(&quot;plugin attached&quot;);
                      remoteFeed = pluginHandle;
                      remoteFeed.simulcastStarted = false;
  
                      // We wait for the plugin to send us an offer
                      remoteFeed.send({
                          &quot;message&quot;: {
                              &quot;request&quot;: &quot;listparticipants&quot;,
                              &quot;room&quot;: +this.streamName
                          },
  
                          success: (res) =&gt; {
                              this.log(&quot;Total participants=&quot;+res.participants.length);
  
                              var canJoin:boolean = res.participants &amp;&amp; res.participants.length &gt; 0;
  
                              this.log(&quot;canJoin=&quot;+canJoin);
  
                              if (canJoin) {
                                  var publisherParticipant:any = res.participants[0];
                                  var publisherId:string = publisherParticipant.id;
  
                                  const subscriptionData:any = {
                                      &quot;request&quot;: &quot;join&quot;,
                                      &quot;room&quot;: +this.streamName,
                                      &quot;ptype&quot;: &quot;subscriber&quot;,
                                      &quot;feed&quot;: publisherId,
                                      &quot;private_id&quot;: parseInt(this.login)
                                  };
  
                                  this.log(&quot;subscriptionData=&quot;+JSON.stringify(subscriptionData));
  
                                  remoteFeed.send({&quot;message&quot;: subscriptionData});
                              }
                              else {
                                  this.log(&quot;Requested stream is not available anymore.&quot;);
                              }
                          }
                      });
                  },
                  error: (error) =&gt; {
                      const message = &quot;Error attaching subscribe plugin. &quot; + error.toString();
                      this.log(message);
                  },
                  onmessage: (msg, jsep) =&gt; {
                      this.onPluginMessage(msg, jsep, remoteFeed);
                  },
                  webrtcState: (on, reason) =&gt; {
                      if (reason === &quot;Close PC&quot;) {
                          var message:string = &quot;Closed PeerConnection&quot;;
                          this.log(message);
                      }
                  },
                  iceState: (state) =&gt; {
                      this.onICEState(state);
                  },
                  onlocalstream: function (stream) {
                      // The subscriber stream is recvonly, we don't expect anything here
                  },
                  onremotestream: (stream) =&gt; {
                      this.onSubscriberGotRemoteStream(stream);
                  },
                  oncleanup: () =&gt; {
                      this.onCleanUp();
                  }
              });
      }
  
      private onPluginMessage(msg, jsep, remoteFeed):void{
          this.log(&quot;onPluginMessage&quot;);
          this.log(&quot;msg:&quot;+JSON.stringify(msg));
          this.log(&quot;jsep:&quot;+JSON.stringify(jsep));
          this.log(&quot;remoteFeed:&quot;+remoteFeed);
  
          const event = msg[&quot;videoroom&quot;];
  
          if (msg[&quot;error&quot;]){
              if (msg[&quot;error&quot;] !== &quot;No such room&quot;) {
                  this.log(&quot;Janus ERROR:&quot;+msg[&quot;error&quot;]);
              }
          }
          else if (event) {
              if (event === &quot;attached&quot;) {
                  // Subscriber created and attached
                  this.log(&quot;Subscriber created and attached&quot;);
                  if (this.plugin === undefined || this.plugin === null) {
                      this.plugin = remoteFeed;
                  }
  
                  remoteFeed.rfid = msg[&quot;id&quot;];
                  remoteFeed.rfdisplay = msg[&quot;display&quot;];
              }
              else if(event === &quot;event&quot;){
                  var leftRoomResult:any = msg[&quot;left&quot;];
  
                  if(leftRoomResult){
                      if(leftRoomResult == &quot;ok&quot;){
                          var roomId:string = msg[&quot;room&quot;].toString();
                          this.onLeftRoom(roomId);
                      }
                  }
              }
              else if (event === &quot;slow_link&quot;) {
              }
          }
          if (jsep) {
              // Answer and attach
              this.log(&quot;create answer&quot;);
              
              remoteFeed.createAnswer(
                  {
                      jsep: jsep,
                      media: {audioSend: false, videoSend: false},    // We want recvonly audio/video
  
                      success: (_jsep) =&gt; {
                          this.log(&quot;Got SDP!&quot;, _jsep);
                          const body = {&quot;request&quot;: &quot;start&quot;, &quot;room&quot;: this.streamName};
                          remoteFeed.send({&quot;message&quot;: body, &quot;jsep&quot;: _jsep});
                      },
                      error: (err) =&gt; {
                          this.log(&quot;WebRTC error:&quot;, err);
                      }
                  });
          }
      }
  
      private onSubscriberGotRemoteStream(stream:any):void{
          this.log(&quot;onSubscriberGotRemoteStream this.state=&quot;+this.state);
          if(this.state == SubscriberClientSimple.STARTING){
              const videoTracks = stream.getVideoTracks();
  
              this.remoteStream = stream;
  
              this.attachRemoteStream();
              this.startRemoteVideo();
  
              this.state = SubscriberClientSimple.STARTED;
          }
      }
  
      private onLeftRoom(roomId:string):void{
          if(roomId == this.streamName){
  
              this.log(&quot;Left room&quot;);
  
              this.plugin.ondetached();
              this.plugin.detach();
  
              this.plugin = null;
              this.log(&quot;VIDEO stopped&quot;);
              this.state = SubscriberClientSimple.STOPPED;
              EventBus.dispatchEvent(StreamingEvent.REMOTE_VIDEO_DISABLED, null);
          }
      }
  
      private onCleanUp():void{
          this.log(&quot;onCleanUp&quot;);
      }
  
      private onICEState(state:string):void{
          this.log(&quot;ICE state of this WebRTC PeerConnection changed to &quot; + state);
      }
  
      private attachRemoteStream():void {
          Janus.attachMediaStream(this.videoPlayer, this.remoteStream );
          this.videoPlayer.muted = &quot;muted&quot;;
      }
      private startRemoteVideo():void {
          this.videoPlayer.play();
          this.log(&quot;VIDEO started&quot;);
          EventBus.dispatchEvent(StreamingEvent.REMOTE_VIDEO_RECEIVING_STARTED, null);
      }
  
      private onStreamingServerCreateError(err:any):void{
          this.log(&quot;Streaming Server Error:&quot;,err);
  
      }
      private onStreamingServerDestroyed():void{
          this.log(&quot;Janus destroyed&quot;);
      }
  
      private onWebRTCNotSupported():void{
          this.log(&quot;WebRTC Not Supported&quot;);
      }
  
      protected log(value:any, ...rest:any[]):void{
          EventBus.dispatchEvent(AppEvent.SEND_LOG, {className:this.getClassName(), value:value, rest:rest});
      }
      protected getClassName():string{
          return &quot;SubscriberClientSimple&quot;;
      }
  }
  </code></pre>
  <p><br/>Here is my log after 4 or 5 <strong>NORMAL</strong> subscription launches
  <br/>// Watching publisher's video
  <br/>// stop prev subscription
  <br/>04:01:50 unsubscribe state=STARTED
  <br/>04:01:50 sending leave command...
  <br/>04:01:50 unsubscribe state=STOPPING
  <br/>04:01:50 unsubscribe state=STOPPING
  <br/>04:01:50 onPluginMessage
  <br/>04:01:50 msg:{&quot;videoroom&quot;:&quot;event&quot;,&quot;room&quot;:681365,&quot;left&quot;:&quot;ok&quot;}
  <br/>04:01:50 jsep:undefined
  <br/>04:01:50 remoteFeed:[object Object]
  <br/>04:01:50 Left room
  <br/>04:01:50 onCleanUp
  <br/>04:01:50 VIDEO stopped
  <br/>04:01:50 Closed PeerConnection
  <br/>04:01:50 onCleanUp
  <br/>// new subscription <strong>NORMAL</strong> start
  <br/>04:01:53 Start requested
  <br/>04:01:53 initCallback
  <br/>04:01:53 createSession
  <br/>04:01:54 onStreamingServerCreateSuccess
  <br/>04:01:54 attachPlugin
  <br/>04:01:54 plugin attached
  <br/>04:01:54 Total participants=1
  <br/>04:01:54 canJoin=true
  <br/>04:01:54 subscriptionData={&quot;request&quot;:&quot;join&quot;,&quot;room&quot;:724240,&quot;ptype&quot;:&quot;subscriber&quot;,&quot;feed&quot;:3606687285964170,&quot;private_id&quot;:680291}
  <br/>04:01:54 onPluginMessage
  <br/>04:01:54 msg:{&quot;videoroom&quot;:&quot;attached&quot;,&quot;room&quot;:724240,&quot;id&quot;:3606687285964170,&quot;display&quot;:&quot;724240&quot;}
  <br/>04:01:54 jsep:{&quot;type&quot;:&quot;offer&quot;,&quot;sdp&quot;:&quot;v=0\r\no=- 1615780141548001 1 IN IP4 185.12.12.24\r\ns=VideoRoom 724240\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS janus\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 185.12.12.24\r\na=sendonly\r\na=mid:audio\r\na=rtcp-mux\r\na=ice-ufrag:NVx5\r\na=ice-pwd:Tz3hjJNIxACUULUbBBREaL\r\na=ice-options:trickle\r\na=fingerprint:sha-256 53:C2:82:E2:61:73:BC:B5:0D:66:E8:2E:11:90:97:66:92:52:62:FE:2C:6B:45:95:A1:EF:08:D6:05:C6:8E:A1\r\na=setup:actpass\r\na=rtpmap:111 opus/48000/2\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=rtcp-fb:111 transport-cc\r\na=msid:janus janusa0\r\na=ssrc:3479227141 cname:janus\r\na=ssrc:3479227141 msid:janus janusa0\r\na=ssrc:3479227141 mslabel:janus\r\na=ssrc:3479227141 label:janusa0\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97\r\nc=IN IP4 185.12.12.24\r\na=sendonly\r\na=mid:video\r\na=rtcp-mux\r\na=ice-ufrag:NVx5\r\na=ice-pwd:Tz3hjJNIxACUULUbBBREaL\r\na=ice-options:trickle\r\na=fingerprint:sha-256 53:C2:82:E2:61:73:BC:B5:0D:66:E8:2E:11:90:97:66:92:52:62:FE:2C:6B:45:95:A1:EF:08:D6:05:C6:8E:A1\r\na=setup:actpass\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtcp-fb:96 goog-remb\r\na=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:3 <a href="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01%5Cr%5Cna=extmap:12" rel="nofollow noreferrer">http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:12</a> <a href="http://www.webrtc.org/experiments/rtp-hdrext/playout-delay%5Cr%5Cna=extmap:13" rel="nofollow noreferrer">http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:13</a> urn:3gpp:video-orientation\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=ssrc-group:FID 462666388 1246572010\r\na=msid:janus janusv0\r\na=ssrc:462666388 cname:janus\r\na=ssrc:462666388 msid:janus janusv0\r\na=ssrc:462666388 mslabel:janus\r\na=ssrc:462666388 label:janusv0\r\na=ssrc:1246572010 cname:janus\r\na=ssrc:1246572010 msid:janus janusv0\r\na=ssrc:1246572010 mslabel:janus\r\na=ssrc:1246572010 label:janusv0\r\n&quot;}
  <br/>04:01:54 remoteFeed:[object Object]
  <br/>04:01:54 Subscriber created and attached
  <br/>04:01:54 create answer
  <br/>04:01:54 onSubscriberGotRemoteStream this.state=STARTING
  <br/>04:01:54 VIDEO started
  <br/>04:01:54 onSubscriberGotRemoteStream this.state=STARTED
  <br/>04:01:54 onSubscriberGotRemoteStream this.state=STARTED
  <br/>04:01:54 Got SDP! [RTCSessionDescription]
  <br/>04:01:54 ICE state of this WebRTC PeerConnection changed to checking
  <br/>04:01:54 ICE state of this WebRTC PeerConnection changed to connected
  <br/>04:01:55 onPluginMessage
  <br/>04:01:55 msg:{&quot;videoroom&quot;:&quot;event&quot;,&quot;room&quot;:724240,&quot;started&quot;:&quot;ok&quot;}
  <br/>04:01:55 jsep:undefined
  <br/>04:01:55 remoteFeed:[object Object]
  <br/>
  <br/>// <strong>NORMAL</strong> start subscribing took 2 seconds
  <br/>// Watching publisher's video
  <br/>// Stop prev subscription
  <br/>
  <br/>04:09:55 unsubscribe state=STARTED
  <br/>04:09:55 sending leave command...
  <br/>04:09:55 unsubscribe state=STOPPING
  <br/>04:09:55 unsubscribe state=STOPPING
  <br/>04:09:55 onPluginMessage
  <br/>04:09:55 msg:{&quot;videoroom&quot;:&quot;event&quot;,&quot;room&quot;:681365,&quot;left&quot;:&quot;ok&quot;}
  <br/>04:09:55 jsep:undefined
  <br/>04:09:55 remoteFeed:[object Object]
  <br/>04:09:55 Left room
  <br/>04:09:55 onCleanUp
  <br/>04:09:55 VIDEO stopped
  <br/>04:09:56 Closed PeerConnection
  <br/>04:09:56 onCleanUp
  <br/>
  <br/>// new subscription <strong>UNNORMAL</strong> start
  <br/>
  <br/>04:09:58 Start requested
  <br/>04:09:58 initCallback
  <br/>04:09:58 createSession
  <br/>04:09:58 onStreamingServerCreateSuccess
  <br/>04:09:58 attachPlugin
  <br/>// <strong>huge pause !!!</strong>
  <br/>04:10:17 plugin attached
  <br/>// <strong>huge pause !!!</strong>
  <br/>04:10:22 Total participants=1
  <br/>04:10:22 canJoin=true
  <br/>04:10:22 subscriptionData={&quot;request&quot;:&quot;join&quot;,&quot;room&quot;:724240,&quot;ptype&quot;:&quot;subscriber&quot;,&quot;feed&quot;:3606687285964170,&quot;private_id&quot;:680291}
  <br/>04:10:28 onPluginMessage
  <br/>04:10:28 msg:{&quot;videoroom&quot;:&quot;attached&quot;,&quot;room&quot;:724240,&quot;id&quot;:3606687285964170,&quot;display&quot;:&quot;724240&quot;}
  <br/>04:10:28 jsep:{&quot;type&quot;:&quot;offer&quot;,&quot;sdp&quot;:&quot;v=0\r\no=- 1615780141548001 1 IN IP4 185.12.12.24\r\ns=VideoRoom 724240\r\nt=0 0\r\na=group:BUNDLE audio video\r\na=msid-semantic: WMS janus\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111\r\nc=IN IP4 185.12.12.24\r\na=sendonly\r\na=mid:audio\r\na=rtcp-mux\r\na=ice-ufrag:WETD\r\na=ice-pwd:ch2L786bEYlY6OIi+AJ4no\r\na=ice-options:trickle\r\na=fingerprint:sha-256 53:C2:82:E2:61:73:BC:B5:0D:66:E8:2E:11:90:97:66:92:52:62:FE:2C:6B:45:95:A1:EF:08:D6:05:C6:8E:A1\r\na=setup:actpass\r\na=rtpmap:111 opus/48000/2\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=rtcp-fb:111 transport-cc\r\na=msid:janus janusa0\r\na=ssrc:1576733354 cname:janus\r\na=ssrc:1576733354 msid:janus janusa0\r\na=ssrc:1576733354 mslabel:janus\r\na=ssrc:1576733354 label:janusa0\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97\r\nc=IN IP4 185.12.12.24\r\na=sendonly\r\na=mid:video\r\na=rtcp-mux\r\na=ice-ufrag:WETD\r\na=ice-pwd:ch2L786bEYlY6OIi+AJ4no\r\na=ice-options:trickle\r\na=fingerprint:sha-256 53:C2:82:E2:61:73:BC:B5:0D:66:E8:2E:11:90:97:66:92:52:62:FE:2C:6B:45:95:A1:EF:08:D6:05:C6:8E:A1\r\na=setup:actpass\r\na=rtpmap:96 VP8/90000\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=rtcp-fb:96 goog-remb\r\na=extmap:2 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:3 <a href="http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01%5Cr%5Cna=extmap:12" rel="nofollow noreferrer">http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:12</a> <a href="http://www.webrtc.org/experiments/rtp-hdrext/playout-delay%5Cr%5Cna=extmap:13" rel="nofollow noreferrer">http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:13</a> urn:3gpp:video-orientation\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=ssrc-group:FID 4137684267 1240900261\r\na=msid:janus janusv0\r\na=ssrc:4137684267 cname:janus\r\na=ssrc:4137684267 msid:janus janusv0\r\na=ssrc:4137684267 mslabel:janus\r\na=ssrc:4137684267 label:janusv0\r\na=ssrc:1240900261 cname:janus\r\na=ssrc:1240900261 msid:janus janusv0\r\na=ssrc:1240900261 mslabel:janus\r\na=ssrc:1240900261 label:janusv0\r\n&quot;}
  <br/>04:10:28 remoteFeed:[object Object]
  <br/>04:10:28 Subscriber created and attached
  <br/>04:10:28 create answer
  <br/>04:10:28 onSubscriberGotRemoteStream this.state=STARTING
  <br/>04:10:28 VIDEO started
  <br/>04:10:28 onSubscriberGotRemoteStream this.state=STARTED
  <br/>04:10:28 onSubscriberGotRemoteStream this.state=STARTED
  <br/>04:10:28 Got SDP! [RTCSessionDescription]
  <br/>04:10:28 ICE state of this WebRTC PeerConnection changed to checking
  <br/>04:10:28 ICE state of this WebRTC PeerConnection changed to connected
  <br/>04:10:35 onSubscriberGotRemoteStream this.state=STARTED
  <br/>04:10:47 onPluginMessage
  <br/>04:10:47 msg:{&quot;videoroom&quot;:&quot;event&quot;,&quot;room&quot;:724240,&quot;started&quot;:&quot;ok&quot;}
  <br/>04:10:47 jsep:undefined
  <br/>04:10:47 remoteFeed:[object Object]
  <br/>
  <br/>// <strong>UNNORMAL start subscribing took 49 seconds</strong></p>