我正在尝试解码收到的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一起使用的正确方法吗?
答案 0 :(得分:1)
在尝试播放WAV文件之前,您必须先处理WaveFileWriter,因为WAV文件在开头只有标题,只有在添加完所有数据后才能填写。