Exemple #1
0
        public async Task TestReplayStreamContentMatches()
        {
            using (var fs = File.OpenRead(Path.Combine("TestData", "recording.zip")))
            {
                using (var zipInputStream = new ZipInputStream(fs))
                {
                    while (zipInputStream.GetNextEntry() is ZipEntry zipEntry)
                    {
                        var temp = new byte[4096];
                        var ms   = new MemoryStream();

                        StreamUtils.Copy(zipInputStream, ms, temp);

                        ms.Position = 0;

                        using (var bson = new BsonDataReader(ms))
                        {
                            var e = new JsonSerializer().Deserialize <SerializableAudioMediaBuffer>(bson);
                            var d = new DeserializeAudioMediaBuffer(e);
                            var p = new DeserializeParticipant().GetParticipant(e);

                            Assert.AreEqual(e.IsSilence, d.IsSilence);
                            Assert.AreEqual(e.Length, d.Length);
                            Assert.AreEqual(e.Timestamp, d.Timestamp);
                            Assert.AreEqual(e.ActiveSpeakers, d.ActiveSpeakers);
                            Assert.AreEqual(e.SerializableUnmixedAudioBuffers?.Length, d.UnmixedAudioBuffers?.Length);

                            Assert.That((d.Data != IntPtr.Zero && e.Buffer != null) || (d.Data == IntPtr.Zero && e.Buffer == null));

                            if (d.Data != IntPtr.Zero && e.Buffer != null)
                            {
                                var buffer = new byte[d.Length];
                                Marshal.Copy(d.Data, buffer, 0, (int)d.Length);

                                Assert.AreEqual(e.Buffer, buffer);
                            }

                            for (int i = 0; i < e.SerializableUnmixedAudioBuffers?.Length; i++)
                            {
                                Assert.AreEqual(e.SerializableUnmixedAudioBuffers.Length, d.UnmixedAudioBuffers.Length);
                                Assert.AreEqual(e.SerializableUnmixedAudioBuffers.Length, p.Count);

                                var source      = e.SerializableUnmixedAudioBuffers[i];
                                var actual      = d.UnmixedAudioBuffers[i];
                                var participant = p[i].Resource.Info.Identity.User;

                                Assert.AreEqual(source.ActiveSpeakerId, actual.ActiveSpeakerId);
                                Assert.AreEqual(source.Length, actual.Length);
                                Assert.AreEqual(source.OriginalSenderTimestamp, actual.OriginalSenderTimestamp);

                                var buffer = new byte[actual.Length];
                                Marshal.Copy(actual.Data, buffer, 0, (int)actual.Length);

                                Assert.AreEqual(source.Buffer, buffer);

                                Assert.AreEqual(source.DisplayName, participant.DisplayName);
                                Assert.AreEqual(source.AdditionalData, participant.AdditionalData);
                                Assert.AreEqual(source.AdId, participant.Id);
                                Assert.That(p[i].Resource.MediaStreams.Any(x => x.SourceId == source.ActiveSpeakerId.ToString()));
                                Assert.IsFalse(p[i].Resource.IsInLobby);
                            }

                            await _mediaStream.AppendAudioBuffer(d, p);
                        }
                    }
                }
            }

            await _mediaStream.End();
        }