一、编译的系统环境和FFmpeg的版本还有MediaMtx的版本
系统:MacOS 15.1
FFmpeg 版本:7.1.1
系统:Linux Ubuntu 20.04.6 LTS
Mediamtx 版本:1.13.0
下载地址: Mediamtx下载版本,可以根据自己的系统进行下载
这里作为推流的服务器使用
二、RTMP 和 RTSP 链接测试
推流的视频: 找一个自己喜欢的,建议视频的时间大一点的
拉流的链接:
rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid(貌似是个游戏直播)
rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream (慢,可能需要科学上网)
也可以根据自己的需要替换
Mediamtx 服务器的推流链接,根据自己的当前环境进行修改: rtmp://localhost:1935/my_camera rtsp://localhost:8554/my_camera
可以使用FFmpeg 或者 VLC软件进行对 RTMP 和 RTSP 链接进行测试
FFmpeg命令如下:
ffplay rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid -hide_banner
ffplay rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream -hide_banner
VLC测试工具如下:
二、Mediamtx 的下载,安装和启动
注意这里:这里使用Mediamtx 服务器作为测试参考,而且使用本地环境作为测试,需要在同一个局域网里面进行,需要线上的需要自己进行部署或者使用其他。这里用Mediamtx的版本是基于Linux系统的,其他可以根据自己的系统进行下载。
1. mediamtx进行解压缩
使用命令如下:
tar -xvf mediamtx_v1.13.0_linux_amd64. tar
解压成功后,有三个文件,如下图:
2. 编辑 mediamtx.yml 文件
record: yes //这里设置为yes,可以记录并且保存流到本地
paths:
my_camera: {} //这里是设置推拉流的路径,可以自行进行修改根据自己的要求
3. 启动 mediamtx 服务
使用的命令如下,在当前的目录下:
./mediamtx
三、FFmpeg高级命令 ----- 使用 RTMP 推流和拉流
注意这里:Mac和Windows和Linux的录制命令不一样,这里用Mac的作为参考,如果需要Windows和Linux的,请去参考 Windows和Linux的屏幕录制命令
1. 使用 RTMP 进行推流 , 结合 Mediamtx 一起进行交互
1-1. 使用 RTMP 对Mac摄像头 进行推流
相关的参数:
-f avfoundatio: 使用 AVFoundation 采集设备(仅 macOS)
-framerate 30: 设置帧率为 30 fps
-i "0:0" : 选择输入设备(摄像头和麦克风) ,"0:0" 指第一个视频和第一个音频设备
-c:v libx264: 使用 x264 编码视频
-f flv 指定输出格式为 FLV(RTMP 要求)
可选择的参数:
-hide_banner: 隐藏 FFmpeg 的 banner 信息, 让日志可以输出显示更加的清晰
Mac 摄像头 进行推流的命令:
ffmpeg -f avfoundation -framerate 30 -i "0:0" -c:v libx264 -f flv rtmp://192.168.31.81:1935/my_camera -hide_banner
使用 ctrl + c 暂停进行推流
Mediamtx 服务器接收的命令如下,并且会创建recordings/my_camera 文件夹保存视频流
1-2. 使用 RTMP 对本地视频 进行推流
视频文件自己替换为自己需要的
相关的参数:
-re: 以实时速度读取输入(适用于本地文件推流时模拟直播)
-c:v libx264: 使用 x264 编码视频
-c:a aac: 使用 AAC 编码音频
-f flv: 指定输出格式为 FLV(RTMP 要求)
命令如下:
ffmpeg -re -i yaya.mp4 -c:v libx264 -c:a aac -f flv rtmp://192.168.31.81:1935/my_camera -hide_banner
可选择的参数:
-hide_banner 隐藏 FFmpeg 的 banner 信息, 让日志可以输出显示更加的清晰
使用 ctrl + c 暂停进行推流
Mediamtx 服务器接收的命令如下,并且会创建recordings/my_camera 文件夹保存视频流
2、使用 RTMP 进行拉流,并且保存视频文件到本地
使用到的rtmp链接: rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid(貌似是个游戏直播) 也可以根据自己的需要替换
相关的参数:
-c copy: 拷贝编码,不进行转码(快、节省 CPU)
-f mp4: 指定输出格式(也可以用 .flv, .ts)
可选择的参数: -hide_banner 隐藏 FFmpeg 的 banner 信息, 让日志可以输出显示更加的清晰
ffmpeg -i rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid -c copy -f mp4 saved_output_rtmp.mp4 -hide_banner
使用 ctrl + c 暂停进行拉流
四、FFmpeg高级命令 ----- 使用 RTSP 推流和拉流
注意这里:Mac和Windows和Linux的录制命令不一样,这里用Mac的作为参考,如果需要Windows和Linux的,请去参考 Windows和Linux的屏幕录制命令
1. 使用 RTSP 进行推流, 结合 Mediamtx 一起进行交互
1-1. 使用 RTSP 对Mac摄像头 进行推流
相关的参数:
-fflags +genpts: 为每个帧强制生成 PTS 时间戳,防止推流时出现 “Non-monotonic DTS” 报错
-f avfoundatio: 使用 AVFoundation 采集设备(仅 macOS)
-framerate 30: 设置帧率为 30 fps
-i "0:0" : 选择输入设备(摄像头和麦克风) ,"0:0" 指第一个视频和第一个音频设备
-c:v libx264: 使用 x264 编码视频
-c:a aac: 使用 AAC 编码音频
-f rtsp: 使用 RTSP 封装格式输出
可选择的参数:
-ar 44100: 设置音频采样率为 44100Hz
-ac 2: 设置音频声道为立体声
-hide_banner 隐藏 FFmpeg 的 banner 信息, 让日志可以输出显示更加的清晰
ffmpeg -fflags +genpts -f avfoundation -framerate 30 -i "0:0" -c:v libx264 -c:a aac -ar 44100 -ac 2 -f rtsp rtsp://192.168.31.81:8554/my_camera -hide_banner
1-2. 使用 RTSP 对本地视频 进行推流
视频文件自己替换为自己需要的
相关的参数: -re: 以实时速度读取输入(适用于本地文件推流时模拟直播) -c:v libx264: 使用 x264 编码视频 -c:a aac: 使用 AAC 编码音频 -f rtsp: 使用 RTSP 封装格式输出
可选择的参数: -hide_banner 隐藏 FFmpeg 的 banner 信息, 让日志可以输出显示更加的清晰
ffmpeg -re -i yaya.mp4 -c:v libx264 -c:a aac -f rtsp rtsp://192.168.31.81:8554/my_camera -hide_banner
2、使用 RTSP 进行拉流,并且保存视频文件到本地
使用到的rtsp链接: rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream (慢,可能需要科学上网) 也可以根据自己的需要替换
相关的参数:
-rtsp_transport tcp: 强制使用 TCP 拉流,更稳定,避免 UDP 丢包
-c copy: 音视频直接拷贝,不重新编码,速度快、资源低
-f mpegts: 这里保存为ts格式,因为ts格式比较稳定,如果需要其他格式的可以自行修改
可选择的参数:
-hide_banner:隐藏 FFmpeg 的 banner 信息, 让日志可以输出显示更加的清晰
ffmpeg -rtsp_transport tcp -i rtsp://stream.strba.sk:1935/strba/VYHLAD_JAZERO.stream -c copy -f mpegts saved_video_rtsp.ts -hide_banner
使用 ctrl + c 暂停进行拉流
五、更多FFmpeg查询命令链接地址
上面部分命令的参数可以按照自己的需求去进行添加或者修改。 上面的环境是推流和拉流的环境是Mac系统环境,需要使用Window或者Linux的,请自行查询对应的文档修改参数。 上面知识列举了部分的命令,如果没有合适的话,可以根据自己的需求到该网址进行查询并使用。 FFmpeg文档地址