【问题标题】:How can I access the GOV header contents of a MPEG4 file?如何访问 MPEG4 文件的 GOV 标头内容?
【发布时间】:2012-12-21 08:27:51
【问题描述】:

我想知道如何访问 mp4 视频文件的 GOV 标头的内容。

我正在使用 Axis 摄像机通过 RTSP 流式传输视频,该视频以 mp4 格式存储在硬盘中。根据文档,相机在 MPEG4 GOV 标头中插入了特定的触发数据,但我不知道如何访问或检索这些信息。

我正在开发一个 C++ 应用程序,但目前我不需要以编程方式处理数据,因此允许 GOV 标头内容可视化的解决方案对我来说就足够了。

【问题讨论】:

    标签: c++ header camera rtsp mpeg-4


    【解决方案1】:

    补充数据通常直接嵌入到流中,并且应该写入 MP4 文件的视频有效负载数据中。目的是保留整个流符合 MPEG-4 标准,内部仍然有附加数据。解码器通常会忽略它。

    您通常需要从文件中流式传输该数据并解析流以提取带有触发信息的数据部分。您需要用于视频流的特定 API(文件格式/解复用器等 - 您的操作系统和环境到底是什么?)并且您需要 Axis 技术信息来查看它们到底嵌入了什么以及您需要如何解析它。

    【讨论】:

    • 我正在使用 Visual C++ 2008 Express Edition 在 Windows 7 下进行开发。文档说触发数据块作为“用户数据”包含在 GOV 标头中,其中可能包含以这种格式相互跟随的多个数据块。用户数据部分以 000001b2(十六进制)开头,触发数据以 0a03(十六进制)开头。
    【解决方案2】:

    如果您通过 RTSP 进行流式传输,则不会传输 MPEG4 标头 - 而是通过来自客户端的 DESCRIBE 请求交换“SDP”(会话描述协议)信息。此 sdp 文件包含帧速率等的编码版本,该版本实际上取自 mpeg4 标头中的 MDAT atom。

    如果您特别需要访问 gov atom 以确定 p-frame i-frame 差异,您可以尝试在服务器上解析 MPEG4 标头并通过单独的通道传输它。

    MPEG4 标头的外观基本上是一个纯文本原子名称,然后是一个通常为 4 个字节的长度(您需要根据您的平台进行字节交换),然后是数据。

    这是我在 mpeg4 标头解析器中的一些调试代码:

    public boolean valid_atom(byte[] word, int offset) {
        for (int i = 0; i < 4; i++)
            if (!(word[i + offset] >= 'a' && word[i + offset] <= 'z') && !(word[i + offset] >= 'A' && word[i + offset] <= 'Z'))
                return false;
        return true;
    }
    

    ...

    public int parse_atom(byte[] b, int offset, int depth) {
        int len;
        len = ifba(b, offset);
        Log.d(TAG, String.format("atom: %c%c%c%c depth %d @ %d len %d", b[offset + 4], b[offset + 5], b[offset + 6], b[offset + 7], depth, offset, len));
        return len;
    }
    

    ...

    private int ifba(byte[] buffer, int offset) {
        int retval = (buffer[offset] & 0xFF) << 24;
        retval += (buffer[offset + 1] & 0xFF) << 16;
        retval += (buffer[offset + 2] & 0XFF) << 8;
        retval += (buffer[offset + 3] & 0XFF);
        return retval;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-20
      • 2022-07-06
      • 2011-06-30
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多