BCL이 자신의 제품에 적합한 제품인지 간단한 테스트를 해보기 위해서는 다음 순서를 따라주시면 됩니다. 사용 방법은 매우 간단하며 10분정도 시간을 투자하시면 손쉽게 기존 프로그램에 동영상 캡처 기능을 추가하여 테스트 해보실 수 있습니다.
단, 이 설명은 DirectX9 에 기초를 두고 제작된 것으로서 DirectX8/10 및 OpenGL과는 약간의 차이점이 있습니다. 각 그래픽 프로그래밍 인터페이스에 대한 자세한 사용 방법은 API 설명(section 3.2)과 샘플 코드를 참고하시기 바랍니다.
SDK 의 include 폴더에 있는 BandiCap.h 파일을 복사해서 자신의 프로젝트에 추가하고, BIN 폴더에 있는 bdcap32.dll 파일을 자신의 프로젝트의 실행파일이 위치한 폴더에 복사를 합니다. BCL은 런타임에 로드하여 사용하도록 설계되었기 때문에 별도의 .LIB 파일은 제공되지 않습니다.
BandiCap.h 파일에는 bdcap32.dll 파일의 로드를 손쉽게 도와주는 유틸리티 클래스와 화면 캡처 인터페스가 정의되어 있습니다. 이를 사용하기 위해서는 아래와 같이 클래스를 멤버 변수나 전역 변수로 선언합니다.
#include "bandicap.h"
// ..
CBandiCaptureLibrary m_bandiCaptureLibrary;
사용자가 캡처 시작 버튼을 누르면 캡처를 시작합니다. 시작하기전에 어떤 포맷으로, 어떤 방식으로 캡처할 것인지를 설정한 후, 캡처를 시작합니다. 권장되는 동영상 캡처 단축키는 Scroll Lock 키와 F11키 입니다.
// ...
case VK_SCROLL :
case VK_F11 :
ToggleVideoCapture();
break;
// ...
void ToggleVideoCapture()
{
IDirect3DDevice9* pd3d9Device = GetD3DDevice();
// 캡처를 시작합니다.
if(m_bandiCaptureLibrary.IsCapturing()==FALSE)
{
// 최초 실행시 DLL 을 로드하고 내부 인스턴스를 생성합니다.
if(m_bandiCaptureLibrary.IsCreated()==FALSE)
{
// 실패시 DLL과 .H파일의 버전이 동일한지 여부등을 확인해 보시기 바랍니다.
if(FAILED(m_bandiCaptureLibrary.Create(BANDICAP_RELEASE_DLL_FILE_NAME)))
ASSERT(0);
// 인증을 받지 않으면 인코딩된 동영상 상단에 로고가 표시됩니다.
// 정식구매후 발급받은 키를 사용하거나, 홈페이지에서 데모용으로 공개된 키를 사용해서 인증을 받습니다.
if(FAILED(m_bandiCaptureLibrary.Verify("BCL-SDK-TRIAL", "f5b0b287")))
ASSERT(0);
}
if(m_bandiCaptureLibrary.IsCreated())
{
BCAP_CONFIG cfg;
// 프리셋을 통해서 손쉽게 설정이 가능하며, 직접 파라미터 설정을 바꿀 수도 있습니다.
BCapConfigPreset(&cfg, BCAP_PRESET_DEFAULT);
m_bandiCaptureLibrary.CheckConfig(&cfg); // 잘못된 설정 바로 잡기
m_bandiCaptureLibrary.SetConfig(&cfg); // 설정 적용
m_bandiCaptureLibrary.SetMinMaxFPS(30, 60); // 최소, 최대 프레임 설정
// 현재시간을 이용해서 파일명을 만듭니다.
TCHAR pathName[MAX_PATH];
m_bandiCaptureLibrary.MakePathnameByDate(_T("c:\\"), _T("Capture"),
_T("avi"), pathName, MAX_PATH);
// 캡처를 시작합니다.
HRESULT hr = m_bandiCaptureLibrary.Start(pathName, NULL, BCAP_MODE_D3D9_SCALE, (LONG_PTR)pd3d9Device);
if(FAILED(hr))
ASSERT(0);
}
}
// 캡처를 중지합니다.
else
{
m_bandiCaptureLibrary.Stop();
}
}
캡처를 종료할 때는 Stop() 함수를 호출해 주면 됩니다. 캡처가 완료된 동영상 파일은 다음팟플레이어와 같은 동영상 재생 프로그램을 이용해서 재생이 가능하며 별도의 편집이나 인코딩 작업을 거치지 않고 YouTube, 네이버 블로그, MNCast와 같은 동영상 UCC 서비스에 바로 올릴 수 있습니다.
화면에 영상을 렌더링 하는 루프에서 다음과 같이 영상 캡처 루틴을 호출해 줍니다. 음성을 캡처하기 위해서 따로 함수를 호출해줄 필요는 없습니다.
// 화면 출력
m_pd3d9Device->BeginScene();
...
...
...
m_pd3d9Device->EndScene();
if(m_bandiCaptureLibrary.IsCapturing())
{
m_bandiCaptureLibrary.Work((LONG_PTR)m_pd3d9Device);
// 캡처중임을 알리는 메시지 출력
DrawCaptureNotify(); // <- 직접 구현하여 주세요
}
m_pd3dDevice->Present(...);
동영상 캡처는 CPU와 하드디스크 자원을 매우 많이 사용하는 작업입니다. 사용자가 실수로 동영상 캡처기능을 사용하였거나, 자신이 동영상 캡처중임을 잊어버렸을 경우 자칫 잘못하면 곤란한 문제가 발생할 수 있습니다.
이런 문제를 막기 위해서 사용자가 동영상 캡처중일 경우는 반드시 화면에 동영상 캡처중임을 나타내는 메시지를 큼지막하게 출력해 주는 것이 좋습니다. 캡처중 메시지가 캡처된 동영상에 표시되지 않게 하기 위해서는 위 코드와 같이 캡처작업 후에 화면에 캡처 메시지를 출력하면 됩니다.
캡처 라이브러리를 더이상 사용하지 않을 경우 Destroy() 함수를 통해서 라이브러리를 해제해 줍니다. 명시적으로 해제하지 않아도 프로그램 종료시 소멸자에서 자동으로 호출해 줍니다.
m_bandiCaptureLibrary.Destroy();