0

我有一个 IP 摄像机,它发送 8000hz 采样率配置的音频和 H264 视频。我制作了一个从这个 IP 摄像机生成 TS 文件的程序,它在 VLC、Android 媒体播放器(除了 iPhone、Mac OSX Safari 之外)上运行良好。(该程序适用于我制作的 HLS 服务器。)

在 Iphone、Safari 中播放视频很好,但音频不是。(我能听到声音,但播放不流畅)

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

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

4

1 回答 1

1

您很可能会遇到舍入错误。TS 中的 PTS 必须完美,否则许多播放器会尝试与参考时钟重新同步播放,这通常会显示为丢失的样本或插入的静音。

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

于 2013-11-27T19:42:46.630 回答