我有一个使用 DSPACK 库的 Delphi 6 Pro 程序来执行 DirectShow 过滤器工作。我正在创建我的第一个推送源过滤器,它将提供来自自定义音频源的音频。目前我最大的问题是如何确定在 FillBuffer() 调用期间我将复制到过滤器的输出缓冲区中的数据量。
我真的一次只复制一个音频样本吗?在我的情况下,这将只有 2 个字节,因为每个音频样本都是 16 位宽的单通道。这似乎效率极低。还是我一次复制一个样本块,如果是这样,确定要复制多少字节的正确逻辑是什么?简单地使用 Sample.GetSize() 返回的值作为要提供的字节数是否是正确的逻辑,其中 Sample 是传递给 FillBuffer() 调用的 IMediaSample 对象?
此外,如果有人对创建音频推送源过滤器和视频过滤器有任何提示或注意事项,请在此处发布。我正在使用的示例是一个视频过滤器,它将当前桌面图像作为一系列位图流式传输。我担心当使用视频过滤器作为我的起点时,我会做一些不适合纯音频 DirectShow 过滤器的事情。此外,来自此过滤器的音频必须是实时的,因为它涉及两方之间的实时音频连接。