go2rtc tries to name formats, protocols and codecs the same way they are named in FFmpeg.
Some formats and protocols go2rtc supports exclusively. They have no equivalent in FFmpeg.
- The initiator of the connection can be go2rtc - Source protocols
- The initiator of the connection can be an external program - Ingress protocols
- Codecs can be incoming - Recevers codecs
- Codecs can be outgoing (two way audio) - Senders codecs
Format |
Source protocols |
Ingress protocols |
Recevers codecs |
Senders codecs |
Example |
adts |
http,tcp,pipe |
http |
aac |
|
http: |
bubble |
http |
|
h264,hevc,pcm_alaw |
|
bubble: |
dvrip |
tcp |
|
h264,hevc,pcm_alaw,pcm_mulaw |
pcm_alaw |
dvrip: |
flv |
http,tcp,pipe |
http |
h264,aac |
|
http: |
gopro |
http udp |
|
TODO |
|
gopro: |
hass/webrtc |
ws udp,tcp |
|
TODO |
|
hass: |
hls/mpegts |
http |
|
h264,h265,aac,opus |
|
http: |
homekit |
homekit udp |
|
h264,eld* |
|
homekit: |
isapi |
http |
|
|
pcm_alaw,pcm_mulaw |
isapi: |
ivideon |
ws |
|
h264 |
|
ivideon: |
kasa |
http |
|
h264,pcm_mulaw |
|
kasa: |
h264 |
http,tcp,pipe |
http |
h264 |
|
http: |
hevc |
http,tcp,pipe |
http |
hevc |
|
http: |
mjpeg |
http,tcp,pipe |
http |
mjpeg |
|
http: |
mpjpeg |
http,tcp,pipe |
http |
mjpeg |
|
http: |
mpegts |
http,tcp,pipe |
http |
h264,hevc,aac,opus |
|
http: |
nest/webrtc |
http udp |
|
TODO |
|
nest: |
roborock |
mqtt udp |
|
h264,opus |
opus |
roborock: |
rtmp |
rtmp |
rtmp |
h264,aac |
|
rtmp: |
rtsp |
rtsp tcp,ws |
rtsp tcp |
h264,hevc,aac,pcm*,opus |
pcm*,opus |
rtsp: |
stdin |
pipe |
|
|
pcm_alaw,pcm_mulaw |
stdin: |
tapo |
http |
|
h264,pcma |
pcm_alaw |
tapo: |
wav |
http,tcp,pipe |
http |
pcm_alaw,pcm_mulaw |
|
http: |
webrtc* |
TODO |
TODO |
h264,pcm_alaw,pcm_mulaw,opus |
pcm_alaw,pcm_mulaw |
webrtc: |
webtorrent |
TODO |
TODO |
TODO |
TODO |
webtorrent: |
yuv4mpegpipe |
http,tcp,pipe |
http |
rawvideo |
|
http: |
- eld - rare variant of aac codec
- pcm - pcm_alaw pcm_mulaw pcm_s16be pcm_s16le
- webrtc - webrtc/kinesis, webrtc/openipc, webrtc/milestone, webrtc/wyze, webrtc/whep
Format |
Protocol |
Send codecs |
Recv codecs |
Example |
adts |
http |
aac |
|
GET /api/stream.adts |
ascii |
http |
mjpeg |
|
GET /api/stream.ascii |
flv |
http |
h264,aac |
|
GET /api/stream.flv |
hls/mpegts |
http |
h264,hevc,aac |
|
GET /api/stream.m3u8 |
hls/fmp4 |
http |
h264,hevc,aac,pcm*,opus |
|
GET /api/stream.m3u8?mp4 |
homekit |
homekit udp |
h264,opus |
|
Apple HomeKit app |
mjpeg |
ws |
mjpeg |
|
{"type":"mjpeg"} -> /api/ws |
mpjpeg |
http |
mjpeg |
|
GET /api/stream.mjpeg |
mp4 |
http |
h264,hevc,aac,pcm*,opus |
|
GET /api/stream.mp4 |
mse/fmp4 |
ws |
h264,hevc,aac,pcm*,opus |
|
{"type":"mse"} -> /api/ws |
mpegts |
http |
h264,hevc,aac |
|
GET /api/stream.ts |
rtmp |
rtmp |
h264,aac |
|
rtmp://localhost:1935/{stream_name} |
rtsp |
rtsp tcp |
h264,hevc,aac,pcm*,opus |
|
rtsp://localhost:8554/{stream_name} |
webrtc |
TODO |
h264,pcm_alaw,pcm_mulaw,opus |
pcm_alaw,pcm_mulaw,opus |
{"type":"webrtc"} -> /api/ws |
yuv4mpegpipe |
http |
rawvideo |
|
GET /api/stream.y4m |
- pcm - pcm_alaw pcm_mulaw pcm_s16be pcm_s16le
Format |
Protocol |
Send codecs |
Example |
jpeg |
http |
mjpeg |
GET /api/frame.jpeg |
mp4 |
http |
h264,hevc |
GET /api/frame.mp4 |
File naming:
pkg/{format}/producer.go
- producer for this format (also if support backchannel)
pkg/{format}/consumer.go
- consumer for this format
pkg/{format}/backchanel.go
- producer with only backchannel func