Skip to content

Commit a09d000

Browse files
committed
おためし
1 parent 1ba9943 commit a09d000

13 files changed

+81
-51
lines changed

.vscode/launch.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"type": "lldb-dap",
1111
"request": "launch",
1212
"program": "uv",
13-
"args": ["run", "pytest", "tests/test_openh264.py"],
13+
"args": ["run", "pytest", "-s", "tests/test_openh264.py::test_openh264_simulcast"],
1414
"cwd": "${workspaceFolder}",
1515
"sourceMap": [
1616
["../../../../_source/ubuntu-24.04_x86_64/webrtc/src/", "/home/melpon/dev/webrtc-build/_source/ubuntu-24.04_x86_64/webrtc/src/"],

src/sora.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Sora::Sora(std::optional<std::string> openh264,
1818

1919
Sora::~Sora() {
2020
std::cerr << __FUNCTION__ << std::endl;
21+
factory_.reset();
2122
if (thread_) {
2223
std::cerr << __FUNCTION__ << " 1" << std::endl;
2324
ioc_->stop();

src/sora_connection.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,11 @@ void SoraConnection::Disposed() {
4545
DisposePublisher::Disposed();
4646
if (video_source_) {
4747
video_source_->RemoveSubscriber(this);
48+
video_source_ = nullptr;
4849
}
4950
if (audio_source_) {
5051
audio_source_->RemoveSubscriber(this);
52+
audio_source_ = nullptr;
5153
}
5254
}
5355

@@ -72,7 +74,14 @@ void SoraConnection::Connect() {
7274
void SoraConnection::Disconnect() {
7375
std::cerr << __FUNCTION__ << std::endl;
7476
if (conn_) {
77+
Disposed();
7578
conn_->Disconnect();
79+
// OnDisconnect が来るまで待つ
80+
{
81+
GILLock lock;
82+
on_disconnect_cv_.wait(lock,
83+
[this]() -> bool { return on_disconnected_; });
84+
}
7685
// Connection から生成したものは、ここで消す
7786
audio_sender_ = nullptr;
7887
video_sender_ = nullptr;
@@ -189,6 +198,8 @@ void SoraConnection::OnDisconnect(sora::SoraSignalingErrorCode ec,
189198
if (on_disconnect_) {
190199
call_python(on_disconnect_, ec, message);
191200
}
201+
on_disconnected_ = true;
202+
on_disconnect_cv_.notify_all();
192203
}
193204

194205
void SoraConnection::OnNotify(std::string text) {

src/sora_connection.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef SORA_CONNECTION_H_
22
#define SORA_CONNECTION_H_
33

4+
#include <condition_variable>
45
#include <memory>
56
#include <thread>
67

@@ -164,6 +165,8 @@ class SoraConnection : public DisposePublisher,
164165
audio_sender_frame_transformer_;
165166
rtc::scoped_refptr<SoraFrameTransformerInterface>
166167
video_sender_frame_transformer_;
168+
bool on_disconnected_ = false;
169+
std::condition_variable_any on_disconnect_cv_;
167170
};
168171

169172
class SoraSignalingObserver : public sora::SoraSignalingObserver {

src/sora_log.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,7 @@ void EnableLibwebrtcLog(rtc::LoggingSeverity severity) {
55
rtc::LogMessage::LogTimestamps();
66
rtc::LogMessage::LogThreads();
77
}
8+
9+
void RtcLog(rtc::LoggingSeverity severity, const std::string& message) {
10+
RTC_LOG_V(severity) << message;
11+
}

src/sora_log.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
#include "sora.h"
55

66
void EnableLibwebrtcLog(rtc::LoggingSeverity severity);
7+
void RtcLog(rtc::LoggingSeverity severity, const std::string& message);
78

89
#endif

src/sora_sdk_ext.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,7 @@ NB_MODULE(sora_sdk_ext, m) {
361361
.value("NONE", rtc::LoggingSeverity::LS_NONE);
362362

363363
m.def("enable_libwebrtc_log", &EnableLibwebrtcLog);
364+
m.def("rtc_log", &RtcLog);
364365

365366
nb::class_<SoraTrackInterface>(
366367
m, "SoraTrackInterface",

src/sora_video_source.cpp

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,21 @@ SoraVideoSource::SoraVideoSource(
1515
rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> track)
1616
: SoraTrackInterface(publisher, track), source_(source), finished_(false) {
1717
publisher_->AddSubscriber(this);
18-
thread_.reset();
18+
thread_.reset(new std::thread([this]() {
19+
gil_scoped_acquire acq;
20+
while (SendFrameProcess()) {
21+
}
22+
}));
1923
}
2024

2125
SoraVideoSource::~SoraVideoSource() {
2226
std::cerr << __FUNCTION__ << std::endl;
2327
if (!finished_) {
24-
{
25-
std::lock_guard<std::recursive_mutex> lock(queue_mtx_);
26-
finished_ = true;
27-
}
28+
finished_ = true;
2829
queue_cond_.notify_all();
29-
if (thread_ && thread_->joinable()) {
30-
thread_->join();
31-
thread_ = nullptr;
32-
}
30+
gil_scoped_release release;
31+
thread_->join();
32+
thread_ = nullptr;
3333
}
3434
}
3535

@@ -58,18 +58,15 @@ void SoraVideoSource::OnCaptured(
5858
if (finished_) {
5959
return;
6060
}
61-
{
62-
std::lock_guard<std::recursive_mutex> lock(queue_mtx_);
63-
queue_.push(
64-
std::make_unique<Frame>(std::move(data), width, height, timestamp_us));
65-
}
61+
queue_.push(
62+
std::make_unique<Frame>(std::move(data), width, height, timestamp_us));
6663
queue_cond_.notify_all();
6764
}
6865

6966
bool SoraVideoSource::SendFrameProcess() {
7067
std::unique_ptr<Frame> frame;
7168
{
72-
std::unique_lock<std::recursive_mutex> lock(queue_mtx_);
69+
GILLock lock;
7370
queue_cond_.wait(lock, [&] { return !queue_.empty() || finished_; });
7471
if (finished_) {
7572
return false;

tests/client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,10 @@ def __enter__(self) -> "SoraClient":
210210
def __exit__(self, exc_type, exc_value, traceback) -> None:
211211
self.disconnect()
212212

213+
def __del__(self) -> None:
214+
sora_sdk.rtc_log(sora_sdk.SoraLoggingSeverity.INFO, "SoraClient.__del__")
215+
self.disconnect()
216+
213217
def connect(self, fake_audio=False, fake_video=False) -> None:
214218
# スレッドは connect 前に起動する
215219
if fake_audio:

tests/conftest.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@
44
import pytest
55
from dotenv import load_dotenv
66

7-
from sora_sdk import Sora
7+
from sora_sdk import Sora, SoraLoggingSeverity, rtc_log
88

99

1010
@pytest.fixture
1111
def sora():
1212
sora = Sora()
13+
rtc_log(SoraLoggingSeverity.ERROR, "sora created")
1314
yield sora
15+
rtc_log(SoraLoggingSeverity.ERROR, "sora destroy started")
1416
del sora
17+
rtc_log(SoraLoggingSeverity.ERROR, "sora destroy completed")
18+
gc.collect()
19+
rtc_log(SoraLoggingSeverity.ERROR, "sora destroy completed2")
1520

1621

1722
class SoraDeferred:

0 commit comments

Comments
 (0)