This repository has been archived by the owner on Jan 31, 2023. It is now read-only.
forked from rokihiro/webrtc-handson
-
Notifications
You must be signed in to change notification settings - Fork 1
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()
})
- 映像を受信した場合(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()
})
}
- 開発前の準備
- ビデオチャットの作成
- 2.1.サーバへ接続
- 2.2.接続成功・失敗
- 2.3.メディアの取得
- 2.4.相手から着信
- 2.5.相手へ発信
- 2.6.UIのセットアップ
- テキストチャットの作成
- 3.1.サーバへ接続
- 3.2.接続成功・失敗
- 3.3.相手から着信
- 3.4.相手へ発信
- 3.5.UIのセットアップ
- チャレンジ課題