You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+13-11Lines changed: 13 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -66,16 +66,17 @@ Video roadmap and changelog is available [here](https://github.com/GetStream/pro
66
66
67
67
### 0.2.0 milestone
68
68
69
-
-[ ] Local Video disconnects sometimes (ICE restarts issue for the publisher. we're waiting for the backend support)
70
-
-[ ] Deeplink support for video call demo & dogfooding app (skip auth for the video demo, keep it for dogfooding)
71
-
-[ ] Chat Integration
72
-
-[ ] XML version of VideoRenderer
73
-
-[ ] Call Analytics stateflow
74
-
-[ ] Automatically handle pagination and sorting on > 6 participants
75
-
-[ ] Make it easy to test ringing support
76
-
-[ ] publish app on play store
77
-
-[ ] report version number of SDK on all API calls
78
-
-[ ] Bug: java.net.UnknownHostException: Unable to resolve host "hint.stream-io-video.com" isn't throw but instead logged as INFO
69
+
-[ ] Deeplink support for video call demo & dogfooding app (skip auth for the video demo, keep it for dogfooding) (Daniel)
70
+
-[ ] Chat Integration (Jaewoong)
71
+
-[ ] XML version of VideoRenderer (Jaewoong)
72
+
-[ ] Local Video disconnects sometimes (ICE restarts issue for the publisher. we're waiting for the backend support) (Thierry)
73
+
-[ ] Call Analytics stateflow (Thierry)
74
+
-[ ] Automatically handle pagination and sorting on > 6 participants
75
+
-[ ] Ringing: Make it easy to test
76
+
-[ ] Ringing: Make a list of what needs to be configurable
77
+
-[ ] Publish app on play store
78
+
-[ ] Report version number of SDK on all API calls (Daniel)
79
+
-[ ] Bug: java.net.UnknownHostException: Unable to resolve host "hint.stream-io-video.com" isn't throw but instead logged as INFO (Daniel)
79
80
-[ ] Bug: screensharing is broken. android doesn’t receive/render (not sure) the screenshare. video shows up as the gray avatar
80
81
-[X] Reactions
81
82
-[X] bug: screenshare is not removed after it stops when a participant leaves the call (Thierry) (probably just dont update the state when the participant leaves)
@@ -92,8 +93,9 @@ Video roadmap and changelog is available [here](https://github.com/GetStream/pro
92
93
-[ ] Test coverage
93
94
-[ ] Testing on more devices
94
95
-[ ] Speaking while muted stateflow
95
-
-[X] Cleanup the retry behaviour in the RtcSession
96
96
-[ ] Android SDK development.md cleanup (Daniel)
97
+
-[ ] Logging is too verbose (rtc is very noisy), clean it up to focus on the essential for info and higher
98
+
-[X] Cleanup the retry behaviour in the RtcSession
"description" to "Talk about how easy compose makes it to reuse and combine UI"
@@ -126,13 +125,11 @@ Let's review the example above and go over the details.
126
125
**Create a user**. First we create a user object.
127
126
You typically sync your users via a server side integration from your own backend.
128
127
Alternatively, you can also use guest or anonymous users.
129
-
The user's role allows you to configure permissions in the video call.
130
128
131
129
```kotlin
132
130
val user =User(
133
131
id = userId, // any string
134
-
name ="Tutorial", // name and image are used in the UI
135
-
role ="admin"
132
+
name ="Tutorial"// name and image are used in the UI
136
133
)
137
134
```
138
135
@@ -156,7 +153,7 @@ lifecycleScope.launch {
156
153
val result = call.join(
157
154
create =true, createOptions =CreateCallOptions(
158
155
members =listOf(
159
-
MemberRequest(userId ="sophia", role ="host", custom = emptyMap())
156
+
MemberRequest(userId =userId, role ="host", custom = emptyMap())
160
157
), custom =mapOf(
161
158
"title" to "Compose Trends",
162
159
"description" to "Talk about how easy compose makes it to reuse and combine UI"
@@ -170,7 +167,7 @@ lifecycleScope.launch {
170
167
```
171
168
172
169
* This joins and creates a call with the type: "audio_room" and the specified callId.
173
-
*The user with id sophia is granted the "host" role. You can create custom roles and grant them permissions to fit your app.
170
+
*You add yourself as a member with the "host" role. You can create custom roles and grant them permissions to fit your app.
174
171
* The `title` and `description` custom fields are set on the call object.
175
172
* Shows an error toast if you fail to join an audio room.
176
173
@@ -195,7 +192,6 @@ Replace the code in `setContent` with the following sample:
195
192
```kotlin
196
193
setContent {
197
194
VideoTheme {
198
-
val connection by call.state.connection.collectAsState()
199
195
val connection by call.state.connection.collectAsState()
200
196
val activeSpeakers by call.state.activeSpeakers.collectAsState()
201
197
val audioLevel = activeSpeakers.firstOrNull()?.audioLevel?.collectAsState()
@@ -223,6 +219,9 @@ setContent {
223
219
}
224
220
```
225
221
222
+
All state for a call is available in `call.state`. In the example above we're observing the connection state and the active speakers.
223
+
The [ParticipantState docs](../03-guides/03-call-and-participant-state.mdx) explain the available stateflow objects.
224
+
226
225
You'll see that the **AudioRoom** composable hasn't been implemented yet. In `MainActivity`, add the following `AudioRoom` composable:
227
226
228
227
```kotlin
@@ -269,7 +268,9 @@ public fun AudioRoom(
269
268
}
270
269
```
271
270
272
-
The audio room is pretty basic. It needs a **Controls**, **Participants**, and **Description** composable functions to work.
271
+
The code above observes the participants, active speakers and backstage stateflow objects in `call.state`.
272
+
273
+
We still need to implement a **Controls**, **Participants**, and **Description** composable.
273
274
Let's add those next.
274
275
275
276
```kotlin
@@ -311,12 +312,6 @@ That's it for the basics. Now when you run your app, you'll see the following UI
311
312
The approach is the same for all components. We take the states of the call by observing `call.state` properties, such as `call.state.participants` and use it to power our UI.
312
313
The [ParticipantState docs](../03-guides/03-call-and-participant-state.mdx) exposes all the state objects we need for the name, avatar, audio levels, speaking, etc.
313
314
314
-
To make this a little more interactive, let's join the audio room from your browser.
0 commit comments