debug
This commit is contained in:
parent
088f373770
commit
0042f506c2
|
@ -47,6 +47,9 @@ int initSend(const char* srcRoomId, const char* destRoomId, const int16_t destCh
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
int getSize() {
|
||||||
|
return RTCContext::instance().getSize();
|
||||||
|
}
|
||||||
|
|
||||||
py::object create_int16_array() {
|
py::object create_int16_array() {
|
||||||
// 1. 定义数组维度(1维,长度为 4)
|
// 1. 定义数组维度(1维,长度为 4)
|
||||||
|
@ -196,6 +199,7 @@ BOOST_PYTHON_MODULE(rtc_plugins) {
|
||||||
py::def("initRecv", &initRecv);
|
py::def("initRecv", &initRecv);
|
||||||
py::def("initSend", &initSend);
|
py::def("initSend", &initSend);
|
||||||
py::def("sendCustomAudioData", &sendCustomAudioData);
|
py::def("sendCustomAudioData", &sendCustomAudioData);
|
||||||
|
py::def("getSize", &getSize);
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
PyErr_SetString(PyExc_RuntimeError, "Module initialization failed");
|
PyErr_SetString(PyExc_RuntimeError, "Module initialization failed");
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,4 +56,6 @@ while True:
|
||||||
print(f"resend fail, ret:{ret}")
|
print(f"resend fail, ret:{ret}")
|
||||||
else:
|
else:
|
||||||
print("resend succ")
|
print("resend succ")
|
||||||
|
size = rtc_plugins.getSize()
|
||||||
|
print(f"data size:{size}")
|
||||||
time.sleep(30)
|
time.sleep(30)
|
||||||
|
|
|
@ -301,6 +301,7 @@ void RTCContext::onAudioProcess(const char* roomId, const char* peerId,
|
||||||
std::cout << "audioFrame:" << audioFrame.dataCount << "," << audioFrame.sampleRate << "," <<
|
std::cout << "audioFrame:" << audioFrame.dataCount << "," << audioFrame.sampleRate << "," <<
|
||||||
audioFrame.numChannels << "," << audioFrame.channelIndex << std::endl;
|
audioFrame.numChannels << "," << audioFrame.channelIndex << std::endl;
|
||||||
|
|
||||||
|
setData(audioFrame);
|
||||||
// 1. 获取GIL
|
// 1. 获取GIL
|
||||||
std::cout << "[1] 获取GIL锁..." << std::endl;
|
std::cout << "[1] 获取GIL锁..." << std::endl;
|
||||||
//PyGILState_STATE gstate = PyGILState_Ensure();
|
//PyGILState_STATE gstate = PyGILState_Ensure();
|
||||||
|
@ -654,3 +655,37 @@ void RTCContext::setNumpyApi(void **numpyApi) {
|
||||||
numpyApi_ = numpyApi;
|
numpyApi_ = numpyApi;
|
||||||
std::cout << "setNupyApi, numpyApi_:" << numpyApi_[93] << std::endl;
|
std::cout << "setNupyApi, numpyApi_:" << numpyApi_[93] << std::endl;
|
||||||
}
|
}
|
||||||
|
void RTCContext::setData(const mrtc::MRTCAudioFrame& frame) {
|
||||||
|
std::lock_guard<std::mutex> lock(dataMutex_);
|
||||||
|
if (dataSize_ == totalSize_) {
|
||||||
|
bottom_ = (bottom_ + 1) % totalSize_;
|
||||||
|
dataSize_--;
|
||||||
|
}
|
||||||
|
RetAudioFrame newFrame;
|
||||||
|
newFrame.dataCount = frame.dataCount;
|
||||||
|
newFrame.sampleRate = frame.sampleRate;
|
||||||
|
newFrame.numChannels = frame.numChannels;
|
||||||
|
newFrame.channelIndex = frame.channelIndex;
|
||||||
|
newFrame.data = std::make_unique<int16_t[]>(frame.dataCount);
|
||||||
|
std::memcpy(newFrame.data.get(), frame.data, frame.dataCount* sizeof(int16_t));
|
||||||
|
data_[head_] = std::move(newFrame);
|
||||||
|
head_ = (head_ + 1) % totalSize_;
|
||||||
|
dataSize_++;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
RetAudioFrame RTCContext::getData() {
|
||||||
|
std::lock_guard<std::mutex> lock(dataMutex_);
|
||||||
|
if (dataSize_ > 0) {
|
||||||
|
RetAudioFrame frame = std::move(data_[bottom_]); // 移动而非拷贝
|
||||||
|
bottom_ = (bottom_ + 1) % totalSize_;
|
||||||
|
dataSize_--;
|
||||||
|
return frame; // 返回值优化(RVO)会生效
|
||||||
|
}
|
||||||
|
return {}; // 返回空对象
|
||||||
|
}
|
||||||
|
|
||||||
|
int16_t RTCContext::getSize() {
|
||||||
|
std::lock_guard<std::mutex> lock(dataMutex_);
|
||||||
|
return dataSize;
|
||||||
|
}
|
|
@ -35,6 +35,16 @@ namespace fs = std::filesystem;
|
||||||
#define ENV_PRODUCT
|
#define ENV_PRODUCT
|
||||||
//#define SEND_MODE
|
//#define SEND_MODE
|
||||||
|
|
||||||
|
// 音频数据帧
|
||||||
|
struct RetAudioFrame final
|
||||||
|
{
|
||||||
|
std::unique_ptr<int16_t[]> data;
|
||||||
|
int dataCount = 0;
|
||||||
|
int sampleRate = 48000;
|
||||||
|
int numChannels = 1;
|
||||||
|
int channelIndex = 0;
|
||||||
|
};
|
||||||
|
|
||||||
class RTCContext :
|
class RTCContext :
|
||||||
public RTCENGINE_NAMESPACE::IMRTCRoomCallBack,
|
public RTCENGINE_NAMESPACE::IMRTCRoomCallBack,
|
||||||
public RTCENGINE_NAMESPACE::IMRTCConsumerCallBack,
|
public RTCENGINE_NAMESPACE::IMRTCConsumerCallBack,
|
||||||
|
@ -85,6 +95,7 @@ public:
|
||||||
bool init(const char* selfUserId, const char* selfDisplayName, const char* selfRoomId);
|
bool init(const char* selfUserId, const char* selfDisplayName, const char* selfRoomId);
|
||||||
bool initRecv(const char* destRoomId, const char* srcUserId, const int16_t destChannelIndex);
|
bool initRecv(const char* destRoomId, const char* srcUserId, const int16_t destChannelIndex);
|
||||||
bool initSend(const char* srcRoomId, const char* destRoomId, const int16_t destChannelIndex, const uint8_t channelNum);
|
bool initSend(const char* srcRoomId, const char* destRoomId, const int16_t destChannelIndex, const uint8_t channelNum);
|
||||||
|
int16_t getSize();
|
||||||
|
|
||||||
void* getpData() const;
|
void* getpData() const;
|
||||||
void setpData(void* pData);
|
void setpData(void* pData);
|
||||||
|
@ -99,6 +110,7 @@ public:
|
||||||
private:
|
private:
|
||||||
RTCContext()
|
RTCContext()
|
||||||
{
|
{
|
||||||
|
data_.resize(totalSize_);
|
||||||
}
|
}
|
||||||
mutable std::mutex mutex_;
|
mutable std::mutex mutex_;
|
||||||
mrtc::IMRTCEngine * rtcEngine_ = nullptr;
|
mrtc::IMRTCEngine * rtcEngine_ = nullptr;
|
||||||
|
@ -109,6 +121,12 @@ private:
|
||||||
bool isMultiRoom_ = false;
|
bool isMultiRoom_ = false;
|
||||||
boost::python::object pyCallback_;
|
boost::python::object pyCallback_;
|
||||||
void ** numpyApi_;
|
void ** numpyApi_;
|
||||||
|
std::vector<RetAudioFrame> data_;
|
||||||
|
mutable std::mutex dataMutex_;
|
||||||
|
const int16_t totalSize_ = 100;
|
||||||
|
int16_t dataSize_ = 0;
|
||||||
|
int16_t bottom_ = 0;
|
||||||
|
int16_t head_= 0;
|
||||||
void onRoom(uint32_t typeId, RTCENGINE_NAMESPACE::MRTCRoomInfo& roomInfo);
|
void onRoom(uint32_t typeId, RTCENGINE_NAMESPACE::MRTCRoomInfo& roomInfo);
|
||||||
void onConsumer(uint32_t msgId, const char* roomId, const char* peerId, RTCENGINE_NAMESPACE::MRTCConsumerInfo& consumerInfo);
|
void onConsumer(uint32_t msgId, const char* roomId, const char* peerId, RTCENGINE_NAMESPACE::MRTCConsumerInfo& consumerInfo);
|
||||||
void onRender(const char* roomId, const char* peerId,
|
void onRender(const char* roomId, const char* peerId,
|
||||||
|
@ -119,4 +137,6 @@ private:
|
||||||
void onAudioProcess(const char* roomId, const char* peerId,
|
void onAudioProcess(const char* roomId, const char* peerId,
|
||||||
mrtc::MRTCAudioFrame& audioFrame, mrtc::MRTCAudioSourceType audioSourceType);
|
mrtc::MRTCAudioFrame& audioFrame, mrtc::MRTCAudioSourceType audioSourceType);
|
||||||
void onProducer(uint32_t msgId, mrtc::MRTCProducerInfo& info);
|
void onProducer(uint32_t msgId, mrtc::MRTCProducerInfo& info);
|
||||||
|
void setData(const mrtc::MRTCAudioFrame& frame);
|
||||||
|
RetAudioFrame getData();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue