ffmpeg를 이용해서 Windows 10 UWP에서 작동하는 간단한 동영상 플레이 코드를 작성했다.
ffmepeg를 Windows 10 UWP에서 사용하려면 걸림돌이 2개 있다.
1. ffmpeg의 WinRT용 바이너리가 제공되지 않음.
2. ffmpeg에서 지원하는 파일 오픈 함수를 사용할 수 없음.
1.의 경우는 일단 빌드가 가능하긴 하다. 매우 귀찮지만. 내 경우는 arm cpu용 빌드 빼고 x86/x64빌드는 성공했다.
2의 문제는 OpenAsync()를 이용해서 파일을 오픈하고 파일 스트림에서 읽고 탐색하는 코드를 작성해서 ffmpeg의 avio_alloc_context()에 함수 포인터 형태로 넣어주면 된다. BUILD행사에서 MS가 공개한 오픈소스 프로젝트 ffmpeginterop은 이걸 해주는 것이다.
난 ffmpeginterop 코드를 참고는 했으나 갖다쓰진 않았다. 예전에 클라우드 게이밍에 쓰려고 네트워크에서 스트리밍하도록 만들어둔 코드가 있어서 이걸 약간 변형해서 적용했다.
ffmpeginterop의 경우는 직접 렌더링을 하지는 않고 MediaFoundation에 스트림을 전달하는 역할만 한다. 내 경우는 그냥 ffmpeg에서 디코딩해서 바로 이미지로 만들어서 Direct2D를 이용해서 화면에 뿌렸다.
하여간 잘 돌아감.이제 코드 정리하고 dll로 패키징 해야겠다.
참고
ffmpeginterop 프로젝트 – https://github.com/Microsoft/FFmpegInterop
CompilationGuide/WinRT – https://trac.ffmpeg.org/wiki/CompilationGuide/WinRT