A video server for Kinetoscope only needs to be able to serve static content over plain HTTP, so you have many, many options for serving content. I'm currently using Google Cloud Storage.
Due primarily to hardware limitations and time budgets, streaming must be over plain HTTP, not HTTPS. Though we could build TLS/SSL support into the firmware, it would reduce our throughput by too much to be tolerated.
Your video files must all be served from the same folder, in the segavideo
format encoded by ../encoder/
. The root of that folder must
also contain a catalog file called catalog.bin
. This is a concatenation of
the 8kB headers of all your video files, followed by 8kB of nul characters.
The streamer ROM will present the videos in the order in which they appear in
the catalog file.
On output from the encoder, your video files have a blank field called
relative_url
. This is filled in when preparing your catalog file. Relative
paths may not exceed 127 bytes in UTF-8 encoding.
You may not serve more than 127 videos, because this is the maximum size catalog that can fit in one bank of the cartridge's SRAM.
The catalog file can be generated by the generate_catalog.py
script in this
folder. Simply pass your video files in the order you want. If you dont care
about order, use a wildcard and let your shell expand the file names.
Examples:
python3 generate_catalog.py \
"Never Gonna Give You Up.segavideo" \
"You Spin Me Round.segavideo" \
"The Empire Strikes Back.segavideo"
python3 generate_catalog.py *.segavideo
Both the emulator
(../emulator-patches/kinetoscope.c
) and
the firmware
(../firmware/firmware.ino
) have macros to set the
video server. In either or both, you can change the following defaults and
recompile:
#define VIDEO_SERVER "storage.googleapis.com"
#define VIDEO_SERVER_PORT 80
#define VIDEO_BASE_PATH "/sega-kinetoscope/canned-videos/"