资源简介
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个文件信息
相关资源
- c++使用ffmpeg把h264/h265和mp3写入mp4文件
- ffmpeg for MFC 1.2 源代码
- C++ 通过FFmpeg将rtsp视频流到本地mp4文件
- windows下的ffmpeg、MFC制作的播放器
- FFmpeg x86 x64库
- C++ ffmpeg Release版本
- ffplay for MFC 1.0.1
- mpeg4视频解码源码
- 非常完整的ffmpeg+mfc播放器
- ffmpeg简易播放器-音视频同步
- 使用RTP协议发送和接收H264的(支持解
- ffmpeg for MFC 1.2 测试版
- Qt/C++模仿酷狗音乐播放器执行文件
- C#开发FFMPEG(API方式) FFmpeg拉取RTMP流
- FFMpeg_FFPlay 源码剖析(杨书良)
- H264视频解压缩封装 c++
- ffmpeg-20191004-e6625ca-win64-static.rar
- VS2019编译的32位最新版ffmpeg类库文件
- MPEG4视频压缩
- MPEG4的编解码实现
- mpeg4解码源代码
- yasm FFmpeg必备
- FFmpeg basic
- FFmpeg+sdl for mac
- FFmpeg参数大全说明文档.pdf
- ffmpeg完整开发文档
- ffmpeg的tutorial中文版
- ffmpeg视频生成jpg图片
- FFMPEG Qt视频播放器之播放控制
- ffmpeg获取RTSP视频流信息
评论
共有 条评论