You could simply write a script to move the video forward, or even goto a particular point (in game time). And even modify the source to enhance these options. But going backward would be much harder. This is because sauer (like most recording systems ie valve's source engine), uses a message system list. Basically it saves everyone's position updates, shot messages, etc. So working forward is easy (because thats how clients interact with the server, but working backward would be harder. So heres a short list of things that would be hard to do in reverse:
Animations:
Basically the way the md5 files are written they are designed to work in one direction so in order to go backward you would have to loop all the way around and back to the one before the one you are on.
Position updates:
Basically to get the exact positions correct you would have to look ahead to the last position and interpole (which is done when you do it forward so it would be that difficult to write it) between the two positions.
Particles:
Because all you get from this is the fact that someone shot, you would have to look ahead (backwards) and play the particle effect in reverse (which would also mean that you would have to create a particle for every particle that does the same in reverse and be able to seamlessly switch between them when a user if going forward and back over a particular part.
Ragdolls:
This would be very hard since ragdolls are dynamic and this would require you to fast forward to when the ragdoll starts then calc the physics to the point you're at (every frame). Basically very bad.
SOLUTION:
The easiest way to do a reverse is to show a load screen then start from the beginning and fast forward to the part they want to go to. You could cash the map variables position etc back every 5 mins or so (on load) so that you wouldn't have to load from the start (for larger demo files), but of course this would require more memory (but speed up the load time).
If you were to cash back, you could save them back to a temporary file directory (inside the base folder) to save on memory (but this would slow down the initial load time and make the rewind load time a little longer).
But ofc that would be a ton of work :)
chasester