DirectShow SDK의 pushsource 예제를 기반으로 DirectShow 소스 필터를 만들려고합니다. 이것은 기본적으로 비디오에 일련의 비트 맵을 출력합니다. 오디오 용 웨이브 파서와 Async_reader를 사용하는 필터 그래프를 설정하고 비디오를 푸시하는 새 필터 (필터는 CSourceStream이며 필자는 FillBuffer 함수에서 프레임을 채 웁니다)를 설정했습니다. 이들은 모두 WMASFWriter에 연결되어 WMV를 출력합니다.WMASFWriter를 사용한 DirectShow 필터 그래프가 너무 짧은 비디오를 생성합니다.
각 비트 맵은 몇 초 동안 지속될 수 있으므로 FillBuffer 함수에서 전달 된 IMediaSample에서 SetTime을 몇 초 간격으로 시작 및 종료 시간으로 호출합니다. 화면에 렌더링 할 때 잘 작동하지만 디스크에 쓰면 너무 짧은 파일이됩니다. WMV를 작성할 때 마지막 비트 맵이 무시되는 것처럼 보입니다 (의도 한 기간 동안 지속되는 것이 아니라 비디오가 종료됨에 따라 표시됨). 이는 필자의 필터와 수정 된 푸시 소스 필터 (프레임 길이가 증가한 경우 모두)의 경우입니다.
나는이 작품을 만들려고 노력하는 동안 한 점에서 길이가 10 초의 배수가 아닌 비디오를 가질 수 없다는 점에서 이상한 행동을 보았습니다. 이게 뭔지는 모르겠지만 관련성이 있다고 말하면 되겠지.
아 물론. 나는 끝 시간이 무시되고 있다고 생각하지 않았다. 비디오 끝 부분에 더미 프레임을 추가하면 완벽하게 작동했습니다. 감사! – Andrew