From b675023804c70c3ffe672eb86fa38e91dd1e17a1 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO Date: Mon, 12 Oct 2020 23:11:02 +0200 Subject: [PATCH] Prepare ascii art quality --- stream/webrtc/ingest.go | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/stream/webrtc/ingest.go b/stream/webrtc/ingest.go index 144a677..9ebe430 100644 --- a/stream/webrtc/ingest.go +++ b/stream/webrtc/ingest.go @@ -3,6 +3,7 @@ package webrtc import ( "bufio" + "fmt" "io" "log" "net" @@ -51,7 +52,8 @@ func ingestFrom(inputChannel chan srt.Packet) { "-auto-alt-ref", "1", "-f", "rtp", "rtp://127.0.0.1:5004", "-vn", "-acodec", "libopus", "-cpu-used", "5", "-deadline", "1", "-qmin", "10", "-qmax", "42", "-error-resilient", "1", "-auto-alt-ref", "1", - "-f", "rtp", "rtp://127.0.0.1:5005") + "-f", "rtp", "rtp://127.0.0.1:5005", + "-an", "-f", "rawvideo", "-vf", "scale=32x18", "-pix_fmt", "gray", "pipe:1") input, err := ffmpeg.StdinPipe() if err != nil { @@ -62,6 +64,10 @@ func ingestFrom(inputChannel chan srt.Packet) { if err != nil { panic(err) } + output, err := ffmpeg.StdoutPipe() + if err != nil { + panic(err) + } if err := ffmpeg.Start(); err != nil { panic(err) @@ -99,6 +105,9 @@ func ingestFrom(inputChannel chan srt.Packet) { } }() + // Receive ascii + go asciiArt(output, videoTracks[srtPacket.StreamName]) + // Receive audio go func() { for { @@ -156,3 +165,27 @@ func ingestFrom(inputChannel chan srt.Packet) { } } } + +func asciiChar(pixel byte) string { + asciiChars := []string{"@", "#", "$", "%", "?", "*", "+", ";", ":", ",", "."} + return asciiChars[pixel/25] +} + +func asciiArt(reader io.Reader, videoTracks []*webrtc.Track) { + + buff := make([]byte, 2048) + for { + n, _ := reader.Read(buff) + if n == 0 { + break + } + for j := 0; j < 18; j++ { + for i := 0; i < 32; i++ { + pixel := buff[32*j+i] + fmt.Print(asciiChar(pixel)) + } + fmt.Println() + } + fmt.Println() + } +}