https://github.com/e04/srt-live-reporter
SRT stream relay with real-time statistics via WebSocket
https://github.com/e04/srt-live-reporter
obs-studio srt
Last synced: 22 days ago
JSON representation
SRT stream relay with real-time statistics via WebSocket
- Host: GitHub
- URL: https://github.com/e04/srt-live-reporter
- Owner: e04
- License: mit
- Created: 2025-06-28T14:18:28.000Z (12 months ago)
- Default Branch: main
- Last Pushed: 2025-08-25T12:53:29.000Z (10 months ago)
- Last Synced: 2025-08-25T14:46:05.507Z (10 months ago)
- Topics: obs-studio, srt
- Language: Go
- Homepage:
- Size: 45.9 KB
- Stars: 5
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# srt-live-reporter
```
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
SRT Stream ━━━▷┃ srt-live-reporter ┃━━▷ UDP or SRT Stream
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
╎
╎ Web Socket
╎
▽
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
┃ Stats ┃
┃ ┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃
┃ ┃ 1 { ┃ ┃
┃ ┃ 2 MbpsRecvRate: 10, ┃ ┃
┃ ┃ 3 MsRTT: 3, ┃ ┃
┃ ┃ 4 PktRecvLossRate: 0, ┃ ┃
┃ ┃ 5 .... ┃ ┃
┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛ ┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
```
A lightweight Go application for receiving and relaying SRT (Secure Reliable Transport) live streams with real-time statistics reporting via WebSocket.
## The `go-irl` Stack
`srt-live-reporter` is a core component of **[go-irl](https://github.com/e04/go-irl)**, a complete, modern streaming stack designed for robust IRL broadcasting.
If you are looking for an easier setup with more advanced features, consider using `go-irl`. It bundles `srt-live-reporter` with other essential tools (`obs-srt-bridge`, `go-srtla`) and provides a simple, one-command launcher.
## Usage
### Basic Command
```bash
./srt-live-reporter -from -to [-wsport ]
```
### Parameters
- `-from`: Source address (srt://, udp://, or `-` for stdin)
- `-to`: Destination address (srt://, udp://, file://, or `-` for stdout)
- `-wsport`: WebSocket server port for statistics (default: 8888, 0 to disable)
### Examples
```bash
./srt-live-reporter -from "srt://:5001?mode=listener" -to "udp://:5002" -wsport 8888
```
## WebSocket Statistics
When WebSocket is enabled, connect to `ws://localhost:/ws` to receive real-time statistics in JSON format:
```typescript
interface Statistics {
MsTimeStamp: number;
Accumulated: {
PktSent: number;
PktRecv: number;
PktSentUnique: number;
PktRecvUnique: number;
PktSendLoss: number;
PktRecvLoss: number;
PktRetrans: number;
PktRecvRetrans: number;
PktSentACK: number;
PktRecvACK: number;
PktSentNAK: number;
PktRecvNAK: number;
PktSentKM: number;
PktRecvKM: number;
UsSndDuration: number;
PktRecvBelated: number;
PktSendDrop: number;
PktRecvDrop: number;
PktRecvUndecrypt: number;
ByteSent: number;
ByteRecv: number;
ByteSentUnique: number;
ByteRecvUnique: number;
ByteRecvLoss: number;
ByteRetrans: number;
ByteRecvRetrans: number;
ByteRecvBelated: number;
ByteSendDrop: number;
ByteRecvDrop: number;
ByteRecvUndecrypt: number;
};
Interval: {
MsInterval: number;
PktSent: number;
PktRecv: number;
PktSentUnique: number;
PktRecvUnique: number;
PktSendLoss: number;
PktRecvLoss: number;
PktRetrans: number;
PktRecvRetrans: number;
PktSentACK: number;
PktRecvACK: number;
PktSentNAK: number;
PktRecvNAK: number;
MbpsSendRate: number;
MbpsRecvRate: number;
UsSndDuration: number;
PktReorderDistance: number;
PktRecvBelated: number;
PktSndDrop: number;
PktRecvDrop: number;
PktRecvUndecrypt: number;
ByteSent: number;
ByteRecv: number;
ByteSentUnique: number;
ByteRecvUnique: number;
ByteRecvLoss: number;
ByteRetrans: number;
ByteRecvRetrans: number;
ByteRecvBelated: number;
ByteSendDrop: number;
ByteRecvDrop: number;
ByteRecvUndecrypt: number;
};
Instantaneous: {
UsPktSendPeriod: number;
PktFlowWindow: number;
PktFlightSize: number;
MsRTT: number;
MbpsSentRate: number;
MbpsRecvRate: number;
MbpsLinkCapacity: number;
ByteAvailSendBuf: number;
ByteAvailRecvBuf: number;
MbpsMaxBW: number;
ByteMSS: number;
PktSendBuf: number;
ByteSendBuf: number;
MsSendBuf: number;
MsSendTsbPdDelay: number;
PktRecvBuf: number;
ByteRecvBuf: number;
MsRecvBuf: number;
MsRecvTsbPdDelay: number;
PktReorderTolerance: number;
PktRecvAvgBelatedTime: number;
PktSendLossRate: number;
PktRecvLossRate: number;
};
}
interface WebSocketMessage {
timestamp: string;
type: "reader" | "writer";
stats: Statistics;
}
```
For detailed information about the statistics fields, refer to the [gosrt statistics code](https://github.com/datarhei/gosrt/blob/main/statistics.go).
### Viewing Statistics with wscat
To view real-time statistics in the console, you can use `wscat`:
```bash
npm install -g wscat
wscat -c ws://localhost:8888/ws
```
## Dependencies
- [github.com/datarhei/gosrt](https://github.com/datarhei/gosrt) - SRT protocol implementation
- The implementation is based on the [gosrt client sample application](https://github.com/datarhei/gosrt/tree/main/contrib/client).
- [github.com/gorilla/websocket](https://github.com/gorilla/websocket) - WebSocket support