• 大小: 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个文件信息

评论

共有 条评论