【问题标题】:Writing WebRTC (AudioTrackSinkInterface) raw audio to disc将 WebRTC (AudioTrackSinkInterface) 原始音频写入光盘
【发布时间】:2017-03-18 12:52:17
【问题描述】:

我正在尝试录制由 WebRTC PeerConnection MediaStream 传输的音频。我在实现AudioTrackSinkInterface 的音轨中添加了一个接收器。它实现了OnData 方法:

void TestAudioTrackSink::OnData(const void* audio_data, int bits_per_sample, int sample_rate, size_t number_of_channels, size_t number_of_frames) {
    size_t valueCount = number_of_channels * number_of_frames;
    int16_t *_data = (int16_t*)audio_data;

    f.write((char*)&_data, sizeof(int16_t) * valueCount);
    f.flush();
}

f 是一个ofstreamBits per sample 是 16,sample rate 是 16000,channels 是 1,frames 是 160。

但是当我使用 AudaCity 原始导入(签名 16 位 PCM、小端序、单声道、采样率 16000)打开创建的文件时,我没有得到有意义的音频。

如何正确写入原始音频日期?

【问题讨论】:

    标签: c++ windows audio webrtc


    【解决方案1】:

    最后我访问的是指针本身存储的数据,而不是指针指向的数据,这是一个经典。我的方法的正确实现如下所示:

    void TestAudioTrackSink::OnData(const void* audio_data, int bits_per_sample, int sample_rate, size_t number_of_channels, size_t number_of_frames) {
        size_t number_of_bytes = number_of_channels * number_of_frames * sizeof(int16_t); //assuming bits_per_sample is 16      
        f.write(reinterpret_cast<const char*>(audio_data), number_of_bytes);
        f.flush();
    }
    

    注意:为了更多地处理 webrtc 本机检索和发送的音频数据,我现在正在检查一个自定义 AudioDeviceModule。

    【讨论】:

      【解决方案2】:

      要向@ZoolWay 已正确答案添加更多详细信息,我在 Windows 平台中未以二进制模式打开文件时遇到文件损坏问题。简而言之,确保文件具有ios_base::binary 标志:

      std::ofstream stream(LR"(D:\test.pcm)", ios_base::binary);
      
      [...]
      
      void TestAudioTrackSink::OnData(const void* audio_data, int bits_per_sample, int sample_rate, size_t number_of_channels, size_t number_of_frames)
      {
          size_t number_of_bytes = number_of_channels * number_of_frames * sizeof(int16_t); //assuming bits_per_sample is 16      
          stream.write(reinterpret_cast<const char*>(audio_data), number_of_bytes);
          stream.flush();
      }
      

      为我解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-24
        • 2023-03-08
        • 2021-11-20
        • 1970-01-01
        • 2020-12-24
        • 2023-04-08
        • 1970-01-01
        • 2012-09-02
        相关资源
        最近更新 更多