display user list, client side mute

This commit is contained in:
ouwou
2022-09-29 21:46:15 -04:00
parent a96d96b3aa
commit dc127d15fb
11 changed files with 140 additions and 8 deletions

View File

@@ -1,5 +1,6 @@
#ifdef WITH_VOICE
// clang-format off
// clang-format off
#ifdef _WIN32
#include <winsock2.h>
#endif
@@ -138,6 +139,10 @@ void AudioManager::SetOpusBuffer(uint8_t *ptr) {
void AudioManager::FeedMeOpus(uint32_t ssrc, const std::vector<uint8_t> &data) {
if (!m_should_playback) return;
{
std::lock_guard<std::mutex> _(m_muted_ssrc_mutex);
if (m_muted_ssrcs.find(ssrc) != m_muted_ssrcs.end()) return;
}
size_t payload_size = 0;
const auto *opus_encoded = StripRTPExtensionHeader(data.data(), static_cast<int>(data.size()), payload_size);
@@ -162,6 +167,15 @@ void AudioManager::SetPlayback(bool playback) {
m_should_playback = playback;
}
void AudioManager::SetMuteSSRC(uint32_t ssrc, bool mute) {
std::lock_guard<std::mutex> _(m_muted_ssrc_mutex);
if (mute) {
m_muted_ssrcs.insert(ssrc);
} else {
m_muted_ssrcs.erase(ssrc);
}
}
void AudioManager::OnCapturedPCM(const int16_t *pcm, ma_uint32 frames) {
if (m_opus_buffer == nullptr || !m_should_capture) return;

View File

@@ -8,6 +8,7 @@
#include <mutex>
#include <thread>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <miniaudio.h>
#include <opus.h>
@@ -29,6 +30,8 @@ public:
void SetCapture(bool capture);
void SetPlayback(bool playback);
void SetMuteSSRC(uint32_t ssrc, bool mute);
[[nodiscard]] bool OK() const;
private:
@@ -58,6 +61,10 @@ private:
std::atomic<bool> m_should_capture = true;
std::atomic<bool> m_should_playback = true;
std::unordered_set<uint32_t> m_muted_ssrcs;
mutable std::mutex m_muted_ssrc_mutex;
public:
using type_signal_opus_packet = sigc::signal<void(int payload_size)>;
type_signal_opus_packet signal_opus_packet();