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
> This SDK is currently in Developer Preview mode and not ready for production use. There will be bugs and APIs may change during this period.
21
-
>
22
-
> We welcome and appreciate any feedback or contributions. You can create issues here or chat live with us in the #rust-developer-preview channel within the [LiveKit Community Slack](https://livekit.io/join-slack).
-[x] Cross-platform ( currently tested on Windows & MacOS )
28
-
-[x] Data channels
29
21
-[x] Publishing tracks
22
+
-[x] Data channels
23
+
-[x] Simulcast
24
+
-[ ] SVC codecs (AV1/VP9)
30
25
-[ ] Adaptive Streaming
31
26
-[ ] Dynacast
32
-
-[x] Simulcast
33
-
-[ ] Hardware video enc/dec
34
-
-[ ] NvEnc for Windows
27
+
-[x] Hardware video enc/dec
35
28
-[x] VideoToolbox for MacOS/iOS
29
+
- Supported Platforms
30
+
-[x] Windows
31
+
-[x] MacOS
32
+
-[x] Linux
33
+
-[x] iOS
34
+
-[x] Android
36
35
37
36
## Crates
38
37
39
-
-`livekit-core`: LiveKit protocol implementation
40
-
-`livekit-utils`: Shared utilities between our crates
41
-
-`livekit-ffi`: Bindings for other languages. Uses `livekit-core`.
42
-
-`libwebrtc`: Safe Rust bindings to libwebrtc
43
-
-`webrtc-sys`: Unsafe bindings to libwebrtc
38
+
-`livekit-api`: Server APIs and auth token generation
39
+
-`livekit`: LiveKit real-time SDK
40
+
-`livekit-ffi`: Internal crate, used to generate bindings for other languages
44
41
45
-
## Motivation and Design Goals
42
+
## Getting started
46
43
47
-
LiveKit aims to provide an open source, end-to-end WebRTC stack that works everywhere. We have two goals in mind with this SDK:
44
+
Currently, Tokio is required to use this SDK, however we plan to make the async executor runtime agnostic.
48
45
49
-
1. Build a standalone, cross-platform LiveKit client SDK for Rustaceans.
50
-
2. Build a common core for other platform-specific SDKs (e.g. Unity, Unreal, iOS, Android)
46
+
## Using Server API
51
47
52
-
Regarding (2), we've already developed a number of [client SDKs](https://github.com/livekit?q=client-sdk&type=all) for several platforms and encountered a few challenges in the process:
48
+
### Generating an access token
53
49
54
-
- There's a significant amount of business/control logic in our signaling protocol and WebRTC. Currently, this logic needs to be implemented in every new platform we support.
55
-
- Interactions with media devices and encoding/decoding are specific to each platform and framework.
56
-
- For multi-platform frameworks (e.g. Unity, Flutter, React Native), the aforementioned tasks proved to be extremely painful.
Thus, we posited a Rust SDK, something we wanted build anyway, encapsulating all our business logic and platform-specific APIs into a clean set of abstractions, could also serve as the foundation for our other SDKs!
71
+
### Creating a room with RoomService API
59
72
60
-
We'll first use it as a basis for our Unity SDK (under development), but over time, it will power our other SDKs, as well.
log::info!("received video frame - {video_frame:#?}");
140
+
}
141
+
});
142
+
},
143
+
}
144
+
},
145
+
_=> {}
105
146
}
106
147
```
107
148
108
149
## Examples
109
150
110
-
Wemadea [basicroomdemo](https://github.com/livekit/client-sdk-native/tree/main/examples/basic_room) leveraging all the current SDK features. Videos are rendered using wgpu and egui.
1. Build a standalone, cross-platform LiveKit client SDK for Rustaceans.
164
+
2. Build a common core for other platform-specific SDKs (e.g. Unity, Unreal, iOS, Android)
129
165
130
-
### Didyoulookat [Arcas](https://github.com/arcas-io/libwebrtc) for libwebrtc bindings?
166
+
Regarding (2), we've already developed a number of [client SDKs](https://github.com/livekit?q=client-sdk&type=all) for several platforms and encountered a few challenges in the process:
- There's a significant amount of business/control logic in our signaling protocol and WebRTC. Currently, this logic needs to be implemented in every new platform we support.
169
+
- Interactions with media devices and encoding/decoding are specific to each platform and framework.
170
+
- For multi-platform frameworks (e.g. Unity, Flutter, React Native), the aforementioned tasks proved to be extremely painful.
133
171
134
-
### Didyouconsiderusing [webrtc.rs](https://webrtc.rs/) instead of libwebrtc?
Thus, we posited a Rust SDK, something we wanted build anyway, encapsulating all our business logic and platform-specific APIs into a clean set of abstractions, could also serve as the foundation for our other SDKs!
0 commit comments