2013-11-25 3 views
0

8000hz 샘플링 속도로 구성된 오디오 및 H264 비디오를 보내는 IP 카메라가 있습니다. 이 IP 카메라에서 TS- 파일을 생성하는 프로그램을 만들었으며 VLC, IPhone, Mac OSX Safari를 제외한 Android 미디어 플레이어에서 제대로 작동합니다. (이 프로그램은 내가 만든 HLS 서버에서 작동합니다.)mpeg2-ts aac PTS

동영상은 아이폰에서 재생되지만, Safari는 괜찮지 만 오디오는 그렇지 않습니다. (소리는 들리지만 부드럽게 재생되지는 않습니다.)

TS 패킷의 오디오 PTS는 MPEG2 Sytem PCR Clock 기반 (90000hz)이어야한다는 것을 알고 있습니다. IP 카메라에서 보내는 타임 스탬프 값은 8000hz를 기준으로 샘플링 속도를 기반으로하므로 TS- 파일에 오디오의 PTS를 쓸 때 PTS를 MPEG2 PCR 클럭으로 만들기 위해 90000/8000에 타임 스탬프를 곱합니다.

오디오 PTS에 90000/8000을 곱하는 잘못된 방법입니까? 도움이 될 것입니다.

답변

1

대부분 반올림 오류가 발생합니다. TS의 PTS가 완벽해야합니다. 그렇지 않으면 많은 플레이어가 재생을 기준 시계와 재 동기화하려고 시도합니다. 이는 종종 드롭 된 샘플 또는 무음 삽입으로 나타납니다.

샘플을 계산하고 90khz로 변환하여 시작 PTS가 정확한지 확인하십시오. 예를 들어 나누기 전에 곱하십시오. (sampleCount * 90000)/sampleRate (아니 sampleCount * (90000/sampleRate), 그리고 정수 오버플로 피하기 위해 64 비트 정수를 사용하고 있는지 확인하십시오. 또는 더 나은 아직, libavutil에서 av_rescale을 사용하십시오.

+0

감사합니다 @szatmary. 난 궁금해, RTP 헤더에서 타임 스탬프는 PTS 값으로 사용할 수 있습니다 TS- 파일 .RTS 헤더에서 타임 스탬프로 비디오 데이터의 TS- 파일에 PTS 값을 넣었습니다. 잘못되었을 수있는 경우 PTS 값은 어떻게 계산해야합니까? – JayMuzie

+0

비디오의 경우에는별로 중요하지 않습니다. 프레임이 초기 또는 늦게 몇 마이크로 초 동안 표시되면 아무도 눈치 채지 못하게됩니다. – szatmary