Utunbu VLC 播放器播放本机rtp码流

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码流。

原文地址:https://www.cnblogs.com/iuyy/p/13834068.html