Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -66,14 +66,14 @@ public string GetActiveVideoStreams()
if (track.Kind == TrackKind.KindVideo)
{
GetActiveVideoStreamsResponse.WriteTo(writer,
remoteParticipantIdentity, track);
remoteParticipantIdentity, participant, track);

if (asCurrent == null)
{
asCurrent = (remoteParticipantIdentity, track);

GetActiveVideoStreamsResponse.WriteAsCurrentTo(writer,
remoteParticipantIdentity, track);
remoteParticipantIdentity, participant, track);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
using DCL.Diagnostics;
using DCL.Multiplayer.Connections.Rooms;
using DCL.SDKComponents.MediaStream;
using LiveKit.Proto;
using LiveKit.Rooms.Participants;
using LiveKit.Rooms.TrackPublications;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;

namespace SceneRuntime.Apis.Modules.CommsApi
Expand All @@ -20,7 +23,31 @@ private static VideoTrackSourceType From(TrackSource trackSource) =>
_ => throw new ArgumentOutOfRangeException()
};

private static void WriteTo(JsonWriter writer, string identity, string trackSid, TrackPublication publication)
private static string ResolveDisplayName(Participant participant)
{
string metadata = participant.Metadata;

if (!string.IsNullOrEmpty(metadata))
{
try
{
var json = JObject.Parse(metadata);
string displayName = json.Value<string>("displayName");

if (!string.IsNullOrEmpty(displayName))
return displayName;
}
catch (JsonException ex)
{
ReportHub.LogWarning(ReportCategory.LIVEKIT,
$"Failed to parse display name from participant metadata for '{participant.Identity}': {ex.Message}");
}
}

return !string.IsNullOrEmpty(participant.Name) ? participant.Name : participant.Identity;
}

private static void WriteTo(JsonWriter writer, string identity, string trackSid, Participant participant, TrackPublication publication)
{
var sourceType = From(publication.Source);

Expand All @@ -31,19 +58,29 @@ private static void WriteTo(JsonWriter writer, string identity, string trackSid,
writer.WriteValue(trackSid);
writer.WritePropertyName("sourceType");
writer.WriteValue(sourceType);
writer.WritePropertyName("name");
writer.WriteValue(ResolveDisplayName(participant));
writer.WritePropertyName("speaking");
writer.WriteValue(participant.Speaking);
writer.WritePropertyName("trackName");
writer.WriteValue(publication.Name);
writer.WritePropertyName("width");
writer.WriteValue(publication.Width);
writer.WritePropertyName("height");
writer.WriteValue(publication.Height);
writer.WriteEndObject();
}

public static void WriteTo(JsonWriter writer, string identity, TrackPublication publication)
public static void WriteTo(JsonWriter writer, string identity, Participant participant, TrackPublication publication)
{
// like in unity-renderer version trackSid: `livekit-video://${sid}/${videoSid}`,
// https://github.com/decentraland/unity-renderer/blob/ae68fec703f3c0ebd2251ce7cff2ad465f6f7f7d/browser-interface/packages/shared/apis/host/CommsAPI.ts#L19
string address = identity.ToLivekitAddress(publication.Sid);
WriteTo(writer, identity, address, publication);
WriteTo(writer, identity, address, participant, publication);
}

public static void WriteAsCurrentTo(JsonWriter writer, string identity, TrackPublication publication) =>
WriteTo(writer, identity, LiveKitMediaExtensions.LIVEKIT_CURRENT_STREAM, publication);
public static void WriteAsCurrentTo(JsonWriter writer, string identity, Participant participant, TrackPublication publication) =>
WriteTo(writer, identity, LiveKitMediaExtensions.LIVEKIT_CURRENT_STREAM, participant, publication);

public enum VideoTrackSourceType
{
Expand Down
Loading
Loading