• 大小: 13.92MB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-02-03
  • 语言: C/C++
  • 标签: ffmpeg  mpeg4  

资源简介

vs2013 的mfc工程,抓取摄像头及录音存储成Demo.mp4。不同的机器可能需要修改AudioDevice.cpp的构造函数中的m_strMikeName值和CameraDevice.cpp中的m_strCameraName值。根据课堂内容抄的代码,由于本人电脑没有麦克,所以声音没有测试,所以录音或许有抄错的地方

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “AudioDevice.h“
#include “PacketEx.h“
#include “PacketPool.h“
#include “AudioUtil.h“

CAudioDevice::CAudioDevice()
{
m_strMikeName =  L“audio=麦克风 (Realtek High Definition Au)“;
m_iAudioIndex = -1;

m_pInFmtCtx = NULL;
m_pOutFmtCtx = NULL;
m_pDecoderCtx = NULL;
m_pEncoderCtx = NULL;
m_pOutStream = NULL;

m_pAudioFifo = NULL;
m_pPktPool = NULL;
m_bOpen = FALSE;
m_bCapture = FALSE;
}


CAudioDevice::~CAudioDevice()
{
}

BOOL CAudioDevice::Open()
{
AVInputFormat *pif = av_find_input_format(“dshow“);
if (pif == NULL)
{
return FALSE;// 未找到支持DShow的音频设备
}
char *pMikeName = dup_wchar_to_utf8(m_strMikeName);
if (pMikeName == NULL)
{
return FALSE;
}
if (avformat_open_input(&m_pInFmtCtx pMikeName pif NULL) < 0)
{
return FALSE;// 打开音频设备失败
}
if (avformat_find_stream_info(m_pInFmtCtx NULL) < 0)
{
return FALSE;//未冲音频设备中检测到流数据
}
for (uint32_t i = 0; i < m_pInFmtCtx->nb_streams; i++)
{
if (m_pInFmtCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
{
m_iAudioIndex = i;
// 尝试打开解码器
AVCodec *pTempCodec = avcodec_find_decoder(m_pInFmtCtx->streams[i]->codec->codec_id);
if (pTempCodec == NULL)
{
return FALSE;
}
if (avcodec_open2(m_pInFmtCtx->streams[i]->codec pTempCodec NULL) < 0)
{
return FALSE;
}
m_pDecoderCtx = m_pInFmtCtx->streams[i]->codec;
break;
}
}
// 创建硬盘输出流并且初始化
m_pOutStream = avformat_new_stream(m_pOutFmtCtx 0);
if (m_pOutStream != NULL)
{
m_pEncoderCtx = m_pOutStream->codec;
// 查找输出音频编码器
if (m_pOutFmtCtx->oformat->flags&AVFMT_GLOBALHEADER)
{
m_pEncoderCtx->flags |= CODEC_FLAG_GLOBAL_HEADER;
}
m_pEncoderCtx->codec = avcodec_find_encoder(AV_CODEC_ID_AAC);

// 初始化音频流对应的音频编码器上下文属性
m_pEncoderCtx->sample_rate = m_pDecoderCtx->sample_rate;
if (m_pEncoderCtx->channel_layout == 0)
{
m_pEncoderCtx->channel_layout = AV_CH_LAYOUT_STEREO;
}
m_pEncoderCtx->channels = av_get_channel_layout_nb_channels(m_pEncoderCtx->channel_layout);
m_pEncoderCtx->sample_fmt = m_pEncoderCtx->codec->sample_fmts[0];

AVRational time_base = { 1 m_pEncoderCtx->sample_rate };
m_pOutStream->time_base = time_base;
if (avcodec_open2(m_pEncoderCtx m_pEncoderCtx->codec NULL) < 0)
{
return FALSE;// 编码器打开失败
}
}
else
{
return FALSE;// 创建音频输出流失败
}
m_bOpen = TRUE;
return TRUE;
}

BOOL CAudioDevice::Close()
{
if (m_bOpen == FALSE)
{
return TRUE;
}
m_bOpen = FALSE;
avformat_close_input(&m_pInFmtCtx);
TRACE(“音频剩余\t%d\t个采样\n“m_lstPkt.size());

for (list::iterator it = m_lstPkt.begin(); it != m_lstPkt.end(); it++)
{
av_free_packet((*it)->GetPkt());
}
m_lstPkt.clear();
if (m_pPktPool != NULL)
{
delete m_pPktPool;
m_pPktPool = NULL;
}
return TRUE;
}

BOOL CAudioDevice::Start()
{
m_pAudioFifo = av_audio_fifo_alloc(m_pEncoderCtx->sample_fmt m_pEncoderCtx->channels 1);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6221  2015-12-23 11:59  Camera\Camera\AudioDevice.cpp

     文件        945  2015-11-10 16:01  Camera\Camera\AudioDevice.h

     文件        532  2015-12-22 17:16  Camera\Camera\AudioUtil.cpp

     文件         98  2015-11-06 16:57  Camera\Camera\AudioUtil.h

     文件       1923  2015-11-04 12:56  Camera\Camera\Camera.cpp

     文件        443  2015-11-04 10:09  Camera\Camera\Camera.h

     文件       9560  2015-12-23 11:08  Camera\Camera\Camera.rc

     文件       6800  2015-11-06 16:29  Camera\Camera\Camera.vcxproj

     文件       3164  2015-11-06 16:29  Camera\Camera\Camera.vcxproj.filters

     文件        165  2015-11-04 12:33  Camera\Camera\Camera.vcxproj.user

     文件      15992  2015-12-21 12:48  Camera\Camera\CameraDevice.cpp

     文件       2705  2015-11-09 09:47  Camera\Camera\CameraDevice.h

     文件       4373  2015-11-09 16:29  Camera\Camera\CameraDlg.cpp

     文件        932  2015-11-09 16:25  Camera\Camera\CameraDlg.h

     文件       1264  2015-11-06 09:29  Camera\Camera\CameraUtil.cpp

     文件        420  2015-11-06 09:28  Camera\Camera\CameraUtil.h

     文件      77789  2015-12-23 12:36  Camera\Camera\demo.mp4

     文件        532  2015-11-05 16:45  Camera\Camera\PacketEx.cpp

     文件        230  2015-11-05 16:37  Camera\Camera\PacketEx.h

     文件       1060  2015-11-05 17:02  Camera\Camera\PacketPool.cpp

     文件        228  2015-11-06 09:15  Camera\Camera\PacketPool.h

     文件       3199  2015-11-04 10:09  Camera\Camera\ReadMe.txt

     文件      67777  2013-07-22 01:18  Camera\Camera\res\Camera.ico

     文件        668  2015-11-04 10:09  Camera\Camera\res\Camera.rc2

     文件       1598  2015-11-04 11:03  Camera\Camera\resource.h

     文件        139  2015-11-04 10:09  Camera\Camera\stdafx.cpp

     文件       1466  2015-11-05 15:59  Camera\Camera\stdafx.h

     文件        234  2015-11-04 10:09  Camera\Camera\targetver.h

     文件        964  2015-11-04 10:09  Camera\Camera.sln

    ..A..H.     44544  2015-12-23 12:37  Camera\Camera.v12.suo

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

评论

共有 条评论