Toby
Toby

Reputation: 3905

MPEG4 out of Raw RTP Payload

Okay I got the following problem:

  1. I have an IP Camera which is able to stream MPEG4 data over RTP

  2. I am able to connect to this camera via RTSP

  3. I can receive the raw RTP data.

So what problems do I have now?

1. Extract Data

What is the data I actually want? I know that I have to trunkate the RTP Header - but is there anything else I need to cut from the RTP packets?

2. Packetization Mode

I read that I should expect a field Packetization Mode in my SDP- well it's not there. Does that mean I have to assume some kind of standard packetization mode?

3. Depacketization

If I got it right I need to buffer all incoming frames with the Marker Bit = false until I get a frame with Marker Bit = true to get a complete MPEG4 Frame. What exactly do I have to understand by MPEG4 Frame? Keyframe + data until next keyframe?

4. Decode

Do I have the decode the data any further then? In other threads I saw that people used another decoder - but what is there left to decode? I mean the camera should send the data already MPEG4 coded?

5. Libraries

If I really need to decode the data, are there any open libraries I could use for that? Or maybe there is even a library which has some functions where I can just dump my RTP data and then magic happens and I get my mp4. ( But I assume there will be nothing like that .. )

Note: Everything I want to do should be part of my own application, meaning for example, I can't use an external software to parse the data.

Well long story short - I'd really need some kind of step by step explanation for this to do. I know this is a broad question but I don't know any further. I also looked into the RFCs, but I couldnt extract much information out of them.

Also I already looked up these two Questions:

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

But also the long answer from the first question could not make everything clear to me.

UPDATE: Well I informed a bit further and now I don't know where to look anymore. It seems that all the packetization stuff etc. is actually not needed for my purpose. I also recorded a stream with openRTSP. When I open those files in a Hex-Editor I see that there are 16 Bytes which I can't identify, followed by the config part of the SDP. Then the frame starts with the usual 00 00 01 B6. Also oprenRTSP adds some kind of tail to the MP4 - well I actually don't know what I need and whats just some "extra" stuff which isn't mandatory.

Upvotes: 3

Views: 1594

Answers (1)

Dipan Mehta
Dipan Mehta

Reputation: 2160

I know that I have to trunkate the RTP Header - but is there anything else I need to cut from the RTP packets?

RTP packet might have stuff data from a file format (such as MP4) or it could have directly based on RFC 3640 or something similar. You need to find that out.

What exactly do I have to understand by MPEG4 Frame? Keyframe + data until next keyframe? Do I have the decode the data any further then? In other threads I saw that people used another decoder - but what is there left to decode? I mean the camera should send the data already MPEG4 coded?

You should explore basics of MPEG compression to appreciate this fully. The depacketization only give you a string of bits. This is compressed data. You need to uncompress it (decode it) to see it on the screen.

are there any open libraries I could use for that?

try ffmpeg or MPEG4IP

Upvotes: 1

Related Questions