2011-12-20 4 views
2

DirectShow SDK의 pushsource 예제를 기반으로 DirectShow 소스 필터를 만들려고합니다. 이것은 기본적으로 비디오에 일련의 비트 맵을 출력합니다. 오디오 용 웨이브 파서와 Async_reader를 사용하는 필터 그래프를 설정하고 비디오를 푸시하는 새 필터 (필터는 CSourceStream이며 필자는 FillBuffer 함수에서 프레임을 채 웁니다)를 설정했습니다. 이들은 모두 WMASFWriter에 연결되어 WMV를 출력합니다.WMASFWriter를 사용한 DirectShow 필터 그래프가 너무 짧은 비디오를 생성합니다.

각 비트 맵은 몇 초 동안 지속될 수 있으므로 FillBuffer 함수에서 전달 된 IMediaSample에서 SetTime을 몇 초 간격으로 시작 및 종료 시간으로 호출합니다. 화면에 렌더링 할 때 잘 작동하지만 디스크에 쓰면 너무 짧은 파일이됩니다. WMV를 작성할 때 마지막 비트 맵이 무시되는 것처럼 보입니다 (의도 한 기간 동안 지속되는 것이 아니라 비디오가 종료됨에 따라 표시됨). 이는 필자의 필터와 수정 된 푸시 소스 필터 (프레임 길이가 증가한 경우 모두)의 경우입니다.

나는이 작품을 만들려고 노력하는 동안 한 점에서 길이가 10 초의 배수가 아닌 비디오를 가질 수 없다는 점에서 이상한 행동을 보았습니다. 이게 뭔지는 모르겠지만 관련성이 있다고 말하면 되겠지.

답변

1

끝 시간을 무시한다고 생각합니다. 일반적으로 비디오 샘플은 특정 시점이기 때문에 시작 시간 만 있습니다. 비디오에 움직임이있는 경우, 움직임은 유창하지만 비디오는 단지 시점입니다.

나는 해결책이 간단하다고 생각합니다. 다음 프레임이 수신 될 때까지 비디오가 동일하게 유지되기 때문에 비디오 끝 부분에 더미 프레임을 추가하면됩니다. 단순히 이전 프레임을 반복 할 수 있습니다.

+0

아 물론. 나는 끝 시간이 무시되고 있다고 생각하지 않았다. 비디오 끝 부분에 더미 프레임을 추가하면 완벽하게 작동했습니다. 감사! – Andrew

관련 문제