MPEG4超出原始RTP有效载荷

时间:2012-03-06 12:33:07

标签: c++ rtsp rtp mpeg

好的,我遇到了以下问题:

  1. 我有一台能够通过RTP传输MPEG4数据的IP摄像机

  2. 我可以通过RTSP

  3. 连接到本相机
  4. 我可以收到原始RTP数据。

  5. 那我现在有什么问题?

    1。提取数据

    我真正想要的数据是什么?我知道我必须干扰RTP Header - 但我还需要从RTP数据包中删除其他内容吗?

    2。打包模式

    我读到我应该期待Packetization Mode中的字段SDP - 好吧它不在那里。这是否意味着我必须假设某种标准的打包模式?

    第3。拆包

    如果我做对了,我需要使用Marker Bit = false缓冲所有传入的帧,直到我得到一个Marker Bit = true的帧来获得完整的MPEG4 Frame。我MPEG4 Frame到底要了解什么?关键帧+数据直到下一个关键帧?

    4。解码

    我是否可以进一步解码数据?在其他线程中,我看到人们使用了另一个解码器 - 但还有什么可以解码?我的意思是相机应该发送已经MPEG4编码的数据?

    5。库

    如果我真的需要解码数据,那么我可以使用任何开放的库吗?或者甚至有一个库有一些功能,我可以转储我的RTP数据,然后魔术发生,我得到我的MP4。 (但我认为不会有这样的事情......)

    注意:我想做的一切应该是我自己的应用程序的一部分,这意味着,例如,我不能使用外部软件来解析数据。

    长话短说 - 我真的需要一些一步一步的解释来做这件事。我知道这是一个广泛的问题,但我不知道任何进一步的问题。我也调查了RFCs,但我无法从中提取出很多信息。

    此外,我已经查看了这两个问题:

    How to process raw UDP packets so that they can be decoded by a decoder filter in a directshow source filter

    MPEG4 extract from RTP payload

    但是第一个问题的长篇答案也无法让我明白一切。

    更新:我告知了一点,现在我不知道在哪里看了。似乎所有的打包东西等实际上都不需要我的目的。我还用openRTSP录制了一个流。当我在十六进制编辑器中打开这些文件时,我发现有16个字节无法识别,其次是config的{​​{1}}部分。然后框架以通常的SDP开始。同样00 00 01 B6oprenRTSP添加了某种尾巴 - 我实际上不知道我需要什么,而且只是一些非强制性的“额外”东西。

1 个答案:

答案 0 :(得分:1)

  

我知道我必须干扰RTP标头 - 但是有什么   否则我需要从RTP数据包切断?

RTP数据包可能包含来自文件格式(例如MP4)的填充数据,或者它可能直接基于RFC 3640或类似内容。你需要找到它。

  

MPEG4 Frame究竟需要了解什么?关键帧+数据   直到下一个关键帧?我是否可以进一步解码数据?   在其他线程中,我看到人们使用另一个解码器 - 但是是什么   还有解码?我的意思是相机应该已经发送数据   MPEG4编码?

您应该探索MPEG压缩的基础知识,以充分理解这一点。拆包只会给你一串信息。这是压缩数据。您需要解压缩(解码)才能在屏幕上看到它。

  

我可以使用任何开放的库吗?

尝试ffmpegMPEG4IP