mirror of
https://github.com/flavioribeiro/donut.git
synced 2025-10-07 07:50:54 +08:00
add comments about what to do
This commit is contained in:
@@ -4,31 +4,29 @@
|
|||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
actor User
|
actor User
|
||||||
|
|
||||||
box Navy Browser
|
box Navy
|
||||||
participant browser
|
participant browser
|
||||||
end
|
end
|
||||||
|
|
||||||
browser->>+server: GET /
|
User->>+browser: feed protocol, host, port, id, and opts
|
||||||
server->>+browser: 200 /index.html
|
User->>+browser: click on [Connect]
|
||||||
User->>+browser: feed SRT host, port, and id
|
|
||||||
User->>+browser: click on [connect]
|
|
||||||
|
|
||||||
Note over server,browser: WebRTC connection setup
|
Note over server,browser: WebRTC connection setup
|
||||||
|
|
||||||
browser->>+browser: create offer
|
browser->>+browser: create WebRTC browserOffer
|
||||||
browser--)browser: WebRTC.ontrack(video)
|
browser->>+server: POST /doSignaling {browserOffer}
|
||||||
browser->>+server: POST /doSignaling {offer}
|
|
||||||
server->>+server: set remote {offer}
|
|
||||||
server->>+browser: reply {answer}
|
|
||||||
browser->>+browser: set remote {answer}
|
|
||||||
|
|
||||||
Note over server,browser: WebRTC connection setup
|
loop Async streaming
|
||||||
|
server--)streaming server: fetchMedia
|
||||||
loop Async SRT to WebRTC
|
server--)server: ffmpeg::libav demux/transcode
|
||||||
server--)SRT: mpegFrom(SRT)
|
server--)browser: sendWebRTCMedia
|
||||||
server--)browser: WebRTC.WriteSample(mpegts.PES.Data)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
server->>+browser: reply WebRTC {serverOffer}
|
||||||
|
|
||||||
browser--)User: render frames
|
Note over server,browser: WebRTC connection setup
|
||||||
|
|
||||||
|
browser--)User: render audio/video frames
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Architecture
|
@@ -126,7 +126,7 @@ func (d *donutEngine) RecipeFor(server, client *entities.StreamInfo) *entities.D
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (d *donutEngine) Appetizer() entities.DonutAppetizer {
|
func (d *donutEngine) Appetizer() entities.DonutAppetizer {
|
||||||
// TODO: implement input based on param
|
// TODO: implement input based on param to build proper SRT/RTMP/etc
|
||||||
return entities.DonutAppetizer{
|
return entities.DonutAppetizer{
|
||||||
URL: fmt.Sprintf("srt://%s:%d", d.req.SRTHost, d.req.SRTPort),
|
URL: fmt.Sprintf("srt://%s:%d", d.req.SRTHost, d.req.SRTPort),
|
||||||
Format: "mpegts", // it'll change based on input, i.e. rmtp flv
|
Format: "mpegts", // it'll change based on input, i.e. rmtp flv
|
||||||
|
@@ -21,6 +21,7 @@ type WebRTCSetupResponse struct {
|
|||||||
LocalSDP *webrtc.SessionDescription
|
LocalSDP *webrtc.SessionDescription
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: make it agnostic from streaming protocol when implementing RTMP
|
||||||
type RequestParams struct {
|
type RequestParams struct {
|
||||||
SRTHost string
|
SRTHost string
|
||||||
SRTPort uint16 `json:",string"`
|
SRTPort uint16 `json:",string"`
|
||||||
|
Reference in New Issue
Block a user