我正在尝试用 C++ 创建一个网络摄像头聊天程序,虽然我已经能够获取要发送和播放的图像,但我在对音频做同样的事情时遇到了麻烦:音频滞后并且很快就消失了与视频同步,即使我只是自己播放。
我发现这个答案和示例代码非常有用。
我可以对此代码进行任何修改以使其几乎没有延迟,还是 OpenAL 不适合这个?我正在使用 Windows,但我计划稍后制作一个 linux 版本。
从链接的代码:
ALCdevice* inputDevice = alcCaptureOpenDevice(NULL,FREQ,AL_FORMAT_MONO16,FREQ/2);
尝试使用更大的缓冲区:
ALCdevice* inputDevice = alcCaptureOpenDevice(NULL,FREQ,AL_FORMAT_MONO16,FREQ*4);
投票非常激进。尝试在循环中休眠:
while (!done) {
...
}
至:
int sleepSeconds = 1;
while (!done) {
...
Sleep(sleepSeconds/10) //windows, miliseconds
//sleep(sleepSeconds) //linux, seconds
}