diff options
Diffstat (limited to 'src/audio')
-rw-r--r-- | src/audio/manager.cpp | 13 | ||||
-rw-r--r-- | src/audio/manager.hpp | 3 |
2 files changed, 16 insertions, 0 deletions
diff --git a/src/audio/manager.cpp b/src/audio/manager.cpp index 9aacd29..3a24079 100644 --- a/src/audio/manager.cpp +++ b/src/audio/manager.cpp @@ -50,6 +50,15 @@ void capture_data_callback(ma_device *pDevice, void *pOutput, const void *pInput if (mgr == nullptr) return; mgr->OnCapturedPCM(static_cast<const int16_t *>(pInput), frameCount); + + /* + * You can simply increment it by 480 in UDPSocket::SendEncrypted but this is wrong + * The timestamp is supposed to be strictly linear eg. if there's discontinuous + * transmission for 1 second then the timestamp should be 48000 greater than the + * last packet. So it's incremented here because this is fired 100x per second + * and is always called in sync with UDPSocket::SendEncrypted + */ + mgr->m_rtp_timestamp += 480; } AudioManager::AudioManager() { @@ -484,6 +493,10 @@ AudioDevices &AudioManager::GetDevices() { return m_devices; } +uint32_t AudioManager::GetRTPTimestamp() const noexcept { + return m_rtp_timestamp; +} + AudioManager::type_signal_opus_packet AudioManager::signal_opus_packet() { return m_signal_opus_packet; } diff --git a/src/audio/manager.hpp b/src/audio/manager.hpp index 28d6d74..0083a1f 100644 --- a/src/audio/manager.hpp +++ b/src/audio/manager.hpp @@ -65,6 +65,8 @@ public: [[nodiscard]] AudioDevices &GetDevices(); + [[nodiscard]] uint32_t GetRTPTimestamp() const noexcept; + private: void OnCapturedPCM(const int16_t *pcm, ma_uint32 frames); @@ -116,6 +118,7 @@ private: AudioDevices m_devices; DenoiseState *m_rnnoise; + std::atomic<uint32_t> m_rtp_timestamp = 0; public: using type_signal_opus_packet = sigc::signal<void(int payload_size)>; |