分享一个很久以前做的G.726编码语音传输代码

来源:互联网 发布:日本买房知乎 编辑:程序博客网 时间:2024/06/06 00:09

很久之前做了个基于G.726编码的单向语音传输的东东。简单说就是一个人用Android手机说话,然后处于同一局域网的PC机能听到。

原理就是Android手机采集语音的PCM编码,然后用NDK在底层编码成G.726码流,通过组播在局域网传播,PC端接收数据,通过G.726动态连接库解码成PCM流,通过SDL库的播放出来,当然通话质量并不是很好。

这里用到了Sun公司的G.726语音编码库,C语言编写。我通过Android NDK把它编译成.so动态库供上层Java调用,用VC++6.0编译成.lib动态库。

编解码最主要就是如下两个函数:

void g726_Encode(unsigned char *speech,char *bitstream);void g726_Decode(char *bitstream,unsigned char *speech);

我在Android端采集的是8KHz采样,16位量化PCM编码的单声道数据,上述G.726编码库的压缩比是8:1,理论上编码后的数据为:8000*16/8=16Kbps=2KBps,1分钟是120KB,如果双向通话就是240KB,如果打个电话5分钟的话,就是1.2MB的流量,呃,也不少吧。

当然G.726是早期的编码啦,现在的诸如Speex的编码库可以做到可变比特率,在静音时节省流量。

我后来也完成了G.729库的编解码,压缩比是16:1,流量更小,通话质量也不错,有空再整理吧。

本文提到的源码可以在我上传的资源里下载。

PC端 http://download.csdn.net/detail/chenxupro/3930982

Android端 http://download.csdn.net/detail/chenxupro/3930978

原创粉丝点击