2013-11-25 75 views
0

我有一台IP摄像机发送8000hz采样率配置的音频和H264视频。 我做了一个从这台IP摄像机生成TS文件的程序,它可以在VLC,除iPhone,Mac OSX Safari之外的Android媒体播放器上正常工作。 (该程序适用于我制作的HLS服务器。)mpeg2-ts aac PTS

在Iphone中播放视频,Safari很好,但Audio不是。 (我可以听到声音,但播放不顺畅)

我知道TS数据包中的音频PTS应该是基于MPEG2 Sytem PCR Clock(90000hz)的。 IP摄像机发送的时间戳值基于基于采样速率(8000hz),所以我将90000/8000乘以时间戳,以便在将音频的PTS写入TS文件时使PTS成为MPEG2 PCR时钟。

错误的方式乘90000/8000音频PTS? 任何帮助将不胜感激。

回答

1

你很可能患有四舍五入错误。 TS中的PTS必须是完美的,否则许多播放器会尝试将参考时钟重新同步回放,这通常表现为丢弃样本或插入静音。

通过计数样本并转换为90khz,确保您的起始PTS是准确的。在划分之前进行乘法运算(sampleCount * 90000)/sampleRate(不是sampleCount * (90000/sampleRate),并确保您使用64位整数来避免整数溢出或更好地使用libavutil中的av_rescale

+0

谢谢@szatmary我只是想知道,来自RTP头部的时间戳可以用作PTS值TS-file。我把视频数据的TS文件中的PTS值作为时间戳从RTP头中提取出来,如果它可能是错误的,我应该如何计算PTS值? – JayMuzie

+0

对于视频,它并不重要,只需要将源时基90khz。如果你的帧早晚显示几微秒,没有人会注意到,但是你会注意到声音。 – szatmary