DirectShow音频采集pcm,实时编码AAC,附源码
来源:互联网 发布:windows 2008 r2 ad域 编辑:程序博客网 时间:2024/05/21 15:46
定期送福利,今天给大家送上Windows中利用DirectShow采集microphone音频,并将采集到的pcm数据,利用FAAC库编码成AAC,进行本地存储或者网络传输。
直接贴代码,解析看注释:
/*功能描述:简单实现用DirectShow采集Windows麦克风音频PCM数据经过FAAC编码成AAC存储文件,可根据项目修改成直播,对讲等实时传输类应用。From:http://blog.csdn.net/xiejiashuSite:http://www.easydarwin.org时间:2014/07/28*/#include "../DSAudio/General.h"#include<iostream>#include<cstring>#include<windows.h>#include<conio.h>#include "../DSAudio/dscapture.h"#include "DSAudio/FAACEncoder.h"unsigned char fBitsPerSample, fNumChannels;unsigned fSamplingFrequency;unsigned fGranularityInMS;DSCapture* ds_capture_;FAACEncoder* faac_encoder_;unsigned long max_out_bytes;unsigned char* outbuf;FILE* f_aac_;int main(){fBitsPerSample = 16; //单个采样音频信息位数fNumChannels = 2; //通道数fSamplingFrequency = 44100;//采样率faac_encoder_ = new FAACEncoder(); //新建AAC编码对象faac_encoder_->Init(fSamplingFrequency,fNumChannels,fBitsPerSample); //初始化AAC编码器ds_capture_ = new DSCapture();std::map<CString, CString> a_devices = ds_capture_->DShowGraph()->AudioCapDevices();if(a_devices.size() == 0 ) ::exit(0);DSAudioFormat audio_fmt; audio_fmt.samples_per_sec = fSamplingFrequency; audio_fmt.channels = fNumChannels; audio_fmt.bits_per_sample = fBitsPerSample;// 枚举音频采样设备,选择最后一个CString audio_device_id;for (std::map<CString, CString>::iterator it = a_devices.begin(); it != a_devices.end(); ++it) {audio_device_id = it->first; } ds_capture_->Create(audio_device_id, audio_fmt, NULL); // 开始采集音频数据 ds_capture_->StartAudio();::Sleep(10);max_out_bytes = faac_encoder_->MaxOutBytes(); outbuf = (unsigned char*)malloc(max_out_bytes);// 编码后存文件f_aac_ = fopen("./audio.aac","wb");printf("Recording...");while(1){int pcmLen = 0;// 采集音频pcm数据char* pcmBuf = ds_capture_->GetBuffer(pcmLen);if(pcmLen > 0){unsigned int sample_count = (pcmLen << 3)/fBitsPerSample;unsigned int buf_size = 0;// 编码AACfaac_encoder_->Encode((unsigned char*)pcmBuf, sample_count, (unsigned char*)outbuf, buf_size);if(buf_size > 0){printf(".");// 存文件或者自定义fwrite(outbuf,1,buf_size,f_aac_);}}// 释放采集的pcm数据ds_capture_->ReleaseBuffer(pcmBuf);::Sleep(1);}free(outbuf);}
源码下载:http://pan.baidu.com/s/1kTj05Fp
------------------------------------------------------------
本文转自www.easydarwin.org,更多开源流媒体解决方案,请关注我们的微信:EasyDarwin
0 0
- DirectShow音频采集pcm,实时编码AAC,附源码
- android音频采集,MediaCodec实时PCM转AAC
- Android PCM音频的采集和编码成AAC
- android 实时PCM数据编码成AAC
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 采集音频和摄像头视频并实时H264编码及AAC编码
- 修复MSP430仿真器无法使用(固件升级导致)
- codeforces-B. DZY Loves Chemistry
- hdu 1045 Fire Net(DFS+回溯)
- UITableView中Cell重用机制导致内容重复解决方法
- 修改内核来定位系统僵死问题
- DirectShow音频采集pcm,实时编码AAC,附源码
- 杭电ACM 1865 listing
- Android NDK 学习笔记
- 改变UINavigationBar导航条标题颜色和字体
- 查看.a库文件是否把函数编译进去了
- hdu 1078 FatMouse and Cheese dfs 记忆化搜素
- 进制转换函数
- (无bug版)有一段文本,将文本中的所有单词,存放到一个字符指针数组中(要求每个单词内存恰好)。
- Myeclipse和tomcat模拟写服务器数据