2323
2424 < div >
2525 < input type ="text " id ="invite-id " placeholder ="invite id " readonly >
26- < button onclick ="answerCall () "> Answer Call</ button >
26+ < button onclick ="acceptCall () "> Answer Call</ button >
2727 < button onclick ="rejectCall() "> Reject Call</ button >
2828 </ div >
2929
@@ -48,6 +48,21 @@ <h2>Remote</h2>
4848
4949let pendingInvite = null
5050
51+ let localMediaSrc = null
52+
53+ let config = new Dataparty . Config . LocalStorageConfig ( {
54+ basePath :'' ,
55+ cloud : {
56+ uri : 'https://' + window . location . hostname + ':3000'
57+ }
58+ } )
59+
60+ let hostLocal = new Dataparty . LokiParty ( {
61+ path : 'call-test' ,
62+ dbAdapter : new Dataparty . LokiParty . Loki . LokiMemoryAdapter ( ) ,
63+ config : config
64+ } )
65+
5166async function callUser ( ) {
5267 if ( pendingInvite ) { return }
5368
@@ -60,9 +75,88 @@ <h2>Remote</h2>
6075 action : 'call'
6176 } )
6277
78+ pendingInvite . on ( 'stream' , invite => {
79+ // got remote video stream, now let's show it in a video tag
80+ console . log ( 'showing remote video' )
81+ var video = document . getElementById ( 'remote-video' )
82+
83+ if ( 'srcObject' in video ) {
84+ video . srcObject = invite . incomingStream
85+ } else {
86+ video . src = window . URL . createObjectURL ( invite . incomingStream ) // for older browsers
87+ }
88+
89+ video . play ( )
90+ } )
91+
6392 pendingInvite . on ( 'state-change' , ( invite ) => {
6493 console . log ( 'state-change' , invite . state , invite )
6594 } )
95+
96+ pendingInvite . once ( 'accepted' , async ( invite ) => {
97+
98+ console . log ( 'accepted' )
99+
100+ localMediaSrc = await navigator . mediaDevices . getUserMedia ( {
101+ video : true ,
102+ audio : true
103+ } )
104+
105+ console . log ( 'showing local video' )
106+ var video = document . getElementById ( 'local-video' )
107+
108+ if ( 'srcObject' in video ) {
109+ video . srcObject = localMediaSrc
110+ } else {
111+ video . src = window . URL . createObjectURL ( localMediaSrc ) // for older browsers
112+ }
113+
114+ video . play ( )
115+
116+ await establish ( {
117+ mediaSrc : localMediaSrc ,
118+ hostParty : hostLocal
119+ } )
120+ } )
121+ }
122+
123+ async function acceptCall ( ) {
124+
125+ localMediaSrc = await navigator . mediaDevices . getUserMedia ( {
126+ video : true ,
127+ audio : true
128+ } )
129+
130+ await pendingInvite . accept ( localMediaSrc )
131+
132+ pendingInvite . on ( 'stream' , invite => {
133+ // got remote video stream, now let's show it in a video tag
134+ console . log ( 'showing remote video' )
135+ var video = document . getElementById ( 'remote-video' )
136+
137+ if ( 'srcObject' in video ) {
138+ video . srcObject = invite . incomingStream
139+ } else {
140+ video . src = window . URL . createObjectURL ( invite . incomingStream ) // for older browsers
141+ }
142+
143+ video . play ( )
144+ } )
145+ }
146+
147+ async function finalizeCall ( ) {
148+
149+ localMediaSrc = await navigator . mediaDevices . getUserMedia ( {
150+ video : true ,
151+ audio : true
152+ } )
153+
154+
155+ await pendingInvite . establish ( {
156+ mediaSrc : localMediaSrc ,
157+ config
158+ //hostParty: hostLocal
159+ } )
66160}
67161
68162async function cancelCall ( ) {
@@ -78,7 +172,10 @@ <h2>Remote</h2>
78172}
79173
80174async function init ( ) {
81- matchMaker = new Dataparty . MatchMakerClient ( null , null )
175+
176+ await hostLocal . start ( )
177+
178+ matchMaker = new Dataparty . MatchMakerClient ( hostLocal . privateIdentity , null )
82179
83180 await matchMaker . start ( )
84181
0 commit comments