这个播放器是我在大约在2014年的时候,做探针开发时,对国内当时一些voip软件的数据包的捕获(捕获是在探针模块中实现的)和回放,这是我真正参与项目所做的第二个小功能(第一个是微博数据解析)。
项目地址:voip播放器
该项目支持speex,Opus,codecilbc,arm,729,723,721,pcmu,gsm,celt等多种流媒体格式编码的播放,支持多款voip软件语音数据的播放。其核心原理是,捕获各种voip电话软件的的网络数据包,提取数据包中封装的各种语音编码数据(如果数据包被加密了还需要解密),并将该编码解码为pcm数据(pcm即为未压缩的原始语音采样数据),并采用windows audio api播放这些数据。
需要说明的是,这些数据包大多是udp数据包,并且采用了rtp/rtsp协议封装(还有少数sip协议数据包)。
从该项目代码中,可以看到多个的异或解密模块。这是因为,当时做项目时,发现很多程序的voip数据是加密的,不过比较简单,大多是异或加密。
该项目的缺憾是,语音都是单向的,也就是一个文件中只有一个人的语音数据,需要找到对端的语音,解码合成才会有两个人的声音。
虽然这个项目并没有什么值得拿出来说的,但是对rtsp的理解是有一点帮助的,这也是我记忆中一个重要的组成部分。使我有勇气贯彻自己的信念,从一个农民工走向一个程序员的开始。
这里面还有些是我当时跟老婆和儿子通话的语音数据。那时候儿子才6岁,听着他稚嫩的声音,我的鼻子和眼睛酸酸的。