ไธไธชๆไปถ,่ฎฉๆๅๅคด่ฟไธๆต่งๅจ โโ ๅไบ่ฟๅถใ้ถๅค้จไพ่ต็ๅ จๅ่ฎฎๆตๅชไฝ็ฝๅ ณ
็ฎไฝไธญๆ | English
- ๐ GitHub ไปๅบ:https://github.com/suoten/streambridge
- ๐ฏ Gitee ไปๅบ(ๅฝๅ ่ฎฟ้ฎๆดๅฟซ):https://gitee.com/suoten/streambridge
๐ ๅฆๆ StreamBridge ๅธฎๅฐไบไฝ ,ๆฌข่ฟ ็นไธช Star ๆฏๆไธไธ!
| ๅบๆฏ | ๆ่ฟฐ |
|---|---|
| ๐ท ๅฎ้ฒ็ๆง | ๆตทๅบท/ๅคงๅ/ๅฎ่งๆๅๅคด โ ๆต่งๅจ้ไธญๆฅ็ |
| ๐ญ ๅทฅไธๅฏ่งๅ | ไบง็บฟๆๅๅคด โ ๅคงๅฑๅฑ็คบ |
| ๐ GB28181 ๅนณๅฐ | ไฝไธบๆต่งๅจๆญๆพ็ฝๅ ณ(ๅชๆฅ RTP/PS,ไธๅไธ SIP) |
| ๐ฑ ็ฉ่็ฝ่ฎพๅค | RTSP ่ฎพๅค โ Web/ๅพฎไฟกๅฐ็จๅบ/Android/iOS ๆญๆพ |
| ๐ฌ ็ดๆญ่ฝฌ็ | RTMP ๆจๆต โ HLS/WebRTC ๅๅ |
ๆชๅพๅพ ่กฅๅ ,้ฆๆฌกๅฏๅจๅ่ฎฟ้ฎ
http://localhost:8080ๅณๅฏ็ๅฐๅฎ้ ็้ข
StreamBridge ๆๅทฅไธ/ๅฎ้ฒๆๅๅคด(RTSP/RTMP/RTP/PS)็่ง้ขๆต,่ฝฌๆขไธบๆต่งๅจๅฏ็ดๆฅๆญๆพ็ๆ ผๅผ(WebSocket-FLV / HLS / WebRTC)ใ
ไธๅๅนณๅฐ:ไธๅ ๅซ GB28181 SIP ไฟกไปคใPTZ ๆงๅถใๅฝๅ็ฎก็ใONVIF ๅ็ฐ โโ ่ฟไบ็ฑไธๆธธๅนณๅฐ่ด่ดฃใStreamBridge ๅชๅไธไปถไบ:ๆไธๆธธๅทฒ็ปๅๅๅฅฝ็่ง้ขๆต,่ฝฌ็ /่ฝฌๅฐ่ฃ ไธบๆต่งๅจๅฏๆญๆพ็ๆ ผๅผใ
- ๐ ้ถ้ ็ฝฎๅฏๅจ:ไธ่ฝฝไธไธชไบ่ฟๅถๆไปถ,ๅๅปๅณๅฏ่ฟ่ก,5 ๅ้ๅฏ็จ
- ๐ฆ ๅๆไปถ้จ็ฝฒ:ๆ Docker / FFmpeg / ZLMediaKit ไพ่ต,1C1G ๆๅกๅจๅฏ่ท 20+ ่ทฏ 1080P
- ๐ ๅ จๅ่ฎฎ่พๅ ฅ:RTSP / RTMP / RTP/PS / MP4 ๆไปถ / HTTP-FLV / HLS
- ๐บ ๆต่งๅจๅๅฅฝ:WebSocket-FLV(ไธปๆจ) / HLS / WebRTC WHEP ไธ็ง่พๅบ
- ๐ฅ H265 ๅ ผๅฎน:ๅ ็ฝฎ H265โH264 ่ฝฏไปถ่ฝฌ็ ,่งฃๅณๆต่งๅจ H265 ไธๅ ผๅฎน
- ๐ฑ ๅ จๅนณๅฐ SDK:JavaScript / ๅพฎไฟกๅฐ็จๅบ / Android / iOS,็คพๅบ็ๅ จ้จๅ ่ดน
- ๐ ่ทจๅนณๅฐ:Windows / Linux / macOS / Docker / K8s ๅ จๅนณๅฐๆฏๆ
- ๐ ๆฐธไน ๅ ่ดน:MIT ๅ่ฎฎ,ๅฏๅ็จ,ๆ ๅ่ฝ้ๅถ
- ไธ่ฝฝๅฎ่ฃ
- 60 ็งๆ้ไธๆ
- ๅฎขๆท็ซฏ SDK
- ้ ็ฝฎ่ฏดๆ
- REST API ๆๆกฃ
- ไธ GB28181 ๅนณๅฐๅไฝ
- ็ไบง้จ็ฝฒ(ๅซๅฎๅก/1Panel/K8s ็ญ)
- ่ช่ก็ผ่ฏ
- ๅธธ่ง้ฎ้ข FAQ
- ๆถๆ่ฎพ่ฎก
- ็คพๅบ็ vs ไผไธ็
- License
ๆๅผไปปไธไปๅบ็ Releases ้กต้ข,ๆ นๆฎๆไฝ็ณป็ปไธ่ฝฝๅฏนๅบๆไปถ:
| ็ณป็ป | ๆถๆ | ๆไปถๅ | GitHub ไธ่ฝฝ | Gitee ไธ่ฝฝ(ๅฝๅ ๆดๅฟซ) |
|---|---|---|---|---|
| Windows | x86_64 | streambridge-windows-amd64.exe |
GitHub Release | Gitee Release |
| Linux | x86_64 | streambridge-linux-amd64 |
GitHub Release | Gitee Release |
| Linux | ARM64 | streambridge-linux-arm64 |
GitHub Release | Gitee Release |
| macOS | Apple Silicon | streambridge-darwin-arm64 |
GitHub Release | Gitee Release |
๐ก ๅฝๅ ็จๆทๅปบ่ฎฎ็จ Gitee:ไธ่ฝฝ้ๅบฆๆฏ GitHub ๅฟซ 10 ๅไปฅไธใ
ไธ่ฝฝๅๆ ้ๅฎ่ฃ ,็ดๆฅ่ฟ่ก:
# Linux / macOS(้่ตไบๆง่กๆ้)
chmod +x streambridge-linux-amd64
./streambridge-linux-amd64
# Windows
# ๅๅป streambridge-windows-amd64.exe ๅณๅฏ,ไผๅผนๅบ้ป่ฒ็ชๅฃ(ไธ่ฆๅ
ณ้ญ)# ๅฝๅ
ๆๅกๅจ(่ตฐ Gitee)
LATEST_URL=$(curl -s https://gitee.com/api/v5/repos/suoten/streambridge/releases/latest \
| grep -oP '"browser_download_url"\s*:\s*"\K[^"]*streambridge-linux-amd64"' \
| head -1 | tr -d '"')
# GitHub(ๆตทๅคๆๅกๅจ)
# LATEST_URL=$(curl -s https://api.github.com/repos/suoten/streambridge/releases/latest \
# | grep "browser_download_url.*streambridge-linux-amd64\"" \
# | cut -d '"' -f 4)
curl -L -o /usr/local/bin/streambridge "$LATEST_URL"
chmod +x /usr/local/bin/streambridge
streambridge# ๅฟซ้ไฝ้ช
docker run -d --name streambridge -p 8080:8080 --restart unless-stopped \
--pull always \
suoten/streambridge:latest
# ๅฎๆดๅ่ฝ(ๅซ RTMP / RTP)
docker run -d --name streambridge \
-p 8080:8080 -p 1935:1935 \
-p 20000-30000:20000-30000/udp \
--restart unless-stopped \
suoten/streambridge:latest้ๅๅฐๅ:
- Docker Hub:
suoten/streambridge:latest - ๅฝๅ
้ๅ(้ฟ้ไบ):
registry.cn-hangzhou.aliyuncs.com/suoten/streambridge:latest
git clone https://gitee.com/suoten/streambridge.git
cd streambridge
make build # ๅฝๅๅนณๅฐ
make build-all # ๅ
จๅนณๅฐไบคๅ็ผ่ฏ่ฏฆ่ง ่ช่ก็ผ่ฏ ็ซ ่ใ
ไธ่ฝฝ่ฟ่กๅ,ๆต่งๅจๆๅผ http://localhost:8080(ๆฌๆบ)ๆ http://ๆๅกๅจIP:8080(่ฟ็จ),ไฝ ไผ็ๅฐ:
- ๆญๆพๅจๆต่ฏ้กต:่พๅ ฅ RTSP ๅฐๅๅณๅฏๆญๆพ
- ็คบไพๆตๆ้ฎ:็นๅปๅณๅฏ็ๅฐๆผ็คบ็ป้ข(ๆ ้ๆๅๅคด)
- ๆตๅ่กจ:ๅฝๅๆดป่ทๆตไธ่ง็ไบบๆฐ
- API ๆๆกฃ:
http://localhost:8080/api/docs
- ๆต่งๅจๆๅผ
http://localhost:8080 - ่พๅ
ฅๆก็ฒ่ดด RTSP ๅฐๅ(ไพ:ๆตทๅบท
rtsp://admin:abc12345@192.168.1.64:554/Streaming/Channels/101) - ็นๅปใๆญๆพใๆ้ฎ โ
| ๅ็ | ้ป่ฎคๅฐๅ |
|---|---|
| ๆตทๅบทๅจ่ง | rtsp://admin:<ๅฏ็ >@<IP>:554/Streaming/Channels/101 |
| ๅคงๅ | rtsp://admin:<ๅฏ็ >@<IP>:554/cam/realmonitor?channel=1&subtype=0 |
| ๅฎ่ง | rtsp://admin:<ๅฏ็ >@<IP>:554/media/video1 |
| ้็จ ONVIF | ้่ฟ NVR ่ทๅ |
streambridge doctor
# ่ชๅจๆฃๆฅ็ซฏๅฃใ้
็ฝฎใๆต่งๅจๅ
ผๅฎนๆงใ็ฝ็ป่ฟ้ๆงๆๆต่งๅจๆๅผ http://localhost:8080/doctorใ
curl http://localhost:8080/api/health
# {"status":"ok","version":"v1.0.0","uptime":123,"streams":0,"viewers":0}็คพๅบ็ๆฐธไน ๅ ่ดนๆไพๆๆๅนณๅฐ SDK,่ฏฆ่ง sdk/README.mdใ
| ๅนณๅฐ | ๆไปถ | ๆญๆพๆนๅผ |
|---|---|---|
| ๆต่งๅจ | sdk/javascript/streambridge.js | WebSocket-FLV (MSE) / HLS / WebRTC |
| ๅพฎไฟกๅฐ็จๅบ | sdk/wechat-miniprogram/streambridge.js | HLS |
| Android | sdk/android/StreamBridgeView.java | HLS (ExoPlayer) |
| iOS | sdk/ios/StreamBridgePlayerView.swift | HLS (AVPlayer) |
<div id="player"></div>
<script src="http://localhost:8080/streambridge.js"></script>
<script>
StreamBridge.play({
container: '#player',
source: 'rtsp://admin:abc12345@192.168.1.64:554/Streaming/Channels/101',
});
</script>StreamBridge ๆฏๆ้ถ้
็ฝฎๅฏๅจ,ไนๅฏ้่ฟ -c config.yaml ๆๅฎ้
็ฝฎๆไปถใๅฎๆด็คบไพ่ง configs/streambridge.yamlใ
server:
http_port: 8080 # HTTP ็ซฏๅฃ
rtmp_port: 1935 # RTMP ๆจๆต็ซฏๅฃ
whep_port: 1985 # WebRTC ไฟกไปค็ซฏๅฃ
bind_addr: "0.0.0.0" # ็ๅฌๅฐๅ
log:
level: info # debug | info | warn | error
performance:
max_streams: 500 # ๆๅคงๅนถๅๆตๆฐ
max_viewers_per_stream: 50 # ๅ่ทฏๆตๆๅคง่ง็ไบบๆฐ
enable_h265_transcode: false # ๆฏๅฆๅฏ็จ H265->H264 ่ฝฌ็
input:
rtp:
listen: "0.0.0.0"
port_range: [20000, 30000] # RTP ๅชไฝ็ซฏๅฃ่ๅด
mode: passive # ่ขซๅจๆฅๆถ(GB28181 ๅนณๅฐ่ฝฌๅ)
security:
enable_auth: false # ๆฏๅฆๅฏ็จ Token ้ดๆ
secret_key: "่ฏทไฟฎๆนไธบ้ๆบๅญ็ฌฆไธฒ"
allow_origins: ["*"] # CORS ่ทจๅ็ฝๅๅstreambridge # ้ถ้
็ฝฎๅฏๅจ
streambridge -c /etc/streambridge/config.yaml # ๆๅฎ้
็ฝฎๆไปถ
streambridge --http-port 9090 --log-level debug
streambridge doctor # ไธ้ฎ่ฏๆญ
streambridge version # ๆฅ็็ๆฌGET /api/play?url=<rtsp-url>&format=flvๅๅบ:
{
"wsUrl": "ws://localhost:8080/ws/abc123",
"streamId": "abc123",
"format": "flv",
"source": "rtsp://..."
}GET /hls/play?url=<rtsp-url>ๅๅบ:
{
"streamId": "abc123",
"hlsUrl": "http://localhost:8080/hls/abc123.m3u8"
}POST /api/stop?id=<streamId>GET /api/streamsGET /api/healthPOST /api/file/play
Content-Type: application/json
{"path": "/data/video.mp4", "loop": true}POST /api/rtp/listen
Content-Type: application/json
{"port": 20000, "mode": "ps"}GET /metrics| ็ซฏ็น | ๆนๆณ | ่ฏดๆ |
|---|---|---|
/api/health |
GET | ๅฅๅบทๆฃๆฅ |
/api/ready |
GET | ๅฐฑ็ปชๆฃๆฅ |
/api/version |
GET | ็ๆฌไฟกๆฏ |
/api/play |
GET | ๅฏๅจๆต(่ฟๅ ws/flv ๅฐๅ) |
/api/stop |
POST | ๅๆญขๆต |
/api/streams |
GET | ๆดป่ทๆตๅ่กจ |
/api/stats?id=<id> |
GET | ๅ่ทฏๆต็ป่ฎก |
/api/file/play |
POST | ๆไปถๅๆพ |
/api/rtp/listen |
POST | RTP ็ๅฌ |
/api/demo |
GET | ๆผ็คบๆตๅฐๅ |
/api/logs |
GET | ๆฅๅฟไบไปถๆต(SSE) |
/metrics |
GET | Prometheus ๆๆ |
/ws/<streamId> |
WS | WebSocket-FLV ๆจๆต |
/live/<streamId> |
GET | HTTP-FLV ็ดๅบ |
/hls/<streamId>.m3u8 |
GET | HLS ๆญๆพๅ่กจ |
/hls/<streamId>/<seg>.ts |
GET | HLS ๅ็ |
/whep/<streamId> |
POST | WebRTC WHEP ไฟกไปค |
StreamBridge ไธๅไธ SIP ไฟกไปค/PTZ/ๅฝๅ,ๅชๆฅๆถไธๆธธๅนณๅฐ่ฝฌๅ็ RTP/PS ๅชไฝๆต:
[ๆๅๅคด] โโSIPโโโ [GB28181 ๅนณๅฐ] โโRTP/PSโโโ [StreamBridge] โโWebSocket-FLVโโโ [ๆต่งๅจ]
โ
โโโ PTZ/ๅฏน่ฎฒ/ๅฝๅ ็ฑๅนณๅฐ่ด่ดฃ
- ๅจ StreamBridge ้ ็ฝฎไธญๅผๅฏ RTP ๆฅๆถ:
input:
rtp:
listen: "0.0.0.0"
port_range: [20000, 30000]
mode: passive
ps_depacketize: true-
ๅจ GB28181 ๅนณๅฐไพง้ ็ฝฎ:
- ๅชไฝๆๅกๅจ IP = StreamBridge IP
- ๅชไฝ็ซฏๅฃ่ๅด = 20000-30000
-
ๅนณๅฐ INVITE ๆถไผ่ชๅจๆๅชไฝๆต่ฝฌๅๅฐ StreamBridge,StreamBridge ่ชๅจ่งฃๅฐ่ฃ PS โ H264/AAC โ ่ฝฌ FLV ่พๅบใ
StreamBridge ๅไบ่ฟๅถๅณๅฏ็ไบงๅฏ็จ,ไปฅไธ่ฆ็ๅ็ฑป้จ็ฝฒๅบๆฏ,ๆ้้ๆฉไธ็งๅณๅฏใ
้ๅ Linux ๆๅกๅจใไบไธปๆบใVPS,ๅผๆบ่ชๅฏ + ๅดฉๆบ่ชๅจ้ๅฏใ
# 1. ๅๅปบไธ็จ็จๆท
sudo useradd -r -s /bin/false streambridge
# 2. ๅๅค็ฎๅฝไธๆไปถ
sudo mkdir -p /etc/streambridge /var/log/streambridge
sudo cp configs/streambridge.yaml /etc/streambridge/config.yaml
sudo cp bin/streambridge-linux-amd64 /usr/local/bin/streambridge
sudo chown -R streambridge:streambridge /etc/streambridge /var/log/streambridge
# 3. ๅๅ
ฅ systemd ๆๅก
sudo tee /etc/systemd/system/streambridge.service > /dev/null <<'EOF'
[Unit]
Description=StreamBridge Gateway
After=network.target
[Service]
Type=simple
User=streambridge
ExecStart=/usr/local/bin/streambridge -c /etc/streambridge/config.yaml
Restart=always
RestartSec=5
LimitNOFILE=65535
StandardOutput=append:/var/log/streambridge/streambridge.log
StandardError=append:/var/log/streambridge/streambridge.log
[Install]
WantedBy=multi-user.target
EOF
# 4. ๅฏๅจๅนถ่ฎพ็ฝฎๅผๆบ่ชๅฏ
sudo systemctl daemon-reload
sudo systemctl enable --now streambridge
sudo systemctl status streambridge
# ๅธธ็จๅฝไปค
sudo systemctl restart streambridge # ้ๅฏ
sudo systemctl stop streambridge # ๅๆญข
sudo journalctl -u streambridge -f # ๆฅ็ๅฎๆถๆฅๅฟ้ๅ Windows ServerใWindows 10/11 ๆก้ข,ๅ ณๆบ้ๅฏๅ่ชๅจ่ฟ่ก,้ป็ชๅฃไธไผๆๅคๅ ณ้ญใ
# 1. ไธ่ฝฝ NSSM:https://nssm.cc/download
# 2. ่งฃๅๅๆ nssm.exe ๆพๅฐ C:\Windows\System32\ ๆๅฝๅ็ฎๅฝ
# 3. ๅฎ่ฃ
ๆๅก
nssm install StreamBridge "C:\Program Files\StreamBridge\streambridge.exe"
nssm set StreamBridge AppDirectory "C:\Program Files\StreamBridge"
nssm set StreamBridge AppParameters "-c C:\Program Files\StreamBridge\config.yaml"
nssm set StreamBridge AppStdout "C:\Program Files\StreamBridge\logs\stdout.log"
nssm set StreamBridge AppStderr "C:\Program Files\StreamBridge\logs\stderr.log"
nssm set StreamBridge AppRotateFiles 1
nssm set StreamBridge AppRotateBytes 104857600
# 4. ๅฏๅจ
nssm start StreamBridge
# ๅธธ็จๅฝไปค
nssm restart StreamBridge # ้ๅฏ
nssm stop StreamBridge # ๅๆญข
nssm remove StreamBridge # ๅธ่ฝฝๆๅก้ๅๅฝๅ ไบๆๅกๅจ็จๆท,ไฝฟ็จๅฎๅก็ใ่ฟ็จๅฎๆค็ฎก็ๅจใๆไปถ + ๅๅไปฃ็,ๅฏ่งๅๆไฝใ
ๆญฅ้ชคไธ:ๅฎ่ฃ StreamBridge
# SSH ็ปๅฝๆๅกๅจๅๆง่ก
mkdir -p /www/wwwroot/streambridge
cd /www/wwwroot/streambridge
# ไธ่ฝฝไบ่ฟๅถ(่ตฐ Gitee)
curl -L -o streambridge https://gitee.com/suoten/streambridge/releases/latest/download/streambridge-linux-amd64
chmod +x streambridge
# ๅคๅถ้ป่ฎค้
็ฝฎ
curl -L -o config.yaml https://gitee.com/suoten/streambridge/raw/main/configs/streambridge.yaml
# ๆต่ฏไธไธ่ฝๅฆๅฏๅจ
./streambridge -c config.yaml
# ็ๅฐ "listening on :8080" ๅๆ Ctrl+C ้ๅบๆญฅ้ชคไบ:ๅจๅฎๅก้ขๆฟๅฎ่ฃ ่ฟ็จๅฎๆค็ฎก็ๅจ
- ็ปๅฝๅฎๅก้ขๆฟ โ ่ฝฏไปถๅๅบ โ ๆ็ดขใ่ฟ็จๅฎๆค็ฎก็ๅจใ โ ๅฎ่ฃ
- ๆๅผ่ฟ็จๅฎๆค็ฎก็ๅจ โ ๆทปๅ ๅฎๆค่ฟ็จ
- ๅ็งฐ:
StreamBridge - ๅฏๅจ็จๆท:
root - ่ฟ่ก็ฎๅฝ:
/www/wwwroot/streambridge - ๅฏๅจๅฝไปค:
/www/wwwroot/streambridge/streambridge -c /www/wwwroot/streambridge/config.yaml - ่ฟ็จๆฐ้:
1
- ๅ็งฐ:
- ็นๅปใไฟๅญใๅนถๅฏๅจ
ๆญฅ้ชคไธ:้ ็ฝฎๅๅไปฃ็ + HTTPS(ๅฏ้,ๅ ฌ็ฝ่ฎฟ้ฎ็จ)
- ๅฎๅก้ขๆฟ โ ็ฝ็ซ โ ๆทปๅ ็ซ็น
- ๅๅ:
stream.example.com(้ๆๅ่งฃๆๅฐๆๅกๅจ) - ๆ น็ฎๅฝ:ไปปๆ(ๅฏๅปบไธไธช็ฉบ็ฎๅฝ)
- PHP ็ๆฌ:็บฏ้ๆ
- ๅๅ:
- ็ซ็น่ฎพ็ฝฎ โ ๅๅไปฃ็ โ ๆทปๅ ๅๅไปฃ็
- ไปฃ็ๅ็งฐ:
StreamBridge - ็ฎๆ URL:
http://127.0.0.1:8080 - ๅ้ๅๅ:
$host
- ไปฃ็ๅ็งฐ:
- ็ซ็น่ฎพ็ฝฎ โ SSL โ Let's Encrypt โ ็ณ่ฏทๅ ่ดน่ฏไนฆ โ ๅผบๅถ HTTPS
- ็ซ็น่ฎพ็ฝฎ โ ้
็ฝฎๆไปถ,ๅจ
location /ๅๅขๅ WebSocket ๆฏๆ(ๅฆๅ ws-flv ไธ้):
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket ๆฏๆ(ๅฟ
้,ๅฆๅ ws-flv ๆ ๆณๆญๆพ)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
# HLS ๅ็็ผๅญไผๅ
location /hls/ {
proxy_pass http://127.0.0.1:8080;
expires 10s;
add_header Cache-Control "public";
}- ไฟๅญ โ ้ๅฏ Nginx
ๆญฅ้ชคๅ:ๅฎๅก้ฒ็ซๅขๆพ่ก็ซฏๅฃ
ๅฎๅก้ขๆฟ โ ๅฎๅ จ โ ๆพ่ก็ซฏๅฃ:
8080TCP(็ด่ฟ่ฎฟ้ฎ,้ ็ฝฎๅไปฃๅๅฏๅ ณ้ญ)1935TCP(็จ RTMP ๆจๆตๆถๅผ)20000-30000UDP(ๅฏนๆฅ GB28181 ๆถๅผ)
1Panel ๆฏ็ฐไปฃๅ็ๅผๆบ Linux ๆๅกๅจ่ฟ็ปด้ขๆฟ,้ๅ่ฟฝๆฑ็ฐไปฃๅ UI ็็จๆทใ
# 1. ๅฎ่ฃ
1Panel(ๅ่ 1panel.cn ๅฎๆนๆๆกฃ)
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.shๆนๅผ A:Docker ๅบ็จๅๅบ้จ็ฝฒ
1Panel โ ๅบ็จๅๅบ โ ๆ็ดข StreamBridge โ ๅฎ่ฃ
(่ฅๅทฒไธๆถ)
ๆไฝฟ็จใๅฎนๅจใโใ็ผๆใโ ็ฒ่ดดไปฅไธ Compose ๆไปถ:
version: '3.8'
services:
streambridge:
image: suoten/streambridge:latest
container_name: streambridge
restart: unless-stopped
ports:
- "8080:8080"
- "1935:1935"
- "20000-30000:20000-30000/udp"
volumes:
- ./config.yaml:/etc/streambridge/config.yaml:ro
- ./logs:/var/log/streambridgeๆนๅผ B:ไบ่ฟๅถ + systemd
ๅ่ ๅบๆฏ 1:Linux systemd ๆๅก,1Panel ไธ systemd ๅ ฑๅญ,1Panel ไธป่ฆ่ด่ดฃๅฏ่งๅๆฅ็ๆฅๅฟใๆไปถๅ Nginx ๅไปฃใ
1Panel ๅๅไปฃ็้ ็ฝฎ
1Panel โ ็ฝ็ซ โ ๅๅปบ็ฝ็ซ โ ๅๅไปฃ็
- ไธปๅๅ:
stream.example.com - ไปฃ็ๅฐๅ:
http://127.0.0.1:8080 - ๅผๅฏ HTTPS:่ชๅจ็ณ่ฏท Let's Encrypt ่ฏไนฆ
- ้ซ็บง่ฎพ็ฝฎ โ ่ชๅฎไน Nginx ้ ็ฝฎ:ๅ ๅ ฅไธ้ข็ WebSocket ๅ็บง้ ็ฝฎ(ๅฎๅกๅบๆฏไธ็ฌฌ 4 ๆญฅ็ Nginx ้ ็ฝฎ)
# docker-compose.yml
version: '3.8'
services:
streambridge:
image: suoten/streambridge:latest
# ๅฝๅ
ๆๅกๅจๅฏๆน็จ้ฟ้ไบ้ๅ:
# image: registry.cn-hangzhou.aliyuncs.com/suoten/streambridge:latest
container_name: streambridge
restart: unless-stopped
ports:
- "8080:8080"
- "1935:1935"
- "20000-30000:20000-30000/udp"
volumes:
- ./config.yaml:/etc/streambridge/config.yaml:ro
- ./logs:/var/log/streambridge
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:8080/api/health"]
interval: 30s
timeout: 5s
retries: 3docker compose up -d # ๅฏๅจ
docker compose logs -f # ๆฅ็ๆฅๅฟ
docker compose restart # ้ๅฏ
docker compose down # ๅๆญขๅนถๅ ้ค# k8s-deploy.yaml
apiVersion: v1
kind: Namespace
metadata:
name: streambridge
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: streambridge
namespace: streambridge
spec:
replicas: 1
selector:
matchLabels:
app: streambridge
template:
metadata:
labels:
app: streambridge
spec:
containers:
- name: streambridge
image: suoten/streambridge:latest
ports:
- containerPort: 8080
name: http
- containerPort: 1935
name: rtmp
- containerPort: 1985
name: whep
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "4000m"
memory: "4Gi"
readinessProbe:
httpGet:
path: /api/ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /api/health
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
---
apiVersion: v1
kind: Service
metadata:
name: streambridge
namespace: streambridge
spec:
type: ClusterIP
selector:
app: streambridge
ports:
- name: http
port: 8080
targetPort: 8080
- name: rtmp
port: 1935
targetPort: 1935
- name: whep
port: 1985
targetPort: 1985kubectl apply -f k8s-deploy.yaml
kubectl get pods -n streambridge
kubectl logs -f deploy/streambridge -n streambridgeๅฏนๆฅ Ingress:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: streambridge
namespace: streambridge
annotations:
nginx.ingress.kubernetes.io/proxy-read-timeout: "86400"
nginx.ingress.kubernetes.io/proxy-send-timeout: "86400"
nginx.ingress.kubernetes.io/websocket-services: streambridge
spec:
rules:
- host: stream.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: streambridge
port:
number: 8080PM2 ๆฏ่ทจๅนณๅฐ่ฟ็จ็ฎก็ๅทฅๅ ท,Windows / Linux / macOS ้็จ,ๆ ้ๅ service ๆไปถใ
# 1. ๅฎ่ฃ
PM2(้ Node.js ็ฏๅข)
npm install -g pm2
# 2. ๅฏๅจ StreamBridge
pm2 start ./streambridge --name streambridge -- -c config.yaml
# 3. ่ฎพ็ฝฎๅผๆบ่ชๅฏ
pm2 save
pm2 startup # Linux/macOS ่ชๅจ็ๆ systemd / launchd ๆๅก
# Windows ้่ฆ้ขๅคๅฎ่ฃ
: npm install -g pm2-windows-startup && pm2-startup install
# ๅธธ็จๅฝไปค
pm2 status # ๆฅ็็ถๆ
pm2 logs streambridge # ๆฅ็ๆฅๅฟ
pm2 restart streambridge # ้ๅฏ
pm2 stop streambridge # ๅๆญข
pm2 delete streambridge # ็งป้ค# 1. ๅฎ่ฃ
Supervisor
sudo apt install -y supervisor # Debian/Ubuntu
# sudo yum install -y supervisor # CentOS/RHEL
# 2. ๅๅ
ฅ้
็ฝฎ
sudo tee /etc/supervisor/conf.d/streambridge.conf > /dev/null <<'EOF'
[program:streambridge]
command=/usr/local/bin/streambridge -c /etc/streambridge/config.yaml
directory=/etc/streambridge
user=streambridge
autostart=true
autorestart=true
startsecs=5
stopwaitsecs=10
stdout_logfile=/var/log/streambridge/supervisor.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=7
redirect_stderr=true
EOF
# 3. ๅฏๅจ
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status streambridge้ๅฎๅก/1Panel ็จๆท,็ดๆฅ็จ Nginx:
server {
listen 443 ssl http2;
server_name stream.example.com;
ssl_certificate /etc/letsencrypt/live/stream.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/stream.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# WebSocket-FLV(ๅฟ
้,ๅฆๅ ws-flv ๆ ๆณๆญๆพ)
location /ws/ {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 86400;
}
# HLS ๅ็็ผๅญไผๅ
location /hls/ {
proxy_pass http://127.0.0.1:8080;
expires 10s;
add_header Cache-Control "public";
}
}
# HTTP ๅผบๅถ่ทณ่ฝฌ HTTPS
server {
listen 80;
server_name stream.example.com;
return 301 https://$host$request_uri;
}็ณ่ฏทๅ ่ดน่ฏไนฆ(Let's Encrypt):
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d stream.example.comCaddy ไผ่ชๅจ็ณ่ฏทๅนถ็ปญๆ HTTPS ่ฏไนฆ,้ ็ฝฎๆ็ฎ:
# /etc/caddy/Caddyfile
stream.example.com {
reverse_proxy 127.0.0.1:8080
# WebSocket ่ชๅจๆฏๆ,ๆ ้้ขๅค้
็ฝฎ
# HLS ็ผๅญ(ๅฏ้)
@hls path /hls/*
handle @hls {
reverse_proxy 127.0.0.1:8080
header Cache-Control "public"
expire 10s
}
}sudo systemctl reload caddy| ็ซฏๅฃ | ๅ่ฎฎ | ็จ้ | ๆฏๅฆๅฟ ้ |
|---|---|---|---|
| 8080 | TCP | HTTP / WebSocket | โ ๅฟ ้ |
| 443 | TCP | HTTPS(้ ๅไปฃๅ) | ๅ ฌ็ฝ้จ็ฝฒๆจ่ |
| 1935 | TCP | RTMP ๆจๆต | ็จ RTMP ๆถๅผ |
| 1985 | TCP | WebRTC WHEP | ็จ WebRTC ๆถๅผ |
| 20000-30000 | UDP | RTP/PS ๆฅๆถ | ๅฏนๆฅ GB28181 ๆถๅผ |
| ๅบๆฏ | ๆจ่ไบบ็พค | ไธๆ้พๅบฆ |
|---|---|---|
| Windows NSSM | Windows ๆก้ข / Windows Server ็จๆท | โญ |
| Linux systemd | Linux ๆๅกๅจ่ฟ็ปด | โญโญ |
| ๅฎๅก้ขๆฟ | ๅฝๅ ไบๆๅกๅจใๅฏ่งๅๆงๅฐ็ฑๅฅฝ่ | โญโญ |
| 1Panel | ็ฐไปฃๅ UI ๆงๅฐ็ฑๅฅฝ่ | โญโญ |
| Docker / Compose | ๅฎนๅจๅ้จ็ฝฒใCI/CD ๆตๆฐด็บฟ | โญโญ |
| Kubernetes | ๅคง่งๆจก้็พคใDevOps ๅข้ | โญโญโญโญ |
| PM2 | Node.js ๅ จๆ ็จๆท | โญ |
| Supervisor | Python ๅ จๆ ็จๆท | โญโญ |
| Nginx / Caddy ๅไปฃ | ไปปไฝๅบๆฏไธ็ HTTPS ๆฅๅ ฅๅฑ | โญโญ |
- Go 1.22+(ไธ่ฝฝ:https://go.dev/dl/)
# ๅฝๅๅนณๅฐ
make build
# ไบคๅ็ผ่ฏๅ
จๅนณๅฐ
make build-all
# Docker ้ๅ
make docker
# ่พๅบๅจ bin/ ็ฎๅฝmake test
make lintStreamBridge/
โโโ cmd/streambridge/ # ไธปๅ
ฅๅฃ(main.go,ๅฝไปค่ก)
โโโ internal/
โ โโโ config/ # ้
็ฝฎ่งฃๆไธๅฝไปค่กๅๆฐ
โ โโโ input/ # ่พๅ
ฅๅ่ฎฎ้้
ๅฑ
โ โ โโโ rtsp/ # RTSP ๅฎขๆท็ซฏ(gortsplib v4)
โ โ โโโ rtmp/ # RTMP ๅฎขๆท็ซฏ
โ โ โโโ rtp/ # RTP/PS ๆฅๆถไธ่งฃๅฐ่ฃ
โ โ โโโ file/ # ๆไปถๅๆพ
โ โ โโโ http/ # HTTP-FLV / HLS ่พๅ
ฅ้ไผ
โ โโโ media/ # ๅชไฝๅค็ๅฑ
โ โ โโโ flv/ # FLV ๅฐ่ฃ
ๅจ
โ โ โโโ hls/ # HLS ๅ็ๅจ
โ โ โโโ h264.go # H264 NALU ่งฃๆ
โ โ โโโ h265.go # H265 NALU ่งฃๆ
โ โ โโโ aac.go # AAC ๅค็
โ โโโ server/ # HTTP/WS ๆๅก
โ โ โโโ web/ # ๅ
ๅต้ๆ่ตๆบ(ๆญๆพๅจ้กต้ข)
โ โ โโโ http.go # ่ทฏ็ฑไธ REST API
โ โ โโโ flv_writer.go # FLV ๅๅ
ฅๅจ
โ โโโ session/ # ไผ่ฏ็ฎก็(ๅค็จ/้ดๆ/็ป่ฎก)
โ โโโ webrtc/ # WebRTC WHEP ๅฎ็ฐ
โโโ sdk/ # ๅฎขๆท็ซฏ SDK(ๅ
จๅนณๅฐ)
โ โโโ javascript/
โ โโโ wechat-miniprogram/
โ โโโ android/
โ โโโ ios/
โโโ configs/ # ้
็ฝฎ็คบไพ
โโโ Dockerfile # ๅฎนๅจๅ
โโโ Makefile # ๆๅปบ่ๆฌ
โโโ go.mod
- ๆฃๆฅ 8080 ็ซฏๅฃๆฏๅฆ่ขซๅ ็จ:
streambridge doctor - Windows ็จๆทๆฃๆฅ้ฒ็ซๅขๆฏๅฆๆฆๆช
- Linux/macOS ็ๅฌ 80 ไปฅไธ็ซฏๅฃ้
sudo - ไบๆๅกๅจ้ๅจๅฎๅ จ็ปๆพ่ก 8080 ็ซฏๅฃ
- ็กฎ่ฎคๆๅๅคด RTSP ๅฐๅๆญฃ็กฎ(ๅฏ็จ VLC ๆต่ฏ)
- ๆๅๅคดไธ StreamBridge ๆๅกๅจ็ฝ็ปๅฏ่พพ
- H265 ๆต่ฏทๅผๅฏ
enable_h265_transcode: true(ๆถ่ CPU) - ๆฃๆฅๆฅๅฟ:
streambridge --log-level debug
- 1C1G ๆๅกๅจ:20+ ่ทฏ 1080P(็บฏ่ฝฌๅฐ่ฃ )
- 4C8G ๆๅกๅจ:200+ ่ทฏ 1080P(็บฏ่ฝฌๅฐ่ฃ )
- ๅฏ็จ H265 ่ฝฌ็ :ๆฏ่ทฏ็บฆๆถ่ 1 ไธช CPU ๆ ธ(่ฝฏ็ผ)
- ๅคง่งๆจก(โฅ100 ่ทฏ H265 ่ฝฌ็ )่ฏท่่ไผไธ็ GPU ็กฌไปถ่ฝฌ็
ๅฏไปฅ,ๅปบ่ฎฎ้ ็ฝฎ Nginx + HTTPS,่ฏฆ่ง ็ไบง้จ็ฝฒใ
- ๆต่งๅจ้่ฟ MSE ๆญๆพ H265 ๅ ผๅฎนๆงๅทฎ
- StreamBridge ็คพๅบ็ๅ ็ฝฎ H265โH264 ่ฝฏไปถ่ฝฌ็ (้ป่ฎคๅ ณ้ญ,้ๅผๅฏ)
- ๅผๅฏๆนๅผ:
enable_h265_transcode: true
- ZLMediaKit ๆฏ็ปผๅๆตๅชไฝๅนณๅฐ,ๅ่ฝๅคไฝ้จ็ฝฒๅคๆ
- StreamBridge ไธๆณจ"ๅ่ฎฎ่ฝฌๆข + ๆต่งๅจๆญๆพ",ๅไบ่ฟๅถ้ถไพ่ต
- StreamBridge ไธๅ SIP/PTZ/ๅฝๅ/ONVIF,่ฟไบ็ฑไธๆธธๅนณๅฐ่ด่ดฃ
ๅฏไปฅ,ไฝ็ดๆญๅบๆฏๅปบ่ฎฎ:
- ้ ็ฝฎ HLS ่พๅบ(ๅปถ่ฟ 3-10s,ไฝๅ ผๅฎนๆงๆๅฅฝ)
- ๅ ฌ็ฝ้จ็ฝฒ้ ็ฝฎ Nginx + HTTPS
- ๅคง่งๆจก่ฏท่่ไผไธ็้็พค HA
็คพๅบ็ ๆฐธไน ๅ ่ดน,MIT ๅ่ฎฎ,ๅฏๅ็จใไผไธ็ไป ๆไพๆฉ่งๆจก/ๅ่ง/ๆฏๆ็ฑปๅ่ฝ,ๆ ๅ่ฝ้ๅฒใ
ๅไปฃ้
็ฝฎๅฟ
้กปๅ
ๅซ WebSocket ๅ็บง้
็ฝฎ(Upgrade / Connection ๅคด),่ฏฆ่ง ๅบๆฏ 3:ๅฎๅก้ขๆฟ ็ฌฌ 3 ๆญฅ็ Nginx ้
็ฝฎใ
- ไบ่ฟๅถ้จ็ฝฒ:้ๆฐไธ่ฝฝๆฐ็ไบ่ฟๅถ,ๆฟๆขๆงๆไปถ,้ๅฏๆๅก
- Docker:
docker compose pull && docker compose up -d - systemd:
sudo systemctl restart streambridge - ้ ็ฝฎๆไปถๅๅๅ ผๅฎน,ๅ็บงๆ ้ไฟฎๆน
- ไบ่ฟๅถ:ๅๆญขๆๅก โ ๅ ้คไบ่ฟๅถไธ้ ็ฝฎ็ฎๅฝ
- Docker:
docker compose down -v - systemd:
sudo systemctl disable --now streambridge && sudo rm /etc/systemd/system/streambridge.service && sudo systemctl daemon-reload
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ StreamBridge Gateway โ
โ ๅไบ่ฟๅถ ยท ้ถๅค้จไพ่ต โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ GB28181 ๅนณๅฐ / NVR / ๆๅๅคด / ็ดๆญๆจๆต โ โ
โ โ (ไธๆธธ่ด่ดฃ SIP/PTZ/ๅฝๅ,StreamBridge ไธๅไธ) โ โ
โ โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ๅชไฝๆต โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ่พๅ
ฅๅ่ฎฎ้้
ๅฑ โ โ
โ โ RTSP Client โ RTMP Server โ RTP/PS โ File โ HLS โ โ
โ โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ็ปไธๅชไฝๅค็ๅฑ โ โ
โ โ H264/H265 NALU ่งฃๆ โ AAC ๆๅ โ H265โH264 ่ฝฌ็ โ โ
โ โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ ่พๅบๅฐ่ฃ
ๅฑ โ โ
โ โ WebSocket-FLV โ HLS ๅ็ โ WebRTC WHEP โ โ
โ โโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โ
โ ๆต่งๅจ / ๅฐ็จๅบ / Android / iOS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
- ็ปไธๅชไฝๆจกๅ:ๆๆ่พๅ
ฅๅ่ฎฎ่งฃๅฐ่ฃ
ไธบ็ปไธ็
media.Frame,่พๅบๅฑๆ ้ๅ ณๅฟ่พๅ ฅๆฅๆบ - ๆตๅค็จ:ๅคๆต่งๅจ่ง็ๅไธ่ทฏๆบ,ๅชๆ 1 ่ทฏ่พๅ ฅ,่็ๅธฆๅฎฝ
- ้ถๆท่ด่ฝฌๅ:H264 ๆตไธ้ๆฐ็ผ็ ,็ดๆฅ่ฝฌๅฐ่ฃ ไธบ FLV,CPU ๅ ็จๆไฝ
- ้ๆ่ตๆบๅตๅ
ฅ:Web ๆญๆพๅจ้กต้ข้่ฟ
embed.FSๅตๅ ฅไบ่ฟๅถ,็ๆญฃๅๆไปถ้จ็ฝฒ
| ็ฑปๅซ | ็คพๅบ็(ๅ ่ดน) | ไผไธ็(ไป่ดน) |
|---|---|---|
| ๅ่ฎฎ่ฝฌๆข | โ ๅ จ้จ | โ ๅ จ้จ |
| H264/H265 ๅค็ | โ ่ฝฏไปถ่ฝฌ็ | โ + GPU ็กฌไปถ่ฝฌ็ (NVENC/QSV) |
| ๅฎขๆท็ซฏ SDK | โ ๅ จๅนณๅฐ | โ ๅ จๅนณๅฐ |
| REST API | โ ๅฎๆด | โ ๅฎๆด |
| ๅ่็นๅนถๅ | โ 200+ ่ทฏ | โ ้็พค HA(ๆฐๅ่ทฏ) |
| ไผ ่พๅ ๅฏ | TLS/HTTPS | + ๅฝๅฏ SM4 / HLS DRM |
| ็ๆงๅ่ญฆ | Prometheus ๆๆ | + Grafana ็ๆฟ + ๅ่ญฆ |
| ๆไฝๅฎก่ฎก | ๅบ็กๆฅๅฟ | + ๅฎๆดๅฎก่ฎกๆฅ่กจ |
| ๅไธๆฏๆ | ็คพๅบ issue | 7x24 SLA + ไธๅฑๅทฅ็จๅธ |
็คพๅบ็ๅ่ฝๅฎๆดๅฏ็จ,ๆ ไปปไฝๅ่ฝ้ๅฒ,ๅฏ็ฌ็ซๅ็จใไผไธ็ไป ๆไพ"ๆฉ่งๆจกใๅ่งใๆฏๆ"็ฑป่ฝๅใ
- ๆไบค Issue:
- ๆไบค Pull Request:ๆฌข่ฟไฟฎๅค Bug ๆๆทปๅ ๆฐๅ่ฝ,่ฏทๅ ๅจ Issue ไธญ่ฎจ่ฎบ
MIT License - ็คพๅบ็ๆฐธไน ๅ ่ดน,ๅฏๅ็จใ
Copyright (c) 2026 StreamBridge Contributors