本教程演示如何使用LEADTOOLS多188宝金博怎么下载媒体SDK的Windows c++应用程序CaptureCtrl
执行视频文件的简化捕获。
概述 | |
---|---|
总结 | 本教程演示如何使用LEADTOOLS Multimedia SDK从源捕获视频文件。188宝金博怎么下载 |
完成时间 | 30分钟 |
Visual Studio项目 | 下载教程项目(18kb) |
平台 | Windows c++应用程序 |
IDE | Visual Studio 2019 |
开发许可 | 下载LEADTOOLS |
用另一种语言试试 |
|
在开始之前从视频源捕获到文件- Windows c++教程,通过回顾添加引用和设置License教程。
中创建的64位Windows API项目的副本添加引用和设置License教程。如果项目不可用,请按照该教程中的步骤创建它。
为了捕获视频文件,LEADTOOLS需要额外的引用。也可以通过打开预编译的头文件添加所188宝金博怎么下载需的多媒体库引用pch.h
或stdafx.h
根据所使用的Visual Studio版本,并添加以下行:
//添加LEADTOOLS多媒体引188宝金博怎么下载用
#进口“c: \ Windows \ SysWOW64 \ ltmm21x.dll”no_namespace, named_guids
请注意
有关特定多媒体功能所需dll的完整列表,请参阅188宝金博怎么下载188宝金博怎么下载基于directshow的应用程序中必须包含的多媒体文件.
许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
中更详细地介绍了添加LEADTOOLS引用和设置许可添加引用和设置License教程。
现在已经添加了LEADTOOLS引用并设置了许可证,可以开始编码了。
使用解决方案资源管理器导航到项目的CPP文件,其中包含指向
函数用于主窗口。在靠近顶部的全局变量中添加以下声明:
//全局变量:
IltmmCapture* pCapture = NULL;
导航到指向
函数,它应该有案例WM_DESTROY
在里面。添加一个新的案例WM_CREATE
如果它不存在,在它下面添加以下代码:
情况下WM_CREATE:
{
HRESULT hr = CoInitialize(NULL);
如果失败(人力资源)
{
对话框(hWnd,文本("启动COM库时出错..\nAborting"),文本(“LEADTOOLS演示”), MB_ICONERROR);
返回1;
}
hr = CoCreateInstance(CLSID_ltmmCapture, NULL, CLSCTX_INPROC_SERVER, IID_IltmmCapture, (无效* *) &pCapture);
如果失败(人力资源)
{
对话框(hWnd,文本("创建捕获控件时出错..\nAborting"),文本(“LEADTOOLS演示”), MB_ICONERROR);
返回1;
}
pCapture->VideoWindowFrame = (长) hWnd;
pCapture->VideoWindowSizeMode = ltmmSizeMode::ltmmNormal;
打破;
}
修改处理的案例WM_DESTROY
在指向()
函数包含以下行:
情况下WM_DESTROY:
CoUninitialize ();
PostQuitMessage (0);
打破;
以下步骤适用于Visual Studio 2019;对于Visual Studio的其他版本,它们可能有所不同。
去解决方案资源管理器双击资源文件(.rc)。展开资源树中的菜单选项卡,双击菜单资源,在设计器界面中打开它。的空项中退出项,单击并键入捕获.将新项目拖到上面退出.确保项目的ID为ID_FILE_CAPTURE
.
打开项目的CPP文件并导航回指向
函数和开关(wmId)
表述,就是下面的WM_COMMAND
Case,在下面添加新的Case。
//在WndProc()中,在"case WM_COMMAND:"
开关(wmId)
{
情况下ID_FILE_CAPTURE:
{
TCHAR szFileName[260] = TEXT("");//文件名称
//选择视频源
intnVideoDevice = -1;
为(intI = 0;i < pCapture->VideoDevices->Count;+ + i)
{
TCHAR消息[1024];
TCHAR* deviceName = pCapture->VideoDevices->Item(i)->FriendlyName;
wsprintf(消息、文本(“视频源%d: %s\nUse this device?”), i, deviceName);
如果(消息框(hWnd, message, TEXT(“捕获演示”), mb_yesno) == idyes)
{
nVideoDevice = i;
打破;
}
}
如果(nVideoDevice = -1)//没有选择设备
打破;
pCapture->VideoDevices->Selection = nVideoDevice;
//启用预览
pCapture->PreviewSource = ltmmCapture_Preview_Video;
pCapture->预览= TRUE;
//选择输出文件名
如果(!GetCaptureFileName (szFileName hWnd,运算符szFileName))
打破;
pCapture->TargetFormat = ltmmCapture_TargetFormat_Avi;
//选择LEAD H264视频编解码
intnVideoCodec = pCapture-> videocompressor ->Find("@device:sw:{33d9a740 - 90c8 - 11d0 - bd43 - 00a0c911ce86}\\LEAD H264编码器(4.0)");
pCapture->VideoCompressors->Selection = nVideoCodec;
pCapture->TargetFile = szFileName;
pCapture - > StartCapture (ltmmCapture_Mode_Video);
对话框(hWnd,文本(“获取. .点击“确定”停止),文本(“捕获演示”), mb_iconinformation);
pCapture - > StopCapture ();
对话框(hWnd,文本(“捕获完成。”),文本(“捕获演示”), MB_ICONINFORMATION);
}
打破;
//保留其余的代码
要显示文件保存对话框获取文件名,创建一个新函数命名GetCaptureFileName ()
并添加下面的代码。的GetCaptureFileName ()
函数可以是填充szFileName
变量,具有有效的输出文件名(如果需要,包括完整路径)。
保龄球GetCaptureFileName(HWND HWND, TCHAR* pszFileName, DWORD nLen)
{
OPENFILENAME OPENFILENAME = {0};
OpenFileName。lStructSize =运算符OpenFileName;
OpenFileName。hwndOwner = hwnd;
OpenFileName。lpstrFile = pszFileName;
OpenFileName。nMaxFile = nLen;
OpenFileName。lpstrFilter = TEXT(“AVI文件\ 0 * .avi \ 0”);
OpenFileName。lpstrDefExt = TEXT(“avi”);
OpenFileName。nFilterIndex = 1;
OpenFileName。lpstrFileTitle = NULL;
OpenFileName。nMaxFileTitle = 0;
OpenFileName。lpstrInitialDir = NULL;
OpenFileName。Flags = OFN_PATHMUSTEXIST;
//显示文件保存对话框
如果(! GetSaveFileName (&OpenFileName))
返回假;
返回真正的;
}
按下运行项目F5,或选择Debug ->开始调试.
如果正确地执行了这些步骤,则应用程序将运行。选择File ->捕获使用户能够从机器上可用的LEADTOOLS多媒体SDK支持的任何多媒体捕获源捕获视频文件并将其保存为AVI文件格式。188宝金博怎么下载
本教程介绍了如何创建Capture控件的实例并使用它来录制视频文件。