我正在尝试从rtp有效载荷中提取mpeg4,rtsp媒体(视频)的格式是MP4V-ES,但我无法从有效载荷中提取mp4。 当我将提取转储到原始文件并使用ffmpeg将其转换为.avi或.mpg时,它无法正常工作。我不知道我在这里缺少什么。 代码是用java编写的。 我想从rtp中提取每个视频帧并将其保存在文件中或重新传输。
由于
问题更新..... 感谢输入,实际上我能够从000001b6中提取字节并将其发送到ffmpeg,但它抱怨没有标题信息,然后我构建了一个标题为000001b0 00000000和000001B5 00000005并将其发送到ffmpeg但没有运气。你可以帮助我吗,因为我从RTP得到的是000001b6 [数据]和000001b6 [数据]我甚至跟着'Cipi'只添加了000001但没有工作。我在这里遗漏了什么!并且还想知道我是否需要解码/编码,因为我从RTP得到的是实际的mpeg4数据然后我不知道为什么要解码它,我可以保存它一个文件并打开quicktime或VLC和它应该向右显示一帧。
答案 0 :(得分:1)
MPEG-4视频RTP有效载荷在RTP Payload Format for MPEG-4 Audio/Visual Streams中描述。
另请参阅How to process raw UDP packets so that they can be decoded by a decoder filter in a directshow source filter,其中简要介绍了重建MPEG-4视频流所需的步骤。
更新:您可能需要在会话描述符中查找B0
和B5
。为了让您知道在哪里寻找,这里是MPEG-4 RTSP / SDP响应的一个例子:
RTSP/1.0 200 OK
CSeq: 2
Content-Base: rtsp://192.168.0.57/webcam/
Content-Type: application/sdp
Content-Length: 320
v=0
o=- 1 1 IN IP4 127.0.0.1
s=Test
a=type:broadcast
t=0 0
c=IN IP4 0.0.0.0
m=video 0 RTP/AVP 96
a=rtpmap:96 MP4V-ES/90000
a=fmtp:96 profile-level-id=1;config=000001B003000001B509000001000000012000C488BA9850584121463F
a=control:track0
m=audio 0 RTP/AVP 97
a=rtpmap:97 AMR/8000/1
a=fmtp:97
a=control:track1