ffmpeg拉取RTMP流,并转换输出RTP流
由于RTP的一些限制,所以需要将音、视频分开输出,不然的话会提示
FFmpeg Only one stream supported in the RTP muxer
ffmpeg -re -i rtmp://192.168.3.38:21935/phone/123456 -vn -acodec pcm_alaw -f rtp rtp://192.168.3.6:6000 -vcodec copy -an -f rtp rtp:192.168.3.6:5000
此时会在终端打印出SDP信息
将SDP信息
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
t=0 0
a=tool:libavformat 58.17.101
m=audio 6000 RTP/AVP 97
c=IN IP4 192.168.3.6
b=AS:128
a=rtpmap:97 PCMA/16000/1
m=video 5000 RTP/AVP 96
c=IN IP4 192.168.3.6
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAFqy0C4KIgA==,aO48sA==; profile-level-id=640016
保存为SDP文本文件
注意,这里PCMA的payload type是97,而不是8,千万不要手贱去改这些信息
这里h264的SPS信息,每次也都不同(http://www.360doc.com/content/12/0627/17/2660674_220789931.shtml)
使用ffplay播放音视频流
ffplay -protocol_whitelist file,udp,rtp -i test.pcma.h264.sdp -fflags nobuffer
这样就可以用ffplay播放了,当然也可以直接用VLC播放器打开SDP文本文件播放音视频流
虽然可以播放出来,并且语音和视频也是同步的,但延迟有点大,3-5s样子
参考资料: