6

현재 Android Jelly Bean MediaCodec API로 간단한 비디오 플레이어를 개발하고 있습니다.Android MediaCodec API 동영상 재생 속도가 너무 빠름

트랙을 추출하고 오디오와 비디오를 별도의 스레드로 재생합니다. 문제는 비디오 트랙이 항상 너무 빠르게 재생된다는 것입니다.

어디에서 문제를 숨길 수 있습니까?
AudioTrack을 통해 오디오를 재생하고 비디오가 표면에 렌더링된다는 점을 제외하면 오디오와 비디오 모두 거의 동일한 방식으로 처리됩니다.

+0

어디서이 문제가 발생 했습니까? – BlueVoodoo

+0

코드를 게시 할 수 있습니까? 도움이 될만한 여관 – itsmeagain

+0

같은 문제가 생겼습니다. 알아 냈습니까? – xiaowoo

답변

3

프레임을 최대 속도로 렌더링하면 대부분의 장치에서 60fps가됩니다. 인코더가 제공 한 프레젠테이션 타임 스탬프에 따라 페이싱해야합니다.

예를 들어, 입력이 Android에서 지원하는 형식 (예 : 일반적인 .mp4 파일) 인 경우 MediaExtractor 클래스를 사용하여 각 프레임을 추출 할 수 있습니다. 시간 소인은 getSampleTime()으로 검색 할 수 있습니다. 연속 프레임의 타임 스탬프 차이로 렌더링을 지연하고 싶습니다. 첫 번째 프레임의 타임 스탬프가 0이라고 가정하지 마십시오.

또한 비디오 프레임이 일정한 속도 (예 : 30fps)로 표시된다고 가정하지 마십시오. 일부 소스의 경우 프레임이 고르지 않게 도착합니다.

"비디오 재생 (TextureView)"예는 Grafika, 특히 SpeedControlCallback 클래스를 참조하십시오. gen-eight-rects.mp4 비디오는 다양한 프레임 지속 시간을 사용하여이를 실행합니다. "60fps로 재생"상자를 선택하면 프레젠테이션 타임 스탬프가 무시됩니다.