音频压缩方案
时间:2006-07-02 来源:lzhw_lucky
初步定为采用G.729进行音频压缩。
首先了解一下G.729的接口问题,如何输入原始数据和得到编码的数据的格式为何?
采用的协议为UDP+RTP。应该达到具有像QQ等聊天工具等效果。
由于初期方案考虑的不是很完善,现更正如下:
由于G.729压缩方案只适合windows下使用,如果要在linux下使用需要到visage网站购买它的linux版本,(并且G.729没有Java版本),有G.729和G.729A和G.728和G.723不适应跨平台的程序的编写。所以经过综合考虑选用MPEG4进行音频编码,而用H.264或H.263进行视频编码。因为两者都有一个跨平台的源代码FFMPEG。
发送端在Linux下编译,而FFMPEG正好就可以在Linux下编译。
接受端在跨平台的Java下显示,由于FFMPEG本身是C++语言编写的,不能够直接在Java下调用,因此需要对其进行Java封装,目前开源网sourceforge给出了两个Java版本--JFFMPEG、FMJ和FobsFFMPEG。三者都可以在java下直接调用FFMPEG的C++ API。因此达到跨平台的编译。
不过好像是RTP这一块解决的都是不好,如果想用的化需要自己编一个RTP包装。其实JMF也支持H.263编解码。
基于上述方案,可以实现编写的音视频编解码的跨平台运行。
也可以考虑以下方案:
由于JMF支持mp3(MPEG1 Layer3)解码,所以可以在Java客户端可以采用MP3解码,而在服务器端由于是C++语言编写的,所以应该采用Lame MP3编码库(可以在sourceforge下载)。虽然压缩比不如MPEG4,但实现起来简单,不失为一个好的选择!
经过测试感觉采用GSM编解码方式具有更好的可取性:
经过测试mp3只能在本地播放,不能经过网络RTP包传输进行实时播放。
而采用GSM有linux下的编码版本,在Java下又有RTP解包装,另外由于较高的压缩比,比较适合在窄带中应用。
另外猜测JMF中的MPEG可能指的是MPEG1,而非MPEG4格式!
RTP+RTCP的库采用大牛Jori Liesenborgs的JRTPLIB和JVOIPLIB来设计媒体的传输方案。估计用2.8的版本就可以了,支持RTP 1889。
下一步工作:关于RTP要好好结合他给的例子研究一下!
相关阅读 更多 +