使用DirectShow采集摄像头并对视音频进行H264和AAC实时编码后封装成MP4
使用DirectShow采集摄像头并实时进行H264和AAC编码,然后将其封装成MP4,希望对大家有用
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5615 2017-02-25 17:07 CameraAVEncodeExAudioSampleGrabber.cpp
文件 2356 2017-02-25 17:16 CameraAVEncodeExAudioSampleGrabber.h
文件 18936320 2014-05-06 10:08 CameraAVEncodeExinavcodec-55.dll
文件 11179022 2016-05-05 12:55 CameraAVEncodeExinavcodec-56.dll
文件 119310 2015-10-28 10:39 CameraAVEncodeExinavdevice-55.dll
文件 147982 2016-05-05 12:54 CameraAVEncodeExinavdevice-56.dll
文件 709646 2015-10-28 10:39 CameraAVEncodeExinavfilter-3.dll
文件 2034688 2014-05-06 10:08 CameraAVEncodeExinavfilter-4.dll
文件 1430542 2016-05-05 12:55 CameraAVEncodeExinavfilter-5.dll
文件 5342720 2014-05-06 10:08 CameraAVEncodeExinavformat-55.dll
文件 2149390 2016-05-05 12:55 CameraAVEncodeExinavformat-56.dll
文件 418304 2014-05-06 10:08 CameraAVEncodeExinavutil-52.dll
文件 517646 2016-05-05 12:56 CameraAVEncodeExinavutil-54.dll
文件 2354688 2016-03-04 15:14 CameraAVEncodeExinCC_API.dll
文件 163840 2015-12-21 11:46 CameraAVEncodeExinDEVICEIO.dll
文件 594432 2017-02-25 17:22 CameraAVEncodeExinGetDeviceInfoD.exe
文件 60318 2015-11-30 18:38 CameraAVEncodeExinlibasprintf-0.dll
文件 284282 2016-03-02 20:46 CameraAVEncodeExinlibass-5.dll
文件 144151 2015-09-02 14:24 CameraAVEncodeExinlibassuan-0.dll
文件 38003 2016-02-09 19:03 CameraAVEncodeExinlibatomic-1.dll
文件 298648 2015-10-05 17:14 CameraAVEncodeExinlibbluray-1.dll
文件 76571 2016-02-29 15:50 CameraAVEncodeExinlibbz2-1.dll
文件 61527 2015-07-08 13:44 CameraAVEncodeExinlibcaca++-0.dll
文件 857150 2015-07-08 13:44 CameraAVEncodeExinlibcaca-0.dll
文件 1080874 2015-10-30 14:38 CameraAVEncodeExinlibcairo-2.dll
文件 34476 2015-10-30 14:38 CameraAVEncodeExinlibcairo-gobject-2.dll
文件 171881 2015-10-30 14:38 CameraAVEncodeExinlibcairo-script-interpreter-2.dll
文件 46202 2015-06-29 19:27 CameraAVEncodeExinlibcharset-1.dll
文件 221899 2015-07-06 19:09 CameraAVEncodeExinlibcppunit-1-13-0.dll
文件 1744718 2016-03-02 19:20 CameraAVEncodeExinlibeay32.dll
............此处省略592个文件信息
#include “stdafx.h“
#include “GetDeviceInfo.h“
#include “AudioSampleGrabber.h“
UINT AudioDealFunc(LPVOID lpVoid);
UINT AudioDealFunc(LPVOID lpVoid)
{
CAudioSampleGrabber *pManage = (CAudioSampleGrabber*)lpVoid;
if (pManage)
{
pManage->AudioDeal();
}
return 0;
}
CAudioSampleGrabber::CAudioSampleGrabber(void)
:m_mxMsgLog(FALSE NULL NULL)
{
m_hFaacEncHandle = NULL;
m_faacConfigurePtr = NULL;
m_bBeginEncode = FALSE;
m_bEndEncode = FALSE;
m_bFirst = TRUE;
m_fpOut = NULL;
m_nInputSamples = 0; //输入采样大小
m_nMaxOutputBytes = 0; //输出大小
//m_audioTotal = 0;
m_sSavePath = _T(““);
m_arrAudioDataInfo.RemoveAll();
m_hMainExitEvent = CreateEvent(NULLTRUEFALSENULL);
m_bSampleBegin = TRUE;
}
CAudioSampleGrabber::~CAudioSampleGrabber(void)
{
}
ULONG STDMETHODCALLTYPE CAudioSampleGrabber::AddRef()
{
return 2;
}
ULONG STDMETHODCALLTYPE CAudioSampleGrabber::Release()
{
return 1;
}
HRESULT STDMETHODCALLTYPE CAudioSampleGrabber::QueryInterface(REFIID riid void ** ppv)
{
if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown )
{
*ppv = (void *) static_cast ( this );
return NOERROR;
}
return E_NOINTERFACE;
}
HRESULT STDMETHODCALLTYPE CAudioSampleGrabber::SampleCB(double SampleTime IMediaSample *pSample)
{
return 0;
}
HRESULT STDMETHODCALLTYPE CAudioSampleGrabber::BufferCB(double SampleTime BYTE *pBuffer long BufferLen)
{
CString str;
//str.Format(_T(“
Audio--BufferLen:%ld“) BufferLen);
//OutputDebugString(str);
if(m_bBeginEncode)
{
BYTE * pcmData = new BYTE[BufferLen];
memcpy(pcmData pBuffer BufferLen);
GrabDataInfo sData;
sData.pData = pcmData;
sData.nDataSize = BufferLen;
sData.dSampleTime = SampleTime;
m_arrAudioDataInfo.Add(sData);
str.Format(_T(“
Audio--BufferLen:%ld SampleTime:%f
“) BufferLen SampleTime);
OutputDebugString(str);
if (m_bFirst)
{
m_bFirst = FALSE;
AfxBeginThread(AudioDealFunc this);
}
}
return 0;
}
void CAudioSampleGrabber::AudioDeal()
{
USES_CONVERSION;
string strFullPath = W2A(m_sSavePath);
m_fpOut = fopen(strFullPath.c_str() “wb“);
m_hFaacEncHandle = faacEncOpen(m_nSamplesPerSec m_nChannels &m_nInputSamples &m_nMaxOutputBytes);
if(m_hFaacEncHandle == NULL)
{
OutputDebugString(_T(“faacEncOpen failed“));
return;
}
//获取配置
m_faacConfigurePtr = faacEncGetCurrentConfiguration(m_hFaacEncHandle);
m_faacConfigurePtr->inputFormat = FAAC_INPUT_16BIT;
// 0 = Raw1 = ADTS
m_faacConfigurePtr->outputFormat = 1;
m_faacConfigurePtr->aacobjectType = MAIN;
m_faacConfigurePtr->allowMidside = 0;
m_faacConfigurePtr->useLfe = 0;
m_faacConfigurePtr->useTns = 1;
//设置配置
int nRet = faacEncSetConfiguration(m_hFaacEncHandle m_faacConfigurePtr);
m_bSampleBegin = TRUE;
while (1)
{
DWORD dwRet = WaitForSingleobject(m_hMainExitEvent 10);
if(dwRet == WAIT_OB
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 5615 2017-02-25 17:07 CameraAVEncodeExAudioSampleGrabber.cpp
文件 2356 2017-02-25 17:16 CameraAVEncodeExAudioSampleGrabber.h
文件 18936320 2014-05-06 10:08 CameraAVEncodeExinavcodec-55.dll
文件 11179022 2016-05-05 12:55 CameraAVEncodeExinavcodec-56.dll
文件 119310 2015-10-28 10:39 CameraAVEncodeExinavdevice-55.dll
文件 147982 2016-05-05 12:54 CameraAVEncodeExinavdevice-56.dll
文件 709646 2015-10-28 10:39 CameraAVEncodeExinavfilter-3.dll
文件 2034688 2014-05-06 10:08 CameraAVEncodeExinavfilter-4.dll
文件 1430542 2016-05-05 12:55 CameraAVEncodeExinavfilter-5.dll
文件 5342720 2014-05-06 10:08 CameraAVEncodeExinavformat-55.dll
文件 2149390 2016-05-05 12:55 CameraAVEncodeExinavformat-56.dll
文件 418304 2014-05-06 10:08 CameraAVEncodeExinavutil-52.dll
文件 517646 2016-05-05 12:56 CameraAVEncodeExinavutil-54.dll
文件 2354688 2016-03-04 15:14 CameraAVEncodeExinCC_API.dll
文件 163840 2015-12-21 11:46 CameraAVEncodeExinDEVICEIO.dll
文件 594432 2017-02-25 17:22 CameraAVEncodeExinGetDeviceInfoD.exe
文件 60318 2015-11-30 18:38 CameraAVEncodeExinlibasprintf-0.dll
文件 284282 2016-03-02 20:46 CameraAVEncodeExinlibass-5.dll
文件 144151 2015-09-02 14:24 CameraAVEncodeExinlibassuan-0.dll
文件 38003 2016-02-09 19:03 CameraAVEncodeExinlibatomic-1.dll
文件 298648 2015-10-05 17:14 CameraAVEncodeExinlibbluray-1.dll
文件 76571 2016-02-29 15:50 CameraAVEncodeExinlibbz2-1.dll
文件 61527 2015-07-08 13:44 CameraAVEncodeExinlibcaca++-0.dll
文件 857150 2015-07-08 13:44 CameraAVEncodeExinlibcaca-0.dll
文件 1080874 2015-10-30 14:38 CameraAVEncodeExinlibcairo-2.dll
文件 34476 2015-10-30 14:38 CameraAVEncodeExinlibcairo-gob
文件 171881 2015-10-30 14:38 CameraAVEncodeExinlibcairo-sc
文件 46202 2015-06-29 19:27 CameraAVEncodeExinlibcharset-1.dll
文件 221899 2015-07-06 19:09 CameraAVEncodeExinlibcppunit-1-13-0.dll
文件 1744718 2016-03-02 19:20 CameraAVEncodeExinlibeay32.dll
............此处省略592个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)