使用套接字从嵌入式设备播放RTP流

时间:2011-01-22 09:44:06

标签: c++ vlc rtp

我正在嵌入式设备上编写应用程序,该设备接收携带G.729,PCM或H.264的RTP流。数据包作为char *到达我的应用程序到RTP数据包。我希望能够看到或收听流(作为测试),但在这个设备上我没有播放器。我想我可以将这个流转发到套接字并在其他地方播放RTP流,就像在运行播放器的Linux机器上一样。这可能吗?我没有RTSP,只有RTP。例如,VLC是否可以这样做?我可以简单地将RTP数据包发送到套接字以在另一端播放它们吗? 谢谢!

3 个答案:

答案 0 :(得分:0)

您可以通过UDP套接字转发RTP数据包。

答案 1 :(得分:0)

不,你不能。简单RTP不包含有关流格式等的任何信息,仅包含有关数据包本身的信息:序列号,时间戳,附加同步信息。流式传输RTP的最简单方法是RTP / MPEG TS(MPEG Transport Stream)。

不幸的是我不知道准备使用解决方案。 VLC可以通过UDP从文件中流式传输(和播放)此类流,因此它从文件容器格式中获取所需的信息。这种解决方案可以采用SDP格式的外部流描述和您的实际RTP数据包

[编辑]顺便说一下,你收到的RTP流没有任何格式描述很奇怪,通常它的描述是以RTSP,MPEG-TS或其他方式提供的

答案 2 :(得分:0)

包含H.264流的SDP示例:

Server: rtsp server

Content-type: application/sdp

Content-base: rtsp://[some URL]

Content-length: 505



v=0

o=rtsp 1295996924 1590699491 IN IP4 0.0.0.0

s=RTSP Session

i=rtsp server

c=IN IP4 192.168.1.2

t=0 0

a=control:*

m=audio 0 RTP/AVP 97

a=rtpmap: 97 mpeg4-generic/8000/1

a=fmtp: 97 streamtype=5; profile-level-id=15; objectType=2; mode=AAC-hbr;

a=range:npt=now-

a=control:trackID=0

m=video 0 RTP/AVP 96

a=rtpmap:96 H264/90000

a=fmtp:96 profile-level-id=42E015; sprop-parameter-sets=Z0LgFdoHgtE=,aM4wpIA=; packetization-mode=1

a=range:npt=now-

a=framesize:96 480-352

a=control:trackID=1