用过ACM控件进行语音压缩的朋友请进,简单的问题(100分)

  • 主题发起人 主题发起人 一个过客
  • 开始时间 开始时间

一个过客

Unregistered / Unconfirmed
GUEST, unregistred user!
1、我们语音压缩一般采用GSM 6.10压缩模块,也就是所谓的Codecs,当然也可以采用别的模块。
那么通话的双方是不是应该使用同一种模块才行?如果是,那么我怎么确定对方机器安装有和我
一样的压缩模块?换句话说,我怎么确定对方机器安装了GSM 6.10压缩模块?

2、如果无法确定,或者说GSM 6.10不是操作系统自带的压缩模块,那么我怎样安装该模块?我
曾经在一台干净的Win98上测试,发现没有这个模块,于是我安装了Microsoft MediaPlayer,
然后就有了,就是说媒体播放器带有该模块,可是媒体播放器毕竟太大了。请问有没有独立的安装
文件?
 
我的经验是在慢的机器上会压缩会出错
 
大哥,咱们不考虑机器的问题,咱们只考虑一下我提的问题好吗?

不过你的经验也许对我很有用。

大家继续!
 
安装GSM6.10的codecs只需要拷贝msgsm32.acm这个文件到目标机器,然后在目标机器的
注册表
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Drivers32键下
添加一个名为msacm.msgsm610字符串,值为msgsm32.acm就可以。

至于怎么确定对方用的是什么codecs,如果你的数据包是RTP的话,它的报头里有一个域
是codecs的payload值,根据这个域的值就可以知道对方用的是什么codecs。
 
总算遇到明白人了,大哥别走!

>>如果你的数据包是RTP的话
不懂。 我使用ACM控件捕获声音之后,直接用TCP/IP把数据传输过去,传输协议就是一般
的网络传输。当然,我可以照你说的意思在我的传输协议里面加上一个域表示codecs,
但是,如果我发现对方过来的codecs和我的不一样,而我的对方又没有,那怎么版?
是不是应该双方不断把自己支持的codecs传过来进行撮合匹对? 一般的网络语音软件
怎样做的?我估计像类似NetMetting这样的软件是安装的时候就给机器装上了相同
的codecs吧?

说到这里,我的问题就可以简单归结为:[red]如何安装codces?[/red] 比如你前面说的注册表的方式
就很好,可是其他的编码方式呢? 比如我机器上有DivX WMA编码,我想给对方也装上该
编码,那么我怎样知道我这个DivX编码对应的文件名是什么?注册表键是什么?我看了
你说的那个注册表的位置,里面确实有很多codecs,我也看到了我的Divx的对应项。那么
是不是不论什么编码,我只要照你前面说的方法安装就可以呢? 难道这些编码不需要注册吗?
他们不是COM组件?

Ps. 我之所以不用GSM6。10,是因为这种编码压缩率还是太大了,每秒1625字节,如果是
336modem拨号上网,一秒钟经常很难传输1625字节。我看Divx编码不错,每秒才960字节。
 
RTP就是实时传输协议,用于传输实时的多媒体数据流,简单来说他就是在你自己的数据包
的头部加入12字节的RTP报头,然后用UDP发送/接收。

>>但是,如果我发现对方过来的codecs和我的不一样,而我的对方又没有,那怎么版?
>>是不是应该双方不断把自己支持的codecs传过来进行撮合匹对? 一般的网络语音软件
>>怎样做的?我估计像类似NetMetting这样的软件是安装的时候就给机器装上了相同
>>的codecs吧?

咱们之前讨论的都是数据传输这块,实际上还应该有信令控制这块(走RTCP协议),由信令
来控制通话的建立、终止、转接、会议。。。
详细的你可以参考机械工业出版社的《IP语音技术》《IP电话技术稳定的VOIP服务集成》
这两本书。
 
好吧,那么就最后那个问题了,你说的安装编码的方式可靠吗?真的不用像COM那样注册吗?
因为我看acm选编码的时候需要填充一个PWaveFormat结构,这个结构里面有一个wFormatTag,
好像是每种编码的唯一ID,像你说的安装方法如何保证该ID唯一?难道这个ID是所属编码固定
死的?
 
另外,win98下也是在该注册表键下面吗?
 
我用这种方式装过gsm,g711,g729,adpcm等codecs,其他没有装过。

每个codecs都有一个唯一的wFormatTag,并且不会改变(win9x,win2k,winxp都一样的值)。
但是你在填充一个PWaveFormatEx结构的时候要注意它的cbSize,
WaveFormatEx.cbSize并不是指WaveFormatEx的大小,而是指在cbSize之后还有多少
个字节的附加数据,所以不同的codecs它的cbSize不同,并且它的附加数据也不同。

win9x,win2k,winxp都有该注册表键,winnt不清楚。
 
大哥的话让我受益匪浅啊!
1、明白了codecs的安装原理
2、明白了cbSize的含义,这点很重要啊! 我以前以为都需要填充满那50个字节呢。

我记住大哥的名字了,以后有机会还要继续请教的,多谢了!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
629
import
I
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部