【问题标题】:Wrong Presentation time at H264 streams [Live555 OpenRtspClient]H264 流中的演示时间错误 [Live555 OpenRtspClient]
【发布时间】:2011-12-19 07:48:46
【问题描述】:

我修改了 OpenRtspClient 以便

  • 现在我不是将帧写入文件,而是将它们收集到一个队列中,其中包含传入的呈现时间

  • 然后将 h264 帧提供给 MP4 muxer [Geraint Davies MP4 mux filter]

  • 终于将混合数据写入文件...

所以我可以将 h264 流保存到 MP4 容器中...

但问题是,一些记录的数据[不是全部] 持续时间的值有误:

假设 10 分钟的记录似乎是 12 小时的流... VLC 播放剩余时间的最后一帧播放的 10 分钟。

看来我在 Muxer 中设置了错误的采样时间... 然后我调试一下,发现时间戳有正负戏剧性的跳跃……

这是我设置时间戳的方法:

  • 首先我从 H264VideoFileSink::afterGettingFrame1 函数中获取presentationTime
  • 然后计算firstPresentaionTime[开头]
  • 然后收集其他时间戳

我看到 frameTimeStamp 值显示出向负值或正值的戏剧性跳跃...[我将这些值保留为 int64 ]

#define TIMEVAL_TO_REFERENCE_TIME(x) 
      ((__int64)(x.tv_sec * 1000000) + x.tv_usec) * 10

void  H264VideoFileSink::
 afterGettingFrame1(unsigned frameSize, struct timeval presentationTime) 
{

    // At the beginning [ just for once calculate firstPresentaionTime ]

    firstPresentaionTime = TIMEVAL_TO_REFERENCE_TIME(presentationTime);

    // for the other frames collect frames timestamps

    frameTimeStamp = TIMEVAL_TO_REFERENCE_TIME(presentationTime) - 
firstPresentationTime

    }

这是什么原因?

  • 或者将这个“presentationTime”用于 MP4 Muxer 是否是个好主意?
  • 图书馆的“presentationTime”在哪里计算?
  • H264VideoFileSink::afterGettingFrame1 方法的“presentationTime”值是否可能有误?
  • 有人在 mp4 容器中录制 h264 流并想分享他/她的经验吗?

【问题讨论】:

  • 我通常建议将您的问题拆分成可以回答的更简单的部分。

标签: directshow h.264 mp4 live555


【解决方案1】:

部分回答您的问题:

  • 图书馆的“presentationTime”是在哪里计算的?
  • H264VideoFileSink::afterGettingFrame1 方法的“presentationTime”值是否可能有误?
  • 呈现时间基于样本的 RTP 时间戳。
  • 不太可能,我们已经使用 live555 相当长的一段时间没有任何时间戳问题。如果时间戳不正确,我会怀疑 RTP 源(即 RTSP 服务器或摄像头)的时间戳错误。使用wireshark嗅探RTP数据包以查看RTP时间戳然后从那里转换回NTP时间以查看连续帧之间的差异可能会也可能不会有帮助。

【讨论】:

    【解决方案2】:

    如果您遵循 MPEG 类压缩 - 在视频中,演示时间戳将上下浮动。这是因为如果你有 I 和 P 帧在它们的 B 帧邻居之前编码,这取决于前向和后向。

    例如,帧号 0、1、2、3 - 可以是 I、B、B、P - 但实际传输时,它变为 0、3、1、2 - (I、P、B、B )。显然,第 3 帧的 PTS(呈现时间戳)> 第 1 帧的 PTS,因此您收到的 PTS 为 1 - 根据您的逻辑,它是负数。

    【讨论】:

      猜你喜欢
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-01
      相关资源
      最近更新 更多