
Recherche avancée
Médias (1)
-
Bug de détection d’ogg
22 mars 2013, par
Mis à jour : Avril 2013
Langue : français
Type : Video
Autres articles (72)
-
Keeping control of your media in your hands
13 avril 2011, parThe vocabulary used on this site and around MediaSPIP in general, aims to avoid reference to Web 2.0 and the companies that profit from media-sharing.
While using MediaSPIP, you are invited to avoid using words like "Brand", "Cloud" and "Market".
MediaSPIP is designed to facilitate the sharing of creative media online, while allowing authors to retain complete control of their work.
MediaSPIP aims to be accessible to as many people as possible and development is based on expanding the (...) -
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;
-
MediaSPIP v0.2
21 juin 2013, parMediaSPIP 0.2 est la première version de MediaSPIP stable.
Sa date de sortie officielle est le 21 juin 2013 et est annoncée ici.
Le fichier zip ici présent contient uniquement les sources de MediaSPIP en version standalone.
Comme pour la version précédente, il est nécessaire d’installer manuellement l’ensemble des dépendances logicielles sur le serveur.
Si vous souhaitez utiliser cette archive pour une installation en mode ferme, il vous faudra également procéder à d’autres modifications (...)
Sur d’autres sites (9285)
-
Record Webcam as single JPG files [on hold]
2 décembre 2016, par clicI have to record a Windows Directshow Webcam video stream (UHD, 30fps, yuyv422) as single JPG images. Performance is important, so preferably by using NVIDIA GPU acceleration via CUDA or something..
What is the most simple but powerful solution, without having to buy proprietary software ?
I had a look at ffmpeg, by recording as MJPEG and then using something like jpegtran to get the JPGs. I tried :
ffmpeg -f dshow -video_size 1920x1080 -framerate 50 -vcodec mjpeg -i video="XI100DUSB-HDMI Video" out.avi
But it results in an I/O error saying ’Could not set video options’. Maybe because of the yuyv422 pixel format of my Magewell USB dongles..
Or is ffmpeg able to record as single JPGs directly somehow ?
If someone has any other idea/solution besides ffmpeg, please let me know too ! Thanks !
EDIT :
I was now able to save JPGs directly, using
webcamimg%04d.jpg
instead ofout.avi
. But it’s always claiming about full real-time buffer. Raising thertbufsize
parameter doesn’t really help..ffmpeg console output :
ffmpeg version 3.2 Copyright (c) 2000-2016 the FFmpeg developers
built with gcc 5.4.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-dxva2 --enable-libmfx --enable-nvenc --enable-avisynth --enable-bzlib --enable-libebur128 --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-li
bopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
libavutil 55. 34.100 / 55. 34.100
libavcodec 57. 64.100 / 57. 64.100
libavformat 57. 56.100 / 57. 56.100
libavdevice 57. 1.100 / 57. 1.100
libavfilter 6. 65.100 / 6. 65.100
libswscale 4. 2.100 / 4. 2.100
libswresample 2. 3.100 / 2. 3.100
libpostproc 54. 1.100 / 54. 1.100
[dshow @ 0000000001c628a0] Could not set video options
video=XI100DUSB-HDMI Video: I/O errorOutput of : ffmpeg -list_options true -f dshow -i video="XI100DUSB-HDMI Video"
[dshow @ 00000000004d71e0] DirectShow video device options (from video devices)
[dshow @ 00000000004d71e0] Pin "Capture" (alternative pin name "0")
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1920x1080 fps=15 max s=1920x1080 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1920x1080 fps=15 max s=1920x1080 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=640x360 fps=15 max s=640x360 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=640x360 fps=15 max s=640x360 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=640x480 fps=15 max s=640x480 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=640x480 fps=15 max s=640x480 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=720x480 fps=15 max s=720x480 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=720x480 fps=15 max s=720x480 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=720x576 fps=15 max s=720x576 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=720x576 fps=15 max s=720x576 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=768x576 fps=15 max s=768x576 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=768x576 fps=15 max s=768x576 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=800x600 fps=15 max s=800x600 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=800x600 fps=15 max s=800x600 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=856x480 fps=15 max s=856x480 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=856x480 fps=15 max s=856x480 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=960x540 fps=15 max s=960x540 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=960x540 fps=15 max s=960x540 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1024x576 fps=15 max s=1024x576 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1024x576 fps=15 max s=1024x576 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1024x768 fps=15 max s=1024x768 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1024x768 fps=15 max s=1024x768 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1280x720 fps=15 max s=1280x720 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1280x720 fps=15 max s=1280x720 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1280x800 fps=15 max s=1280x800 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1280x800 fps=15 max s=1280x800 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1280x960 fps=15 max s=1280x960 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1280x960 fps=15 max s=1280x960 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1280x1024 fps=15 max s=1280x1024 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1280x1024 fps=15 max s=1280x1024 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1368x768 fps=15 max s=1368x768 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1368x768 fps=15 max s=1368x768 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1440x900 fps=15 max s=1440x900 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1440x900 fps=15 max s=1440x900 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1600x1200 fps=15 max s=1600x1200 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1600x1200 fps=15 max s=1600x1200 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1680x1050 fps=15 max s=1680x1050 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1680x1050 fps=15 max s=1680x1050 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1920x1200 fps=15 max s=1920x1200 fps=59.9999
[dshow @ 00000000004d71e0] pixel_format=yuyv422 min s=1920x1200 fps=15 max s=1920x1200 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1920x1080 fps=15 max s=1920x1080 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1920x1080 fps=15 max s=1920x1080 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=640x360 fps=15 max s=640x360 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=640x360 fps=15 max s=640x360 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=640x480 fps=15 max s=640x480 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=640x480 fps=15 max s=640x480 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=720x480 fps=15 max s=720x480 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=720x480 fps=15 max s=720x480 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=720x576 fps=15 max s=720x576 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=720x576 fps=15 max s=720x576 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=768x576 fps=15 max s=768x576 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=768x576 fps=15 max s=768x576 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=800x600 fps=15 max s=800x600 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=800x600 fps=15 max s=800x600 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=856x480 fps=15 max s=856x480 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=856x480 fps=15 max s=856x480 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=960x540 fps=15 max s=960x540 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=960x540 fps=15 max s=960x540 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1024x576 fps=15 max s=1024x576 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1024x576 fps=15 max s=1024x576 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1024x768 fps=15 max s=1024x768 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1024x768 fps=15 max s=1024x768 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1280x720 fps=15 max s=1280x720 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1280x720 fps=15 max s=1280x720 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1280x800 fps=15 max s=1280x800 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1280x800 fps=15 max s=1280x800 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1280x960 fps=15 max s=1280x960 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1280x960 fps=15 max s=1280x960 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1280x1024 fps=15 max s=1280x1024 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1280x1024 fps=15 max s=1280x1024 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1368x768 fps=15 max s=1368x768 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1368x768 fps=15 max s=1368x768 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1440x900 fps=15 max s=1440x900 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1440x900 fps=15 max s=1440x900 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1600x1200 fps=15 max s=1600x1200 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1600x1200 fps=15 max s=1600x1200 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1680x1050 fps=15 max s=1680x1050 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1680x1050 fps=15 max s=1680x1050 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1920x1200 fps=15 max s=1920x1200 fps=59.9999
[dshow @ 00000000004d71e0] unknown compression type 0xE436EB7D min s=1920x1200 fps=15 max s=1920x1200 fps=59.9999
video=XI100DUSB-HDMI Video: Immediate exit requested -
Unable to transfer continuous FFmpeg buffer to client browser using node.js
10 décembre 2016, par chintitomasudI have tried to process a Video file transcoding on demand by using FFmpeg to transfer the chunk(buffer) to the client browser as mp4 format but I failed to show the mp4 content on html5 video player . Without using ffmpeg all code run properly . I have replaced createReadSteam with ffmpeg . Using it I have faced some problems. FFmpeg is new to me and I ’m kind of confused with spawn method. When I post a url path it shows the following text on the command line
Spawning new process /samiul113039/1080.mp4:GET
piping ffmpeg output to client, pid 10016
HTTP connection disrupted, killing ffmpeg : 10016
Spawning new process /samiul113039/1080.mp4:GET
piping ffmpeg output to client, pid 4796
HTTP connection disrupted, killing ffmpeg : 4796
ffmpeg didn’t quit on q, sending signals ffmpeg has exited : 10016,
code null ffmpeg didn’t quit on q, sending signals ffmpeg has exited :
4796, code nul=
var fs=require('fs');
var url=require("url");
var urlvalue="http://csestudents.uiu.ac.bd/samiul113039/1080.mp4";
var parseurl=url.parse(urlvalue);
var HDHomeRunIP = parseurl.hostname;
var HDHomeRunPort = parseurl.port;
var childKillTimeoutMs = 1000;
var parseArgs = require('minimist')(process.argv.slice(2));
// define startsWith for string
if (typeof String.prototype.startsWith != 'function') {
// see below for better implementation!
String.prototype.startsWith = function (str){
return this.indexOf(str) == 0;
};
}
// Called when the response object fires the 'close' handler, kills ffmpeg
function responseCloseHandler(command) {
if (command.exited != true) {
console.log('HTTP connection disrupted, killing ffmpeg: ' + command.pid);
// Send a 'q' which signals ffmpeg to quit.
// Then wait half a second, send a nice signal, wait another half second
// and send SIGKILL
command.stdin.write('q\n');
command.stdin.destroy();
// install timeout and wait
setTimeout(function() {
if (command.exited != true) {
console.log('ffmpeg didn\'t quit on q, sending signals');
// still connected, do safe sig kills
command.kill();
try {
command.kill('SIGQUIT');
} catch (err) {}
try {
command.kill('SIGINT');
} catch (err) {}
// wait some more!
setTimeout(function() {
if (command.exited != true) {
console.log('ffmpeg didn\'t quit on signals, sending SIGKILL');
// at this point, just give up and whack it
try {
command.kill('SIGKILL');
} catch (err) {}
}
}, childKillTimeoutMs);
}
}, childKillTimeoutMs);
}
}
// Performs a proxy. Copies data from proxy_request into response
function doProxy(request,response,http,options) {
var proxy_request = http.request(options, function (proxy_response) {
proxy_response.on('data', function(chunk) {
response.write(chunk, 'binary');
});
proxy_response.on('end', function() {
response.end();
});
response.writeHead(proxy_response.statusCode, proxy_response.headers);
});
request.on('data', function(chunk) {
proxy_request.write(chunk, 'binary');
});
// error handler
proxy_request.on('error', function(e) {
console.log('problem with request: ' + e.message);
response.writeHeader(500);
response.end();
});
proxy_request.end();
}
var child_process = require('child_process');
var auth = require('./auth');
// Performs the transcoding after the URL is validated
function doTranscode(request,response) {
//res.setHeader("Accept-Ranges", "bytes");
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Content-Type", "video/mp4");
response.setHeader("Connection","close");
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
// always write the header
response.writeHeader(200);
// if get, spawn command stream it
if (request.method == 'GET') {
console.log('Spawning new process ' + request.url + ":" + request.method);
var command = child_process.spawn('ffmpeg',
['-i','http://csestudents.uiu.ac.bd/samiul113039/1080.mp4','-f','mpegts','-'],
{ stdio: ['pipe','pipe','ignore'] });
command.exited = false;
// handler for when ffmpeg dies unexpectedly
command.on('exit',function(code,signal) {
console.log('ffmpeg has exited: ' + command.pid + ", code " + code);
// set flag saying we've quit
command.exited = true;
response.end();
});
command.on('error',function(error) {
console.log('ffmpeg error handler - unable to kill: ' + command.pid);
// on well, might as well give up
command.exited = true;
try {
command.stdin.close();
} catch (err) {}
try {
command.stdout.close();
} catch (err) {}
try {
command.stderr.close();
} catch (err) {}
response.end();
});
// handler for when client closes the URL connection - stop ffmpeg
response.on('end',function() {
responseCloseHandler(command);
});
// handler for when client closes the URL connection - stop ffmpeg
response.on('close',function() {
responseCloseHandler(command);
});
// now stream
console.log('piping ffmpeg output to client, pid ' + command.pid);
command.stdout.pipe(response);
command.stdin.on('error',function(err) {
console.log("Weird error in stdin pipe ", err);
response.end();
});
command.stdout.on('error',function(err) {
console.log("Weird error in stdout pipe ",err);
response.end();
});
}
else {
// not GET, so close response
response.end();
}
}
// Load the http module to create an http server.
var http = require('http');
// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (request, response) {
//console.log("New connection from " + request.socket.remoteAddress + ":" + request.url);
if (auth.validate(request,response)) {
// first send a HEAD request to our HD Home Run with the same url to see if the address is valid.
// This prevents an ffmpeg instance to spawn when clients request invalid things - like robots.txt/etc
var options = {method: 'HEAD', hostname: HDHomeRunIP, port: HDHomeRunPort, path: request.url};
var req = http.request(options, function(res) {
// if they do a get, and it returns good status
if (request.method == "GET" &&
res.statusCode == 200 &&
res.headers["content-type"] != null &&
res.headers["content-type"].startsWith("video")) {
// transcode is possible, start it now!
doTranscode(request,response);
}
else {
// no video or error, cannot transcode, just forward the response from the HD Home run to the client
if (request.method == "HEAD") {
response.writeHead(res.statusCode,res.headers);
response.end();
}
else {
// do a 301 redirect and have the device response directly
// just proxy it, that way browser doesn't redirect to HDHomeRun IP but keeps the node.js server IP
options = {method: request.method, hostname: HDHomeRunIP, /* port: HDHomeRunPort, */path: request.url};
doProxy(request,response,http,options);
}
}
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
response.writeHeader(500);
response.end();
});
// finish the client request, rest of processing done in the async callbacks
req.end();
}
});
// turn on no delay for tcp
server.on('connection', function (socket) {
socket.setNoDelay(true);
});
server.listen(7000);stdio : [’pipe’,’pipe’,’ignore’]
Actually the code was written by someone. i have just modified the code.
[’pipe’,’pipe’,’ignore’] what does pipe,pipe.ignore mean here, -
Saying Goodbye To Old Machines
I recently sent a few old machines off for recycling. Both had relevance to the early days of the FATE testing effort. As is my custom, I photographed them (poorly, of course).
First, there’s the PowerPC-based Mac Mini I procured thanks to a Craigslist ad in late 2006. I had plans to develop automated FFmpeg building and testing and was already looking ahead toward testing multiple CPU architectures. Again, this was 2006 and PowerPC wasn’t completely on the outs yet– although Apple’s MacTel transition was in full swing, the entire new generation of video game consoles was based on PowerPC.
I remember trying to find a Mac Mini PPC on Craigslist. Many were to be found, but all asked more than the price of even a new Mac Mini Intel, always because the seller was leaving all of last year’s applications and perhaps including a monitor, neither of which I needed. Fortunately, I found this bare Mac Mini. Also fortunate was the fact that it was far easier to install Linux on it than the first PowerPC machine I owned.
After FATE operation transitioned away from me, I still kept the machine in service as an edge server and automated backup machine. That is, until the hard drive failed on reboot one day. Thus, when it was finally time to recycle the computer, I felt it necessary to disassemble the machine and remove the hard drive for possible salvage and then for destruction.
If you’ve ever attempted to upgrade or otherwise service this style of Mac Mini, you will no doubt recognize the pictured paint scraper tool as standard kit. I have had that tool since I first endeavored to upgrade the RAM to 1 GB from the standard 1/2 GB. Performing such activities on a Mac Mini is tedious, but only if you care about putting it back together afterwards.
The next machine is a bit older. I put it together nearly a decade ago, early in 2005. This machine’s original duty was “download agent”– this would be more specifically called a BitTorrent machine in modern tech parlance. Back then, I placed it on someone else’s woefully underutilized home broadband connection (with their permission, of course) when I was too cheap to upgrade from dialup.
This is a small form factor system from VIA that was clearly designed with home theater PC (HTPC) use cases in mind. It has a VIA C3 x86-compatible CPU (according to my notes, Centaur VIA Samuel 2 stepping 03, flags : fpu de tsc msr cx8 mtrr pge mmx 3dnow) and 128 MB of RAM (initially ; I upgraded it to 512 MB some years later, just for the sake of doing it). And then there was the 120 GB PATA HD for all that downloaded goodness.
I have specific memories of a time when my main computer at home wasn’t working correctly for one reason or another. Instead, I logged into this machine remotely via SSH to make several optimizations and fixes on FFmpeg’s VP3/Theora video decoder, all from the terminal, without being able to see the decoded images with my own eyes (which is why I insist that even blind people could work on video codecs).
By the time I got my own broadband, I had become inspired to attempt the automated build and test system for FFmpeg. This was the machine I used for prototyping early brainstorms of FATE. By the time I put a basic build/test system into place in early 2008, I had much faster computers that could build and test the project– obvious limitation of this machine is that it could take at least 1/2 hour to build the entire codebase, and that was the project from 8 years ago.
So the machine got stuffed in a closet somewhere along the line. The next time I pulled it out was in 2010 when I wanted to toy with Dreamcast programming once more (the machine appears in one of the photos in this post). This was the only machine I still owned which still had an RS-232 serial port (I didn’t know much about USB serial converters yet), plus it still had a bunch of pre-compiled DC homebrew binaries (I was having trouble getting the toolchain to work right).
The next time I dusted off this machine was late last year when I was trying some experiments with the Microsoft Xbox’s IDE drive (a photo in that post also shows the machine ; this thing shows up a lot on this blog). The VIA machine was the only machine I still owned which had 40-pin IDE connectors which was crucial to my experiment.
At this point, I was trying to make the machine more useful which meant replacing the ancient Gentoo Linux distribution as well as simply interacting with it via a keyboard and mouse. I have a long Evernote entry documenting a comedy of errors revolving around this little box. The interaction troubles were due to the fact that I didn’t have any PS/2 keyboards left and I couldn’t make a USB keyboard work with it. Diego was able to explain that I needed to flip a bit in the BIOS to address this which worked. As for upgrading the OS, I tried numerous Linux distributions large and small, mostly focusing on the small. None worked. I eventually learned that, while I was trying to use i686 distributions, this machine did not actually qualify as an i686 CPU ; installations usually booted but failed because the default kernel required the cmov instruction. I was advised to try i386 distros instead. My notes don’t indicate whether I had any luck on this front before I gave up and moved on.
I just made the connection that this VIA machine has two 40-pin IDE connectors which means that the thing was technically capable of supporting up to 4 IDE devices. Obviously, the computer couldn’t really accommodate that in terms of space or power. When I wanted to try installing a new OS, I needed take off the top and connect a rather bulky IDE CD-ROM drive. This computer’s casing was supposed to be able to support a slimline optical drive (perhaps like the type found in laptops), but I could never quite visualize how that was supposed to work, space-wise. When I disassembled the PowerPC Mac Mini, I realized I might be able to repurpose that machines optical drive for this computer. Obviously, I thought better of trying since both machines are off to the recycle pile.
I would still like to work on the Xbox project a bit more, but I procured a different, unused, much more powerful yet still old computer that has a motherboard with 1 PATA connector in addition to 6 SATA connectors. If I ever get around to toying with Linux kernel development, this should be a much more appropriate platform to use.
I thought about turning this machine into an old Windows XP (and lower, down to Windows 3.1) gaming platform ; the capabilities of the machine would probably be perfect for a huge portion of my Windows game collection. But I think the lack of an optical drive renders this idea intractable. External USB drives are likely out of the question since there is very little chance that this motherboard featured USB 2.0 (the specs don’t mention 2.0, so the USB ports are probably 1.1).
So it is with fond memories that I send off both machines, sans hard drives, to the recycle pile. I’m still deciding on an appropriate course of action for failed hard drives, though.