FFMPEG对RTP直播流转发的实现

来源:互联网 发布:linux 文件夹大小限制 编辑:程序博客网 时间:2024/05/22 15:15

一、RTP的流发布

    (见上篇)

 

二、对不同RTP流媒体的SDP文件定义

    1、Wireshark对RTP流的抓包分析:

       首先分析SIP消息中SIP/SDP消息中的SDP定义,得到基本的SDP文件,如下

保存文件h264.sdp

SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.52
t=0 0
a=tool:libavformat 52.93.0
m=audio 7300 RTP/AVP 8
a=rtpmap:8 PCMU/8000
m=video 7310 RTP/AVP 104
a=rtpmap:104 H264/90000
a=fmtp:104 profile-level-id=42e00a; packetization-mode=1; max-br=452; max-mbps=11880

     其次,有了以上SDP后通过ffplay h264.sdp 还不能正确的播放,因为H264的具体解码格式在RTP流的前两个包里,如果ffplay错过了该包,就不能正确播放,所以必须要获得sprop-parameter-sets值。

 

  2、Wireshark抓RTP包中的SPS和PPS

    得到包的Base64值的SPS和PPS值。

    SPS:67 42 c0 14 f4 0b 04 b4 20 00 00 03 00 20 00 00 03 03 d1 e2 85 54

    PPS:68 ce 04 f2

    67是SPS起始位,68是PPS起始位。

 

  3、转换SPS/PPS到sprop-parameter-sets

    sprop-parameter-sets=Z0LAFPQLBLQgAAADACAAAAMD0eKFVA==,aM4E8g==

 

  4、合并H264.sdp

    v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.52
t=0 0
a=tool:libavformat 52.93.0
m=audio 7300 RTP/AVP 8
a=rtpmap:8 PCMU/8000
m=video 7310 RTP/AVP 104
a=rtpmap:104 H264/90000
a=fmtp:104 profile-level-id=42e00a; packetization-mode=1; max-br=452; max-mbps=11880; sprop-parameter-sets=Z0LAFPQLBLQgAAADACAAAAMD0eKFVA==,aM4E8g==

 

三、播放

    通过ffplay H264.sdp就可以正确播放,错过SPS/PPS包也可以。

 

四、RTSP流媒体发布

   1、流媒体服务器(real server)

      real server获取H264.sdp文件实现发布。

 

五、RTMP流媒体发布

   1、流媒体服务器(rtmp server)

 

   2、ffmpeg转发

      ffmpeg -i "e:\tt.sdp" -vcodec flv -acodec aac -ab 8000 -f flv rtmp://192.168.0.201:1935/live/stream3   

 

   3、播放

      jwplayer 实现:

      rtmp://192.168.0.201:1935/live/stream3

      成功。


转载自:http://fengqing888.blog.163.com/blog/static/33011416201111532710485/

0 0
原创粉丝点击