1.ffmpeg命令推流
ffmpeg -re -i in.h264 -vcodec copy -f rtp rtp://127.0.0.1:8888
补充:
-re参数,这是一个输入文件的参数,表示以原始帧速率读取输入。 主要用于模拟抓取设备(a grab device)或实时输入流(例如,从文件读取时)。 不应与实际的抓取设备或实时输入流一起使用(这可能会导致数据包丢失)。 默认情况下,ffmpeg尝试尽快读取输入。 此选项会将输入的读取速度减慢到输入的原始帧速率。 对于实时输出(例如实时流式传输)很有用。
2.ffmpeg命令导出sdp信息
ffmpeg -re -i in.h264 -vcodec copy -f rtp rtp://127.0.0.1:8888 > txt.sdp
推流命令的sdp信息会输出到屏幕上,但是一般播放器播放rtp码流的时候都需要相应rtp码流的sdp信息,故而需要将sdp信息导出到文件,以便播放器读取sdp信息。
txt.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.83.100 m=video 8888 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z0LAFtkAoC/5YQAAAwABAAADACiPFi5I,aMuMsg==; profile-level-id=42C016
3.ffplay读取sdp,播放相应rtp码流
ffplay -protocol_whitelist "file,udp,rtp" -i txt.sdp
4.vlc播放器读取sdp,播放相应的rtp码流。
4.1打开vlc播放器
4.2读取sdp文件
注意:对于上述sdp.txt文件,测试发现VLC播放器无法直接正确读取解析,反而会使得电脑卡死,需要删除前几行信息。
更改后的文件内容:
a=tool:libavformat 57.83.100 m=video 8888 RTP/AVP 96 a=rtpmap:96 H264/90000 a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z0LAFtkAoC/5YQAAAwABAAADACiPFi5I,aMuMsg==; profile-level-id=42C016
4.3点击播放,使得VLC处于等待码流状态。
4.4使用ffmpeg命令向目标主机推送rtp流。
ffmpeg -re -i in.h264 -vcodec copy -f rtp rtp://127.0.0.1:8888
4.5VLC播放rtp码流。