Posted on 29-04-2015
Filed Under (技术) by waterlin

一、先介绍一个基本的移动端采集音频模块

OpenSL ES :嵌入式音频加速标准

OpenSL ES™ 是无授权费、跨平台、针对嵌入式系统精心优化的硬件音频加速API。它为嵌入式移动多媒体设备上的本地应用程序开发者提供标准化、高性能、低响应时间的音频功能实现方法,并实现软/硬件音频性能的直接跨平台部署,降低执行难度,促进高级音频市场的发展。

二、再介绍一些常用的音频格式

SILK: Skype 里使用的一种音频格式。这个格式的 SDK 可以从网上下载,不过有版权保护,只允许用来做测试与研究,如果需要在产品里使用,估计还是得取得授权。这个基本上是基于语音对话来设计的质量,对讲话的录音效果还可以,但是对于音乐等来说,效果不太好。

Speex: 已经不再维护,官方建议使用 Opus 来代替。

Opus: 基本上可以说是为网络而生的音频格式,支持网络电话、视频会议以及游戏里的音频对讲等场景。Opus 是由 SILK 发展而来。

AMRWB: Adaptive Multi-Rate Wideband, Nokia 和 VoiceAge 联合开发的一个音频格式,最开始是在 3GPP 里使用。

AAC:这个不用多介绍了吧,几乎是现在最常用的音频格式了,当初主要是用在 Mp4 里的。

HE-AAC:又叫 EAAC+,是 AAC 的改进版本,基本上是现在效果最好的库了。

(0) Comments    Read More   
Posted on 22-04-2015
Filed Under (技术) by waterlin
  1. Maven 会把你依赖的库下载到 ~/.m2 文件夹里,在硬盘里仔细找找。
  2. 如果 Maven 拿不到相关的依赖文件,仔细检查一下 ~/.m2/settings.xml 文件,看究竟有没有错误。
  3. 如果你的代码都写好了,想测试一下相关依赖库等是否正常、能否正常编译,可以使用下面的命令来进行编译:

    如果你们团队有构建服务器,则上述命令的运行应该和服务器上的构建是等价的,在服务器上构建之前,可以使用这个命令来进行构建测试。

  4. Maven 的基本用法及概念参看这里
  5. 配置好了 pom.xml 文件后,以后需要引用第三方库,直接在 pom 文件里配置即可。还有一种情况,如果别人临时编译了一个版本给你要测试,怎么办?这时可以直接把库文件放到本地相应的 libs 目录里,有一些编辑器如 Android Studio 会优先采用本地的库文件。
  6. 如果用 Maven 来构建 Android 工程,可以参看 Android Example Maven Project 这个例子来构建工程。不过现在好像都推荐使用 Gradle 来构建 Android 工程了。
(0) Comments    Read More   
Posted on 09-04-2015
Filed Under (技术) by waterlin

Spydroid 是一个可以让 Android 手机变成音视频采集终端的 App,其中核心功能由 libstreaming 库提供。

技术上的主要实现原理:

  1. 使用 Android 的 MediaRecorder API 来录制音视频为 mp4 文件,然后通过这个 mp4 文件来生成 rtsp 流。这样做,只能做到图像与声音大致同步,尤其是人说话的时候音画同步的问题会特别明显;这种方式对于网络抖动的处理也不是特别好。
  2. 通过 MediaCodec API 来获取视频流的未压缩数据,然后通过自己的编码器,来生成视频流。这个和传统的多媒体视频流思路一样,比较容易控制,但是对 Android 系统的版本有要求,系统版本最低最好不要低于 4.0。

这个库的使用方式主要有两种:

  1. 把 libstreaming 当作 rtsp 客户端来使用,并且植入 Wowza Media Server,这样就可以从手机上获取实时视频流,并让 Wowza Media Server 分发出去,从而实现在网页上观看手机采集的音视频流功能。
  2. 把 libstreaming 当作一个 rtsp 服务器,这样通过 VLC 或是其它 rtsp 流播放器,可以观看当前手机摄像头的音视频流媒体内容。
(0) Comments    Read More