From 1a392e256744d10f2644fa2cd783fe290e7c52f3 Mon Sep 17 00:00:00 2001 From: enm10k Date: Tue, 6 Feb 2024 12:31:30 +0900 Subject: [PATCH 1/6] =?UTF-8?q?get=5Ftrack=5Fid=20=E3=81=8C=E5=8B=95?= =?UTF-8?q?=E3=81=84=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 7 +++++++ src/unity.cpp | 10 ++++++++++ src/unity.h | 1 + src/unity_renderer.cpp | 17 +++++++++++++++++ src/unity_renderer.h | 4 ++++ 5 files changed, 39 insertions(+) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 81ef6cb..3ce5be0 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -867,6 +867,10 @@ public void GetStats(Action onGetStats) sora_get_stats(p, StatsCallback, GCHandle.ToIntPtr(handle)); } + public string GetTrackId(uint trackId) { + return get_track_id(trackId); + } + /// /// 指定した label のデータチャンネルに buf を送信します。 /// @@ -1096,6 +1100,9 @@ public string ConnectedSignalingURL private static extern void sora_get_selected_signaling_url(IntPtr p, [Out] byte[] buf, int size); [DllImport(DllName)] private static extern void sora_get_connected_signaling_url(IntPtr p, [Out] byte[] buf, int size); + [DllImport(DllName)] + [return: MarshalAs(UnmanagedType.LPStr)] + private static extern string get_track_id(uint track_id); public class AudioOutputHelper : IDisposable { diff --git a/src/unity.cpp b/src/unity.cpp index 2695a4b..bec82c4 100644 --- a/src/unity.cpp +++ b/src/unity.cpp @@ -8,6 +8,7 @@ #include "sora_conf.json.h" #include "sora_conf_internal.json.h" #include "unity_context.h" +#include "unity_renderer.h" #if defined(SORA_UNITY_SDK_WINDOWS) || defined(SORA_UNITY_SDK_UBUNTU) #include @@ -309,6 +310,15 @@ void sora_audio_output_helper_set_handsfree(void* p, unity_bool_t enabled) { helper->SetHandsfree(enabled != 0); } +UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id) { + auto sink = (sora_unity_sdk::UnityRenderer::Sink*) + sora_unity_sdk::IdPointer::Instance() + .Lookup(track_id); + + // return sink->GetTrackId().c_str(); + return sink->GetTrackIdC(); +} + // iOS の場合は static link で名前が被る可能性があるので、別の名前にしておく void UNITY_INTERFACE_EXPORT UNITY_INTERFACE_API #if defined(SORA_UNITY_SDK_IOS) diff --git a/src/unity.h b/src/unity.h index 336084c..4405d8e 100644 --- a/src/unity.h +++ b/src/unity.h @@ -126,6 +126,7 @@ sora_audio_output_helper_is_handsfree(void* p); UNITY_INTERFACE_EXPORT void sora_audio_output_helper_set_handsfree( void* p, unity_bool_t enabled); +UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id); #ifdef __cplusplus } diff --git a/src/unity_renderer.cpp b/src/unity_renderer.cpp index 8b837e6..45f77d2 100644 --- a/src/unity_renderer.cpp +++ b/src/unity_renderer.cpp @@ -1,5 +1,6 @@ #include "unity_renderer.h" +#include #include // libwebrtc @@ -15,6 +16,12 @@ UnityRenderer::Sink::Sink(webrtc::VideoTrackInterface* track) : track_(track) { updating_ = false; ptrid_ = IdPointer::Instance().Register(this); track_->AddOrUpdateSink(this, rtc::VideoSinkWants()); + track_id_ = track->id(); + + // track_id_c_ = track_id_.c_str(); + size_t size = strlen(track_id_.c_str()); + track_id_c_ = new char[size + 1]; + strcpy(track_id_c_, track_id_.c_str()); } UnityRenderer::Sink::~Sink() { RTC_LOG(LS_INFO) << "[" << (void*)this << "] Sink::~Sink"; @@ -25,12 +32,22 @@ UnityRenderer::Sink::~Sink() { // RTC_LOG(LS_INFO) << "[" << (void*)this << "] Sink::~Sink waiting..."; std::this_thread::sleep_for(std::chrono::milliseconds(10)); } + + // track_id_c_ を開放すると Unity Editor がクラッシュする + // delete[] track_id_c_; track_->RemoveSink(this); IdPointer::Instance().Unregister(ptrid_); } ptrid_t UnityRenderer::Sink::GetSinkID() const { return ptrid_; } +std::string UnityRenderer::Sink::GetTrackId() const { + return track_id_; +} +char* UnityRenderer::Sink::GetTrackIdC() const { + return track_id_c_; +} + void UnityRenderer::Sink::SetTrack(webrtc::VideoTrackInterface* track) { track_->RemoveSink(this); track->AddOrUpdateSink(this, rtc::VideoSinkWants()); diff --git a/src/unity_renderer.h b/src/unity_renderer.h index c6b6812..7418d40 100644 --- a/src/unity_renderer.h +++ b/src/unity_renderer.h @@ -19,6 +19,8 @@ class UnityRenderer { class Sink : public rtc::VideoSinkInterface { rtc::scoped_refptr track_; ptrid_t ptrid_; + std::string track_id_; + char* track_id_c_; std::mutex mutex_; rtc::scoped_refptr frame_buffer_; uint8_t* temp_buf_ = nullptr; @@ -29,6 +31,8 @@ class UnityRenderer { Sink(webrtc::VideoTrackInterface* track); ~Sink(); ptrid_t GetSinkID() const; + std::string GetTrackId() const; + char* GetTrackIdC() const; void SetTrack(webrtc::VideoTrackInterface* track); private: From 75665ae9ff61ac6031bcb68f5e47632ef0599742 Mon Sep 17 00:00:00 2001 From: enm10k Date: Wed, 7 Feb 2024 10:44:32 +0900 Subject: [PATCH 2/6] =?UTF-8?q?get=5Ftrack=5Fid=20=E3=82=92=20ref=20bool?= =?UTF-8?q?=20=E3=81=AB=E5=AF=BE=E5=BF=9C=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 8 +++++--- src/unity.cpp | 12 ++++++------ src/unity.h | 3 ++- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 3ce5be0..8f384ae 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -867,8 +867,10 @@ public void GetStats(Action onGetStats) sora_get_stats(p, StatsCallback, GCHandle.ToIntPtr(handle)); } - public string GetTrackId(uint trackId) { - return get_track_id(trackId); + public (bool, string) GetTrackId(uint trackId) { + bool found = false; + string trackId_ = get_track_id(trackId, ref found); + return (found, trackId_); } /// @@ -1102,7 +1104,7 @@ public string ConnectedSignalingURL private static extern void sora_get_connected_signaling_url(IntPtr p, [Out] byte[] buf, int size); [DllImport(DllName)] [return: MarshalAs(UnmanagedType.LPStr)] - private static extern string get_track_id(uint track_id); + private static extern string get_track_id(uint track_id, [MarshalAs(UnmanagedType.I1)] ref bool found); public class AudioOutputHelper : IDisposable { diff --git a/src/unity.cpp b/src/unity.cpp index bec82c4..207f936 100644 --- a/src/unity.cpp +++ b/src/unity.cpp @@ -310,13 +310,13 @@ void sora_audio_output_helper_set_handsfree(void* p, unity_bool_t enabled) { helper->SetHandsfree(enabled != 0); } -UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id) { - auto sink = (sora_unity_sdk::UnityRenderer::Sink*) - sora_unity_sdk::IdPointer::Instance() - .Lookup(track_id); +UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id, + unity_bool_t* found) { + void* p = sora_unity_sdk::IdPointer::Instance().Lookup(track_id); - // return sink->GetTrackId().c_str(); - return sink->GetTrackIdC(); + *found = p != nullptr ? 1 : 0; + return *found ? ((sora_unity_sdk::UnityRenderer::Sink*)p)->GetTrackIdC() + : nullptr; } // iOS の場合は static link で名前が被る可能性があるので、別の名前にしておく diff --git a/src/unity.h b/src/unity.h index 4405d8e..b568fd6 100644 --- a/src/unity.h +++ b/src/unity.h @@ -126,7 +126,8 @@ sora_audio_output_helper_is_handsfree(void* p); UNITY_INTERFACE_EXPORT void sora_audio_output_helper_set_handsfree( void* p, unity_bool_t enabled); -UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id); +UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id, + unity_bool_t* found); #ifdef __cplusplus } From 4844029f5d8f86d3b582f1776777d680988e476d Mon Sep 17 00:00:00 2001 From: enm10k Date: Wed, 7 Feb 2024 12:02:15 +0900 Subject: [PATCH 3/6] =?UTF-8?q?c=5Fstr()=20=E3=81=AE=E7=B5=90=E6=9E=9C?= =?UTF-8?q?=E3=82=92=E6=98=8E=E7=A4=BA=E7=9A=84=E3=81=AB=E3=82=A2=E3=83=AD?= =?UTF-8?q?=E3=82=B1=E3=83=BC=E3=82=B7=E3=83=A7=E3=83=B3=E3=81=97=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=81=A8=20Unity=20Editor=20=E3=81=8C=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=83=83=E3=82=B7=E3=83=A5=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/unity.cpp | 3 ++- src/unity_renderer.cpp | 9 +++------ src/unity_renderer.h | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/src/unity.cpp b/src/unity.cpp index 207f936..8afa332 100644 --- a/src/unity.cpp +++ b/src/unity.cpp @@ -313,8 +313,9 @@ void sora_audio_output_helper_set_handsfree(void* p, unity_bool_t enabled) { UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id, unity_bool_t* found) { void* p = sora_unity_sdk::IdPointer::Instance().Lookup(track_id); - *found = p != nullptr ? 1 : 0; + + // return *found ? ((sora_unity_sdk::UnityRenderer::Sink*)p)->GetTrackId().c_str() return *found ? ((sora_unity_sdk::UnityRenderer::Sink*)p)->GetTrackIdC() : nullptr; } diff --git a/src/unity_renderer.cpp b/src/unity_renderer.cpp index 45f77d2..be711e8 100644 --- a/src/unity_renderer.cpp +++ b/src/unity_renderer.cpp @@ -10,15 +10,14 @@ namespace sora_unity_sdk { // UnityRenderer::Sink -UnityRenderer::Sink::Sink(webrtc::VideoTrackInterface* track) : track_(track) { +UnityRenderer::Sink::Sink(webrtc::VideoTrackInterface* track) + : track_(track), track_id_(track_->id()) { RTC_LOG(LS_INFO) << "[" << (void*)this << "] Sink::Sink"; deleting_ = false; updating_ = false; ptrid_ = IdPointer::Instance().Register(this); track_->AddOrUpdateSink(this, rtc::VideoSinkWants()); - track_id_ = track->id(); - // track_id_c_ = track_id_.c_str(); size_t size = strlen(track_id_.c_str()); track_id_c_ = new char[size + 1]; strcpy(track_id_c_, track_id_.c_str()); @@ -33,15 +32,13 @@ UnityRenderer::Sink::~Sink() { std::this_thread::sleep_for(std::chrono::milliseconds(10)); } - // track_id_c_ を開放すると Unity Editor がクラッシュする - // delete[] track_id_c_; track_->RemoveSink(this); IdPointer::Instance().Unregister(ptrid_); } ptrid_t UnityRenderer::Sink::GetSinkID() const { return ptrid_; } -std::string UnityRenderer::Sink::GetTrackId() const { +const std::string& UnityRenderer::Sink::GetTrackId() const { return track_id_; } char* UnityRenderer::Sink::GetTrackIdC() const { diff --git a/src/unity_renderer.h b/src/unity_renderer.h index 7418d40..c1a50d2 100644 --- a/src/unity_renderer.h +++ b/src/unity_renderer.h @@ -31,7 +31,7 @@ class UnityRenderer { Sink(webrtc::VideoTrackInterface* track); ~Sink(); ptrid_t GetSinkID() const; - std::string GetTrackId() const; + const std::string& GetTrackId() const; char* GetTrackIdC() const; void SetTrack(webrtc::VideoTrackInterface* track); From e863d68885e9413ea3a1a30eb830892b34b0f6d7 Mon Sep 17 00:00:00 2001 From: enm10k Date: Thu, 8 Feb 2024 12:22:41 +0900 Subject: [PATCH 4/6] =?UTF-8?q?Marshal.PtrToStringAnsi=20=E3=81=AB?= =?UTF-8?q?=E6=88=BB=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Sora/Sora.cs | 11 +++++------ src/unity.cpp | 11 ++++------- src/unity.h | 3 +-- src/unity_renderer.cpp | 7 ------- src/unity_renderer.h | 1 - 5 files changed, 10 insertions(+), 23 deletions(-) diff --git a/Sora/Sora.cs b/Sora/Sora.cs index 8f384ae..c81f776 100644 --- a/Sora/Sora.cs +++ b/Sora/Sora.cs @@ -868,9 +868,9 @@ public void GetStats(Action onGetStats) } public (bool, string) GetTrackId(uint trackId) { - bool found = false; - string trackId_ = get_track_id(trackId, ref found); - return (found, trackId_); + IntPtr p = get_track_id(trackId); + bool found = p != IntPtr.Zero; + return (found, found ? Marshal.PtrToStringAnsi(p) : ""); } /// @@ -1102,9 +1102,8 @@ public string ConnectedSignalingURL private static extern void sora_get_selected_signaling_url(IntPtr p, [Out] byte[] buf, int size); [DllImport(DllName)] private static extern void sora_get_connected_signaling_url(IntPtr p, [Out] byte[] buf, int size); - [DllImport(DllName)] - [return: MarshalAs(UnmanagedType.LPStr)] - private static extern string get_track_id(uint track_id, [MarshalAs(UnmanagedType.I1)] ref bool found); + [DllImport(DllName, CharSet=CharSet.Ansi)] + private static extern IntPtr get_track_id(uint track_id); public class AudioOutputHelper : IDisposable { diff --git a/src/unity.cpp b/src/unity.cpp index 8afa332..269f4ac 100644 --- a/src/unity.cpp +++ b/src/unity.cpp @@ -310,14 +310,11 @@ void sora_audio_output_helper_set_handsfree(void* p, unity_bool_t enabled) { helper->SetHandsfree(enabled != 0); } -UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id, - unity_bool_t* found) { +UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id) { void* p = sora_unity_sdk::IdPointer::Instance().Lookup(track_id); - *found = p != nullptr ? 1 : 0; - - // return *found ? ((sora_unity_sdk::UnityRenderer::Sink*)p)->GetTrackId().c_str() - return *found ? ((sora_unity_sdk::UnityRenderer::Sink*)p)->GetTrackIdC() - : nullptr; + return p != nullptr + ? ((sora_unity_sdk::UnityRenderer::Sink*)p)->GetTrackId().c_str() + : nullptr; } // iOS の場合は static link で名前が被る可能性があるので、別の名前にしておく diff --git a/src/unity.h b/src/unity.h index b568fd6..4405d8e 100644 --- a/src/unity.h +++ b/src/unity.h @@ -126,8 +126,7 @@ sora_audio_output_helper_is_handsfree(void* p); UNITY_INTERFACE_EXPORT void sora_audio_output_helper_set_handsfree( void* p, unity_bool_t enabled); -UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id, - unity_bool_t* found); +UNITY_INTERFACE_EXPORT const char* get_track_id(ptrid_t track_id); #ifdef __cplusplus } diff --git a/src/unity_renderer.cpp b/src/unity_renderer.cpp index be711e8..936a620 100644 --- a/src/unity_renderer.cpp +++ b/src/unity_renderer.cpp @@ -17,10 +17,6 @@ UnityRenderer::Sink::Sink(webrtc::VideoTrackInterface* track) updating_ = false; ptrid_ = IdPointer::Instance().Register(this); track_->AddOrUpdateSink(this, rtc::VideoSinkWants()); - - size_t size = strlen(track_id_.c_str()); - track_id_c_ = new char[size + 1]; - strcpy(track_id_c_, track_id_.c_str()); } UnityRenderer::Sink::~Sink() { RTC_LOG(LS_INFO) << "[" << (void*)this << "] Sink::~Sink"; @@ -41,9 +37,6 @@ ptrid_t UnityRenderer::Sink::GetSinkID() const { const std::string& UnityRenderer::Sink::GetTrackId() const { return track_id_; } -char* UnityRenderer::Sink::GetTrackIdC() const { - return track_id_c_; -} void UnityRenderer::Sink::SetTrack(webrtc::VideoTrackInterface* track) { track_->RemoveSink(this); diff --git a/src/unity_renderer.h b/src/unity_renderer.h index c1a50d2..f388397 100644 --- a/src/unity_renderer.h +++ b/src/unity_renderer.h @@ -32,7 +32,6 @@ class UnityRenderer { ~Sink(); ptrid_t GetSinkID() const; const std::string& GetTrackId() const; - char* GetTrackIdC() const; void SetTrack(webrtc::VideoTrackInterface* track); private: From 0c3329f491972776d9a3ae56989cdc8ec08b574a Mon Sep 17 00:00:00 2001 From: enm10k Date: Wed, 7 Feb 2024 17:25:48 +0900 Subject: [PATCH 5/6] =?UTF-8?q?PeerConnection=20=E3=81=8B=E3=82=89?= =?UTF-8?q?=E6=83=85=E5=A0=B1=E3=82=92=E5=8F=96=E5=BE=97=E3=81=99=E3=82=8B?= =?UTF-8?q?=E3=82=88=E3=81=86=E3=81=AB=E8=A9=A6=E8=A1=8C=E9=8C=AF=E8=AA=A4?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/sora.cpp | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/sora.h | 2 ++ src/unity.cpp | 2 ++ 3 files changed, 60 insertions(+) diff --git a/src/sora.cpp b/src/sora.cpp index 77a7e83..13c0a4c 100644 --- a/src/sora.cpp +++ b/src/sora.cpp @@ -1012,4 +1012,60 @@ std::string Sora::GetConnectedSignalingURL() const { return signaling_->GetConnectedSignalingURL(); } +void Sora::GetTracks() const { + RTC_LOG(LS_INFO) << __func__ << " start"; + auto conn = signaling_->GetPeerConnection(); + RTC_LOG(LS_INFO) << __func__ << " hoge"; + + if (conn != nullptr) { + RTC_LOG(LS_INFO) << __func__ << " A"; + } else { + RTC_LOG(LS_INFO) << __func__ << " B"; + } + + auto conf = conn->GetConfiguration(); + if (conf.sdp_semantics == webrtc::SdpSemantics::kUnifiedPlan) { + RTC_LOG(LS_INFO) << __func__ << " sdp_semantics: kUnifiedPlan"; + } else { + RTC_LOG(LS_INFO) << __func__ << " sdp_semantics: kPlanB"; + } + + if (conf.sdp_semantics != webrtc::SdpSemantics::kUnifiedPlan) { + auto local_streams = conn->local_streams(); + for (int i = 0; i < local_streams->count(); i++) { + auto stream = local_streams->at(i); + RTC_LOG(LS_INFO) << __func__ << " local stream: " << stream->id(); + auto audio_tracks = stream->GetAudioTracks(); + for (auto track : audio_tracks) { + RTC_LOG(LS_INFO) << __func__ << " local audio track: " << track->id(); + } + + auto video_tracks = stream->GetAudioTracks(); + for (auto track : video_tracks) { + RTC_LOG(LS_INFO) << __func__ << " local video track: " << track->id(); + } + } + // auto remote_streams = conn.remote_streams(); + } else { + auto transceivers = conn->GetTransceivers(); + for (auto transceiver : transceivers) { + auto sender = transceiver->sender(); + auto sender_stream_ids = sender->stream_ids(); + if (sender_stream_ids.size() != 0) { + RTC_LOG(LS_INFO) << __func__ + << " sender_stream_id=" << sender_stream_ids[0] + << ", track_id=" << sender->track()->id(); + } + + auto receiver = transceiver->receiver(); + auto receiver_stream_ids = receiver->stream_ids(); + if (receiver_stream_ids.size() != 0) { + RTC_LOG(LS_INFO) << __func__ + << " receiver_stream_id=" << receiver_stream_ids[0] + << ", track_id=" << receiver->track()->id(); + } + } + } +} + } // namespace sora_unity_sdk diff --git a/src/sora.h b/src/sora.h index ebbbd33..b86dae6 100644 --- a/src/sora.h +++ b/src/sora.h @@ -76,6 +76,8 @@ class Sora : public std::enable_shared_from_this, std::string GetSelectedSignalingURL() const; std::string GetConnectedSignalingURL() const; + void GetTracks() const; + private: void* GetAndroidApplicationContext(void* env); static sora_conf::ErrorCode ToErrorCode(sora::SoraSignalingErrorCode ec); diff --git a/src/unity.cpp b/src/unity.cpp index 269f4ac..405ccb8 100644 --- a/src/unity.cpp +++ b/src/unity.cpp @@ -184,6 +184,8 @@ void sora_set_on_handle_audio(void* p, handle_audio_cb_t f, void* userdata) { void sora_get_stats(void* p, stats_cb_t f, void* userdata) { auto wsora = (SoraWrapper*)p; + + wsora->sora->GetTracks(); wsora->sora->GetStats( [f, userdata](std::string json) { f(json.c_str(), userdata); }); } From 19c5751f38abf2bb9e67a65ba5fe93ec59c523a3 Mon Sep 17 00:00:00 2001 From: enm10k Date: Thu, 8 Feb 2024 17:49:21 +0900 Subject: [PATCH 6/6] wip --- CMakeLists.txt | 3 +++ proto/rtc.proto | 18 ++++++++++++++++++ src/unity.cpp | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 proto/rtc.proto diff --git a/CMakeLists.txt b/CMakeLists.txt index 7271f72..ecb89ae 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,9 +81,11 @@ add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/proto/cpp/sora_conf.json.h" "${CMAKE_CURRENT_BINARY_DIR}/proto/cpp/sora_conf_internal.json.h" + "${CMAKE_CURRENT_BINARY_DIR}/proto/cpp/rtc.json.h" "${CMAKE_CURRENT_SOURCE_DIR}/Sora/Generated/SoraConf.cs" "${CMAKE_CURRENT_SOURCE_DIR}/Sora/Generated/SoraConfInternal.cs" "${CMAKE_CURRENT_SOURCE_DIR}/Sora/Generated/Jsonif.cs" + "${CMAKE_CURRENT_SOURCE_DIR}/Sora/Generated/Rtc.cs" COMMAND "${PROTOBUF_DIR}/bin/protoc${EXE_EXT}" ARGS @@ -94,6 +96,7 @@ add_custom_command( -I "${CMAKE_CURRENT_SOURCE_DIR}/proto/" "${CMAKE_CURRENT_SOURCE_DIR}/proto/sora_conf.proto" "${CMAKE_CURRENT_SOURCE_DIR}/proto/sora_conf_internal.proto" + "${CMAKE_CURRENT_SOURCE_DIR}/proto/rtc.proto" DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/proto/sora_conf.proto" "${CMAKE_CURRENT_SOURCE_DIR}/proto/sora_conf_internal.proto" diff --git a/proto/rtc.proto b/proto/rtc.proto new file mode 100644 index 0000000..7d6c86f --- /dev/null +++ b/proto/rtc.proto @@ -0,0 +1,18 @@ +syntax = "proto3"; + +package rtc; + +enum TrackKind { + VIDEO = 0; + AUDIO = 1; +} + +message Track { + TrackKind kind = 1; + string track_id = 2; + string connection_id = 3; +} + +message Tracks { + repeated Track track = 1; +} \ No newline at end of file diff --git a/src/unity.cpp b/src/unity.cpp index 405ccb8..f7dc90f 100644 --- a/src/unity.cpp +++ b/src/unity.cpp @@ -185,7 +185,7 @@ void sora_set_on_handle_audio(void* p, handle_audio_cb_t f, void* userdata) { void sora_get_stats(void* p, stats_cb_t f, void* userdata) { auto wsora = (SoraWrapper*)p; - wsora->sora->GetTracks(); + wsora->sora->GetTracks(); // DEBUG wsora->sora->GetStats( [f, userdata](std::string json) { f(json.c_str(), userdata); }); }