Where horses meet nerds

Derpy is best pony

Sending a Fax from a Windows 98 Machine

Galacon Online started, and the previousely mentioned video stream on a 75Mhz laptop worked!

But, at everyone surprise, they have a live FAX machine on stream with a public number!!

Yep, they're asking for telecopies alright!

Unfortunately since I do not actually live in the 1990s, I don't have any PTSN line anymore, neither do I own an actual FAX machine.

There is a bunch of different way someone could use to send a FAX today, the easiest is online services, that will send whatever fax you want for a small fee, the other option is via your ISP, if they have an option to support FAX via mail, but all those method didn't seem to be fun, beside they cost money.

In theory, you cannot send a fax through an SIP phone line, as fax require a quite good audio quality to be able to receive what you're sending properly...

... In theory, because after looking quickly through the Internet, it just happen that my ISP SIP phone line is good enough for it!!

So, the only problem is the need for a fax machine to send the data... but do we really need a fax machine tho?

In the 90s, before Internet being this ubiquitous, one of the selling argument for modems was the ability to send telefax through your computer! It is after all not that much different than connecting to internet via dialup, you have two machine establishing a voice connection between each other and exchanging data via audio, like a Commodore 64 tape would do.

Now, I sent exactly one fax via a computer, when I was 6 and it sounded funny to try that feature on the fancy modem software we had on the computer at the time, so I had really no idea how to do it without fancy modem software.

And that how it had to be done, because there was no Fax utility provided with the Xircom network+modem card.

Thankfully, very short digging on the internet gave me this page from the Indiana University telling me how to set it up! Indiana University - In Windows 95 or 98, how do I prepare my computer to send a fax?

Quite helpful, so I followed the instruction, installed WMS, followed by AWFAX, rebooted the computer, and was greated with this new, so freaking 1990s splashscreen!

Once the first setup is done (That I won't show as it contain personal information about my phone line), Microsoft Exchange (As in, the ancestor to outlook, not the mail server) start up.

You also got a new printer on your system called "Microsoft FAX"

So to send Derpy to Galacon, all you have to do is find an a proper image, open it in paint, and print it on that new Fax printer, it will bring up the menu to choose a contact

(I also captured a video of the whole process, if you prefer moving image: https://www.youtube.com/watch?v=dn8OFiM9au4 )

Ask you if you want a cover page:

Finally demand a Subject and a Note that will be passed through with your print:

And then finally send the fax!

And, if everything has gone right, a few second later, you should see Derpy being booped 1000KM away from you:

https://www.youtube.com/watch?v=zf-xnwAUFFo

To get a livestream working on a 75Mhz PC laptop!

So, Galacon this year got cancelled, due to that human malware thing, instead they decided to do an online convention and decided to surf on retro-tech for the theme.

Being that I like horse and old PCs, I was quick to reply with an approriate image... but so they did...

Well well well, I didn't plan on doing that, but now that you mention it, sure! I'll add your internet to my existing collection of Internet.

Of course, there is no way that this machine decode a H264 livestream from youtube, even if I were somehow able to fit the required software to play it, you'd be expecting to count frame per hours, so I need to transcode it to something more appropriate first!

Let take a closer look at the specs of the client first:

  • Pentium 1 75Mhz
  • 32MB Ram
  • ISA 1MB "Chips" Video Card
  • 16Bit PCMCIA network card
  • Windows 9X (We'll come back on this later)

It was never a very fast machine, released in 1997, it's main interest was it's size, being only 210×115×34mm and weighting 850gr, it was truly a pocket (Tho, large pocket) sized PC.

Back in the dialup days, video streaming was not really a thing, for obvious reason, but there was attempt done, my first try was with RealPlayer, at this point I didn't see that FFMPEG had support for RV10, and I encoded my test file as RV20.

It didn't work all that well...

Maybe it could have, if I had a time machine to connect to a server that's been dead since 20 years to download the "new software", but as of today, this is not an option anymore.

In an attempt to at least get the file to play, I tried installing VLC, unfortunately, starting it crashed the entire system

That's problematic... if RealMedia cannot play it and if VLC cannot even start up, there simply no third option, as RealMedia video files were not supported in any other players...

The other option I didn't mention until now was Cinepak

Cinepak was also terribly common at the time, while not used for streaming per se, it might have been possible to get it working, I had already tried and decoded successfully a 320x240 15fps video encoded via Cinepak on this system, it was the go to for video at the time, being supported by QuickTime 2.0 and onward, this is also the format we used when we did video for the 1st April YP websites.

So what the problem you might ask? well, the problem is that FFMPEG Cinepak encoder is a fcking joke!

Seeing the speed, you might be forgotten to think that I tried to use the laptop for encoding, but actually, no, this is running on a Ryzen 3900X build...

That so bad, it get beaten by an emulated PowerPC running MacOS9 and QuickTime:

https://www.youtube.com/watch?v=jmirMjqMQxY

It would be usable if we wanted to do offline video, but since here we're targeting a livestream, this is simply impossible.

At this point, my copy of Windows being a giant mess, I decided to reinstall

Maybe it would fix VLC? Beside it was getting a bit short in RAM/CPU to run all the background tasks.

Long story short: Nope, not helpful.

Another option could be Linux, Linux had quite a few players that could support a livestream with whatever codec, heck, given a recent enough version, I through I'd might even be able to use a mplayer or a mpv to play the files.

The "funny" bit tho, is that due to the machine size, it does not have a CD or a Floppy drive integrated! You were supposed to use external devices for that, I have the original PCMCIA Floppy drive, but only a generic LPT CDRom drive, so no booting on it.

I can in theory boot of the floppy drive, this is how you were supposed to reinstall the machine, however, because it is a PCMCIA device, the floppy load the kernel in ram, then start booting and initialize PCMCIA drivers, and loose access to the drive as it doesn't have a driver for it...

An utility we don't have really much use for is LOADLIN!

LOADLIN was a small piece of DOS software that could boot up a linux, it would load a kernel/init image into ram, wipe MSDOS off the ram and start booting the kernel with it's provided filesystem

So, at the end, to start the Linux installation, I was booting on a DOS floppy with drivers for the LPT CDRom, and then using loadlin out off the CD to bootup Linux.

I had to put all the install files into the system HDD, as once the linux booted, no more floppy or CDRom drive to be seen, but after a dozen try, it finally worked!

EXCEPT that this distro didn't support X.Org at all, so no desktop, so no video (Other than via libcaca)...

It did provide a FFMPEG installation tho, so if you ever felt like reencoding video on a 75Mhz CPU, it got you covered!

Then I tried DamnSmallLinux, while it did boot up, and had X support, it's copy of mplayer couldn't read any video on that system.

It's at this moment I remembered our little April 2016 thingy, the YP April 16 webserver was bit special, as it ran out of a ...

... Why yes, that is a Dreamcast!

Especially, it ran on a Dreamcast running "bleeding edge" software via NetBSD who kept support for it all those years (Fun fact, as I'm writing those line, they still support the Dreamcast!)

So, maybe I was wrong, Maybe NetBSD, and not Linux was the awnser to all my problem!

Unsurprisingly, it was actually easy to install, their bootloader copying the entire install FS in ram before booting on the kernel, I was able to switch floppy without issues.

The machine even got an IPv6 attributed to it, didn't think I'd see that day!

But soon the problem started:

X wasn't working again, after a visit to NetBSD IRC server, I learned that unfortunately, X.Org had dropped ISA video card support, people on that server being exceptionally helpful, they provided me a fix (Basically a port of XFree86 to use in place)

But the biggest problem was more that every video player I tried on that system was way too heavy to do anything, all I could get going was libcaca, and somehow, it didn't satisfy me:

However, NetBSD people again being more helpful than even a Karen would feel entitled to, one of their member provided me with an old MPEG1 QSIF video for testing...

And on Windows, it would actually play! Even better, it would actually stream out of a webserver!

At this point, it seemed almost good, except that WMP would crash half the time I tried running it, so I tried another re-install.

But this time, not of Windows 95, but of Windows 98 SE (or, to be exact, of 98Lite, an unauthorized modification of 98 to have the same ressource footprint than 95)

Armed with a fresh install, I retried the video, and this time, no more glitches! YAY, PROGRESS!

However as soon as I tried to encode my own, problem appeared again, no matter what setting I would use, Windows Media Player wasn't happy with MPEG1 files encoded with FFMPEG

So, I decided that, since this is a new install of a different OS than last time, I could probably retry VLC 0.8.4 ... and ... Surprise, it worked!

Encoded with this line:

ffmpeg -i Downloads/YP-1R-05x09-FIX.mkv -vf scale=176:144 -r 25 -c:v mpeg1video -flags +cgop -sc_threshold 1000000000  -an "PoneTest3.mpg"

-i is the input file
-vf scale=176:144 is for resizing the video to a marvelous 176x144 pixels resolution
-r 25 change the framerate to 25fps, on previous test it failed to work with NTSC "23.976"
-c:v mpeg1video tell it to do a MPEG1 video
-flags +cgop -sc_threshold 1000000000 do things I'm not sure, but it help with live streaming.
-an disable audio

EDIT: FOLLOWING NOT NEEDED ANYMORE, SEE UPDATE!

SO, the next step is to get an actual live video, rather than a pre-encoded file, and while this part wasn't difficult, it was less easy than I would have hoped, at the end I needed a few piece of software:

  • VLC (On the Linux machine, I mean)
  • OBS
  • and weirdly enough, NGINX with the RTMP module.

VLC is able to stream to the machine on it's own, and you can do desktop capturing, unfortunately, my Linux machine having a resolution of 7680x2160, it wasn't usable directly, so I needed to be able to capture a certain application window only, VLC do not support that, but OBS does

However, OBS cannot send the video to VLC directly either, so the workaround was to hosts a RTMP server locally with NGINX, have OBS stream to it, to then have VLC play and re-stream it into mpeg1.

On VLC, I set it up to stream on HTTP, using port 8080 (80 being a reserved port, it would need root for it), to create a new transcoding profile:

  • Encapsulation: MPEG1
  • Video Codec: MPEG1
  • Bitrate 800 kb/s
  • Framerate: Same as source
  • Resolution: 176x144
  • Disabled audio and subtitles

It generated this output string:

:sout=#transcode{vcodec=mp1v,vb=800,scale=Auto,width=176,height=144,acodec=none,scodec=none}:http{mux=mpeg1,dst=:8080/} :no-sout-all :sout-keep

Unfortunately this mean that I have no audio :< - Maybe it could be worked out with more time, but the convention is happening tomorrow, and I was just asked for the YT stream, not it's audio :P

PCM Audio can be enabled, but unfortunately the client doesn't seem to receive it at all.

Anyway, once the transcoding PC is streaming, all that is left is to join the stream on the Pentium client, and horses!

The End

PS: I didn't set color depth when I reinstalled Windows, I figured later on that it was set to 256 colors, thinking of doing good I tried putting it to 24bits, but it immediately broke VLC, I had to set 256 colors back.

UPDATE 1: After publishing that blog post, A friend has asked as to why such a convoluted setup when I could just pipe youtube-dl to vlc ... and it work flawlessly, so instead of having to setup NGINX with an unsupported module, the command

youtube-dl 'https://www.youtube.com/watch?v=XjcgnazCpT4' -o - | vlc - --sout '#transcode{vcodec=mp1v,vb=225,fps=24,scale=Auto,width=176,height=144,acodec=none,scodec=none}:http{mux=mpeg1,dst=:8080/}'

does the job perfectly :)

I also reduced bitrate as it helped with smoothness, I guess it's because the ISA bandwidth is shared between the network and video card.