NAudio解码ulaw到pcm

时间:2012-03-04 00:02:33

标签: c# rtp naudio

我正在尝试解码收到的RTP流并使用NAudio将其保存到.wav文件,类似于How to decode RTP packets and save it has .wav file

我尝试过几种不同的方法,但没有一种方法可以生成Windows Media Player识别的.wav文件。

以下是我定义波形文件编写器的方法。

var waveFileWriter = new WaveFileWriter("out.wav", new WaveFormat(8000, 16, 1));

然后,对于我收到的每个RTP数据包,我使用:

private void SampleReceived(byte[] sample)
{
    if (sample != null)
    {
        for (int index = 0; index < sample.Length; index++)
        {
            short pcm = MuLawDecoder.MuLawToLinearSample(sample[index]);
            waveFileWriter.WriteByte((byte)(pcm & 0xFF));
            waveFileWriter.WriteByte((byte)(pcm >> 8));
        }
    }
}

代码运行没有错误但是当我尝试在Windows Media Player中打开.wav文件时出现错误。我用WireShark确认RTP流是ulaw。这是与NAudio一起使用的正确方法吗?

1 个答案:

答案 0 :(得分:1)

在尝试播放WAV文件之前,您必须先处理WaveFileWriter,因为WAV文件在开头只有标题,只有在添加完所有数据后才能填写。