嗨,我正在写一个程序,必须同时从三个输入设备捕获(在本例中,它是三个相同的USB摄像头)。
首先,ALSA不是基于熟悉的UNIX范式“一切都是文件”,所以我不能使用常规的轮询(3)调用;我知道数据流应该在所有设备之间稳定,目前我做的事情如下:
while(!stop)
for(i = 0; i < input_device_count; i++)
{
snd_pcm_readi(handle[i], buffer, frames);
write(fd_out[i], buffer, size);
}
此代码遍历每个设备并从中读取,将结果写入先前打开的文件中。它可以工作,但我怀疑有更好的方法来做到这一点,也使用mmap,所以我不需要复制从内核空间到用户和内核再次。
现在,让我们假设这三个输入保持同步;上面的代码仍然不能保证我将同时从这三个设备开始记录。有办法保证吗?实际上,像snd_pcm_prepare()和snd_pcm_start()这样的调用的语义是什么?现在我不使用这些,我只是直接进入snd_pcm_readi()。
我试图搜索代码示例,但没有发现任何与多个捕获同时进行的操作。任何提示都将不胜感激!
https://stackoverflow.com/questions/19802162
复制相似问题