一、环境准备
1、安装FFMPEG
https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z
解压并将目录配置到环境变量
2、安装VLC
https://www.videolan.org/vlc/download-windows.zh.html
https://www.videolan.org/vlc/index.zh.html
3、下载音视频测试文件(mp4格式)
https://sample-videos.com/index.php#sample-mp4-video
二、FFMPEG推rtp流
注意事项:
(1)RFC3551协议中规定,rtp数据使用偶数端口,对应的RTCP数据使用下一个端口(奇数端口)。
https://tools.ietf.org/html/rfc3551#section-8
(2)命令行如果用重定向方式("> audio_video.sdp")存储sdp文件,第一行会包含"SDP:"需删除该行。
用命令"-sdp_file audio_video.sdp"存储sdp文件不需要做改动。
(3)FFMPEG不支持RTP多路复用,RTP muxer只支持单个流推送,因此音频和视频流是单独推送的。
在推送时需加上-an或-vn,否则会报如下错误:
[rtp @ 000002ad61675e40] Only one stream supported in the RTP muxer
(4)音频和视频分别使用不同的端口(偶数),如果使用同一端口,只会传输第一条流。
推送音频命令
D:\abcd\Desktop>ffmpeg -re -i SampleVideo_1280x720_30mb.mp4 -vn -acodec copy -f rtp rtp://127.0.0.1:11990 -sdp_file audio.sdp
推送视频命令
D:\abcd\Desktop>ffmpeg -re -i SampleVideo_1280x720_30mb.mp4 -vcodec libx264 -an -f rtp rtp://127.0.0.1:11992 -sdp_file video.sdp
推送音视频命令
D:\abcd\Desktop>ffmpeg -re -i SampleVideo_1280x720_30mb.mp4 -vn -acodec copy -f rtp rtp://127.0.0.1:11990 -vcodec libx264 -an -f rtp rtp://127.0.0.1:11992 -sdp_file audio_video.sdp
其中:
-re 表示实时推送,不加的话就是按照最大速度推送.
-an 表示不推音频
-vn 表示不推视频
三、VLC拉流
打开VLC -> 媒体 -> 打开多个文件 -> 文件 -> 添加(选择sdp文件)-> 播放
四、注意
最初是在Linux服务器上搭建该环境,由于Linux服务器无法运行vlc客户端,需要在window上运行vlc。
此时如何设置rtp地址是一个问题。
如何使用Linux服务器的IP,ffmpeg推流地址中对应的端口并没有打开,因此vlc无法连接rtp地址。
如果使用window服务器的IP,ffmpeg无法推流成功(Linux服务器无法访问我的window机器)。
参考:
https://www.kurento.org/blog/rtp-ii-streaming-ffmpeg
https://blog.csdn.net/cdnight/article/details/107248942