背景

最近有播放RTP流的需求,在网络上寻觅良久也未找到可以使用的RTP直播地址。于是基于VLC搭建了RTP服务器,最后验证通过。先直接上步骤再作说明。

组网环境

1. VLC软件版本 3.0.11 Vetinari

 

ios vlc 播放rtmp vlc播放rtp流_服务器

这儿说明软件版本只是为了表明测试使用软件详细信息,不代表必须是此VLC版本。

2. 组网方式,客户端和服务端直连

ios vlc 播放rtmp vlc播放rtp流_组播_02

手动设置PC机的IPV4地址192.168.0.1,

设置开发板的地址ifconfig eth0 192.168.0.2

VLC推流

1. 选择 媒体->流,点击

ios vlc 播放rtmp vlc播放rtp流_开发板_03

按钮,选择需要串流的文件。

ios vlc 播放rtmp vlc播放rtp流_服务器_04

2. 点击

ios vlc 播放rtmp vlc播放rtp流_ios vlc 播放rtmp_05

,点击 下一个,出现如下界面:

ios vlc 播放rtmp vlc播放rtp流_开发板_06

3. 点击 

ios vlc 播放rtmp vlc播放rtp流_开发板_07

左侧的下拉框,选择

ios vlc 播放rtmp vlc播放rtp流_ios vlc 播放rtmp_08

并点击 添加

ios vlc 播放rtmp vlc播放rtp流_开发板_09

4.在地址处填入组播地址,这一点非常重要。测试使用了地址 224.224.224.224,基本端口 可以不用修改,流名称 未填写,点击下一个。播放时使用的URL是:rtp://224.224.224.224:5004

ios vlc 播放rtmp vlc播放rtp流_服务器_10

5.将转码选项中

ios vlc 播放rtmp vlc播放rtp流_服务器_11

的勾去掉,这一点在开始调试时也很重要,原因后面讲述,点击下一个。

ios vlc 播放rtmp vlc播放rtp流_服务器_12

6. 最后点击

ios vlc 播放rtmp vlc播放rtp流_ios vlc 播放rtmp_13

就可以了。

ios vlc 播放rtmp vlc播放rtp流_服务器_14

注意事项

1. 目前可以方便搭建的推流服务器软件可以是VLC,也可以是FFMPEG。

2. 开发板和推流服务器要处于同一个局域网中,测试过程中使用路由器和网线直连的方式,开发板都可以正常播放RTP流。

3. 推流的地址一定要是组播地址,不能是自己PC地址。自己PC地址,在相同PC上,播放器可以拿到RTP流,但是其他PC或者开发板都不能拿到RTP流。

4. 将激活转码去掉的原因:比如转成AVC,使用分辨率较低的影片实际测试过程中发现,相当长的时间内都没有能够正确解出AVC的SPS,PPS信息,出现黑屏。

5. 推流过程中,可以更换码流,这时候播放器就需要根据码流类型的改变作出自适应处理,避免长时间卡住。

6.如果在播放过程中出现了setsockopt(IP_ADD_MEMBERSHIP): No such device错误,那是因为多播地址还未加入到路由表中,使用如下命令:

route add -net 224.224.224.224 netmask 255.255.255.255 eth0

即可,其中224.224.224.224是要使用的多播放地址。

7. FFMPEG推流时,如果推流的格式使用RTP,即-f后面的参数为rtp时,一次只能推单流,音频和视频不能同时推。

ffmpeg.exe -re -stream_loop -100 -i F:\clip\mkv\32842.mkv -vcodec copy -an -f rtp rtp://224.224.224.223:5004

需要同时推送音视频时,建议将推流格式设置成rtp_mpegts

ffmpeg.exe -re -stream_loop -100 -i D:\clip\kh264_mp3.mp4 -vcodec copy -acodec copy -f rtp_mpegts rtp://224.224.224.224:5004

使用VLC推流,开发板经常拿不到正常的音频流,同一个组网环境另一台非VLC server 的PC机能够拿到正常的音视频流。使用FFMPEG推流,非VLC server 的PC机和开发板都能够正常播放。

8.有些局域网的路由器或者交换机对组播功能支持不好。即便是同一个局域网,RTP服务器正常推流,开发板也不一定能够拿到流播放,测试时还是需要直连。