Refactor Android Voip client to use rtc::ReceivedPackets

Instead of using raw pointers.

Bug: webrtc:11943
Change-Id: I39ce45868d95aca44f32cfed27c91986f9c3278a
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/331480
Commit-Queue: Per Kjellander <perkj@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41384}
This commit is contained in:
Per K 2023-12-14 12:12:28 +01:00 committed by WebRTC LUCI CQ
parent 6a5d925b48
commit d9e2cc2bbd
3 changed files with 23 additions and 29 deletions

View File

@ -71,7 +71,7 @@ if (is_android) {
"//api/task_queue:default_task_queue_factory",
"//api/voip:voip_api",
"//api/voip:voip_engine_factory",
"//rtc_base/third_party/sigslot:sigslot",
"//rtc_base/network:received_packet",
"//sdk/android:native_api_audio_device_module",
"//sdk/android:native_api_base",
"//sdk/android:native_api_jni",

View File

@ -313,8 +313,10 @@ void AndroidVoipClient::StartSession(JNIEnv* env) {
/*isSuccessful=*/false);
return;
}
rtp_socket_->SignalReadPacket.connect(
this, &AndroidVoipClient::OnSignalReadRTPPacket);
rtp_socket_->RegisterReceivedPacketCallback(
[&](rtc::AsyncPacketSocket* socket, const rtc::ReceivedPacket& packet) {
OnSignalReadRTPPacket(socket, packet);
});
rtcp_socket_.reset(rtc::AsyncUDPSocket::Create(voip_thread_->socketserver(),
rtcp_local_address_));
@ -324,8 +326,10 @@ void AndroidVoipClient::StartSession(JNIEnv* env) {
/*isSuccessful=*/false);
return;
}
rtcp_socket_->SignalReadPacket.connect(
this, &AndroidVoipClient::OnSignalReadRTCPPacket);
rtcp_socket_->RegisterReceivedPacketCallback(
[&](rtc::AsyncPacketSocket* socket, const rtc::ReceivedPacket& packet) {
OnSignalReadRTCPPacket(socket, packet);
});
Java_VoipClient_onStartSessionCompleted(env_, j_voip_client_,
/*isSuccessful=*/true);
}
@ -467,12 +471,11 @@ void AndroidVoipClient::ReadRTPPacket(const std::vector<uint8_t>& packet_copy) {
RTC_CHECK(result == webrtc::VoipResult::kOk);
}
void AndroidVoipClient::OnSignalReadRTPPacket(rtc::AsyncPacketSocket* socket,
const char* rtp_packet,
size_t size,
const rtc::SocketAddress& addr,
const int64_t& timestamp) {
std::vector<uint8_t> packet_copy(rtp_packet, rtp_packet + size);
void AndroidVoipClient::OnSignalReadRTPPacket(
rtc::AsyncPacketSocket* socket,
const rtc::ReceivedPacket& packet) {
std::vector<uint8_t> packet_copy(packet.payload().begin(),
packet.payload().end());
voip_thread_->PostTask([this, packet_copy = std::move(packet_copy)] {
ReadRTPPacket(packet_copy);
});
@ -492,12 +495,11 @@ void AndroidVoipClient::ReadRTCPPacket(
RTC_CHECK(result == webrtc::VoipResult::kOk);
}
void AndroidVoipClient::OnSignalReadRTCPPacket(rtc::AsyncPacketSocket* socket,
const char* rtcp_packet,
size_t size,
const rtc::SocketAddress& addr,
const int64_t& timestamp) {
std::vector<uint8_t> packet_copy(rtcp_packet, rtcp_packet + size);
void AndroidVoipClient::OnSignalReadRTCPPacket(
rtc::AsyncPacketSocket* socket,
const rtc::ReceivedPacket& packet) {
std::vector<uint8_t> packet_copy(packet.payload().begin(),
packet.payload().end());
voip_thread_->PostTask([this, packet_copy = std::move(packet_copy)] {
ReadRTCPPacket(packet_copy);
});

View File

@ -23,8 +23,8 @@
#include "api/voip/voip_engine.h"
#include "rtc_base/async_packet_socket.h"
#include "rtc_base/async_udp_socket.h"
#include "rtc_base/network/received_packet.h"
#include "rtc_base/socket_address.h"
#include "rtc_base/third_party/sigslot/sigslot.h"
#include "rtc_base/thread.h"
#include "sdk/android/native_api/jni/scoped_java_ref.h"
@ -40,8 +40,7 @@ namespace webrtc_examples {
// with consistent thread usage requirement with ProcessThread used
// within VoipEngine, as well as providing asynchronicity to the
// caller. AndroidVoipClient is meant to be used by Java through JNI.
class AndroidVoipClient : public webrtc::Transport,
public sigslot::has_slots<> {
class AndroidVoipClient : public webrtc::Transport {
public:
// Returns a pointer to an AndroidVoipClient object. Clients should
// use this factory method to create AndroidVoipClient objects. The
@ -122,17 +121,10 @@ class AndroidVoipClient : public webrtc::Transport,
const webrtc::PacketOptions& options) override;
bool SendRtcp(rtc::ArrayView<const uint8_t> packet) override;
// Slots for sockets to connect to.
void OnSignalReadRTPPacket(rtc::AsyncPacketSocket* socket,
const char* rtp_packet,
size_t size,
const rtc::SocketAddress& addr,
const int64_t& timestamp);
const rtc::ReceivedPacket& packet);
void OnSignalReadRTCPPacket(rtc::AsyncPacketSocket* socket,
const char* rtcp_packet,
size_t size,
const rtc::SocketAddress& addr,
const int64_t& timestamp);
const rtc::ReceivedPacket& packet);
private:
AndroidVoipClient(JNIEnv* env,