This commit is contained in:
wangjiyu 2025-04-16 17:44:03 +08:00
parent 815956c01c
commit df30aa53c9
2 changed files with 14 additions and 25 deletions

View File

@ -19,22 +19,7 @@ def my_callback_r(shmName, dataSize, dataCount, sampleRate, numChannels, channel
print(f"my_callback_r, dataSize:{dataSize}, dataCount:{dataCount}, sampleRate:{sampleRate}, numChannels:{numChannels}, channelIndex:{channelIndex}")
print(f"data:{shmName}")
print("after my_callback_r")
#fd = os.open(shmName, os.O_RDONLY)
#if fd == -1:
# raise RuntimeError(f"无法打开共享内存 {shmName}")
## 2. 创建内存映射
#shm = mmap.mmap(fd, dataSize, mmap.MAP_SHARED, mmap.PROT_READ)
## 3. 转换为numpy数组 (零拷贝)
#audio_data = np.frombuffer(shm, dtype=c_int16, count=dataCount)
#print(f" 前5个采样点: {audio_data[:5]}")
#audioData = np.array([0, 1, -1, 0], dtype=np.int16)
#ret = rtc_plugins.sendCustomAudioData(srcChannelIndex, audioData, 48000, 1, len(audioData))
#if ret != 0:
# print(f"resend fail, ret:{ret}")
#else:
# print("resend succ")
ret = rtc_plugins.init(destUserId, destDisplayName, destRoomId, my_callback_r)
if ret != 0:
print(f"init fail, ret:{ret}")

View File

@ -711,18 +711,22 @@ np::ndarray RTCContext::getNumpydata() {
size_t length = frame.dataCount; // 数据长度
std::cout << "step4" << std::endl;
// 创建 NumPy 数组(拷贝数据)
if (!data_ptr || length == 0) {
// 返回空数组或抛出异常
return np::zeros(bp::make_tuple(0), np::dtype::get_builtin<int16_t>());
PyGILState_STATE gstate = PyGILState_Ensure();
np::ndarray result;
try {
if (!data_ptr || length == 0) {
result = np::zeros(bp::make_tuple(0), np::dtype::get_builtin<int16_t>());
} else {
result = np::empty(bp::make_tuple(length), np::dtype::get_builtin<int16_t>());
std::memcpy(result.get_data(), data_ptr, length * sizeof(int16_t));
}
} catch (...) {
PyGILState_Release(gstate); // 异常时释放GIL
throw;
}
std::cout << "step5" << std::endl;
np::ndarray result = np::empty(bp::make_tuple(length), np::dtype::get_builtin<int16_t>());
std::cout << "step6" << std::endl;
std::memcpy(result.get_data(), data_ptr, length * sizeof(int16_t));
std::cout << "step7" << std::endl;
PyGILState_Release(gstate);
return result;
}
int16_t RTCContext::getDataCount() {