강제 Key-Frame 삽입하려면

[이 페이지와 연결된 기능인 Windows Media Format 11 SDK는 레거시 기능입니다. 원본 판독기 및 싱크 작성기에 의해 대체되었습니다. 원본 판독기 및 싱크 작성기는 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드에서 Windows Media Format 11 SDK 대신 소스 판독기 및 싱크 기록기를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

Windows Media Video 9 코덱은 강제 키 프레임 삽입을 지원합니다. 작성기에 샘플을 전달할 때 키 프레임으로 인코딩되도록 지정할 수 있습니다.

샘플에 키 프레임 삽입을 강제로 적용하려면 다음 단계를 수행합니다.

  1. 샘플을 저장할 버퍼를 할당하고 IWMWriter::AllocateSample을 호출하여 버퍼가 포함된 INSSBuffer 인터페이스에 대한 포인터를 검색합니다.
  2. INSSBuffer::GetBufferAndLength를 호출하여 1단계에서 만든 버퍼의 위치 및 크기를 검색합니다.
  3. 샘플 데이터를 버퍼 위치에 복사하여 전달된 샘플이 할당된 버퍼에 맞는지 확인합니다. 샘플의 원본에 따라 다양한 함수를 사용하여 데이터를 복사할 수 있습니다. 예를 들어 AVI 파일에서 스트림을 복사하는 경우 AVI 함수 AVIStreamRead를 사용할 수 있습니다.
  4. INSSBuffer::SetLength를 호출하여 샘플의 실제 크기를 반영하도록 버퍼에 사용되는 데이터의 양을 업데이트합니다.
  5. INSSBuffer::QueryInterface를 호출하여 INSSBuffer3 인터페이스에 대한 포인터를 가져옵니다.
  6. INSSBuffer3::SetProperty 메서드를 호출하여 WM_SampleExtensionGUID_OutputCleanPoint 속성을 설정하여 샘플을 강제 키 프레임으로 설정합니다. 이 속성은 부울 값입니다. TRUE로 설정합니다.
  7. IWMWriter::WriteSample 메서드를 사용하여 입력 번호 및 샘플 시간과 함께 작성기에 버퍼 인터페이스를 전달합니다.

IWMWriter::WriteSample

샘플을 작성하려면

VBR(가변 비트 전송률) 인코딩

ASF 파일 작성