1

웹 카메라에서 가져온 비디오에 UI를 캡처하고 오버레이 할 수있는 Windows 저장소 응용 프로그램을 만들려고합니다.다른 미리보기 및 레코드 스트림을 사용하여 MediaCapture로 비디오 만들기

나는 비디오 캡처 프로세스를 관리하기 위해 MediaCapture 클래스를 사용하고 있습니다. 나는 이것을 기본 방식으로 수행 할 수있는 MFT (Grayscale 샘플 기반)를 만들었습니다. 이 MFT는 MediaCapture 클래스의 Record Stream에 효과로 추가되었으며 카메라 비디오에 UI를 겹쳐서 쉽게 비디오 파일을 만들 수 있습니다. (쉽게 상대 용어입니다)

내가 쳤던 문제는 MFT의 오버레이가 화면에 표시되는 미리보기 스트림에 나타나고 있다는 것입니다. 따라서 UI가 정상적으로 표시되고 비디오 스트림에도 표시됩니다. 이는 결과가 미리보기 스트림에 적용되지 않도록하고 결과 미리보기에서만 비디오 미리보기에서 UI를 볼 수 없기 때문에 좋지 않은 결과입니다.

MediaCapture 클래스가 미리보기 스트림이 아닌 레코드 스트림에만 효과를 사용하도록 만드는 방법이 있습니까?

쉬운 방법이없는 경우 사용자 지정 싱크를 만들어 구현할 수 있습니까? MediaCapture는 사용자 지정 싱크에 녹음 할 수 있으며 사용자 지정 싱크는 오버레이를 추가하고 비디오에 저장합니까?

답변

1

일부 카메라 (특히 USB 웹캠)에서는 녹화/미리보기/사진이 모두 동일한 비디오 스트림에서 나옵니다. 그래서 하나에 효과를 적용하면 모든 사람들에게 효과가 적용됩니다. 비디오 스트림이 동일하거나 독립적인지 여부는 MediaCapture.MediaCaptureSettings.VideoDeviceCharacteristic에 의해 제공됩니다.

그래서 귀하의 경우 사용자 지정 싱크대를 사용하는 것이 좋습니다. 오버레이를 추가 한 후 IMFSinkWriter를 사용하여 프레임을 인코딩 할 수 있습니다. 참고로

(효과적으로 당신이 뭘 하려는지의 반대) 카메라의 모든 유형의 미리보기 + 기록에 효과를 추가하는 코드 :

MediaCapture capture = ...; 
await capture.AddEffectAsync(MediaStreamType.VideoPreview, "Extensions.MyEffect", null); 

// If preview and record are different streams, also add the effect there 
if ((capture.MediaCaptureSettings.VideoDeviceCharacteristic != VideoDeviceCharacteristic.AllStreamsIdentical) && 
    (capture.MediaCaptureSettings.VideoDeviceCharacteristic != VideoDeviceCharacteristic.PreviewRecordStreamsIdentical)) 
{ 
    await capture.AddEffectAsync(MediaStreamType.VideoRecord, "Extensions.MyEffect", null); 
}