407 lines
17 KiB
Java
407 lines
17 KiB
Java
package c.a.q;
|
|
|
|
import c.a.q.e;
|
|
import c.a.q.n0.a;
|
|
import c.a.q.o0.d;
|
|
import c.a.q.o0.e;
|
|
import co.discord.media_engine.MediaType;
|
|
import co.discord.media_engine.StreamParameters;
|
|
import com.discord.rtcconnection.EncodeQuality;
|
|
import com.discord.rtcconnection.MediaSinkWantsManager;
|
|
import com.discord.rtcconnection.RtcConnection;
|
|
import com.discord.rtcconnection.VideoMetadata;
|
|
import com.discord.rtcconnection.mediaengine.MediaEngine;
|
|
import com.discord.rtcconnection.mediaengine.MediaEngineConnection;
|
|
import com.discord.rtcconnection.socket.io.Payloads;
|
|
import com.discord.utilities.logging.Logger;
|
|
import d0.t.n;
|
|
import d0.t.o;
|
|
import d0.t.r;
|
|
import d0.t.u;
|
|
import d0.z.d.m;
|
|
import java.util.ArrayList;
|
|
import java.util.Iterator;
|
|
import java.util.LinkedHashMap;
|
|
import java.util.List;
|
|
import java.util.ListIterator;
|
|
import java.util.Map;
|
|
import java.util.NoSuchElementException;
|
|
import java.util.Objects;
|
|
import kotlin.NoWhenBranchMatchedException;
|
|
import org.webrtc.MediaStreamTrack;
|
|
/* compiled from: RtcConnection.kt */
|
|
public final class h0 implements a.d {
|
|
public final /* synthetic */ RtcConnection a;
|
|
|
|
public h0(RtcConnection rtcConnection) {
|
|
this.a = rtcConnection;
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void a(String str, String str2) {
|
|
m.checkNotNullParameter(str, "audioCodec");
|
|
m.checkNotNullParameter(str2, "videoCodec");
|
|
MediaEngineConnection mediaEngineConnection = this.a.w;
|
|
if (mediaEngineConnection != null) {
|
|
mediaEngineConnection.r(str, str2);
|
|
}
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void b(boolean z2, Integer num, String str) {
|
|
RtcConnection rtcConnection = this.a;
|
|
Objects.requireNonNull(rtcConnection);
|
|
rtcConnection.r("Disconnected from RTC server. wasFatal: " + z2 + " -- code: " + num + " -- reason: " + str);
|
|
MediaEngineConnection mediaEngineConnection = rtcConnection.w;
|
|
if (mediaEngineConnection != null) {
|
|
mediaEngineConnection.destroy();
|
|
}
|
|
MediaEngineConnection mediaEngineConnection2 = rtcConnection.w;
|
|
if (mediaEngineConnection2 != null) {
|
|
mediaEngineConnection2.o(rtcConnection.M);
|
|
}
|
|
Long l = rtcConnection.F;
|
|
long currentTimeMillis = l != null ? rtcConnection.V.currentTimeMillis() - l.longValue() : 0;
|
|
boolean z3 = true;
|
|
boolean z4 = currentTimeMillis > 30000;
|
|
if ((num != null && num.intValue() == 1000) || z4) {
|
|
z3 = false;
|
|
}
|
|
if (!(rtcConnection.r.a instanceof RtcConnection.State.d)) {
|
|
rtcConnection.n(z3, str);
|
|
d dVar = rtcConnection.n;
|
|
if (dVar != null) {
|
|
dVar.a();
|
|
}
|
|
rtcConnection.n = null;
|
|
rtcConnection.o = false;
|
|
}
|
|
rtcConnection.f2133z = 0;
|
|
rtcConnection.C = null;
|
|
MediaSinkWantsManager mediaSinkWantsManager = rtcConnection.G;
|
|
if (mediaSinkWantsManager != null) {
|
|
mediaSinkWantsManager.b(new g(mediaSinkWantsManager));
|
|
}
|
|
rtcConnection.u(new RtcConnection.State.d(z3));
|
|
if (z3) {
|
|
long fail = rtcConnection.p.fail(new d0(rtcConnection));
|
|
Logger.w$default(rtcConnection.U, rtcConnection.k, "Disconnect was not clean! Reason: " + str + ", code: " + num + ". Reconnecting in " + (fail / ((long) 1000)) + " seconds.", null, 4, null);
|
|
}
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void c(String str, List<Integer> list) {
|
|
m.checkNotNullParameter(str, "mode");
|
|
m.checkNotNullParameter(list, "secretKey");
|
|
MediaEngineConnection mediaEngineConnection = this.a.w;
|
|
if (mediaEngineConnection != null) {
|
|
mediaEngineConnection.t(str, u.toIntArray(list));
|
|
}
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void d(String str) {
|
|
m.checkNotNullParameter(str, "mediaSessionId");
|
|
RtcConnection rtcConnection = this.a;
|
|
rtcConnection.J = str;
|
|
for (RtcConnection.c cVar : rtcConnection.m) {
|
|
cVar.onMediaSessionIdReceived();
|
|
rtcConnection.p(RtcConnection.AnalyticsEvent.MEDIA_SESSION_JOINED, new LinkedHashMap());
|
|
}
|
|
}
|
|
|
|
/* JADX DEBUG: Failed to insert an additional move for type inference into block B:50:0x00a5 */
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
/* JADX DEBUG: Type inference failed for r2v2. Raw type applied. Possible types: java.util.Iterator<T>, java.util.Iterator */
|
|
/* JADX DEBUG: Type inference failed for r2v6. Raw type applied. Possible types: java.util.Iterator<T>, java.util.Iterator */
|
|
/* JADX WARNING: Unknown variable types count: 1 */
|
|
@Override // c.a.q.n0.a.d
|
|
public void e(long j, int i, int i2, List<Payloads.Stream> list) {
|
|
VideoMetadata videoMetadata;
|
|
Object obj;
|
|
boolean z2;
|
|
?? r3;
|
|
RtcConnection rtcConnection = this.a;
|
|
e eVar = rtcConnection.A;
|
|
long j2 = (long) i2;
|
|
synchronized (eVar) {
|
|
if (j2 != 0) {
|
|
eVar.n.put(Long.valueOf(j2), Long.valueOf(eVar.r.currentTimeMillis()));
|
|
Logger.i$default(eVar.q, "VideoQuality: handleVideoStreamUpdate(userId: " + j + ", videoSsrc: " + j2 + ')', null, 2, null);
|
|
}
|
|
}
|
|
if (j != rtcConnection.S) {
|
|
boolean z3 = false;
|
|
if (rtcConnection.G != null) {
|
|
if (list != null) {
|
|
r3 = new ArrayList(o.collectionSizeOrDefault(list, 10));
|
|
for (Payloads.Stream stream : list) {
|
|
r3.add(Payloads.Stream.copy$default(stream, MediaStreamTrack.VIDEO_TRACK_KIND, null, null, null, null, null, null, Boolean.valueOf(i2 > 0), null, 382, null));
|
|
}
|
|
} else {
|
|
r3 = n.emptyList();
|
|
}
|
|
boolean isEmpty = r3.isEmpty();
|
|
List list2 = r3;
|
|
if (isEmpty) {
|
|
Integer valueOf = Integer.valueOf(i2);
|
|
Integer valueOf2 = Integer.valueOf(i2 + 1);
|
|
if (i2 > 0) {
|
|
z3 = true;
|
|
}
|
|
list2 = d0.t.m.listOf(new Payloads.Stream(MediaStreamTrack.VIDEO_TRACK_KIND, "100", null, 100, valueOf, valueOf2, null, Boolean.valueOf(z3), null));
|
|
}
|
|
rtcConnection.G.c(j, Long.valueOf((long) i));
|
|
MediaSinkWantsManager mediaSinkWantsManager = rtcConnection.G;
|
|
Objects.requireNonNull(mediaSinkWantsManager);
|
|
m.checkNotNullParameter(list2, "ssrcs");
|
|
mediaSinkWantsManager.b(new l(mediaSinkWantsManager, list2, j));
|
|
return;
|
|
}
|
|
if (list != null) {
|
|
Iterator it = list.iterator();
|
|
while (true) {
|
|
if (!it.hasNext()) {
|
|
obj = null;
|
|
break;
|
|
}
|
|
obj = it.next();
|
|
Payloads.Stream stream2 = (Payloads.Stream) obj;
|
|
Integer ssrc = stream2.getSsrc();
|
|
if (ssrc == null || ssrc.intValue() != i2 || stream2.getMaxResolution() == null) {
|
|
z2 = false;
|
|
continue;
|
|
} else {
|
|
z2 = true;
|
|
continue;
|
|
}
|
|
if (z2) {
|
|
break;
|
|
}
|
|
}
|
|
Payloads.Stream stream3 = (Payloads.Stream) obj;
|
|
if (stream3 != null) {
|
|
Payloads.Stream.MaxResolution maxResolution = stream3.getMaxResolution();
|
|
m.checkNotNull(maxResolution);
|
|
videoMetadata = new VideoMetadata(j, maxResolution.getWidth(), stream3.getMaxResolution().getHeight(), stream3.getMaxFrameRate(), stream3.getMaxResolution().getType());
|
|
rtcConnection.d(j, (long) i, j2, videoMetadata);
|
|
}
|
|
}
|
|
videoMetadata = null;
|
|
rtcConnection.d(j, (long) i, j2, videoMetadata);
|
|
}
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void f(Map<String, Integer> map) {
|
|
boolean z2;
|
|
Integer num;
|
|
m.checkNotNullParameter(map, "wants");
|
|
RtcConnection rtcConnection = this.a;
|
|
if (rtcConnection.G != null) {
|
|
long j = rtcConnection.K;
|
|
int intValue = (j == 0 || (num = map.get(String.valueOf(j))) == null) ? 0 : num.intValue();
|
|
Integer num2 = map.get("any");
|
|
int intValue2 = num2 != null ? num2.intValue() : 0;
|
|
if (intValue <= 0) {
|
|
intValue = intValue2 > 0 ? intValue2 : 100;
|
|
}
|
|
e.c cVar = null;
|
|
rtcConnection.U.i(rtcConnection.k, "remote MediaSinkWants: " + map + ", decided on encode quality " + intValue, null);
|
|
EncodeQuality[] values = EncodeQuality.values();
|
|
for (int i = 10; i >= 0; i--) {
|
|
EncodeQuality encodeQuality = values[i];
|
|
if (encodeQuality.getValue() <= intValue) {
|
|
e eVar = rtcConnection.G.j;
|
|
j0 j0Var = eVar.e;
|
|
m.checkNotNullParameter(encodeQuality, "wantValue");
|
|
List<e.c> list = eVar.d;
|
|
ListIterator<e.c> listIterator = list.listIterator(list.size());
|
|
while (true) {
|
|
if (!listIterator.hasPrevious()) {
|
|
break;
|
|
}
|
|
e.c previous = listIterator.previous();
|
|
if (encodeQuality.compareTo(previous.f209c) >= 0) {
|
|
z2 = true;
|
|
continue;
|
|
} else {
|
|
z2 = false;
|
|
continue;
|
|
}
|
|
if (z2) {
|
|
cVar = previous;
|
|
break;
|
|
}
|
|
}
|
|
e.c cVar2 = cVar;
|
|
if (cVar2 == null) {
|
|
cVar2 = (e.c) u.first((List<? extends Object>) eVar.d);
|
|
}
|
|
n nVar = cVar2.a;
|
|
int max = Math.max((int) (((double) j0Var.f210c.a) * nVar.f220c), j0Var.d);
|
|
int max2 = Math.max((int) (((double) j0Var.f210c.b) * nVar.f220c), j0Var.d);
|
|
MediaEngineConnection mediaEngineConnection = rtcConnection.w;
|
|
if (mediaEngineConnection != null) {
|
|
mediaEngineConnection.m(new MediaEngineConnection.b(max, max2, nVar.a, nVar.b, nVar.d, nVar.e));
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
throw new NoSuchElementException("Array contains no element matching the predicate.");
|
|
}
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void g(long j) {
|
|
RtcConnection rtcConnection = this.a;
|
|
rtcConnection.u.add(Long.valueOf(j));
|
|
if (rtcConnection.u.size() > 5) {
|
|
r.removeFirst(rtcConnection.u);
|
|
}
|
|
if (j > ((long) 500)) {
|
|
rtcConnection.f2133z++;
|
|
}
|
|
double d = (double) j;
|
|
Objects.requireNonNull(RtcConnection.Quality.Companion);
|
|
RtcConnection.Quality quality = Double.isNaN(d) ? RtcConnection.Quality.UNKNOWN : d < ((double) 250) ? RtcConnection.Quality.FINE : d < ((double) 500) ? RtcConnection.Quality.AVERAGE : RtcConnection.Quality.BAD;
|
|
for (RtcConnection.c cVar : rtcConnection.m) {
|
|
cVar.onQualityUpdate(quality);
|
|
}
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void h() {
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void i() {
|
|
RtcConnection rtcConnection = this.a;
|
|
rtcConnection.p.cancel();
|
|
rtcConnection.U.recordBreadcrumb("Connected to RTC server.", rtcConnection.k);
|
|
a aVar = rtcConnection.v;
|
|
if (aVar == null) {
|
|
RtcConnection.o(rtcConnection, "onSocketConnect() socket was null.", null, null, 6);
|
|
return;
|
|
}
|
|
List listOf = d0.t.m.listOf(new Payloads.Stream(MediaStreamTrack.VIDEO_TRACK_KIND, "100", null, 100, null, null, null, null, null));
|
|
String str = rtcConnection.R;
|
|
long j = rtcConnection.S;
|
|
String str2 = rtcConnection.P;
|
|
boolean z2 = rtcConnection.Q;
|
|
m.checkNotNullParameter(str, "serverId");
|
|
m.checkNotNullParameter(str2, "sessionId");
|
|
m.checkNotNullParameter(listOf, "streams");
|
|
aVar.b();
|
|
aVar.f221s = str;
|
|
aVar.t = str2;
|
|
aVar.A = a.c.IDENTIFYING;
|
|
aVar.o(0, new Payloads.Identify(str, j, str2, aVar.D, z2, listOf));
|
|
rtcConnection.u(RtcConnection.State.a.a);
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void j(long j) {
|
|
Map<String, Object> b;
|
|
RtcConnection rtcConnection = this.a;
|
|
if ((rtcConnection.W instanceof RtcConnection.d.a) && (b = rtcConnection.A.b(String.valueOf(j))) != null) {
|
|
rtcConnection.l(j, b);
|
|
}
|
|
MediaSinkWantsManager mediaSinkWantsManager = rtcConnection.G;
|
|
if (mediaSinkWantsManager != null) {
|
|
mediaSinkWantsManager.c(j, null);
|
|
}
|
|
MediaSinkWantsManager mediaSinkWantsManager2 = rtcConnection.G;
|
|
if (mediaSinkWantsManager2 != null) {
|
|
List emptyList = n.emptyList();
|
|
m.checkNotNullParameter(emptyList, "ssrcs");
|
|
mediaSinkWantsManager2.b(new l(mediaSinkWantsManager2, emptyList, j));
|
|
}
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
/* JADX WARNING: Unknown variable types count: 1 */
|
|
@Override // c.a.q.n0.a.d
|
|
public void k(int i, int i2, String str, List<Payloads.Stream> list) {
|
|
MediaEngineConnection.Type type;
|
|
m.checkNotNullParameter(str, "ip");
|
|
m.checkNotNullParameter(list, "streams");
|
|
RtcConnection rtcConnection = this.a;
|
|
Objects.requireNonNull(rtcConnection);
|
|
rtcConnection.r("Discovered dedicated UDP server on port " + i);
|
|
rtcConnection.u(RtcConnection.State.g.a);
|
|
ArrayList arrayList = new ArrayList(o.collectionSizeOrDefault(list, 10));
|
|
for (Iterator it = list.iterator(); it.hasNext(); it = it) {
|
|
Payloads.Stream stream = (Payloads.Stream) it.next();
|
|
MediaType mediaType = MediaStreamTrack.VIDEO_TRACK_KIND.equals(stream.getType()) ? MediaType.Video : MediaType.Audio;
|
|
String rid = stream.getRid();
|
|
if (rid == null) {
|
|
rid = "";
|
|
}
|
|
Integer ssrc = stream.getSsrc();
|
|
int intValue = ssrc != null ? ssrc.intValue() : 0;
|
|
Integer rtxSsrc = stream.getRtxSsrc();
|
|
int intValue2 = rtxSsrc != null ? rtxSsrc.intValue() : 0;
|
|
Boolean active = stream.getActive();
|
|
boolean booleanValue = active != null ? active.booleanValue() : false;
|
|
Integer maxBitrate = stream.getMaxBitrate();
|
|
int intValue3 = maxBitrate != null ? maxBitrate.intValue() : 0;
|
|
Integer quality = stream.getQuality();
|
|
arrayList.add(new StreamParameters(mediaType, rid, intValue, intValue2, booleanValue, intValue3, quality != null ? quality.intValue() : 100, 0));
|
|
}
|
|
boolean isEmpty = arrayList.isEmpty();
|
|
ArrayList arrayList2 = arrayList;
|
|
if (isEmpty) {
|
|
arrayList2 = d0.t.m.listOf(new StreamParameters(MediaType.Video, "100", i2 + 1, i2 + 2, false, 0, 100, 0));
|
|
}
|
|
MediaEngine mediaEngine = rtcConnection.T;
|
|
long j = rtcConnection.S;
|
|
MediaEngine.a aVar = new MediaEngine.a(i2, str, i, arrayList2);
|
|
RtcConnection.d dVar = rtcConnection.W;
|
|
if (m.areEqual(dVar, RtcConnection.d.a.a)) {
|
|
type = MediaEngineConnection.Type.DEFAULT;
|
|
} else if (dVar instanceof RtcConnection.d.b) {
|
|
type = MediaEngineConnection.Type.STREAM;
|
|
} else {
|
|
throw new NoWhenBranchMatchedException();
|
|
}
|
|
MediaEngineConnection g = mediaEngine.g(j, aVar, type, new e0(rtcConnection));
|
|
if (g == null) {
|
|
RtcConnection.o(rtcConnection, "onSocketHello(): connect() return null.", null, null, 6);
|
|
return;
|
|
}
|
|
g.l(rtcConnection.M);
|
|
rtcConnection.w = g;
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void onConnecting() {
|
|
RtcConnection rtcConnection = this.a;
|
|
rtcConnection.p.cancel();
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append("Connecting to RTC server ");
|
|
a aVar = rtcConnection.v;
|
|
sb.append(aVar != null ? aVar.C : null);
|
|
rtcConnection.r(sb.toString());
|
|
rtcConnection.u(RtcConnection.State.c.a);
|
|
}
|
|
|
|
@Override // c.a.q.n0.a.d
|
|
public void onSpeaking(long j, int i, boolean z2) {
|
|
RtcConnection rtcConnection = this.a;
|
|
if (j != rtcConnection.S) {
|
|
MediaEngineConnection mediaEngineConnection = rtcConnection.w;
|
|
if (mediaEngineConnection != null) {
|
|
mediaEngineConnection.s(j, i, null, rtcConnection.g(j), rtcConnection.h(j));
|
|
}
|
|
MediaSinkWantsManager mediaSinkWantsManager = rtcConnection.G;
|
|
if (mediaSinkWantsManager != null) {
|
|
mediaSinkWantsManager.c(j, Long.valueOf((long) i));
|
|
}
|
|
for (RtcConnection.c cVar : rtcConnection.m) {
|
|
cVar.onUserCreated(rtcConnection, j);
|
|
}
|
|
}
|
|
}
|
|
}
|