【问题标题】:H264 elementary stream format confusionH264基本流格式混淆
【发布时间】:2012-06-15 01:20:52
【问题描述】:

我对 H264 视频流的格式感到困惑。简而言之,我从 ISO 规范和其他来源中了解到 H264 NAL 单元由起始代码分隔并且不包含长度信息AND,它们没有起始码并由 4 个字节引导(我知道这可能会有所不同)给出 NAL 单元的长度。为了让事情更加混乱,我一直在查看Spydroid 中的代码,它似乎解决了这两种情况。是否有两种不同的格式让我混淆了,如果有的话,谁能指导我了解解释这两种格式的信息。

背景

为了提供一些背景信息,以防它有助于我从 Android 摄像头进行实时流式传输。流将在设备上拆分以进行 RTP 或作为原始 MP4 数据发送以在服务器上拆分。无论哪种方式,流都将是实时的,因此将没有 MOOV 信息来查找音频和视频帧。我相信我已经弄清楚了该项目的大部分内容,但我基本上对我应该在 H264 流中看到的内容感到困惑。如果长度确实包含在 NAL 单元中,那肯定会对我有所帮助。

【问题讨论】:

    标签: android video-streaming h.264 mp4


    【解决方案1】:

    就 H.264 比特流而言。它被分成 NAL 单元,由 startcode 前缀分隔。即

    startcode_prefix  NALUnit    startcode_prefix  NALUnit .....  
    

    里面没有长度信息,因为它是一个比特流。您必须在比特流中寻找下一个 NAL 单元的起始码模式(0x000001 或 0x00000001)。

    更多信息在这里:H264 parsing - slice header detection

    【讨论】:

    • 谢谢。您指向另一个问题的链接使我开始了另一场追逐,在那里我找到了一个答案,我将在此处给出答案。
    【解决方案2】:

    根据以下链接,有 H.264 子类型。有些在流中有起始码,有些则有 1、2 或 4 字节长度字段。

    http://msdn.microsoft.com/en-us/library/windows/desktop/dd757808(v=vs.85).aspx

    所以看起来我需要检查子类型以确定如何解析流。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-12-24
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多