【问题标题】:VOIP SIP - Help to encode from PCM to U-lawVOIP SIP - 帮助从 PCM 编码到 U-law
【发布时间】:2012-05-04 10:51:05
【问题描述】:

我正在开发 VOIP Windows Phone 项目(Windows Phone 的软电话应用程序)。目前,我(Windows phone 软电话)只能接收和听到另一个软电话的声音,只有 ONE-WAY。我可以将我的语音(RTP 数据包)发送到另一个软电话,但它包含完整的噪音。我按照http://www.codeproject.com/Articles/14237/Using-the-G711-standard?msg=2573223#xx2573223xx 对 U-law 和 PCM 之间的 RTP 数据包进行编码和解码。解码功能对我很有效,但编码却不行。

我解码RTP数据包并播放它,采样率为8000Khz(它是U-law格式的采样率)。这是我的播放代码:

SoundEffect soundEffect = new SoundEffect(buffer, 8000, AudioChannels.Mono);
SoundEffectInstance soundInstance = soundEffect.CreateInstance();
soundInstance.Play();

关于编码,我使用Windows Phone的麦克风录制语音=>编码为U-Law格式=>放入RTP数据包=>发送。但是这些数据包包含完整的噪音,而另一个软电话(目的地呼叫)只接收噪音和噪音。

麦克风录制数据的格式为:PCM 16 bit - 16KHz。你有什么办法可以帮我解决吗?

非常感谢您。

【问题讨论】:

  • 处理捕获和编码的代码在哪里?
  • 以下是在 Windows 7 上的操作方法sipsorcery.codeplex.com/SourceControl/changeset/view/… 虽然我不知道这是否对您特别有用,因为您将无法在 WP7 上使用 NAudio 库。跨度>
  • @hthoang88 : 你能利用麦克风框架来录制音频吗,我也在做同样的事情,我的服务器支持速率是 20 毫秒,并且通过麦克风文档,缓冲速率应该是100ms 到 1000ms,你怎么能得到 320 个样本

标签: windows-phone-7 sip voip downsampling


【解决方案1】:

@罗兰: 我用 WP 的麦克风采集数据

public Microphone microphone = Microphone.Default;     
private byte[] buffer; 
Queue<byte[]> recordedVoice = new Queue<byte[]>(); 

每次获取320字节

microphone.GetData(buffer);    

我将它保存到队列中

recordedVoice.Enqueue(buffer);

然后我会将每个recordedVoice编码为U-Law格式(编码函数引用自http://www.codeproject.com/Articles/14237/Using-the-G711-standard?msg=2573223#xx2573223xx):

byte[] encoded = G711MuLaw.G711MuLawEncode(recordedVoice.Dequeue());

但它没有正确编码。

@sipwiz : 我认为 NAudio 不支持 WP7,因为它是 C# 项目,而不是 Silverlight。

@Rowland & sipwiz:收到您的回复我很高兴,非常感谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    相关资源
    最近更新 更多