我试图logging由WebRTC PeerConnection
MediaStream
传输的audio。 我添加了一个接收器到实现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
是一个ofstream
。 每个样本的位数是16, 采样率是16000, 通道是1, 帧是160。
但是当我用AudaCity原始导入(签名的16位PCM,大端,单声道,采样率16000)打开创build的文件,我没有得到有意义的audio。
如何正确写入原始audiodate?
最后我发现存储指针本身的数据,而不是它指向的地方。 我的方法的正确实现如下所示:
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本地检索和发送的音频数据,我现在检出一个自定义的AudioDevicemodulee。