SlideShare una empresa de Scribd logo
1 de 52
Descargar para leer sin conexión
Multipeer Connectivityを使った
動画のリアルタイム端末間共有
料理動画撮影アプリの事例
いまじん #iOSDC #b
自己紹介
● 名前
○ いまじん, imajin, imjn, @mrimjn
● 所属
○ クックパッド株式会社
● つくっているもの
○ cookpadLive, cookpad studio, 個人開発
対象
● Multipeer Connectivity ってなんですかという人
● Multipeer Connectivity の実用例が知りたい人
● Peer-to-Peer のアプリを何かつくってみたいと思っている人
今日はなすこと
実際の利用事例を通じてMultipeer Connectivityを紹介
● 事例の紹介
● 実際の実装をみていく
○ 接続
○ 送受信
● まとめ
cookpad studio について
cookpad studio
料理動画を
誰でも簡単に
撮影して編集できる
cookpad studioの要件
● 手元と撮影用に2台の端末を連携
● 撮影端末を手元の端末で操作できる
● 手元の端末で撮影の様子を確認できる
● 撮影端末から動画の編集をする端末に
動画ファイルを転送できる
● ネットワーク環境がない場所でも使える
候補
● iBeacon
● Core Bluetooth
● Multipeer Connectivity
候補
● iBeacon
● Core Bluetooth
● Multipeer Connectivity
● 2013年のWWDCで公開された標準のフレームワーク
● iOS 7で導入
○ AirDropと同じタイミングで発表
● Bluetooth + WiFiを使ったローカル通信
● 高レベルなAPIが用意されていて実装が比較的簡単
● 大きなファイル転送やストリーミングが可能
Multipeer Connectivity について
https://developer.apple.com/documentation/multipeerconnectivity
● 稀に不安定になったりする
● Apple familyのDeviceでしか使えない
● バックグラウンドでは使えない
● スループットは3-4MB/s程度 (非公式)
注意ポイント
studioの実装をみていく
studioの実装をみていく
● 2台の端末の接続
● 撮影中のデータのやりとり
● 撮影終了後のデータのやりとり
接続
接続で使う主なclass
● MCPeerID
○ Peerを識別するID
● 探索側
○ MCNearbyServiceBrowser
○ MCBrowserViewController (必要なUIも提供してくれる)
● 受信側
○ MCNearbyServiceAdvertiser
○ MCAdvertiserAssistant (必要なUIも提供してくれる)
Bonjour
● zero-configuration networking
● デバイスやサービスが同じネットワーク上
で互いを検出できる
● Bonjourを使うためにはinfo.plistに設定が
必要 (iOS 14)
○ Privacy - Local Network Usage
Description
○ Bonjour services
https://developer.apple.com/bonjour/
https://developer.apple.com/forums/thread/659563
デバイスを探す
let mcBrowser: MCNearbyServiceBrowser
mcBrowser = MCNearbyServiceBrowser(peer: myPeerID, serviceType:
cookpad-studio-camera")
mcBrowser.startBrowsingForPeers()
● MCNearbyServiceBrowserを使用
○ 独自のUIを組むため
見つけてもらう
let mcAdvertiser: MCNearbyServiceAdvertiser
let identifier = UIDevice.current.identifierForVendor?.uuidString ?? "N/A"
mcAdvertiser = MCNearbyServiceAdvertiser(
peer: myPeer.peerID,
discoveryInfo: [
"modelName" : Device.current.safeDescription,
"identifier" : identifier
],
serviceType: "cookpad-studio-camera"
)
mcAdvertiser.startAdvertisingPeer()
リクエストを送る
mcBrowser.invitePeer(peerIDToInvite.peerID, to: mcSession, withContext: nil, timeout:
20)
リクエストを承認する
func advertiser(_ advertiser: MCNearbyServiceAdvertiser, didReceiveInvitationFromPeer peerID: MCPeerID, withContext
context: Data?, invitationHandler: @escaping (Bool, MCSession?) -> Void) {
let viewControllerToPresentAlert = UIApplication.shared.topViewController()
let confirmationDialog = prepareConfirmationDialog(for: peerID, invitationHandler: invitationHandler) // confirmationDialog↑の
中で接続の許可をinvitationHandlerに返しています
DispatchQueue.main.async {
viewControllerToPresentAlert?.present(confirmationDialog, animated: true, completion: nil)
}
}
接続できた
func connect(peerToConnect: MCPeerID, invitationHandler: @escaping (Bool,
MCSession?) -> Void) {
invitationHandler(true, mcSession) // このMCSessionを使ってデータのやり取りをする
}
撮影中のデータのやりとり
MCには3つのデータ送信手段がある
● message-based
○ send(_:toPeers:with:)
■ Data型に格納したメッセージを送信
○ sendResource(at:withName:toPeer:withCompletionH
andler:)
■ URLコンテンツを送信
● stream-based
○ startStream(withName:toPeer:)
■ ストリームをオープン
studioで撮影中にやりとりが必要なもの
● 再生・停止などのコマンド
○ send(_:toPeers:with:)
● ライブプレビュー
○ send(_:toPeers:with:)
● 動画ファイル
○ sendResource(at:withName:toPeer:withCompletionH
andler:)
コマンドを定義
互いが解釈できる操作をコマ
ンド(Kind)として定義
接続端末は受け取ったコマン
ドに応じて処理を行う
enum Kind: Codable {
case cameraPreview(Data)
case command(type: CommandType)
enum CommandType: Codable {
case presentRemoteController(ProjectInfo?)
case switchCamera
case whilebalanceValueChanged(Float)
case contrastValueChanged(Float)
case shadowValueChanged(Float)
case cameraIsReady(Bool)
case didTapRecordButton
case didStartRecording
case didStopRecording
struct RemoteControlData: Codable {
操作コマンドの送信
カメラ切り替え、撮影開始・停止・終了、ホワイトバランスやコントラストなどの調整、
ping、撮影準備
完了...
func sendCommand(type: RemoteControlData.Kind.CommandType) throws {
let data = RemoteControlData(kind: .command(type: type))
try mcSession.send(
JSONEncoder().encode(data), // 受け取り側ではこれをdecodeしてハンドリングする
toPeers: [connectedPeer.peerID],
with: .reliable // MCSessionSendDataMode UDP(unreliable)かTCP(reliable)かを設定できる
)
}
ライブプレビューの送信
高速のパラパラ漫画を動かしているような実装
受け取る側はUIImageに変換してUIImageViewにセット
func sendCameraPreview(imageData: Data) throws {
let data = RemoteControlData(kind: .cameraPreview(imageData))
try mcSession.sendData(connectorData: data, reliability: .unreliable) // 順序や送信の保証の必要はないため
.unreliableとして
いる
}
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection:
AVCaptureConnection) {
let imageData = // ここでコネコネしてsampleBufferからimageDataを生成する
try? sendCameraPreview(imageData: imageData)
}
撮影完了後のデータのやりとり
動画ファイルの送信
func sendResource(resourceURL: URL, fileID: UUID, complitionHandler: ((Error?) -> Void)?) ->
Progress? {
guard let connectedPeer = connectedPeer else {
assertionFailure("connectedPeer must not be nil")
return nil
}
let progress = mcSession.sendResource(
at: resourceURL, // 端末に保存された動画の
URL
withName: fileID.uuidString,
toPeer: connectedPeer.peerID,
withCompletionHandler: complitionHandler
)
return progress // UIProgressViewの表示に使っている
}
動画ファイルの受信
func session(_ session: MCSession, didStartReceivingResourceWithName resourceName: String, fromPeer peerID:
MCPeerID, with progress: Progress)
func session(_ session: MCSession, didFinishReceivingResourceWithName resourceName: String, fromPeer peerID:
MCPeerID, at localURL: URL?, withError error: Error?)
受信開始時に呼ばれるメソッド。受信側ではこの progressをUIProgressViewに使っている。
受信完了時に呼ばれるメソッド。 error時のハンドリングなども可能。
DEKITA!
最近困っていること
最近の困り①
長時間プレビューをしていたらモッサリしてくる
確かに手元で再現できた
状況を知る
プレビューでは大体1.0MB/s弱のデータを送受信している
スループットは~4MB/s程度ありそうなので問題ないはず
もしかして他に原因があるんじゃないの...
● Multipeer Connectivityという物珍しいフレームワークに
引っ張られて他の部分をあまり見れていなかった
● Encode・Decodeの部分やUIの描画部分を見直す予定
最近の困り②
● studioでは撮影を停止したらすぐ動画ファイルの送信を開
始
● プレビューがカクカクしたり遅延する問題や動画の送信が一
向に終わらない事象が発生したと報告
最近の困り②
● プレビューがカクカクしたり遅延する問題や、動画の送信が
一向に終わらない事象が発生したと報告
● studioでは撮影を停止したらすぐ動画ファイルの送信を開
始
○ プレビューの送信と動画ファイルの送信を同時にやると
厳しい...?
状況
プレビューのみのときは1MB/s 弱
動画ファイルの転送も同時にすると4MB/s程度出ている
状況
● プレビューのみのときは1MB/s 弱
● 動画ファイルの転送も同時にすると4MB/s程度出てる
という事実から安直に推理すると動画ファイルの転送
(sendResource)のMAXが3MB/s程度なのではないか!
send()とsendResource()のスループットがそれぞれ独立してい
るのか、一緒になっているのかわからん。
sendResourceの上限を知りたい
サンプルアプリつくって大きな動画ファイルを送信してみた
スループットは1弱-2MB/sで推移
sendResourceの上限を知りたい
3MB/s出ないじゃん。
sendResourceの上限を知りたい
3MB/s出ないじゃん。
なんもわからん。
sendResourceの上限を知りたい
3MB/s出ないじゃん。
なんもわからん。
そしてタイムオーバー。
仕様で解決
結局送信量がMultipeer Connectivityの限界に達したのかはき
ちんと確認できず...
撮影停止後にすぐ送信するのではなく、撮影が終了した後にま
とめて送るようにした。
仕様で解決
→ 今回は仕様で解決してしまった...
これもMultipeer Connectivity関係ない説をこれから調べる。
仕様で解決したあとの様子がこれ
撮影終了後に、プレビューは停止した状態で動画ファイルの転
送を行っている(~3MB/s)。
デバッグむずかしい
● カクツキや遅延が発生したユーザーの端末のそれぞれの
状況を正確に把握・再現できない
● 実機検証するときには端末が複数必要
○ ビルドめんどくさい
● Instrumentsをあまり使いこなせてないので
うまく使えるようになりたい
Multipeer Connectivity まとめ
Multipeer Connectivityまとめ
● 高レベルなAPIが用意されていて結構簡単にPeer-to-Peer
通信が実装できる
● 通信のスループットは最大3-4MB程度
○ こちら何か情報があれば教えてください🙏
● Apple Watchとの連携のためのWatch Connectivityという
のもある (別物)
なにかつくって遊んでみてください〜
🙏
Make everyday cooking fun! 🍳
Thank You!
@mrimjn

Más contenido relacionado

La actualidad más candente

UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件Grenge, Inc.
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたTakahiro Miyaura
 
攻略リニアカラー改訂版
攻略リニアカラー改訂版攻略リニアカラー改訂版
攻略リニアカラー改訂版小林 信行
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだNarichika Kajihara
 
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装tnoho
 
ゲームニクス理論
ゲームニクス理論ゲームニクス理論
ゲームニクス理論TANREN Inc.
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜Unity Technologies Japan K.K.
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化DeNA
 
TextMeshProを使った絵文字対応について
TextMeshProを使った絵文字対応についてTextMeshProを使った絵文字対応について
TextMeshProを使った絵文字対応についてssuserfefa74
 
Moodleを活用していると思われる大学のリスト
Moodleを活用していると思われる大学のリストMoodleを活用していると思われる大学のリスト
Moodleを活用していると思われる大学のリスト鈴鹿工業高等専門学校
 
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編NAKAOKU Takahiro
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャtorisoup
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理torisoup
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?Mr. Vengineer
 
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会NVIDIA Japan
 
Assembly Definition あれやこれ
Assembly Definition あれやこれAssembly Definition あれやこれ
Assembly Definition あれやこれNakanoYosuke1
 

La actualidad más candente (20)

UnityでUI開発を高速化した件
UnityでUI開発を高速化した件UnityでUI開発を高速化した件
UnityでUI開発を高速化した件
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 
攻略リニアカラー改訂版
攻略リニアカラー改訂版攻略リニアカラー改訂版
攻略リニアカラー改訂版
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだ
 
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
WebRTCを利用した遠隔リアルタイム映像処理フレームワークの実装
 
ゲームニクス理論
ゲームニクス理論ゲームニクス理論
ゲームニクス理論
 
Photonのサービス選択の勘どころ
Photonのサービス選択の勘どころPhotonのサービス選択の勘どころ
Photonのサービス選択の勘どころ
 
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
【Unity道場】AssetGraph入門 〜ノードを駆使しててUnityの面倒な手作業を自動化する方法〜
 
大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化大規模ゲーム開発における build 高速化と安定化
大規模ゲーム開発における build 高速化と安定化
 
TextMeshProを使った絵文字対応について
TextMeshProを使った絵文字対応についてTextMeshProを使った絵文字対応について
TextMeshProを使った絵文字対応について
 
UE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろうUE4でマルチプレイヤーゲームを作ろう
UE4でマルチプレイヤーゲームを作ろう
 
Moodleを活用していると思われる大学のリスト
Moodleを活用していると思われる大学のリストMoodleを活用していると思われる大学のリスト
Moodleを活用していると思われる大学のリスト
 
Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編Unityで始めるバージョン管理 Git LFS 入門編
Unityで始めるバージョン管理 Git LFS 入門編
 
Yahoo! ニュースにおける ドキュメント管理の事例紹介
Yahoo! ニュースにおけるドキュメント管理の事例紹介Yahoo! ニュースにおけるドキュメント管理の事例紹介
Yahoo! ニュースにおける ドキュメント管理の事例紹介
 
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
バイキング流UE4活用術 ~BPとお別れするまでの18ヶ月~
 
Unityでオニオンアーキテクチャ
UnityでオニオンアーキテクチャUnityでオニオンアーキテクチャ
Unityでオニオンアーキテクチャ
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?TensorFlow Lite Delegateとは?
TensorFlow Lite Delegateとは?
 
第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会第 1 回 Jetson ユーザー勉強会
第 1 回 Jetson ユーザー勉強会
 
Assembly Definition あれやこれ
Assembly Definition あれやこれAssembly Definition あれやこれ
Assembly Definition あれやこれ
 

Similar a Multipeer connectivityを使った 動画のリアルタイム端末間共有

BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1Atsushi Tadokoro
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3信之 岩永
 
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】GMO GlobalSign Holdings K.K.
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウKentarou Mukunasi
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggugkimukou_26 Kimukou
 
UnityとnodeとMMDと
UnityとnodeとMMDとUnityとnodeとMMDと
UnityとnodeとMMDとsters
 
メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門Atsushi Tadokoro
 
ブラウザのハードウェア対応の未来を探る
ブラウザのハードウェア対応の未来を探るブラウザのハードウェア対応の未来を探る
ブラウザのハードウェア対応の未来を探るndruger
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...エピック・ゲームズ・ジャパン Epic Games Japan
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)Drecom Co., Ltd.
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 Eastirgaly
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上Tatsuya Ishikawa
 
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門Atsushi Tadokoro
 
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1虎の穴 開発室
 

Similar a Multipeer connectivityを使った 動画のリアルタイム端末間共有 (20)

BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
 
Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3Orange Cube 自社フレームワーク 2015/3
Orange Cube 自社フレームワーク 2015/3
 
SnapDishの事例
SnapDishの事例SnapDishの事例
SnapDishの事例
 
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
Unityで PhotonCloudを使ってリアルタイム・マルチプレイヤーゲームを作っちゃおう【導入編】
 
初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ初心者向けAndroidゲーム開発ノウハウ
初心者向けAndroidゲーム開発ノウハウ
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 
UnityとnodeとMMDと
UnityとnodeとMMDとUnityとnodeとMMDと
UnityとnodeとMMDと
 
Seeing is Believing
Seeing is BelievingSeeing is Believing
Seeing is Believing
 
メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
C#の書き方
C#の書き方C#の書き方
C#の書き方
 
ブラウザのハードウェア対応の未来を探る
ブラウザのハードウェア対応の未来を探るブラウザのハードウェア対応の未来を探る
ブラウザのハードウェア対応の未来を探る
 
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...  そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
そう、UE4ならね。あなたのモバイルゲームをより快適にする沢山の冴えたやり方について Part 2 <Texture Streaming, メモリプロ...
 
ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料ドリコムJenkins勉強会資料
ドリコムJenkins勉強会資料
 
「AROW」お披露目(実用編)
「AROW」お披露目(実用編)「AROW」お披露目(実用編)
「AROW」お披露目(実用編)
 
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 EastiOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
iOS の動画アプリ開発に Xamarin を使ってみた @JXUG #2 East
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
 
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
【SQiP2014】システム操作インターフェイス最適化によるテスト自動化ROI向上
 
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 1: openFrameworks入門
 
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
 

Multipeer connectivityを使った 動画のリアルタイム端末間共有