推拉流与
Mediamtx服务器
FFmpeg推流
1. 查看本机摄像头和麦克风
sh
ffmpeg -f avfoundation -list_devices true -i ""2. 直播
2.1 RTSP推H265直播流
sh
ffmpeg -f avfoundation -pixel_format nv12 -framerate 30 -video_size 1280x720 -i "0:0" -c:v hevc_videotoolbox -b:v 2000k -tag:v hvc1 -c:a pcm_alaw -ar 8000 -ac 1 -f rtsp -rtsp_transport tcp rtsp://localhost:8554/mystreamTIP
- -f avfoundation:指定使用 macOS 的视频捕获设备。
- -pixel_format nv12:标准的 YUV 4:2:0 格式
- -video_size 1280x720:分辨率为 720p 高清
- -framerate 30:设置捕获帧率为 30fps。
- -i "0:0":‘视频设备索引:音频设备索引‘(0:0 是默认的摄像头和麦克风,请参考1)。
- -c:v hevc_videotoolbox:视频编码器为H265。
- -b:v 2000k: 设定视频码率(Bitrate)为 2000kbps
- -tag:v hvc1: 兼容性标记。H.265 有两种标识(hvc1 和 hev1)。苹果生态和大多数 RTSP 播放器(如 VLC)更识别 hvc1
- -maxrate 2000k 和 -bufsize 4000k:控制视频比特率。
- -c:a pcm_alaw:音频编码为 PCMA (G.711a),模拟监控设备。
- -ar 8000:设定音频采样率为 8000Hz。这是 PCMA 的标准采样率
- -ac 1: 设定为单声道(Audio Channels)。
- -f rtsp:指定输出格式为 RTSP。
- -rtsp_transport tcp: 稳定参数。强制使用 TCP 传输。
- rtsp://localhost:8554/mystream:RTSP 服务器的地址
3、文件
sh
ffmpeg -re -stream_loop -1 -i test.mp4 -c:v libvpx -c:a libopus -bf 0 -f rtsp rtsp://localhost:8554/camera参数解释
TIP
- -re: 以输入文件的原始帧率读取输入。这对于实时流非常重要,因为它确保了数据以正确的速度被推送出去,而不是尽可能快地发送。
- -stream_loop -1: 设置输入文件循环播放的次数为-1,意味着无限循环播放输入文件。
- -i input.mp4: 指定输入文件路径。
- -c:v libx264: 使用H.264编码器对视频进行编码。如果源文件已经是这种格式,你可以省略此选项或用-c:v copy直接复制视频流而不重新编码。
- -c:a libopus: 使用Opus编码器对音频进行编码。同样,如果不需要重新编码音频,可以使用-c:a copy来直接复制音频流。
- -f rtsp: 强制输出格式为RTSP。
- rtsp://your_rtsp_server_ip:port/application: RTSP服务器的URL,包括IP地址、端口、应用名以及流密钥。
- closed: WebRTC doesn't support H264 streams with B-frames:如果MediaMTX服务器遇到这个问题,添加-bf 0 禁用B帧
WebRTC不支持带有B帧的H.264视频流,这主要是因为B帧会增加延迟,而WebRTC的设计目标是低延迟的实时通信
精简版本的推文件数据: ffmpeg -re -stream_loop -1 -i movie.mp4 -c copy -f rtsp rtsp://192.168.1.100:8554/my_camera