-
大小: 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-gob
文件 171881 2015-10-30 14:38 CameraAVEncodeEx\bin\libcairo-sc
文件 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个文件信息
相关资源
- nginx-rtmp-win32-master.rar
- FFMEPG实现h264解码
- ffmpegh265rtmp.zip
- ffserver(windows下编译32位)
- qt_ffmpeg_mp4_export_and_import.zip
- 最简单的基于FFmpeg的推流器 1.2
- 简单的ffmpeg推流demo
- FFmpeg和SDL,读内存中的视频流,进行
- ffmpeg之pcm转AAC
- ffmpeg-2.8.14.tar.gz
- 利用ffmpeg的filter混音
- vs2010 ffmpeg实时解码h264码流
- ffmpeg 音视频转码代码
- windows上自己编译的最新的ffmpeg库
- Qt基于FFmpeg播放本地 H.264H264文件
- 从ffmpeg中抽取的h264解码器,可用于
- ffplay源代码
- 最简单的基于FFmpeg的推流器以推送R
- DVD文件VOB的生成代码
- FFmpeg 采集摄像头输出rtmp直播流媒体,
- 基于ffmpeg将avi视频转换为mp4视频
- (补充)修改output-example,将H.264AAC帧
- ffmpeg-win64位库
- X264实时编码,FFmpeg实时解码
- FFmpeg API读取视音频文件信息的一个工
- 使用FFmpeg采集摄像头图像和麦克风音
- opencv_ffmpeg249.dll
- FFmpeg-3.1 windows vs2013编译动态库静态库
- 基于FFmpeg4.0.2的AAC编码器
- FFmpeg获取网络摄像头数据解码
评论
共有 条评论