2b7682cdb3
- replace traditional for loop with range-based for loop for clarity
refactor(ffmpeg): simplify cut function loop
- utilize range-based for loop instead of traditional for loop
refactor(ring): update API response mapping type
- change map type from `interface{}` to `any` for better type safety
refactor(stream): handle nil source in NewStream
- add nil check for source elements before processing
refactor(webrtc): unify payload handling in GetToken
- change map type from `interface{}` to `any` for consistency
refactor(ascii): optimize nested loops in Write function
- replace traditional for loops with range-based for loops for readability
refactor(bits): enhance readability in Reader methods
- replace traditional for loops with range-based for loops in Read functions
refactor(h264): modernize loop structures in DecodeConfig
- switch to range-based for loops for cleaner code
refactor(h265): streamline profile_tier_level loops
- utilize range-based for loops instead of traditional for loops
chore(core): remove commented-out test function for clarity
refactor(core): simplify RandString function loop
- change traditional for loop to range-based for loop
refactor(flvt): optimize timestamp handling in TestTimeToRTP
- switch to range-based for loop for iterating frames
refactor(nest): improve error handling in ExchangeSDP
- format error message with printf-style formatting for clarity
refactor(tapo): enhance securityEncode function
- change traditional for loop to range-based for loop for readability
fix(tcp): correct masking in websocket Write method
- replace traditional for loop with range-based for loop
refactor(tutk): modernize encoding loops in crypto functions
- utilize range-based for loops for better readability
refactor(tuya): unify data types in MQTT message struct
- change map type from `interface{}` to `any` for consistency
refactor(webrtc): standardize codec registration
- change map type from `interface{}` to `any` for type safety
refactor(yaml): simplify Unmarshal function signature
- update parameter type from `interface{}` to `any` for better clarity
Notes
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.
Producers (input)
- 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 - Receiver codecs
- Codecs can be outgoing (two way audio) - Sender codecs
| Group | Format | Protocols | Ingress | Receiver codecs | Sender codecs | Example |
|---|---|---|---|---|---|---|
| Devices | alsa | pipe | pcm | alsa: |
||
| Devices | v4l2 | pipe | v4l2: |
|||
| Files | adts | http, tcp, pipe | http | aac | http: |
|
| Files | flv | http, tcp, pipe | http | h264, aac | http: |
|
| Files | h264 | http, tcp, pipe | http | h264 | http: |
|
| Files | hevc | http, tcp, pipe | http | hevc | http: |
|
| Files | hls | http | h264, h265, aac, opus | http: |
||
| Files | mjpeg | http, tcp, pipe | http | mjpeg | http: |
|
| Files | mpegts | http, tcp, pipe | http | h264, hevc, aac, opus | http: |
|
| Files | wav | http, tcp, pipe | http | pcm_alaw, pcm_mulaw | http: |
|
| Net (pub) | mpjpeg | http, tcp, pipe | http | mjpeg | http: |
|
| Net (pub) | onvif | rtsp | onvif: |
|||
| Net (pub) | rtmp | rtmp | rtmp | h264, aac | rtmp: |
|
| Net (pub) | rtsp | rtsp, ws | rtsp | h264, hevc, aac, pcm*, opus | pcm*, opus | rtsp: |
| Net (pub) | webrtc* | webrtc | webrtc | h264, pcm_alaw, pcm_mulaw, opus | pcm_alaw, pcm_mulaw | webrtc: |
| Net (pub) | yuv4mpegpipe | http, tcp, pipe | http | rawvideo | http: |
|
| Net (priv) | bubble | http | h264, hevc, pcm_alaw | bubble: |
||
| Net (priv) | doorbird | http | doorbird: |
|||
| Net (priv) | dvrip | tcp | h264, hevc, pcm_alaw, pcm_mulaw | pcm_alaw | dvrip: |
|
| Net (priv) | eseecloud | http | eseecloud: |
|||
| Net (priv) | gopro | udp | TODO | gopro: |
||
| Net (priv) | hass | webrtc | TODO | hass: |
||
| Net (priv) | homekit | hap | h264, eld* | homekit: |
||
| Net (priv) | isapi | http | pcm_alaw, pcm_mulaw | isapi: |
||
| Net (priv) | kasa | http | h264, pcm_mulaw | kasa: |
||
| Net (priv) | nest | rtsp, webrtc | TODO | nest: |
||
| Net (priv) | ring | webrtc | ring: |
|||
| Net (priv) | roborock | webrtc | h264, opus | opus | roborock: |
|
| Net (priv) | tapo | http | h264, pcma | pcm_alaw | tapo: |
|
| Net (priv) | tuya | webrtc | tuya: |
|||
| Net (priv) | vigi | http | vigi: |
|||
| Net (priv) | webtorrent | webrtc | TODO | TODO | TODO | webtorrent: |
| Net (priv) | xiaomi* | cs2, tutk | xiaomi: |
|||
| Services | flussonic | ws | flussonic: |
|||
| Services | ivideon | ws | h264 | ivideon: |
||
| Services | yandex | webrtc | yandex: |
|||
| Other | echo | * | echo: |
|||
| Other | exec | pipe, rtsp | exec: |
|||
| Other | expr | * | expr: |
|||
| Other | ffmpeg | pipe, rtsp | ffmpeg: |
|||
| Other | stdin | pipe | pcm_alaw, pcm_mulaw | stdin: |
- 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
Consumers (output)
| 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 | hap | 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 | h264, hevc, aac, pcm*, opus | rtsp://localhost:8554/{stream_name} |
|
| webrtc | webrtc | 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
Snapshots
| Format | Protocol | Send codecs | Example |
|---|---|---|---|
| jpeg | http | mjpeg | GET /api/frame.jpeg |
| mp4 | http | h264,hevc | GET /api/frame.mp4 |
Developers
File naming:
pkg/{format}/producer.go- producer for this format (also if support backchannel)pkg/{format}/consumer.go- consumer for this formatpkg/{format}/backchannel.go- producer with only backchannel func
Mentioning modules:
main.goREADME.mdinternal/README.mdwebsite/.vitepress/config.jswebsite/api/openapi.yamlwww/schema.json