• 大小: 52.34MB
    文件类型: .rar
    金币: 2
    下载: 2 次
    发布日期: 2022-12-12
  • 语言: 其他
  • 标签: directshow  dhsow  ffmpeg  

资源简介

使用DirectShow采集摄像头并实时进行H264和AAC编码,然后将其封装成MP4,希望对大家有用

资源截图

代码片段和文件信息

#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(“\n 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(“\n Audio--BufferLen:%ld SampleTime:%f \n“) 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  CameraAVEncodeEx\AudioSampleGrabber.cpp

     文件       2356  2017-02-25 17:16  CameraAVEncodeEx\AudioSampleGrabber.h

     文件   18936320  2014-05-06 10:08  CameraAVEncodeEx\bin\avcodec-55.dll

     文件   11179022  2016-05-05 12:55  CameraAVEncodeEx\bin\avcodec-56.dll

     文件     119310  2015-10-28 10:39  CameraAVEncodeEx\bin\avdevice-55.dll

     文件     147982  2016-05-05 12:54  CameraAVEncodeEx\bin\avdevice-56.dll

     文件     709646  2015-10-28 10:39  CameraAVEncodeEx\bin\avfilter-3.dll

     文件    2034688  2014-05-06 10:08  CameraAVEncodeEx\bin\avfilter-4.dll

     文件    1430542  2016-05-05 12:55  CameraAVEncodeEx\bin\avfilter-5.dll

     文件    5342720  2014-05-06 10:08  CameraAVEncodeEx\bin\avformat-55.dll

     文件    2149390  2016-05-05 12:55  CameraAVEncodeEx\bin\avformat-56.dll

     文件     418304  2014-05-06 10:08  CameraAVEncodeEx\bin\avutil-52.dll

     文件     517646  2016-05-05 12:56  CameraAVEncodeEx\bin\avutil-54.dll

     文件    2354688  2016-03-04 15:14  CameraAVEncodeEx\bin\CC_API.dll

     文件     163840  2015-12-21 11:46  CameraAVEncodeEx\bin\DEVICEIO.dll

     文件     594432  2017-02-25 17:22  CameraAVEncodeEx\bin\GetDeviceInfoD.exe

     文件      60318  2015-11-30 18:38  CameraAVEncodeEx\bin\libasprintf-0.dll

     文件     284282  2016-03-02 20:46  CameraAVEncodeEx\bin\libass-5.dll

     文件     144151  2015-09-02 14:24  CameraAVEncodeEx\bin\libassuan-0.dll

     文件      38003  2016-02-09 19:03  CameraAVEncodeEx\bin\libatomic-1.dll

     文件     298648  2015-10-05 17:14  CameraAVEncodeEx\bin\libbluray-1.dll

     文件      76571  2016-02-29 15:50  CameraAVEncodeEx\bin\libbz2-1.dll

     文件      61527  2015-07-08 13:44  CameraAVEncodeEx\bin\libcaca++-0.dll

     文件     857150  2015-07-08 13:44  CameraAVEncodeEx\bin\libcaca-0.dll

     文件    1080874  2015-10-30 14:38  CameraAVEncodeEx\bin\libcairo-2.dll

     文件      34476  2015-10-30 14:38  CameraAVEncodeEx\bin\libcairo-gobject-2.dll

     文件     171881  2015-10-30 14:38  CameraAVEncodeEx\bin\libcairo-script-interpreter-2.dll

     文件      46202  2015-06-29 19:27  CameraAVEncodeEx\bin\libcharset-1.dll

     文件     221899  2015-07-06 19:09  CameraAVEncodeEx\bin\libcppunit-1-13-0.dll

     文件    1744718  2016-03-02 19:20  CameraAVEncodeEx\bin\libeay32.dll

............此处省略592个文件信息

评论

共有 条评论