Skip to content
This repository has been archived by the owner on Jan 31, 2023. It is now read-only.

2.4.相手から着信

hkato edited this page Mar 28, 2016 · 3 revisions

相手からのビデオ通話着信時の処理

  • シグナリングサーバ経由でビデオ通話着信があった場合の処理
    • 相手に自分のメディア情報を回答
    • 相手とのP2Pコネクションで発生するイベントのコールバックを登録

Java

// コールバックを登録(CALL)
_peer.on(Peer.PeerEventEnum.CALL, new OnCallback(){
  @Override
  public void onCallback(Object object){
    _media = (MediaConnection) object;
    _media.answer(_msLocal);
    setMediaCallback(_media);
    _bEstablished = true;
    updateUI();
  }
});

Objective-C

//コールバックを登録(CALL)
[_peer on:SKW_PEER_EVENT_CALL callback:^(NSObject* obj)
 {
     _mediaConnection = (SKWMediaConnection *)obj;
     [_mediaConnection answer:_msLocal];
     [self setMediaCallbacks:_mediaConnection];
     _bEstablished = YES;
     [self updateUI];
 }];

Swift

//コールバックを登録(CALL)
_peer?.on(SKWPeerEventEnum.PEER_EVENT_CALL, callback: { (obj:NSObject!) -> Void in
    self._mediaConnection = obj as? SKWMediaConnection
    self._mediaConnection?.answer(self._msLocal);
    self._bEstablished = true
    self.updateUI()
})

P2Pコネクションのコールバック処理

  • 映像を受信した場合(STREAM)、映像をUIに表示
  • コネクションが切断された場合、映像を削除

Java

private void setMediaCallback(MediaConnection media){
  // コールバックを登録(STREAM)
  media.on(MediaConnection.MediaEventEnum.STREAM, new OnCallback() {
    @Override
    public void onCallback(Object object) {
      _msRemote = (MediaStream) object;
      Canvas canvas = (Canvas) findViewById(R.id.svPrimary);
      canvas.addSrc(_msRemote, 0);
    }
  });

  // コールバックを登録(CLOSE)
  media.on(MediaConnection.MediaEventEnum.CLOSE, new OnCallback() {
    @Override
    public void onCallback(Object object) {
      Canvas canvas = (Canvas) findViewById(R.id.svPrimary);
      canvas.removeSrc(_msRemote, 0);
      _msRemote = null;
      _media = null;
      _bEstablished = false;
      updateUI();
    }
  });
}

Objective-C

- (void)setMediaCallbacks:(SKWMediaConnection *)media
{
    // コールバックを登録(Stream)
    [media on:SKW_MEDIACONNECTION_EVENT_STREAM callback:^(NSObject* obj)
     {
         _msRemote = (SKWMediaStream *)obj;
         
         dispatch_async(dispatch_get_main_queue(), ^
                        {
                            SKWVideo* vwRemote = (SKWVideo *)[self.view viewWithTag:TAG_REMOTE_VIDEO];
                            [vwRemote setHidden:NO];
                            [vwRemote addSrc:_msRemote track:0];
                        });
     }];
    
    // コールバックを登録(Close)
    [media on:SKW_MEDIACONNECTION_EVENT_CLOSE callback:^(NSObject* obj)
     {
        
         dispatch_async(dispatch_get_main_queue(), ^{
             
              //Viewから削除
             SKWVideo* vwRemote = (SKWVideo *)[self.view viewWithTag:TAG_REMOTE_VIDEO];
             [vwRemote removeSrc:_msRemote track:0];
             _msRemote = nil;
             _mediaConnection = nil;
             _bEstablished = NO;
             [vwRemote setHidden:YES];
         });
         
         [self updateUI];
         
     }];
    
}

Swift

func setMediaCallbacks(media:SKWMediaConnection){
    
    //コールバックを登録(Stream)
    media .on(SKWMediaConnectionEventEnum.MEDIACONNECTION_EVENT_STREAM, callback: { (obj:NSObject!) -> Void in
        self._msRemote = obj as? SKWMediaStream
        
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            let remoteVideoView:SKWVideo = self.view.viewWithTag(ViewTag.TAG_REMOTE_VIDEO.hashValue) as! SKWVideo
            remoteVideoView.hidden = false
            remoteVideoView.addSrc(self._msRemote, track: 0)
        })
    })
    
    //コールバックを登録(Close)
    media .on(SKWMediaConnectionEventEnum.MEDIACONNECTION_EVENT_CLOSE, callback: { (obj:NSObject!) -> Void in
        self._msRemote = obj as? SKWMediaStream
        
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            let remoteVideoView:SKWVideo = self.view.viewWithTag(ViewTag.TAG_REMOTE_VIDEO.hashValue) as! SKWVideo
            remoteVideoView.removeSrc(self._msRemote, track: 0)
            self._msRemote = nil
            self._mediaConnection = nil
            self._bEstablished = false
            remoteVideoView.hidden = true
        })
        self.updateUI()
    })
}