好的,我遇到了以下问题:
我有一台能够通过RTP传输MPEG4数据的IP摄像机
我可以通过RTSP
我可以收到原始RTP数据。
那我现在有什么问题?
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
,但我无法从中提取出很多信息。
此外,我已经查看了这两个问题:
MPEG4 extract from RTP payload
但是第一个问题的长篇答案也无法让我明白一切。
更新:我告知了一点,现在我不知道在哪里看了。似乎所有的打包东西等实际上都不需要我的目的。我还用openRTSP录制了一个流。当我在十六进制编辑器中打开这些文件时,我发现有16个字节无法识别,其次是config
的{{1}}部分。然后框架以通常的SDP
开始。同样00 00 01 B6
为oprenRTSP
添加了某种尾巴 - 我实际上不知道我需要什么,而且只是一些非强制性的“额外”东西。
答案 0 :(得分:1)
我知道我必须干扰RTP标头 - 但是有什么 否则我需要从RTP数据包切断?
RTP数据包可能包含来自文件格式(例如MP4)的填充数据,或者它可能直接基于RFC 3640或类似内容。你需要找到它。
MPEG4 Frame究竟需要了解什么?关键帧+数据 直到下一个关键帧?我是否可以进一步解码数据? 在其他线程中,我看到人们使用另一个解码器 - 但是是什么 还有解码?我的意思是相机应该已经发送数据 MPEG4编码?
您应该探索MPEG压缩的基础知识,以充分理解这一点。拆包只会给你一串信息。这是压缩数据。您需要解压缩(解码)才能在屏幕上看到它。
我可以使用任何开放的库吗?