一、两者区别
| 对比 | FFmpeg | 流媒体服务器 |
|---|---|---|
| 角色 | 采集、编码、推流 | 接收、分发、播放 |
| 是否长期运行 | 可以短期运行,也可以一直运行 | 通常一直运行 |
| 是否适合多人观看 | 不适合直接分发给多人 | 适合多人观看 |
| 是否生成播放地址 | 一般不负责 | 负责 |
| 常见软件 | ffmpeg.exe | MediaMTX、ZLMediaKit、SRS、Nginx-RTMP |
| 在你的场景中 | 读取摄像头 | 给别人提供播放入口 |
二、流媒体服务器使用操作步骤
Windows 摄像头
↓
FFmpeg 推 RTMP
↓
MediaMTX
↓
前端网页 WebRTC / HLS 播放
1. 新建目录
比如在服务器上创建:
mkdir mediamtx
cd mediamtx
2. 创建 docker-compose.yml并启动
在 mediamtx 目录下创建文件:
version: "3.8"
services:
mediamtx:
image: bluenviron/mediamtx:latest
container_name: mediamtx
restart: always
ports:
- "8554:8554" # RTSP
- "1935:1935" # RTMP
- "8888:8888" # HLS
- "8889:8889" # WebRTC HTTP
- "8189:8189/udp" # WebRTC ICE/UDP
- "9997:9997" # API,可选
environment:
- MTX_PROTOCOLS=tcp
- MTX_WEBRTCADDRESS=:8889
- MTX_WEBRTCADDITIONALHOSTS=你的服务器IP # 换成你的真实服务器 IP。
- MTX_API=yes
3. 用 FFmpeg 推送你的笔记本摄像头
查到摄像头名字是:Integrated Camera
4. 前端播放地址
推流成功后,MediaMTX 可以提供不同播放方式。
WebRTC 播放,低延迟,推荐
浏览器打开:http://服务器IP:8889/live/camera1
HLS 播放,兼容性好,但延迟高
浏览器或前端播放器使用:http://服务器IP:8888/live/camera1/index.m3u8
HLS 一般会有几秒到十几秒延迟,但前端兼容性比较好。
RTMP 播放,适合 VLC 测试
VLC 打开网络串流:rtmp://服务器IP:1935/live/camera1
5. 前端页面怎么接?
1.如果用 HLS,前端可以用 hls.js:
<video id="video" controls autoplay muted style="width: 800px;"></video>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script>
const video = document.getElementById('video');
const url = 'http://192.168.1.100:8888/live/camera1/index.m3u8';
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(url);
hls.attachMedia(video);
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = url;
}
</script>
22.如果你要低延迟,优先用 MediaMTX 自带的 WebRTC 页面:
http://192.168.1.100:8889/live/camera1
后面再接入你自己的前端。