diff --git a/CHANGES.md b/CHANGES.md index 7b69ae43..1d1edea2 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -11,6 +11,8 @@ ## develop +- [UPDATE] SoraMediaTrack を追加し、 SoraConnection.on_track の引数を SoraMediaTrack に変更 + - @tnoho - [ADD] 発話区間の検出が可能な SoraVAD の追加 - @tnoho - [ADD] リアルタイム性を重視した AudioStreamSink の追加 diff --git a/src/sora_connection.cpp b/src/sora_connection.cpp index eef52d6e..428aae24 100644 --- a/src/sora_connection.cpp +++ b/src/sora_connection.cpp @@ -160,8 +160,9 @@ void SoraConnection::OnTrack( rtc::scoped_refptr transceiver) { if (on_track_) { // shared_ptr になってないとリークする - auto track = std::make_shared( - this, transceiver->receiver()->track()); + auto track = std::make_shared( + this, transceiver->receiver()->track(), + transceiver->receiver()->stream_ids()[0]); AddSubscriber(track.get()); on_track_(track); } diff --git a/src/sora_connection.h b/src/sora_connection.h index 0008789c..d99eb696 100644 --- a/src/sora_connection.h +++ b/src/sora_connection.h @@ -105,7 +105,7 @@ class SoraConnection : public sora::SoraSignalingObserver, std::function on_notify_; std::function on_push_; std::function on_message_; - std::function)> on_track_; + std::function)> on_track_; std::function on_data_channel_; private: diff --git a/src/sora_sdk_ext.cpp b/src/sora_sdk_ext.cpp index 1c1709a6..44cf7578 100644 --- a/src/sora_sdk_ext.cpp +++ b/src/sora_sdk_ext.cpp @@ -178,6 +178,9 @@ NB_MODULE(sora_sdk_ext, m) { .def_prop_ro("state", &SoraTrackInterface::state) .def("set_enabled", &SoraTrackInterface::set_enabled, "enable"_a); + nb::class_(m, "SoraMediaTrack") + .def_prop_ro("stream_id", &SoraMediaTrack::stream_id); + nb::class_(m, "SoraAudioSource") .def("on_data", nb::overload_cast( &SoraAudioSource::OnData)) diff --git a/src/sora_track_interface.h b/src/sora_track_interface.h index ec642ceb..5314a1ef 100644 --- a/src/sora_track_interface.h +++ b/src/sora_track_interface.h @@ -63,4 +63,28 @@ class SoraTrackInterface : public DisposePublisher, public DisposeSubscriber { rtc::scoped_refptr track_; }; +/** + * SoraConnection の on_track で渡されるリモートトラックを格納する SoraTrackInterface です。 + * + * webrtc::MediaStreamTrackInterface のメンバーにはない stream_id を on_track で渡すために追加しました。 + */ +class SoraMediaTrack : public SoraTrackInterface { + public: + SoraMediaTrack(DisposePublisher* publisher, + rtc::scoped_refptr track, + std::string stream_id) + : SoraTrackInterface(publisher, track), stream_id_(stream_id) {} + + /** + * この Track の Stream ID を std::string で返します。 + * + * Python で呼び出すための関数です。 + * 本来 Track には複数の Stream ID を紐づけることができるのですが、 + * Sora の使用上 Track には Stream ID が 1 つしか紐づかないため Track のメンバーとしました。 + */ + std::string stream_id() const { return stream_id_; } + + private: + std::string stream_id_; +}; #endif \ No newline at end of file