繁体   English   中英

在网站上录制音频:Red5流或发布音频数据?

[英]Recording Audio on website: Red5 stream or posting the audio data?

首先让我确定我想做什么:

我的用户可以在我的网站上记录语音笔记,可以在这些笔记中添加标签以建立索引以及标题。 保存便笺后,我会将便笺的路径以及其他信息保存在数据库中。

现在,我有2种选择来进行记录,这两种选择都涉及嵌入到我的网站中的.swf:

1)我可以使用Red5服务器将音频流式传输到服务器并保存文件,然后将指向该文件的路径返回到我的应用程序以进行数据库保存,这似乎相当复杂,因为我必须转换音频并将其移至服务器端Red5应用程序中属于用户的适当文件夹,我不太了解如何构建。

2)我可以简单地记录音频并获取其字节数组,对其进行Base64编码,然后将其与所需的其余数据(通过简单的POST或AJAX调用)一起发送给PHP,对其进行解码在服务器上并使用适当的扩展名制作文件,此处也将使用ffmpeg进行音频转换,此选项似乎更简单,但我不知道它的可行性。

您会说哪种选择更可行,更容易开发? 提前致谢

根据录制的计划持续时间,您可能可以使用第二个选项。 我最近在一个项目中成功使用了类似的方法,但是录音最多只有30秒左右。 这是我所做的与您所建议的有所不同的原因,以及为什么我认为更好的原因:

  • 要从麦克风捕获声音并将其存储到ByteArray,请使用SAMPLE_DATA事件,该事件在从麦克风输入更多声音数据时分派。 文档中有一个示例可以对此进行足够的解释。

  • 由于大多数用户将使用普通的家用计算机,而没有任何特殊的记录设备,因此可以安全地假定不需要完全保真记录。 我每个样本仅使用2个字节,并且仅使用单声道,而不是使用在SAMPLE_DATA事件中从麦克风获得的完整64位浮点数(AS3 Number )。 只需读取Number并执行myFloatSample * 0x7fff即可将其转换为16位带符号整数。

  • 如果您只是在该频率范围内录制语音或其他内容,请不要使用原始的44.1kHz采样率。 您可能会以22.05kHz达到最佳效果,这将立即将数据量减少一半。 只需相应地设置Microphone.rate属性。

  • 不要使用Base64对数据进行编码。 将其作为二进制数据发送,该数据会小得多。 您可以将其作为原始POST数据发送,也可以使用AMF之类的数据发送。 另外,在发送之前,请使用ByteArray上的本机compress()deflate()方法对其进行压缩。 在服务器上,分别使用PHP支持的ZLIB或原始DEFLATE(膨胀)算法进行解压缩。

  • 在服务器上解压缩后,您所拥有的实际上就是所谓的原始16位单声道PCM流。 顺便说一句,这应该是ffmpeg(或lame)支持的输入格式之一,因此您应该能够将其编码为mp3,而无需先进行任何手动解码。

显然,Red5解决方案可能会更好,因为它是针对任务而定制的。 但是,如果您没有足够的资源来设置Red5服务器,或者不想使用Java,那么只要您不要离开太长的录音,上述解决方案就可以很好地工作。

举一个简单的例子,以每秒22,050个样本,每个样本2个字节的速度记录30秒将达到1.3MB。 即使放气,传输到服务器的声音在30秒内仍可能接近兆字节。 这可能适合您的应用程序,也可能不可接受。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM