Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add Width and Height Parameters to ASCII Stream Output #1119

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
159 changes: 112 additions & 47 deletions api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -112,17 +112,17 @@ paths:
schema: { type: integer }
example: 100
responses:
default:
description: Default response
default:
description: Default response

/api/restart:
post:
summary: Restart Daemon
description: Restarts the daemon.
tags: [ Application ]
responses:
default:
description: Default response
default:
description: Default response

/api/config:
get:
Expand All @@ -140,17 +140,17 @@ paths:
content:
"*/*": { example: "streams:..." }
responses:
default:
description: Default response
default:
description: Default response
patch:
summary: Merge changes to main config file
tags: [ Config ]
requestBody:
content:
"*/*": { example: "streams:..." }
responses:
default:
description: Default response
default:
description: Default response



Expand Down Expand Up @@ -180,8 +180,8 @@ paths:
schema: { type: string }
example: camera1
responses:
default:
description: Default response
default:
description: Default response
patch:
summary: Update stream source
tags: [ Streams list ]
Expand All @@ -199,8 +199,8 @@ paths:
schema: { type: string }
example: camera1
responses:
default:
description: Default response
default:
description: Default response
delete:
summary: Delete stream
tags: [ Streams list ]
Expand All @@ -212,8 +212,8 @@ paths:
schema: { type: string }
example: camera1
responses:
default:
description: Default response
default:
description: Default response
post:
summary: Send stream from source to destination
description: "[Stream to camera](https://github.com/AlexxIT/go2rtc#stream-to-camera)"
Expand All @@ -232,8 +232,8 @@ paths:
schema: { type: string }
example: camera1
responses:
default:
description: Default response
default:
description: Default response



Expand Down Expand Up @@ -334,7 +334,72 @@ paths:
description: ""
content: { multipart/x-mixed-replace: { example: "" } }


/api/stream.ascii:
get:
summary: Stream video as ASCII art
description: Streams a video source as ASCII art with various configurable parameters.
parameters:
- name: src
in: query
required: true
description: Video source identifier
schema:
type: string
example: gamazda
- name: color
in: query
required: false
description: Foreground color in xterm-256 color codes
schema:
type: string
enum: [ 256, 8 ]
example: "256"
- name: back
in: query
required: false
description: Background color in xterm-256 color codes
schema:
type: string
example: "40" # black
- name: text
in: query
required: false
description: Character set to use for ASCII art
schema:
type: string
- name: width
in: query
required: false
description: Width of the output in characters
schema:
type: integer
minimum: 1
example: 100
- name: height
in: query
required: false
description: Height of the output in characters
schema:
type: integer
minimum: 1
example: 40
responses:
'200':
description: Successfully streaming video as ASCII art
content:
image/jpeg:
schema:
type: string
format: binary
'400':
description: Bad request, possible incorrect parameters
content:
application/json:
schema:
type: object
properties:
error:
type: string

/api/frame.jpeg?src={src}:
get:
Expand Down Expand Up @@ -369,8 +434,8 @@ paths:
parameters:
- $ref: "#/components/parameters/stream_dst_path"
responses:
default:
description: Default response
default:
description: Default response
/api/stream.flv?dst={dst}:
post:
summary: Post stream in FLV format
Expand All @@ -379,8 +444,8 @@ paths:
parameters:
- $ref: "#/components/parameters/stream_dst_path"
responses:
default:
description: Default response
default:
description: Default response
/api/stream.ts?dst={dst}:
post:
summary: Post stream in MPEG-TS format
Expand All @@ -389,8 +454,8 @@ paths:
parameters:
- $ref: "#/components/parameters/stream_dst_path"
responses:
default:
description: Default response
default:
description: Default response
/api/stream.mjpeg?dst={dst}:
post:
summary: Post stream in MJPEG format
Expand All @@ -399,8 +464,8 @@ paths:
parameters:
- $ref: "#/components/parameters/stream_dst_path"
responses:
default:
description: Default response
default:
description: Default response



Expand All @@ -410,64 +475,64 @@ paths:
description: "[Source: DVRIP](https://github.com/AlexxIT/go2rtc#source-dvrip)"
tags: [ Discovery ]
responses:
default:
description: Default response
default:
description: Default response

/api/ffmpeg/devices:
get:
summary: FFmpeg USB devices discovery
description: "[Source: FFmpeg Device](https://github.com/AlexxIT/go2rtc#source-ffmpeg-device)"
tags: [ Discovery ]
responses:
default:
description: Default response
default:
description: Default response
/api/ffmpeg/hardware:
get:
summary: FFmpeg hardware transcoding discovery
description: "[Hardware acceleration](https://github.com/AlexxIT/go2rtc/wiki/Hardware-acceleration)"
tags: [ Discovery ]
responses:
default:
description: Default response
default:
description: Default response
/api/hass:
get:
summary: Home Assistant cameras discovery
description: "[Source: Hass](https://github.com/AlexxIT/go2rtc#source-hass)"
tags: [ Discovery ]
responses:
default:
description: Default response
default:
description: Default response
/api/homekit:
get:
summary: HomeKit cameras discovery
description: "[Source: HomeKit](https://github.com/AlexxIT/go2rtc#source-homekit)"
tags: [ Discovery ]
responses:
default:
description: Default response
default:
description: Default response
/api/nest:
get:
summary: Nest cameras discovery
tags: [ Discovery ]
responses:
default:
description: Default response
default:
description: Default response
/api/onvif:
get:
summary: ONVIF cameras discovery
description: "[Source: ONVIF](https://github.com/AlexxIT/go2rtc#source-onvif)"
tags: [ Discovery ]
responses:
default:
description: Default response
default:
description: Default response
/api/roborock:
get:
summary: Roborock vacuums discovery
description: "[Source: Roborock](https://github.com/AlexxIT/go2rtc#source-roborock)"
tags: [ Discovery ]
responses:
default:
description: Default response
default:
description: Default response



Expand All @@ -477,8 +542,8 @@ paths:
description: Simple realisation of the ONVIF protocol. Accepts any suburl requests
tags: [ ONVIF ]
responses:
default:
description: Default response
default:
description: Default response



Expand All @@ -488,8 +553,8 @@ paths:
description: Simple API for support [RTSPtoWebRTC](https://www.home-assistant.io/integrations/rtsp_to_webrtc/) integration
tags: [ RTSPtoWebRTC ]
responses:
default:
description: Default response
default:
description: Default response



Expand All @@ -515,8 +580,8 @@ paths:
parameters:
- $ref: "#/components/parameters/stream_src_path"
responses:
default:
description: Default response
default:
description: Default response

/api/webtorrent:
get:
Expand Down
8 changes: 7 additions & 1 deletion internal/mjpeg/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ streams:
- example: `40` (black), `47` (white), `48;5;226` (yellow)
- `text` - character set, values: empty, one char, `block`, list of chars (in order of brightness)
- example: `%20` (space), `block` (keyword for block elements), `ox` (two chars)
- `width` - the width of the output in characters, value: any positive integer
- example: `100`
- `height` - the height of the output in characters, value: any positive integer
- example: `40`

**Examples**

Expand All @@ -35,4 +39,6 @@ streams:
% curl "http://192.168.1.123:1984/api/stream.ascii?src=gamazda&back=256&text=%20"
% curl "http://192.168.1.123:1984/api/stream.ascii?src=gamazda&back=8&text=%20%20"
% curl "http://192.168.1.123:1984/api/stream.ascii?src=gamazda&text=helloworld"
```
% curl "http://192.168.1.123:1984/api/stream.ascii?src=gamazda&width=100&height=40"
% curl "http://192.168.1.123:1984/api/stream.ascii?src=gamazda&color=256&width=80&height=20"
```
5 changes: 4 additions & 1 deletion internal/mjpeg/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,10 @@ func outputMjpeg(w http.ResponseWriter, r *http.Request) {
cons.Type = "ASCII passive consumer "

query := r.URL.Query()
wr := ascii.NewWriter(w, query.Get("color"), query.Get("back"), query.Get("text"))
wr := ascii.NewWriter(w,
query.Get("color"), query.Get("back"), query.Get("text"),
core.Atoi(query.Get("width")), core.Atoi(query.Get("height")),
)
_, _ = cons.WriteTo(wr)
}

Expand Down
Loading