diff --git a/README.md b/README.md index b1dc56c..74301b2 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,20 @@ Use the command below: protoc --doc_out=./doc --doc_opt=markdown,docs.md fishjam/**/*.proto ``` +## Lint and formatting + +The files can be formatted using `buf`. +Check out [installation page](https://buf.build/docs/installation/) for `buf`. + +``` +buf format -w +``` + +and linted +``` +buf lint +``` + ## Copyright and License Copyright 2023, [Software Mansion](https://swmansion.com/?utm_source=git&utm_medium=readme&utm_campaign=fishjam-protos) diff --git a/fishjam/media_events/peer/peer.proto b/fishjam/media_events/peer/peer.proto index 7a8f0d1..93c5085 100644 --- a/fishjam/media_events/peer/peer.proto +++ b/fishjam/media_events/peer/peer.proto @@ -6,6 +6,13 @@ import "fishjam/media_events/shared.proto"; // Defines any type of message sent from Peer to Membrane RTC Engine message MediaEvent { + // SCHEMAS + + message VariantBitrate { + media_events.Variant variant = 1; + int32 bitrate = 2; + } + // MEDIA EVENTS // Sent when a peer wants to join WebRTC Endpoint. @@ -36,14 +43,26 @@ message MediaEvent { message SdpOffer { string sdp_offer = 1; map track_id_to_metadata_json = 2; - map track_id_to_bitrates = 3; + map track_id_to_bitrates = 3; map mid_to_track_id = 4; } // Sent when Peer wants to update its track's bitrate - message TrackBitrate { + message TrackBitrates { string track_id = 1; - int32 bitrate = 2; + repeated VariantBitrate variant_bitrates = 2; + } + + // Sent when client disables one of the track variants + message DisableTrackVariant { + string track_id = 1; + media_events.Variant variant = 2; + } + + // Sent when client enables one of the track variants + message EnableTrackVariant { + string track_id = 1; + media_events.Variant variant = 2; } oneof content { @@ -54,6 +73,8 @@ message MediaEvent { RenegotiateTracks renegotiate_tracks = 5; media_events.Candidate candidate = 6; SdpOffer sdp_offer = 7; - TrackBitrate track_bitrate = 8; + TrackBitrates track_bitrates = 8; + EnableTrackVariant enable_track_variant = 9; + DisableTrackVariant disable_track_variant = 10; } } diff --git a/fishjam/media_events/server/server.proto b/fishjam/media_events/server/server.proto index a06e590..9deee49 100644 --- a/fishjam/media_events/server/server.proto +++ b/fishjam/media_events/server/server.proto @@ -7,11 +7,21 @@ import "fishjam/media_events/shared.proto"; // Defines any type of message sent from Membrane RTC Engine to Peer message MediaEvent { // SCHEMAS + message Track { + message SimulcastConfig { + bool enabled = 1; + repeated media_events.Variant enabled_variants = 2; + repeated media_events.Variant disabled_variants = 3; + } + + string metadata_json = 1; + SimulcastConfig simulcast_config = 2; + } message Endpoint { string endpoint_type = 2; string metadata_json = 3; - map track_id_to_metadata_json = 4; + map track_id_to_track = 4; } message IceServer { @@ -38,7 +48,7 @@ message MediaEvent { // Sent to informs that one of the peers has added one or more tracks. message TracksAdded { string endpoint_id = 1; - map track_id_to_metadata_json = 2; + map track_id_to_track = 2; } // Sent to informs that one of the peers has removed one or more tracks. @@ -56,7 +66,7 @@ message MediaEvent { // Sent to the peer after connecting to the WebRTC Endpoint. message Connected { string endpoint_id = 1; - map endpoints_id_to_endpoint = 2; + map endpoint_id_to_endpoint = 2; repeated IceServer ice_servers = 3; } @@ -100,6 +110,27 @@ message MediaEvent { Status status = 2; } + // Informs that track's variant has been changed + message TrackVariantSwitched { + string endpoint_id = 1; + string track_id = 2; + media_events.Variant variant = 3; + } + + // Sent when track's variant has been disabled + message TrackVariantDisabled { + string endpoint_id = 1; + string track_id = 2; + media_events.Variant variant = 3; + } + + // Sent when track's variant has been enabled + message TrackVariantEnabled { + string endpoint_id = 1; + string track_id = 2; + media_events.Variant variant = 3; + } + oneof content { EndpointUpdated endpoint_updated = 1; TrackUpdated track_updated = 2; @@ -113,5 +144,8 @@ message MediaEvent { media_events.Candidate candidate = 10; SdpAnswer sdp_answer = 11; VadNotification vad_notification = 12; + TrackVariantSwitched track_variant_switched = 13; + TrackVariantDisabled track_variant_disabled = 14; + TrackVariantEnabled track_variant_enabled = 15; } } diff --git a/fishjam/media_events/shared.proto b/fishjam/media_events/shared.proto index a56f12a..4b2ad4c 100644 --- a/fishjam/media_events/shared.proto +++ b/fishjam/media_events/shared.proto @@ -9,3 +9,10 @@ message Candidate { string sdp_mid = 3; string username_fragment = 4; } + +enum Variant { + VARIANT_UNSPECIFIED = 0; + VARIANT_LOW = 1; + VARIANT_MEDIUM = 2; + VARIANT_HIGH = 3; +} diff --git a/fishjam_protos/lib/fishjam/media_events/peer/peer.pb.ex b/fishjam_protos/lib/fishjam/media_events/peer/peer.pb.ex index 2c5328c..11e4b43 100644 --- a/fishjam_protos/lib/fishjam/media_events/peer/peer.pb.ex +++ b/fishjam_protos/lib/fishjam/media_events/peer/peer.pb.ex @@ -1,3 +1,12 @@ +defmodule Fishjam.MediaEvents.Peer.MediaEvent.VariantBitrate do + @moduledoc false + + use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :variant, 1, type: Fishjam.MediaEvents.Variant, enum: true + field :bitrate, 2, type: :int32 +end + defmodule Fishjam.MediaEvents.Peer.MediaEvent.Connect do @moduledoc false @@ -50,7 +59,7 @@ defmodule Fishjam.MediaEvents.Peer.MediaEvent.SdpOffer.TrackIdToBitratesEntry do use Protobuf, map: true, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" field :key, 1, type: :string - field :value, 2, type: Fishjam.MediaEvents.Peer.MediaEvent.TrackBitrate + field :value, 2, type: Fishjam.MediaEvents.Peer.MediaEvent.TrackBitrates end defmodule Fishjam.MediaEvents.Peer.MediaEvent.SdpOffer.MidToTrackIdEntry do @@ -88,13 +97,35 @@ defmodule Fishjam.MediaEvents.Peer.MediaEvent.SdpOffer do map: true end -defmodule Fishjam.MediaEvents.Peer.MediaEvent.TrackBitrate do +defmodule Fishjam.MediaEvents.Peer.MediaEvent.TrackBitrates do @moduledoc false use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" field :track_id, 1, type: :string, json_name: "trackId" - field :bitrate, 2, type: :int32 + + field :variant_bitrates, 2, + repeated: true, + type: Fishjam.MediaEvents.Peer.MediaEvent.VariantBitrate, + json_name: "variantBitrates" +end + +defmodule Fishjam.MediaEvents.Peer.MediaEvent.DisableTrackVariant do + @moduledoc false + + use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :track_id, 1, type: :string, json_name: "trackId" + field :variant, 2, type: Fishjam.MediaEvents.Variant, enum: true +end + +defmodule Fishjam.MediaEvents.Peer.MediaEvent.EnableTrackVariant do + @moduledoc false + + use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :track_id, 1, type: :string, json_name: "trackId" + field :variant, 2, type: Fishjam.MediaEvents.Variant, enum: true end defmodule Fishjam.MediaEvents.Peer.MediaEvent do @@ -129,8 +160,18 @@ defmodule Fishjam.MediaEvents.Peer.MediaEvent do json_name: "sdpOffer", oneof: 0 - field :track_bitrate, 8, - type: Fishjam.MediaEvents.Peer.MediaEvent.TrackBitrate, - json_name: "trackBitrate", + field :track_bitrates, 8, + type: Fishjam.MediaEvents.Peer.MediaEvent.TrackBitrates, + json_name: "trackBitrates", + oneof: 0 + + field :enable_track_variant, 9, + type: Fishjam.MediaEvents.Peer.MediaEvent.EnableTrackVariant, + json_name: "enableTrackVariant", + oneof: 0 + + field :disable_track_variant, 10, + type: Fishjam.MediaEvents.Peer.MediaEvent.DisableTrackVariant, + json_name: "disableTrackVariant", oneof: 0 end diff --git a/fishjam_protos/lib/fishjam/media_events/server/server.pb.ex b/fishjam_protos/lib/fishjam/media_events/server/server.pb.ex index 09ab256..d12d4b0 100644 --- a/fishjam_protos/lib/fishjam/media_events/server/server.pb.ex +++ b/fishjam_protos/lib/fishjam/media_events/server/server.pb.ex @@ -8,13 +8,45 @@ defmodule Fishjam.MediaEvents.Server.MediaEvent.VadNotification.Status do field :STATUS_SPEECH, 2 end -defmodule Fishjam.MediaEvents.Server.MediaEvent.Endpoint.TrackIdToMetadataJsonEntry do +defmodule Fishjam.MediaEvents.Server.MediaEvent.Track.SimulcastConfig do + @moduledoc false + + use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :enabled, 1, type: :bool + + field :enabled_variants, 2, + repeated: true, + type: Fishjam.MediaEvents.Variant, + json_name: "enabledVariants", + enum: true + + field :disabled_variants, 3, + repeated: true, + type: Fishjam.MediaEvents.Variant, + json_name: "disabledVariants", + enum: true +end + +defmodule Fishjam.MediaEvents.Server.MediaEvent.Track do + @moduledoc false + + use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :metadata_json, 1, type: :string, json_name: "metadataJson" + + field :simulcast_config, 2, + type: Fishjam.MediaEvents.Server.MediaEvent.Track.SimulcastConfig, + json_name: "simulcastConfig" +end + +defmodule Fishjam.MediaEvents.Server.MediaEvent.Endpoint.TrackIdToTrackEntry do @moduledoc false use Protobuf, map: true, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" field :key, 1, type: :string - field :value, 2, type: :string + field :value, 2, type: Fishjam.MediaEvents.Server.MediaEvent.Track end defmodule Fishjam.MediaEvents.Server.MediaEvent.Endpoint do @@ -25,10 +57,10 @@ defmodule Fishjam.MediaEvents.Server.MediaEvent.Endpoint do field :endpoint_type, 2, type: :string, json_name: "endpointType" field :metadata_json, 3, type: :string, json_name: "metadataJson" - field :track_id_to_metadata_json, 4, + field :track_id_to_track, 4, repeated: true, - type: Fishjam.MediaEvents.Server.MediaEvent.Endpoint.TrackIdToMetadataJsonEntry, - json_name: "trackIdToMetadataJson", + type: Fishjam.MediaEvents.Server.MediaEvent.Endpoint.TrackIdToTrackEntry, + json_name: "trackIdToTrack", map: true end @@ -61,13 +93,13 @@ defmodule Fishjam.MediaEvents.Server.MediaEvent.TrackUpdated do field :metadata_json, 3, type: :string, json_name: "metadataJson" end -defmodule Fishjam.MediaEvents.Server.MediaEvent.TracksAdded.TrackIdToMetadataJsonEntry do +defmodule Fishjam.MediaEvents.Server.MediaEvent.TracksAdded.TrackIdToTrackEntry do @moduledoc false use Protobuf, map: true, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" field :key, 1, type: :string - field :value, 2, type: :string + field :value, 2, type: Fishjam.MediaEvents.Server.MediaEvent.Track end defmodule Fishjam.MediaEvents.Server.MediaEvent.TracksAdded do @@ -77,10 +109,10 @@ defmodule Fishjam.MediaEvents.Server.MediaEvent.TracksAdded do field :endpoint_id, 1, type: :string, json_name: "endpointId" - field :track_id_to_metadata_json, 2, + field :track_id_to_track, 2, repeated: true, - type: Fishjam.MediaEvents.Server.MediaEvent.TracksAdded.TrackIdToMetadataJsonEntry, - json_name: "trackIdToMetadataJson", + type: Fishjam.MediaEvents.Server.MediaEvent.TracksAdded.TrackIdToTrackEntry, + json_name: "trackIdToTrack", map: true end @@ -102,7 +134,7 @@ defmodule Fishjam.MediaEvents.Server.MediaEvent.EndpointAdded do field :metadata_json, 2, type: :string, json_name: "metadataJson" end -defmodule Fishjam.MediaEvents.Server.MediaEvent.Connected.EndpointsIdToEndpointEntry do +defmodule Fishjam.MediaEvents.Server.MediaEvent.Connected.EndpointIdToEndpointEntry do @moduledoc false use Protobuf, map: true, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" @@ -118,10 +150,10 @@ defmodule Fishjam.MediaEvents.Server.MediaEvent.Connected do field :endpoint_id, 1, type: :string, json_name: "endpointId" - field :endpoints_id_to_endpoint, 2, + field :endpoint_id_to_endpoint, 2, repeated: true, - type: Fishjam.MediaEvents.Server.MediaEvent.Connected.EndpointsIdToEndpointEntry, - json_name: "endpointsIdToEndpoint", + type: Fishjam.MediaEvents.Server.MediaEvent.Connected.EndpointIdToEndpointEntry, + json_name: "endpointIdToEndpoint", map: true field :ice_servers, 3, @@ -197,6 +229,36 @@ defmodule Fishjam.MediaEvents.Server.MediaEvent.VadNotification do field :status, 2, type: Fishjam.MediaEvents.Server.MediaEvent.VadNotification.Status, enum: true end +defmodule Fishjam.MediaEvents.Server.MediaEvent.TrackVariantSwitched do + @moduledoc false + + use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :endpoint_id, 1, type: :string, json_name: "endpointId" + field :track_id, 2, type: :string, json_name: "trackId" + field :variant, 3, type: Fishjam.MediaEvents.Variant, enum: true +end + +defmodule Fishjam.MediaEvents.Server.MediaEvent.TrackVariantDisabled do + @moduledoc false + + use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :endpoint_id, 1, type: :string, json_name: "endpointId" + field :track_id, 2, type: :string, json_name: "trackId" + field :variant, 3, type: Fishjam.MediaEvents.Variant, enum: true +end + +defmodule Fishjam.MediaEvents.Server.MediaEvent.TrackVariantEnabled do + @moduledoc false + + use Protobuf, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :endpoint_id, 1, type: :string, json_name: "endpointId" + field :track_id, 2, type: :string, json_name: "trackId" + field :variant, 3, type: Fishjam.MediaEvents.Variant, enum: true +end + defmodule Fishjam.MediaEvents.Server.MediaEvent do @moduledoc false @@ -253,4 +315,19 @@ defmodule Fishjam.MediaEvents.Server.MediaEvent do type: Fishjam.MediaEvents.Server.MediaEvent.VadNotification, json_name: "vadNotification", oneof: 0 + + field :track_variant_switched, 13, + type: Fishjam.MediaEvents.Server.MediaEvent.TrackVariantSwitched, + json_name: "trackVariantSwitched", + oneof: 0 + + field :track_variant_disabled, 14, + type: Fishjam.MediaEvents.Server.MediaEvent.TrackVariantDisabled, + json_name: "trackVariantDisabled", + oneof: 0 + + field :track_variant_enabled, 15, + type: Fishjam.MediaEvents.Server.MediaEvent.TrackVariantEnabled, + json_name: "trackVariantEnabled", + oneof: 0 end diff --git a/fishjam_protos/lib/fishjam/media_events/shared.pb.ex b/fishjam_protos/lib/fishjam/media_events/shared.pb.ex index 9323a17..d91ee06 100644 --- a/fishjam_protos/lib/fishjam/media_events/shared.pb.ex +++ b/fishjam_protos/lib/fishjam/media_events/shared.pb.ex @@ -1,3 +1,14 @@ +defmodule Fishjam.MediaEvents.Variant do + @moduledoc false + + use Protobuf, enum: true, syntax: :proto3, protoc_gen_elixir_version: "0.13.0" + + field :VARIANT_UNSPECIFIED, 0 + field :VARIANT_LOW, 1 + field :VARIANT_MEDIUM, 2 + field :VARIANT_HIGH, 3 +end + defmodule Fishjam.MediaEvents.Candidate do @moduledoc false