我正在编写一个 iPhone 应用程序,它需要从内置麦克风录制音频,然后将该音频数据发送到服务器进行处理。
该应用程序使用套接字连接连接到服务器并使用音频队列服务进行录制。我不确定何时实际发送数据。音频队列服务每次在缓冲区中填充一些音频数据时都会触发回调。NSOutputStream 每次有可用空间时都会触发一个事件。
我的第一个想法是在音频队列回调中将数据发送到服务器。但是,如果 NSOutputStream 当时没有可用空间,这似乎会遇到问题。
然后我考虑缓冲从音频队列返回的数据,并在每次 NSOutputStream 触发可用空间事件时发送一些数据。但这似乎有问题,如果发送到服务器先于音频录制,则会出现在可用空间事件上没有任何内容可写的情况,因此不会再次触发该事件并且数据传输将有效地停止。
那么处理这个问题的最佳方法是什么?我是否应该有一个重复触发的计时器并查看是否有可用空间以及需要发送的数据?此外,我认为我需要进行一些线程同步,以便我可以从缓冲区中取出数据块以通过网络发送,但也可以在录制进行时将数据块添加到缓冲区,而不会冒损坏缓冲区的风险。