背景
最近有播放RTP流的需求,在网络上寻觅良久也未找到可以使用的RTP直播地址。于是基于VLC搭建了RTP服务器,最后验证通过。先直接上步骤再作说明。
组网环境
1. VLC软件版本 3.0.11 Vetinari
这儿说明软件版本只是为了表明测试使用软件详细信息,不代表必须是此VLC版本。
2. 组网方式,客户端和服务端直连
手动设置PC机的IPV4地址192.168.0.1,
设置开发板的地址ifconfig eth0 192.168.0.2
VLC推流
1. 选择 媒体->流,点击按钮,选择需要串流的文件。
2. 点击 ,点击 下一个,出现如下界面:
3. 点击 左侧的下拉框,选择
并点击 添加
4.在地址处填入组播地址,这一点非常重要。测试使用了地址 224.224.224.224,基本端口 可以不用修改,流名称 未填写,点击下一个。播放时使用的URL是:rtp://224.224.224.224:5004
5.将转码选项中的勾去掉,这一点在开始调试时也很重要,原因后面讲述,点击下一个。
6. 最后点击就可以了。
注意事项
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服务器正常推流,开发板也不一定能够拿到流播放,测试时还是需要直连。
UDP推流的配置方式相似,用FFMPEG推流的方式也类似:
ffmpeg.exe -re -stream_loop -100 -i cctvaac.ts -vcodec copy -acodec copy -f mpegts udp://224.224.224.224:5004
VLC在播放这个upd时,URL要配置成udp://@224.224.224.224:5004,即IP前有一个@符号,选择推流文件的时候,也尽量选择标准的ts文件,否则VLC,FFPLAY等报一堆找不到sps的错误,可能不能播放。测试时,VLC推流用VLC和ffmpeg都可以播放,ffmpeg推的UDP VLC播放一直在lost sync.