Skip to content

Latest commit

 

History

History

server

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

Kinetoscope Video Server

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.

HTTP vs HTTPS

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.

Format

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.

Catalog generation

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

Changing servers

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/"