2014-09-03 2 views
1

미디어 기반을 사용하여 화상 회의용 응용 프로그램을 만들고 네트워크를 통해 수신하는 H264 비디오 프레임을 디코딩하는 데 문제가 있습니다. 사용 가능한 저장 샘플이없는 한미디어 기초 H264 디코더가 제대로 작동하지 않습니다.

디자인

현재 내 네트워크 소스는 모든 요청 샘플에 토큰을 큐. 샘플이 네트워크를 통해 도착하고 토큰을 사용할 수없는 경우 샘플은 링크 된 목록에 저장됩니다. 그렇지 않으면 MEMediaSample 이벤트와 함께 대기합니다. 나는 또한 낮은 지연 시간으로 설정된 디코더를 가지고있다.

내 문제

나는 즉시 화면에 렌더링 첫 번째 프레임을 참조 내 네트워크 소스를 사용하여 토폴로지를 실행할 수 있습니다. 실시간 스트림이 완벽하게 재생되기 전까지는 긴 정지가 발생합니다. 몇 초 후에 스트림이 일시 중지 된 것처럼 보입니다. 그런 다음 동일한 프레임을 반복해서 반복하면서 반복되는 프레임이 2 초마다 추가되어 즉시 사라지고 이전 루프가 표시됩니다.

왜 이런 일이 발생합니까? 나는 그 문제에 관해 H264 전문가 나 언론계 전문가는 아니지만 몇 주 동안이 문제를 해결하려고 노력 해왔다. 문제가 어디 있는지 나는 모른다. 제발 도와주세요!

타임 스탬프는 0에서 시작하여 모든 새 샘플마다 기간을 추가하여 생성됩니다. 다른 데이터는 IMFSampleGrabberSinkCallback에서 검색됩니다.

나는 또한이 있다면 내가 확실 해요, 프리젠 테이션 시계가 추적에 변경하지 않는 것 것을 내가 거기에 언급 된 MSDN 미디어 재단 포럼 Link

에 내 MFTrace의 일부를 게시하지만, 한 원인 또는 해결 방법.

답변

0

수정 : 이 문제점에 대해 비디오 및 전체 mftrace 로그를 공유 할 수 있습니까? 정말로 무슨 일이 일어 났는지는 분명하지 않습니다. 잠시 후 라이브 비디오를 보시겠습니까?

현재 로그에 샘플 처리를 추적하는 데 필요한 정보가 충분하지 않습니다. 귀하의 설명에서 키 프레임 만 렌더링되는 것처럼 보입니다. 또한 렌더링 된 키 프레임의 재생 시간이 이상합니다.

Sample @00A74970, Time 6733ms, Duration 499ms. <- Duration is not 33ms. 

그 샘플에 어떤 변화가 있었는지보고 싶습니다.

어떤 경우에도 표준 인코더 및 디코더를 사용하는 경우 문제는 미디어 소스 및 프레임 버퍼링 방법에 따라 달라집니다. 잘못된 순환 버퍼 구현? 디코더에 제공하기 전에 두 번째 또는 두 개의 샘플을 캐시하고 캐시 할 수 있습니다.

+0

일부 코드를 보여주기 위해 내 게시물을 업데이트했습니다. 충분하지 않다면 알려주세요. 다른 것을 추가 할 것입니다. 응답 해 주셔서 감사합니다. – ThomasP

+0

내 소스는 실시간 네트워크 소스 (화상 회의 응용 프로그램 만들기)를위한 것이므로 두 가지 구현을 시도했습니다. 네트워크 데이터에서 샘플을 생성 한 후 즉시 MEMediaSample 이벤트를 샘플로 대기 시키거나 샘플 요청을 받았는지 확인하는 다른 구현을 시도해 보았습니다. 그렇지 않은 경우 샘플을 Cinterterfacelist가 다음 요청에 사용될 것입니다 (스트림이 열악한 것으로 보인 이후로 이것이 발생하지 않는다고 생각합니다). 나는 같은 문제를 무관심하게 경험한다. 곧 전체 추적 로그를 업로드하겠습니다. – ThomasP

+0

변덕스럽게도 MFMEDIASOURCE_IS_LIVE를 (를) 더 이상 포함하지 않기 위해 원본 소스의 특성을 변경했습니다. 지금은 잘 작동합니다. 이게 내 마음을 괴롭힌다. 왜 그 특성 때문에 이런 식으로 행동했는지에 대한 어떤 생각? – ThomasP

관련 문제