原因:由于webRtc媒体信息交互需要使用SDP数据格式,而且使用ffplay播放rtp数据流时需要首先获取SDP文件信息,故通过对比SDP信息进行分析.
概述:SDP( Session Description Protocol)与其说是一个协议不如确切的说是一种文本封装格式,关于SDP的传输需要使用到其他协议传输,比如Http,RTSP等,SDP文本中主要包含会话信息和媒体信息,按照规定的格式进行填写和扩展。https://www.rfc-editor.org/rfc/rfc2327.txt
首先使用ffmpeg进行rtp推流以及ffplay进行rtp播放命令行如下:通过命令行可以看出ffplay播放rtp需要首先使用sdp文件进行获取媒体信息。
ffmpeg -re -i gop.264 -vcodec copy -f rtp rtp://127.0.0.1:1234 > test_rtp_h264.sdp
ffplay -protocol_whitelist "file,udp,rtp" -i test_rtp_h264.sdp
ffplay -protocol_whitelist "file,udp,rtp" -i rtp://127.0.0.1:1234 (失败)
rtp推流生成的sdp文件信息如下:可以看出包括会话信息和媒体信息。接下来具体分析SDP数据个关键字含义
SDP:
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 127.0.0.1
t=0 0
a=tool:libavformat 57.72.101
m=video 1234 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAKKzZQHgCJ+XARAAAD6QAAu4APGDGWA==,aOvjyyLA; profile-level-id=640028
v = :协议版本,目前为0.
o = :<会话名><会话标识><版本><网络类型><地址类型>,主要表述会话源,IN:标识internet地址类型为文本类型.
s =: <会话名>,每个会话描述必须只有一个会话名
c = :<网络类型><地址类型><连接地址>,主要用于包含连接数据.
t = :<开始时间><结束时间>,会话的实效性,如果结束为0则表示该会话不受限制,如果开始也为0则表示视为永久性。
m = :<媒体><端口><传输层&