안녕하세요 ffmpeg 관련해서 질문이 있습니다
현재 진행 중인 프로젝트에서 ffmpeg를 랩핑해서 사용하고 있습니다
QA 진행 중에 예상하지 못했던 이슈가 생겼는데 블로그에 ffmpeg 예제를 보고 에러 개선을 해보려다가 실패해서 답답함에 질문드립니다 ㅠ
일단 간단하게 프로젝트에 대해 설명 드리면
여러 개의 카메라 입력과 오디오 입력을 백그라운드에서 계속 캡쳐하고 있습니다
오디오가 빌트인이 된 카메라이든, 오디오 보조 입력 장치가 있든 간에
사용자가 원하는 대로 카메라와 오디오를 선택해서 하나의 영상으로 만들 수 있습니다
일종의 믹서입니다
카메라는 최대 3채널을 입력 받을 수 있으며, 오디오는 최대 5채널입니다(PC + 오디오 보조 입력 장치)
새로운 비디오 프레임, 새로운 오디오 패킷이 발생할 때마다
ConcurrentQueue에 Enqueue시켰고(srcVideoFrameQueue / srcAudioCircularBuffer)
녹화 버튼을 눌렀을 경우에 사전에 정의해둔 비디오와 오디오에 해당되는 새로운 ConcurrentQueue에 dequeue한 데이터를 enqueue하여 FFmpeg에 MediaWriter를 랩핑하여 호출해서 썼습니다
문제는 립싱크입니다
약 0.5초 정도 립싱크가 맞지 않습니다
PTS를 계산해보니 오디오는 제 때 들어가지만 영상이 느리게 들어갑니다
ConcurrentQueue말고 핸들링 방법이 있을까요?
현재로서는 PTS가 맞지 않을 때 비디오 프레임을 누락시켜서 립싱크를 억지로 맞췄는데
더 좋은 개선 방법이 있을지 궁금합니다 ㅠ
소스코드를 올리고 싶지만 불가능해서 부족하지만 이렇게 글로 설명합니다
이해 안되시는 부분이 있으시면 제가 다시 댓글로 설명 드리겠습니다
[최초 등록일: ]
[최종 수정일: 4/15/2022]