FFMPEG对于rtp的推流以及VLC验证

前言

参考资料:

https://blog.csdn.net/zhoubotong2012/article/details/86711097

 

https://blog.csdn.net/zhoubotong2012/article/details/86711097

 

 

 

正文

首先, rtp每次推送只能推一路流, 如果用ffmpeg推送普通的影片,比如, mp4, 起码有视频流以及音频流,请在ffmpeg命令里面指定要推送的是视频还是音频, 否则会出现以下错误:

 

 

 

推送命令:

##推送视频流:
ffmpeg -re -i magic-01.mp4 -vcodec  libx264 -an -f rtp rtp://192.168.0.101:11112>test_magic_01_video.sdp
##推送音频流
ffmpeg -re -i magic-01.mp4  -vn -acodec copy -f rtp rtp://127.0.0.1:11112>test_magic_01_audio.sdp

解释:
-re 表示实时推送, 不加的话就是按照最大速度推送.
-an 表示, 不要推audio 音频
-vn 表示 不要推 video 视频
后面的sdp表示顺便保存到sdp文件里面去.

 

注意!!!!

标准协议里面规定,rtp的端口要用偶数端口, rtcp的端口要用奇数端口, 在一些开源项目以及软件里面都遵守这个规则, 譬如:jrtplib,live555等, 如果你随便推送到奇数端口那么vlc是会报错的,就是10s内没有接收到数据.

 

执行推送命令以后ffmpeg出现:

2020-07-10_13-11.png

然后你可以看到当前目录下面有一份文件:

2020-07-10_13-11_1.png

 

内容为:

 

 

2020-07-10_13-12.png

 

注意到 文件前面的 [SDP]字样没有? 这个是不标准的, 用vlc打开是没有任何反应的, 根据描述:

 

2020-07-09_20-20.png

需要删除第一行的SDP字样,如下:

v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
c=IN IP4 192.168.0.101
t=0 0
a=tool:libavformat 58.29.100
m=video 11112 RTP/AVP 96
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1

 

然后, 使用 vlc打开可以看到:

 

 

 

总结

就一个简单的ffmpeg推送rtp流, vlc接收并且播放都有几个坑点...

真不知道以后要弄 rtp接收合并为rtmp的时候会怎么样...

 

 

 

草稿[试错]

尝试推送普通mp4影片:

ffmpeg -re -i magic-01.mp4 -vcodec copy -f rtp rtp://127.0.0.1:1234>test_rtp_h264.sdp

出错:

 

其他人的解释:

2020-07-09_18-46.png

rtp自身限制每次只能一个媒体流, 修正如下:

##分别推送 视频以及音频到不同的端口.
ffmpeg -re -i magic-01.mp4 -vcodec copy -an -f rtp rtp://127.0.0.1:11111>test_magic_01_video.sdp -vn -acodec copy -f rtp rtp://127.0.0.1:11112>test_magic_01_audio.sdp

成功:

2020-07-09_18-50.png本机

 

2020-07-09_18-50_1.png

美中不足的是,这个命令似乎先推audio,再推video,vidoe的sdp一直为0字节.

 

去掉audio的推送以后就能够直接看到video sdp有内容了,

然后, 查看本机端口,11111的使用情况:

2020-07-09_19-37.png

.....没有任何程序占用它们....

也就是说, 上面的文章都漏了一个东西, ffmpeg是推送端, 那么接收端在哪里? 哪个程序在监听11111这个端口?

 

 

尝试一

又查了一些资料, 我终于明白了:

 

 

https://www.cnblogs.com/vitoboy/p/8393205.html

 

首先, 使用ffmpeg推rtp的时候需要有一个接收端, vlc可以先作为接收端, 首先在vlc上面

"媒体"> "打开网络窜流"

2020-07-09_19-49.png

点击播放, 可以看到

 

vlc已经在准备中了, 然后 查询一下 端口11111的占用情况:

2020-07-09_19-51.png

vlc已经在监听端口了, 好了, 接下来就用ffmpeg推rtp流了:

ffmpeg -re -i magic-01.mp4 -vcodec copy -an -f rtp rtp://127.0.0.1:11111>test_magic_01_video.sdp

 

ffmpeg工作正常:

 

 

而这时候你会看到vlc提醒:

2020-07-09_19-52_1.png

https://www.techwalla.com/articles/how-to-play-an-sdp-stream-on-vlc

 

 

尝试二

 

[尝试一]不成功, 又找了些资料:

https://stackoverflow.com/questions/61687212/ffmpeg-vlc-won-t-open-sdp-files-generated-by-ffmpeg

里面提到:

2020-07-09_20-20.png

我查了一下ffmpeg生成的sdp格式, 确实有:

2020-07-09_20-19.png

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 58.29.100
m=video 11111 RTP/AVP 96
b=AS:569
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; sprop-parameter-sets=Z2QAH6zZQEQE3lqEAAAPpAAC7gA8YMZY,aO+Pyw==; profile-level-id=64001F

然后用vlc重新打开:

ps:

我直接用的命令行,因为能够看到出错信息:

vlc test_magic_01_video.sdp

出现界面,

 

等待一段时间,报错:

2020-07-09_20-23_2.png

 

无意中看到资料, 原来协议规定了rtp是偶数端口, rtcp是奇数端口, 而在 很多开源项目都遵守这个规定, 只要将端口改为偶数 vlc就能正常播放了. 

话说, 网上用端口11111来推送rtp流的例子是怎么用vlc播放的? vlc播放不了的啊.

 

 

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg是一个开源的多媒体处理工具,可以用来处理音频和视频文件。h264是一种常见的视频编码格式。推流是指将音视频数据通过网络传输到特定的接收端。 根据引用提供的信息,可以使用简单的FFmpeg推流示例程序simplest_ffmpeg_streamer和simplest_ffmpeg_receiver来进行h264推流。 另外,根据引用和提供的命令,可以使用以下两种命令来进行h264推流: 1. 使用UDP协议进行推流ffmpeg -re -i d:\videos80P.264 -vcodec copy -f mpegts udp://127.0.0.1:1234 2. 使用RTP协议进行推流ffmpeg -re -i d:\videos80P.264 -vcodec copy -f rtp rtp://127.0.0.1:1234 在上述命令中,-re表示以实时模式进行推流,-i指定输入文件路径,-vcodec copy表示视频编码不做改变,-f指定输出格式,后面的地址为推流的目标地址。 通过以上命令和示例程序,你可以使用FFmpeg进行h264推流。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [ffmpeg的h264推流rtmp](https://download.csdn.net/download/mao0514/10909202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用FFmpeg命令行进行UDP、RTP推流(H264、TS),使用ffplay\VLC接收验证](https://blog.csdn.net/lonnng2004/article/details/126951108)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值