2013-06-01 58 views
0

我有MediaFoundationEncodern音讯1.7 MediaFoundationEncoder

一个问题,我需要从输入设备文件中AAC记录格式,我写了下面的代码:

private Timer timer; 
    private static IWaveIn _waveIn; 
    private static IWaveProvider _provider; 
    public void StartRecorder() 
    { 
     _waveIn = new WaveInEvent 
      { 
       WaveFormat = new WaveFormat(8000, 1) 

      }; 
     _provider = new WaveInProvider(_waveIn); 

     _waveIn.DataAvailable += OnDataAvailable; 
     _waveIn.StartRecording(); 

     //for testing purpose write only first 5 seconds. 
     timer = new Timer(5000); 
     timer.Elapsed += (sender, args) => Stop(); 
     timer.Start(); 


    } 

    private void Stop() 
    { 
     timer.Stop(); 
     _waveIn.StopRecording(); 
     _waveIn.Dispose(); 
     _waveIn = null; 
     var outputFilename = String.Format("D:\\{0:yyy-mm-dd HH-mm-ss}.aac", DateTime.Now); 
     MediaFoundationEncoder.EncodeToAac(_provider, outputFilename); 
     _provider = null; 
    } 

我也尝试过使用MediaFoundationEncoder.EncodeToWma ​​- 但是,即使在停止录制并放置_waveIn之后,文件大小仍在继续增长。文件中的时间线是正确的,写入文件垃圾字节。

P.S.我使用NAudio的最新版本(1.7)。

+1

有几件事要尝试:1.运行WPF演示应用程序来枚举MF编码器和解码器,并检查是否确实有AAC编码器。 2.尝试使用“.mp4”文件扩展名。 –

+0

感谢Mark的帮助,你是对的,问题出在MF编码器上,我在Windows 8上成功运行上面的代码。但文件大小增长的问题仍然存在。你能帮助解决这个问题吗? –

回答

0

无限期增长的文件大小可能是因为您的输入提供程序从不从其Read方法返回0。我建议您将所有音频写入内存流,然后将其用于RawSourceWaveProvider以形成编码器的输入。 (请记住在编码之前将MemoryStream位置设置为0)

+0

谢谢马克,它帮助了我,对于迟到的回复感到抱歉。 –