2010-04-06 8 views
2

WPF MediaKit을 사용하여 작은 응용 프로그램을 작성 중이며 일부 비디오를 녹화하고 싶습니다. 내 계획은 최종 오디오 비디오/비디오 프레임으로 n 초를 저장 한 다음 AVI로 기록하는 것입니다. 사용자가 요청할 때가장 쉬운 방법은?

쉬운 방법은 파이프 실제로 내가 AVI 파일로 웹캠에서 수집 한 데이터가 있습니까? 트릭은 내가 직접 바로 AVI 파일을 기입하기위한 DirectShow의 장면 그래프를 쓸 수 없습니다, 나는 버퍼링 된 데이터를 사용할 필요가있다 - 카메라가 항상 실행되고, 내 앱, 사용자는 끝을 신호 캡처 (그리고 우리는 몇 초 정도 걸립니다).

AVI는 어떤 식 으로든 압축 할 필요가 없습니다. Expression Encoder를 통해 AVI를 실행하여이를 수행 할 것입니다. 어떤 아이디어?

답변

0

당신이 다음을 수행 할 수있는 데이터를 버퍼링 할 경우

  1. 은 메모리 버퍼에로 들어오는 각의 IMediaSample 밖으로 SampleGrabber Filter (Using the Sample Grabber 참조) 및 복사 데이터를 사용하여 캡처 그래프를 만들기을 (A 프레임의 원형 버퍼는 메모리의 크기를 제한하는 데 도움이됩니다).
  2. 사용자가 에 도달하면 파일을 쓰는 두 번째 그래프를 만들고 메모리 버퍼의 데이터를 샘플 그래버로 공급합니다.
    1. 당신이 SampleGrabber 콜백에서 얻을의 IMediaSample 포인터에 주저하지 마세요 :

    개는 몇

  3. . 각 DirectShow를 filtergraph는 IMediaSamples의 메모리 풀을 사용하고, 당신이 그들을 가지고가는 경우 모든 사용자는 그래프를 굶어 것입니다.
  4. 은 미디어 샘플에서 복사 할 때 IMediaSample::GetSize 및 NOT IMediaSample::GetActualDataLength를 사용하십시오. 일부 미디어 샘플은 DWORD (4 바이트) 경계에서 패딩되며 새 AVI 파일에 기록하기 위해 보존해야합니다.
관련 문제