SlideShare a Scribd company logo
1 of 20
スマホアプリBestieBoxにWebRTCを組みこんでみた
WebRTC Meetup Tokyo #9
2015年8月3日
@nyalse、@jirourashima
自己紹介
■名前
ー つだゆうき(@nyalse)
■所属
ー NTTコミュニケーションズ ボイス&ビデオコミュニケーションサービス部
■ワーク
ー グループコミュニケーションアプリ「BestieBox」の企画と開発とデザイン
(内製でやってます)
■Web
ー http://www.bestiebox.net
?
仲良しグループで行う様々な活動をサポートし、
もっと一緒に過ごして、もっと仲良くなってもらう
ためのアプリケーションです。
は
先週金曜から配信!
グループでコミュニケーション・ディスカッション!
いいネタも見つかったし、みんなで出かけよう
ラーメンおいしかった!また行こう。
使い方の流れ
チャット・通話・掲示板機能
イベント企画・日程調整機能
フォトアルバム機能
使い方の流れ
通話機能は実装したいけど、普通にやると時間がかかる
SIPサーバを用意する
SIPサーバ経由での接続制御
音声ストリームの再生制御
大変
これだ、これですね!
実際これを使って通話機能を組み込んだ結果、
すぐに通話機能(しかもビデオ付き)が
できてしまった
SkyWayのAPIキーを手に入れて早速導入!
自己紹介
■氏名
ー 原 拓(はら たくま)
■仕事
ー NTTコミュニケーションズ
ー 電話の部署でアプリ開発をやってます
■日焼けの理由
ー 昨日炎天下の中ROCK IN JAPAN FES2015に参加してきました
友達と「音声・ビデオ」通話を行う機能をWebRTCで実装
1.友達リスト一覧から電話をかけたい友達を選択
2.「音声通話」か「ビデオ通話」どちらかを選んで発信
3.着信側が応答ボタンを押すとWebRTC通話開始
どうやって実装したか
必要なのは以下の6クラスのみ
Navigator
MediaStream
Peer
PeerOption
Media
Connection
Canvas
※ビデオ通話時のみ
ステップ1:Peer IDの取得
Peer peer = new Peer(context, options);
引数のoptionsで、
・Skyway APIキー
・ドメイン名
・ログレベル
・TURNサーバの利用有無
等を指定可能PeerID A
発信端末A
着信端末B
skyway
PeerID B
ステップ2:ローカルメディア取得
MediaStream msLocal = Navigator.getUserMedia(constraints);
音声入力、ビデオ入力を取得
映像が不要(音声通話のみ)時は、
引数のconstraintsに含まれる
videoFlagをfalseにする
発信端末A
着信端末B
msLocal
PeerID B
PeerID A
msLocal
skyway
ステップ3:発信
MediaConnection media = peer.call(‘PeerID B’,msLocal, option);
ステップ1で作成した
Peerオブジェクトのcallメソッドを発行
引数は、
・対象のPeerID
・発信側のローカルメディア
・オプション設定
発信端末A
着信端末B
msLocal
PeerID B
PeerID A
msLocal
skyway
ステップ4:応答
(MediaConnection)media.answer(msLocal);
着信側でPeerEventEnum.CALLイベントが発生
MediaConnectionクラスのanswerメソッドにより
これに応答する
※自身のローカルメディアを引数に紐付ける
発信端末A
着信端末B
msLocal
PeerID B
PeerID A
msLocal
skyway
ステップ5:通話開始
MediaStream _msRemote = (MediaStream)object
双方でMediaEventEnum.STREAMイベントが発生するので、受
信したobject(対抗のメディア)をオブジェクト内へ格納すれば
通話が開始される
受信データの処理等はSDK内で扱うため、開発側の作業は不要
発信端末A
着信端末B
msLocal
PeerID B
PeerID A
msLocal
skyway
msRemote msRemote
通話開始
想像よりはるかに簡単に実装できた
ー 合計4,000行程度だが、通話部分のコードは遥かに少ない
ー Java、Android開発未経験からでも
大変だったポイント
ー エラーハンドリング処理
・登場人物(Skywayサーバ、BestieBoxサーバ群、クライアント端末等)が
多く、状態遷移のマトリクスが複雑
ー ハンドオーバー時の移行処理
・ハンドオーバー時は通話断
・今後の改修で対応予定

More Related Content

What's hot

Pythonのプロファイリング
PythonのプロファイリングPythonのプロファイリング
Pythonのプロファイリングysakaguchi
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後Takayuki Shimizukawa
 
PyPro2の読みどころ紹介:Python開発の過去と現在
PyPro2の読みどころ紹介:Python開発の過去と現在PyPro2の読みどころ紹介:Python開発の過去と現在
PyPro2の読みどころ紹介:Python開発の過去と現在Takayuki Shimizukawa
 
僕と Python と 時々 NetBeans
僕と Python と 時々 NetBeans僕と Python と 時々 NetBeans
僕と Python と 時々 NetBeansYoshiori Shoji
 

What's hot (9)

Evernote連携
Evernote連携Evernote連携
Evernote連携
 
S02 t0 get_started
S02 t0 get_startedS02 t0 get_started
S02 t0 get_started
 
Pythonのプロファイリング
PythonのプロファイリングPythonのプロファイリング
Pythonのプロファイリング
 
独学プログラマーのその後
独学プログラマーのその後独学プログラマーのその後
独学プログラマーのその後
 
S09 t0 orientation
S09 t0 orientationS09 t0 orientation
S09 t0 orientation
 
S10 t0 orientation
S10 t0 orientationS10 t0 orientation
S10 t0 orientation
 
Introduction
IntroductionIntroduction
Introduction
 
PyPro2の読みどころ紹介:Python開発の過去と現在
PyPro2の読みどころ紹介:Python開発の過去と現在PyPro2の読みどころ紹介:Python開発の過去と現在
PyPro2の読みどころ紹介:Python開発の過去と現在
 
僕と Python と 時々 NetBeans
僕と Python と 時々 NetBeans僕と Python と 時々 NetBeans
僕と Python と 時々 NetBeans
 

Viewers also liked

Testing and packaging WebRTC Stack
Testing and packaging WebRTC StackTesting and packaging WebRTC Stack
Testing and packaging WebRTC StackAlexandre Gouaillard
 
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようWebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようmganeko
 
MistCDNの概要 / Technical Session - WebRTC Meetup Tokyo #9
MistCDNの概要 / Technical Session - WebRTC Meetup Tokyo #9MistCDNの概要 / Technical Session - WebRTC Meetup Tokyo #9
MistCDNの概要 / Technical Session - WebRTC Meetup Tokyo #9Shintaro Tanaka
 
ち〜ん
ち〜んち〜ん
ち〜んtadfmac
 
IoTをインターネット越しで見る
IoTをインターネット越しで見るIoTをインターネット越しで見る
IoTをインターネット越しで見るtnoho
 
ORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みするORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みするYusuke Naka
 
Jitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみたJitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみたtnoho
 
知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたち知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたちKensaku Komatsu
 

Viewers also liked (8)

Testing and packaging WebRTC Stack
Testing and packaging WebRTC StackTesting and packaging WebRTC Stack
Testing and packaging WebRTC Stack
 
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみようWebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
WebRTC UserMedia Catalog: いろんなユーザメディア(MediaStream)を使ってみよう
 
MistCDNの概要 / Technical Session - WebRTC Meetup Tokyo #9
MistCDNの概要 / Technical Session - WebRTC Meetup Tokyo #9MistCDNの概要 / Technical Session - WebRTC Meetup Tokyo #9
MistCDNの概要 / Technical Session - WebRTC Meetup Tokyo #9
 
ち〜ん
ち〜んち〜ん
ち〜ん
 
IoTをインターネット越しで見る
IoTをインターネット越しで見るIoTをインターネット越しで見る
IoTをインターネット越しで見る
 
ORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みするORTCの仕様書をざっくり斜め読みする
ORTCの仕様書をざっくり斜め読みする
 
Jitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみたJitsi video bridge で遊んでみた
Jitsi video bridge で遊んでみた
 
知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたち知ってると得するかもしれないConstraintsたち
知ってると得するかもしれないConstraintsたち
 

Similar to スマホアプリBestieBoxにWebRTCを組みこんでみた

【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...Deep Learning JP
 
WebRTCでアプリやIoT機器にリアルタイム・コミュニケーションを追加しよう
WebRTCでアプリやIoT機器にリアルタイム・コミュニケーションを追加しようWebRTCでアプリやIoT機器にリアルタイム・コミュニケーションを追加しよう
WebRTCでアプリやIoT機器にリアルタイム・コミュニケーションを追加しようRyosuke Otsuya
 
今こそ Microsft Bot Framework を学ぼう
今こそ Microsft Bot Framework を学ぼう今こそ Microsft Bot Framework を学ぼう
今こそ Microsft Bot Framework を学ぼうShinya Nakajima
 
チャットボットを自社業務に適用するにはどうしたらいいのか?:UXデザインによるチャット業務デザイン講座
チャットボットを自社業務に適用するにはどうしたらいいのか?:UXデザインによるチャット業務デザイン講座チャットボットを自社業務に適用するにはどうしたらいいのか?:UXデザインによるチャット業務デザイン講座
チャットボットを自社業務に適用するにはどうしたらいいのか?:UXデザインによるチャット業務デザイン講座munjapan
 
Tech on meetup online#01
Tech on meetup online#01Tech on meetup online#01
Tech on meetup online#01Kazuya Suda
 
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話Yuhei Miyazato
 
オープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOpsオープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOpsAkihiko Horiuchi
 
SkyWayとWebRTC開発者コミュニティ4年間の軌跡とCMC_Meetupで学んだこと、実践したこと
SkyWayとWebRTC開発者コミュニティ4年間の軌跡とCMC_Meetupで学んだこと、実践したことSkyWayとWebRTC開発者コミュニティ4年間の軌跡とCMC_Meetupで学んだこと、実践したこと
SkyWayとWebRTC開発者コミュニティ4年間の軌跡とCMC_Meetupで学んだこと、実践したことYusuke Naka
 
170520 DataSpider DevConn Hackathon
170520 DataSpider DevConn Hackathon170520 DataSpider DevConn Hackathon
170520 DataSpider DevConn Hackathonkintone papers
 
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナーakihiro uehara
 
UIは「習うより慣れろ」
UIは「習うより慣れろ」UIは「習うより慣れろ」
UIは「習うより慣れろ」tomo tsubota
 
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携Sakae Saito
 
#Net2tokyo_socialgood_tool_share_meetup
#Net2tokyo_socialgood_tool_share_meetup#Net2tokyo_socialgood_tool_share_meetup
#Net2tokyo_socialgood_tool_share_meetup孝弘 笠原
 
Itca yammer提案110615
Itca yammer提案110615Itca yammer提案110615
Itca yammer提案110615伸夫 森本
 
サービスをつくりなおす決断をするとき
サービスをつくりなおす決断をするときサービスをつくりなおす決断をするとき
サービスをつくりなおす決断をするときMasaki Yamamoto
 
TypeScript x Bot Framework
TypeScript x Bot FrameworkTypeScript x Bot Framework
TypeScript x Bot FrameworkKazumi IWANAGA
 

Similar to スマホアプリBestieBoxにWebRTCを組みこんでみた (20)

【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
【DL輪読会】Visual ChatGPT: Talking, Drawing and Editing with Visual Foundation Mo...
 
WebRTCでアプリやIoT機器にリアルタイム・コミュニケーションを追加しよう
WebRTCでアプリやIoT機器にリアルタイム・コミュニケーションを追加しようWebRTCでアプリやIoT機器にリアルタイム・コミュニケーションを追加しよう
WebRTCでアプリやIoT機器にリアルタイム・コミュニケーションを追加しよう
 
今こそ Microsft Bot Framework を学ぼう
今こそ Microsft Bot Framework を学ぼう今こそ Microsft Bot Framework を学ぼう
今こそ Microsft Bot Framework を学ぼう
 
チャットボットを自社業務に適用するにはどうしたらいいのか?:UXデザインによるチャット業務デザイン講座
チャットボットを自社業務に適用するにはどうしたらいいのか?:UXデザインによるチャット業務デザイン講座チャットボットを自社業務に適用するにはどうしたらいいのか?:UXデザインによるチャット業務デザイン講座
チャットボットを自社業務に適用するにはどうしたらいいのか?:UXデザインによるチャット業務デザイン講座
 
Tech on meetup online#01
Tech on meetup online#01Tech on meetup online#01
Tech on meetup online#01
 
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
webSocket通信を知らないiOSエンジニアが知っておいて損はしない(経験談的な)軽い話
 
オープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOpsオープンソースBotフレームワークではじめるChatOps
オープンソースBotフレームワークではじめるChatOps
 
SkyWayとWebRTC開発者コミュニティ4年間の軌跡とCMC_Meetupで学んだこと、実践したこと
SkyWayとWebRTC開発者コミュニティ4年間の軌跡とCMC_Meetupで学んだこと、実践したことSkyWayとWebRTC開発者コミュニティ4年間の軌跡とCMC_Meetupで学んだこと、実践したこと
SkyWayとWebRTC開発者コミュニティ4年間の軌跡とCMC_Meetupで学んだこと、実践したこと
 
ITproEXPO特別講演
ITproEXPO特別講演ITproEXPO特別講演
ITproEXPO特別講演
 
170520 DataSpider DevConn Hackathon
170520 DataSpider DevConn Hackathon170520 DataSpider DevConn Hackathon
170520 DataSpider DevConn Hackathon
 
Ma×noby×私
Ma×noby×私Ma×noby×私
Ma×noby×私
 
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
20100701 01 ツイッター浜名湖_プレゼン_i_phoneで動くロボットセミナー
 
UIは「習うより慣れろ」
UIは「習うより慣れろ」UIは「習うより慣れろ」
UIは「習うより慣れろ」
 
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
kintoneとMicrosoft Flowで学ぶイマドキのシステム間連携
 
Agile Estimating And Planning
Agile Estimating And PlanningAgile Estimating And Planning
Agile Estimating And Planning
 
#Net2tokyo_socialgood_tool_share_meetup
#Net2tokyo_socialgood_tool_share_meetup#Net2tokyo_socialgood_tool_share_meetup
#Net2tokyo_socialgood_tool_share_meetup
 
Itca yammer提案110615
Itca yammer提案110615Itca yammer提案110615
Itca yammer提案110615
 
サービスをつくりなおす決断をするとき
サービスをつくりなおす決断をするときサービスをつくりなおす決断をするとき
サービスをつくりなおす決断をするとき
 
TypeScript x Bot Framework
TypeScript x Bot FrameworkTypeScript x Bot Framework
TypeScript x Bot Framework
 
ChatGPTのLINEボット
ChatGPTのLINEボットChatGPTのLINEボット
ChatGPTのLINEボット
 

Recently uploaded

Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元ivanwang53
 
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーンWindowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーンivanwang53
 
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法ivanwang53
 
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docxWindows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docxivanwang53
 
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]Taka Narita
 
動的 & 非同期コンポーネント / Dynamic & Async Components
動的 & 非同期コンポーネント / Dynamic & Async Components動的 & 非同期コンポーネント / Dynamic & Async Components
動的 & 非同期コンポーネント / Dynamic & Async Componentsokitamasashi
 

Recently uploaded (6)

Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
Windows 10、Windows 11の付箋を簡単に復元する6つの方法|データ復元
 
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーンWindowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
Windowsアップデート後の黒い画面を修正する方法|データ復元|ブラックスクリーン
 
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
ダウンロードがダウンロード(Downloads)フォルダに表示されない」問題の対処法
 
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docxWindows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
Windows Defenderのフル・クイック・カスタム・オフラインスキャンを実行する方法.docx
 
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
あらゆる通信環境で切れない「ネットモーション」のモバイルアクセス [NetMotion]
 
動的 & 非同期コンポーネント / Dynamic & Async Components
動的 & 非同期コンポーネント / Dynamic & Async Components動的 & 非同期コンポーネント / Dynamic & Async Components
動的 & 非同期コンポーネント / Dynamic & Async Components
 

スマホアプリBestieBoxにWebRTCを組みこんでみた