-
大小: 12.98MB文件类型: .zip金币: 2下载: 0 次发布日期: 2024-02-03
- 语言: 其他
- 标签: ffmpeg directshow 编码
资源简介
使用FFmpeg API采集摄像头图像和麦克风音频,支持图像预览,把图像和音频编码后保存成文件,实现视音频同步机制。为更好理解代码,请阅读我博客上相关的一篇文章:https://blog.csdn.net/zhoubotong2012/article/details/79338093
代码片段和文件信息
/**
** 作者:pengweizhi
** 邮箱:1795387053@qq.com
**/
#include “stdafx.h“
#include “AVInputStream.h“
static std::string AnsiToUTF8(const char *_ansi int _ansi_len)
{
std::string str_utf8(““);
wchar_t* pUnicode = NULL;
BYTE * pUtfData = NULL;
do
{
int unicodeNeed = MultiByteToWideChar(CP_ACP 0 _ansi _ansi_len NULL 0);
pUnicode = new wchar_t[unicodeNeed + 1];
memset(pUnicode 0 (unicodeNeed + 1)*sizeof(wchar_t));
int unicodeDone = MultiByteToWideChar(CP_ACP 0 _ansi _ansi_len (LPWSTR)pUnicode unicodeNeed);
if (unicodeDone != unicodeNeed)
{
break;
}
int utfNeed = WideCharToMultiByte(CP_UTF8 0 (LPWSTR)pUnicode unicodeDone (char *)pUtfData 0 NULL NULL);
pUtfData = new BYTE[utfNeed + 1];
memset(pUtfData 0 utfNeed + 1);
int utfDone = WideCharToMultiByte(CP_UTF8 0 (LPWSTR)pUnicode unicodeDone (char *)pUtfData utfNeed NULL NULL);
if (utfNeed != utfDone)
{
break;
}
str_utf8.assign((char *)pUtfData);
} while (false);
if (pUnicode)
{
delete[] pUnicode;
}
if (pUtfData)
{
delete[] pUtfData;
}
return str_utf8;
}
CAVInputStream::CAVInputStream(void)
{
m_hCapVideoThread = NULL;
m_hCapAudioThread = NULL;
m_exit_thread = false;
m_pVidFmtCtx = NULL;
m_pAudFmtCtx = NULL;
m_pInputFormat = NULL;
dec_pkt = NULL;
m_pVideoCBFunc = NULL;
m_pAudioCBFunc = NULL;
m_videoindex = -1;
m_audioindex = -1;
m_start_time = 0;
//avcodec_register_all();
// av_register_all();
//avdevice_register_all();
}
CAVInputStream::~CAVInputStream(void)
{
CloseInputStream();
}
void CAVInputStream::SetVideoCaptureCB(VideoCaptureCB pFuncCB)
{
m_pVideoCBFunc = pFuncCB;
}
void CAVInputStream::SetAudioCaptureCB(AudioCaptureCB pFuncCB)
{
m_pAudioCBFunc = pFuncCB;
}
void CAVInputStream::SetVideoCaptureDevice(string device_name)
{
m_video_device = device_name;
}
void CAVInputStream::SetAudioCaptureDevice(string device_name)
{
m_audio_device = device_name;
}
bool CAVInputStream::OpenInputStream()
{
if(m_video_device.empty() && m_audio_device.empty())
{
ATLTRACE(“you have not set any capture device \n“);
return false;
}
int i;
//打开Directshow设备前需要调用FFmpeg的avdevice_register_all函数,否则下面返回失败
m_pInputFormat = av_find_input_format(“dshow“);
ASSERT(m_pInputFormat != NULL);
// Set device params
AVDictionary *device_param = 0;
//if not setting rtbufsize error messages will be shown in cmd but you can still watch or record the stream correctly in most time
//setting rtbufsize will erase those error messages however larger rtbufsize will bring latency
//av_dict_set(&device_param “rtbufsize“ “10M“ 0);
if(!m_video_device.empty())
{
int res = 0;
string device_name = “video=“ + m_video_device;
string device_name_utf8 = AnsiToUTF8(device_name.c_str() device_name.length()); //转成UTF-8,解决设备名称包含中文字符出现乱码的问题
//Set own vide
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2018-02-15 17:48 Bin\
文件 565760 2018-02-15 17:48 Bin\AVCaptureStream.exe
文件 19646464 2014-12-31 06:21 Bin\avcodec-56.dll
文件 1367552 2014-12-31 06:21 Bin\avdevice-56.dll
文件 2314752 2014-12-31 06:21 Bin\avfilter-5.dll
文件 5839360 2014-12-31 06:21 Bin\avformat-56.dll
文件 452096 2014-12-31 06:21 Bin\avutil-54.dll
文件 67 2018-02-15 17:49 Bin\Config.ini
文件 92160 2018-02-10 20:57 Bin\EnumDevice.dll
文件 121344 2014-12-31 06:21 Bin\postproc-53.dll
文件 270336 2014-12-31 06:21 Bin\swresample-1.dll
文件 446976 2014-12-31 06:21 Bin\swscale-3.dll
目录 0 2018-02-15 17:49 src\
文件 895 2018-02-11 11:09 src\AVCaptureStream.sln
文件 79872 2018-02-15 17:48 src\AVCaptureStream.suo
文件 11184 2018-02-15 17:33 src\AVCaptureStream.vcproj
文件 12373 2018-02-15 13:38 src\AVInputStream.cpp
文件 1636 2018-02-13 11:19 src\AVInputStream.h
文件 19104 2018-02-15 17:30 src\AVOutputStream.cpp
文件 1942 2018-02-14 18:03 src\AVOutputStream.h
文件 772 2015-06-19 09:53 src\ChildView.cpp
文件 408 2015-06-19 09:53 src\ChildView.h
文件 6736 2018-02-12 11:16 src\ImagePainter.cpp
文件 950 2018-02-12 10:37 src\ImagePainter.h
目录 0 2018-02-11 23:20 src\include\
文件 808 2018-02-10 21:09 src\include\EnumDevice.h
文件 5729 2015-06-19 09:53 src\include\inttypes.h
目录 0 2017-12-15 20:24 src\include\libavcodec\
文件 179819 2015-06-19 09:53 src\include\libavcodec\avcodec.h
文件 3111 2015-06-19 09:53 src\include\libavcodec\avfft.h
文件 3764 2015-06-19 09:53 src\include\libavcodec\dv_profile.h
............此处省略122个文件信息
相关资源
- FFmpeg API读取视音频文件信息的一个工
- Big5编码台湾繁体字体和GBK编码简体字
- opencv_ffmpeg249.dll
- FFmpeg-3.1 windows vs2013编译动态库静态库
- Eclipse专业配色方案 - 让编码更舒适高
- FEC 编码和解码的程序
- 基于FFmpeg4.0.2的AAC编码器
- FFmpeg获取网络摄像头数据解码
- 密码编码学与网络安全:原理与实践(
- Qt写的Windows下屏幕录制程序源码
- Windows下使用FFMPEG解码AAC文件并使用
- ffmpeg转换MP4为JPG帧图片
- ffmpeg解码sdl播放h264
- 最简单的利用ffmpeg获取视频的图片
- 高斯移动热源编码
- 最简单的基于FFmpeg的编码器 1.2
- vs2012调试ffmpeg.c
- 基于FFMPEG SDK流媒体开发1---解码媒体文
- ffmpeg 源码demo
- 最简单的基于FFMPEG的AVDevice的 1.2
- 最简单的基于FFMPEG的音频编码器 1.1
- 最简单的基于FFMPEG+SDL的视频播放器
- ffmpeg提取mp4关键帧保存为jpg.zip
- ffmpeg+qt的简单播放器
- 使用ffmpeg将多张图片生成H264裸流并获
- ffmpeg h264 转换jpg
- 利用FFmpeg将Jpeg图片转为任意视频容器
- ffmpeg exeWINXP的最后一个可运行版本
- 最简单的基于FFMPEG的视频编码器修正
- ffmpeg-vs2013
评论
共有 条评论