- Prepare webrtc abstraction ( for future wasm support ) - Added track publish support for videos - Added LogoTrack example to simple_room demo - Lot of cleanup - There are compiler warnings I'll solve on our v1 release
350 lines
7.4 KiB
Protocol Buffer
350 lines
7.4 KiB
Protocol Buffer
syntax = "proto3";
|
|
|
|
package livekit;
|
|
option csharp_namespace = "LiveKit.Proto";
|
|
|
|
/// IPC
|
|
|
|
/// # Safety
|
|
/// The foreign language is responsable for disposing an handle
|
|
/// Forgetting to dispose the handle may lead to memory leaks
|
|
/// Messages in this file can contain an FFIHandle
|
|
message FFIHandleId { uint64 id = 1; }
|
|
|
|
/// This is the input of livekit_ffi_request function
|
|
message FFIRequest {
|
|
oneof message {
|
|
InitializeRequest initialize = 1;
|
|
// Stop all rooms synchronously (Do we need async here?).
|
|
// e.g: This is used for the Unity Editor after each assemblies reload.
|
|
DisposeRequest dispose = 2;
|
|
ConnectRequest async_connect = 3;
|
|
DisconnectRequest async_disconnect = 4;
|
|
ToI420Request to_i420 = 5;
|
|
ToARGBRequest to_argb = 6;
|
|
}
|
|
}
|
|
|
|
/// This is the output of livekit_ffi_request function.
|
|
/// The message field is mostly used to send result of a synchronous operation
|
|
/// to the foreign language.
|
|
message FFIResponse {
|
|
optional uint64 async_id = 1;
|
|
oneof message { ToI420Response to_i420 = 2; }
|
|
}
|
|
|
|
/// This message is used to receive the result of asynchronous requests
|
|
/// Or to receive events of a Room
|
|
message FFIEvent {
|
|
// Used if the message is used to send the async result to the foreign
|
|
// language
|
|
optional uint64 async_id = 1;
|
|
oneof message {
|
|
ConnectEvent connect_event = 2;
|
|
RoomEvent room_event = 3;
|
|
TrackEvent track_event = 4;
|
|
ParticipantEvent participant_event = 5;
|
|
}
|
|
}
|
|
|
|
// Setup the callback where the foreign language can receive events
|
|
// and responses to asynchronous requests
|
|
message InitializeRequest { uint64 event_callback_ptr = 1; }
|
|
|
|
message DisposeRequest {}
|
|
|
|
message ConnectRequest {
|
|
string url = 1;
|
|
string token = 2;
|
|
RoomOptions options = 3;
|
|
}
|
|
|
|
message DisconnectRequest { string room_sid = 1; }
|
|
|
|
/// Convert a VideoFrameBuffer to a I420Buffer
|
|
message ToI420Request {
|
|
FFIHandleId buffer = 1; // NOTE: This buffer will be dropped!
|
|
}
|
|
|
|
message ToARGBRequest {
|
|
FFIHandleId buffer = 1;
|
|
uint64 dst_ptr = 2;
|
|
VideoFormatType dst_format = 3;
|
|
int32 dst_stride = 4;
|
|
int32 dst_width = 5;
|
|
int32 dst_height = 6;
|
|
}
|
|
|
|
message ConnectEvent {
|
|
bool success = 1;
|
|
optional RoomInfo room = 2;
|
|
}
|
|
|
|
message ToI420Response { optional VideoFrameBufferInfo new_buffer = 1; }
|
|
|
|
/// Models
|
|
|
|
message Dimension {
|
|
uint32 width = 1;
|
|
uint32 height = 2;
|
|
}
|
|
|
|
message RoomOptions {
|
|
bool auto_subscribe = 1;
|
|
bool adaptive_stream = 2;
|
|
}
|
|
|
|
message RoomInfo {
|
|
string sid = 1;
|
|
string name = 2;
|
|
string metadata = 3;
|
|
ParticipantInfo local_participant = 4;
|
|
repeated ParticipantInfo participants = 5;
|
|
}
|
|
|
|
message ParticipantInfo {
|
|
string sid = 1;
|
|
string name = 2;
|
|
string identity = 3;
|
|
string metadata = 4;
|
|
repeated TrackPublicationInfo publications = 5;
|
|
}
|
|
|
|
message TrackPublicationInfo {
|
|
string sid = 1;
|
|
string name = 2;
|
|
TrackKind kind = 3;
|
|
TrackSource source = 4;
|
|
bool simulcasted = 5;
|
|
Dimension dimension = 6;
|
|
string mime_type = 7;
|
|
bool muted = 8;
|
|
}
|
|
|
|
message TrackInfo {
|
|
string sid = 1;
|
|
string name = 2;
|
|
TrackKind kind = 3;
|
|
StreamState stream_state = 4;
|
|
bool muted = 5;
|
|
}
|
|
|
|
message VideoSinkInfo {
|
|
string track_sid = 1;
|
|
// More info?
|
|
}
|
|
|
|
enum TrackKind {
|
|
KIND_UNKNOWN = 0;
|
|
KIND_AUDIO = 1;
|
|
KIND_VIDEO = 2;
|
|
}
|
|
|
|
enum TrackSource {
|
|
SOURCE_UNKNOWN = 0;
|
|
SOURCE_CAMERA = 1;
|
|
SOURCE_MICROPHONE = 2;
|
|
SOURCE_SCREENSHARE = 3;
|
|
SOURCE_SCREENSHARE_AUDIO = 4;
|
|
}
|
|
|
|
enum ConnectionQuality {
|
|
QUALITY_POOR = 0;
|
|
QUALITY_GOOD = 1;
|
|
QUALITY_EXCELLENT = 2;
|
|
}
|
|
|
|
enum ConnectionState {
|
|
CONN_DISCONNECTED = 0;
|
|
CONN_CONNECTED = 1;
|
|
CONN_RECONNECTING = 2;
|
|
CONN_UNKNOWN = 3;
|
|
}
|
|
|
|
enum StreamState {
|
|
STATE_UNKNOWN = 0;
|
|
STATE_ACTIVE = 1;
|
|
STATE_PAUSED = 2;
|
|
}
|
|
|
|
enum VideoRotation {
|
|
VIDEO_ROTATION_0 = 0;
|
|
VIDEO_ROTATION_90 = 1;
|
|
VIDEO_ROTATION_180 = 2;
|
|
VIDEO_ROTATION_270 = 3;
|
|
}
|
|
|
|
enum DataPacketKind {
|
|
KIND_UNRELIABLE = 0;
|
|
KIND_RELIABLE = 1;
|
|
}
|
|
|
|
enum VideoFormatType {
|
|
FORMAT_ARGB = 0;
|
|
FORMAT_BGRA = 1;
|
|
FORMAT_ABGR = 2;
|
|
FORMAT_RGBA = 3;
|
|
}
|
|
|
|
/// Room Events
|
|
|
|
message RoomEvent {
|
|
string room_sid = 1;
|
|
oneof message {
|
|
ParticipantConnected participant_connected = 2;
|
|
ParticipantDisconnected participant_disconnected = 3;
|
|
TrackPublished track_published = 4;
|
|
TrackUnpublished track_unpublished = 5;
|
|
TrackSubscribed track_subscribed = 6;
|
|
TrackUnsubscribed track_unsubscribed = 7;
|
|
TrackMuted track_muted = 8;
|
|
TrackUnmuted track_unmuted = 9;
|
|
ActiveSpeakersChanged speakers_changed = 10;
|
|
ConnectionQualityChanged connection_quality_changed = 11;
|
|
DataReceived data_received = 12;
|
|
ConnectionStateChanged connection_state_changed = 13;
|
|
Connected connected = 14;
|
|
Disconnected disconnected = 15;
|
|
Reconnecting reconnecting = 16;
|
|
Reconnected reconnected = 17;
|
|
}
|
|
}
|
|
|
|
message ParticipantConnected { ParticipantInfo info = 1; }
|
|
|
|
message ParticipantDisconnected { ParticipantInfo info = 1; }
|
|
|
|
message TrackPublished {
|
|
string participant_sid = 1;
|
|
TrackPublicationInfo publication = 2;
|
|
}
|
|
|
|
message TrackUnpublished {
|
|
string participant_sid = 1;
|
|
string publication_sid = 2;
|
|
}
|
|
|
|
// Publication isn't needed for subscription events on the FFI
|
|
// The FFI will retrieve the publication using the Track sid
|
|
message TrackSubscribed {
|
|
string participant_sid = 1;
|
|
TrackInfo track = 2;
|
|
VideoSinkInfo sink = 3;
|
|
}
|
|
|
|
message TrackUnsubscribed {
|
|
// The FFI language can dispose/remove the VideoSink here
|
|
string participant_sid = 1;
|
|
string track_sid = 2;
|
|
}
|
|
|
|
message TrackMuted {
|
|
string participant_sid = 1;
|
|
string track_sid = 2;
|
|
}
|
|
|
|
message TrackUnmuted {
|
|
string participant_sid = 1;
|
|
string track_sid = 2;
|
|
}
|
|
|
|
message ActiveSpeakersChanged { repeated string participant_sids = 1; }
|
|
|
|
message ConnectionQualityChanged {
|
|
string participant_sid = 1;
|
|
ConnectionQuality quality = 2;
|
|
}
|
|
|
|
message DataReceived {
|
|
FFIHandleId handle = 1;
|
|
optional string participant_sid = 2;
|
|
uint64 data_ptr = 3;
|
|
uint64 data_size = 4;
|
|
DataPacketKind kind = 5;
|
|
}
|
|
|
|
message ConnectionStateChanged { ConnectionState state = 1; }
|
|
|
|
message Connected {}
|
|
message Disconnected {}
|
|
message Reconnecting {}
|
|
message Reconnected {}
|
|
|
|
/// Track Events
|
|
|
|
message TrackEvent {
|
|
string track_sid = 1;
|
|
oneof message { FrameReceived frame_received = 2; }
|
|
}
|
|
|
|
message FrameReceived {
|
|
VideoFrameInfo frame = 1;
|
|
VideoFrameBufferInfo buffer = 2;
|
|
}
|
|
|
|
message VideoFrameInfo {
|
|
int64 timestamp = 1;
|
|
VideoRotation rotation = 2;
|
|
}
|
|
|
|
message VideoFrameBufferInfo {
|
|
FFIHandleId handle = 1;
|
|
VideoFrameBufferType buffer_type = 2;
|
|
int32 width = 3;
|
|
int32 height = 4;
|
|
oneof buffer {
|
|
PlanarYuvBufferInfo yuv = 5;
|
|
BiplanarYuvBufferInfo bi_yuv = 6;
|
|
NativeBufferInfo native = 7;
|
|
}
|
|
}
|
|
|
|
message PlanarYuvBufferInfo {
|
|
int32 chroma_width = 1;
|
|
int32 chroma_height = 2;
|
|
int32 stride_y = 3;
|
|
int32 stride_u = 4;
|
|
int32 stride_v = 5;
|
|
int32 stride_a = 6;
|
|
|
|
// *const u8 or *const u16
|
|
uint64 data_y_ptr = 7;
|
|
uint64 data_u_ptr = 8;
|
|
uint64 data_v_ptr = 9;
|
|
uint64 data_a_ptr = 10; // nullptr = no alpha
|
|
}
|
|
|
|
message BiplanarYuvBufferInfo {
|
|
int32 chroma_width = 1;
|
|
int32 chroma_height = 2;
|
|
int32 stride_y = 3;
|
|
int32 stride_uv = 4;
|
|
|
|
uint64 data_y_ptr = 5;
|
|
uint64 data_uv_ptr = 6;
|
|
}
|
|
|
|
message NativeBufferInfo {
|
|
// TODO(theomonnom): Expose graphic context?
|
|
}
|
|
|
|
enum VideoFrameBufferType {
|
|
NATIVE = 0;
|
|
I420 = 1;
|
|
I420A = 2;
|
|
I422 = 3;
|
|
I444 = 4;
|
|
I010 = 5;
|
|
NV12 = 6;
|
|
WEBGL = 7;
|
|
}
|
|
|
|
/// Participant Events
|
|
|
|
message ParticipantEvent {
|
|
string participant_sid = 1;
|
|
oneof message { IsSpeakingChanged speaking_changed = 2; }
|
|
}
|
|
|
|
message IsSpeakingChanged { bool speaking = 1; }
|