首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用NSOutputStream在iPhone上录制音频并通过网络发送

用NSOutputStream在iPhone上录制音频并通过网络发送
EN

Stack Overflow用户
提问于 2010-03-15 23:44:45
回答 1查看 2.2K关注 0票数 2

我正在编写一个iPhone应用程序,它需要从内置麦克风录制音频,然后将音频数据发送到服务器进行处理。

应用程序使用套接字连接来连接到服务器,并使用音频队列服务来进行录制。我不确定的是什么时候真正发送数据。音频队列服务每次用一些音频数据填充缓冲区时都会触发一个回调。NSOutputStream每次有可用空间时都会触发一个事件。

我的第一个想法是通过音频队列回调将数据发送到服务器。但是,如果NSOutputStream当时没有可用的空间,这似乎会遇到问题。

然后,我考虑缓冲从音频队列返回的数据,并在每次NSOutputStream触发可用空间事件时发送一些数据。但是这似乎有一个问题,如果发送到服务器在音频记录之前,那么将存在在可用空间事件上没有可写的情况,因此该事件将不会被再次触发,并且数据传输将被有效地停止。

那么处理这个问题的最好方法是什么呢?我是否应该有一个重复触发的计时器,看看是否有可用的空间以及是否有需要发送的数据?此外,我认为我需要做一些线程同步,以便我可以从我的缓冲区中取出数据块通过网络发送,但也可以在记录进行时将数据块添加到缓冲区中,而不会有损坏缓冲区的风险。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-16 00:53:11

您可以使用环形缓冲区来保存一定数量的音频帧,并在缓冲区超过一定大小时丢弃帧。当你的stream-has-space-available回调被调用时,从环形缓冲区中拉出一个帧并发送它。

CHDataStructures提供了一些环形缓冲区(称为“循环缓冲区”)类。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2448399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档