저는 아직 개발 중이지만 지금은 H.264/MPEG-4 비디오 스트림으로 작업하고있는 자체 RTSP 소스 필터 솔루션을 보유하고 있습니다. 내 문제는 초기화 단계에 있습니다. graphedit을 열고 RTSP 소스, 디코더 및 비디오 렌더러 필터를 하나씩 추가하고 핀을 연결하면 모든 것이 잘 작동합니다 (RTSP 소스 URL은 현재 하드 코드되어 있습니다). 그러나 그래프를 저장하고 저장된 파일에서 그래프를 다시 열려고하면 그래프가 충돌합니다. 그 이유는 내 RTSP 소스 필터의 초기화 부분에 있다고 생각합니다. 내 필터는 처음부터 스트림에 대해 아무것도 모르기 때문에 유효하지 않은 매개 변수를 디코더에 전달합니다. 따라서 내 질문은 다음과 같습니다.RTSP 소스 필터 초기화
- 어떻게 초기화 프로세스를 정확하게 처리해야합니까?
- (코드에서 어떤 기능을합니까?) 소스에 정확히 연결하고 전송을 시작해야합니까? 필터 클래스 생성자? 출력 핀 클래스 생성자?
OnThreadCreate
? - 스트림에서 비디오 너비/높이와 같은 정보를 얻어야합니까, 아니면 스트림을 디코더로 전달해야합니까? 이 일을하는 올바른 방법은 무엇입니까? (일부 비디오 렌더러는
VIDEOINFOHEADER
구조의 너비/높이 정보를 사용한다고 생각합니다.) 버퍼 크기는 어떻게 결정해야합니까?
GetMediaType
메서드에서 비트 맵 정보 헤더에서 샘플 크기를 다음과 같이 설정합니다.pMediaType-> SetSampleSize (pvi-> bmiHeader.biSizeImage);
어떻게 biWidth
같은 매개 변수를 설정해야 biHeight
, biSize
등 biSizeImage
? 나는 처음에 몇 가지 기본값으로 설정하고 스트림을받은 후 변경해야한다고 생각하지만 어떻게해야합니까?
모든 질문은 같은 문제를 나타냅니다. 내 RTSP 소스 필터의 초기화 프로세스에서 정확히 무엇을해야합니까?
! 업데이트!
저장된 그래프를로드 할 때 디코더와 비디오 렌더러간에 연결을 끊었다가 다시 연결하면 문제가 해결됩니다. 다른 비디오 렌더러 (Microsoft 및 일부 다른 사용자 지정 비디오 렌더러)를 사용하여 시도했습니다. 그들은 모두 비슷한 반응을 보입니다. 일부는 충돌하지 않지만 크기/종횡비가 잘못된 비디오를 실행합니다. 분명히, 그래프를 왜곡 시키거나 이상한 결과를내는 것은 내 소스 필터가 아니라 비디오 렌더러에 전달 된 일부 잘못된 정보입니다. 이 상황은 다른 RTSP 소스 필터에서 발생하지 않기 때문에 나는 여전히 잘못된 행동을하고 있다고 생각합니다. 누락 된 것이 있습니다.
이 문제가 발생할 수있는 이유는 무엇입니까? 그래프가 실행되면 미디어 정보를 보내야합니까?
P.S : 그래프를 실행할 때만 그래프가 충돌합니다. 그래프를로드해도 크래시가 발생하지 않습니다.
IFileSourceFilter를 구현하지 않았지만 다른 모든 RTSP 소스 필터가이 필터를 사용합니다. 그래서 내가 찾던 그 부분이 빠진 것 같아요. 나는 그것이 꼭 필요한 것이 아니라는 것을 안다.하지만 그것이 내 문제를 해결할 것이라고 믿는다. 고맙습니다. –