A TCP multi-broadcast media streaming server/client
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Fierelier 4fafc334db Set socket.SO_REUSEADDR, so the server doesn't fail to reboot 3 months ago
client Add message for closed connection 4 months ago
modules Set socket.SO_REUSEADDR, so the server doesn't fail to reboot 3 months ago
.gitignore Add .gitignore 1 year ago
LICENSE Rewrite 4 months ago
README.md Remove delay 4 months ago
fsockets.py Rewrite 4 months ago

README.md

fstream

A TCP multi-broadcast media streaming server/client. Check out the past source, for simpler implementation. Compatible with Python 3.4 and up!

Client

Broadcast

fstream.py <ip:port> broadcast,[key=value],[key=value],...
Accepts data from stdin, and sends it to the specified server.

Arguments

  • user: Your user's name.
  • user-password: Your user's password.
  • channel: The channel you wanna stream to. Can be any name.
  • channel-password: The channel's password.

All arguments are optional but for user.

Example

ffmpeg -f gdigrab -framerate 30 -i desktop -vf scale=-2:480 -c:v libx264 -pix_fmt yuv420p -maxrate 1M -f h264 - | fstream.py 127.0.0.1:61920 broadcast,user=fier,user-password=123,channel=exampleChannel,channel-password=456

Broadcast Windows desktop as fier to 127.0.0.1:61920, supplying 123 as the user password. exampleChannel is the channel, 456 is the channel's password. Pipe the output from ffmpeg.

Watch

fstream.py <ip:port> broadcast,[key=value],[key=value],...
Accepts data from the server, and sends it to stdout.

Arguments

  • user: The user you wanna watch.
  • channel: The user's channel you wanna watch.
  • channel-password: The channel's password.

All arguments are optional but for user.

Example

fstream.py 127.0.0.1:61920 watch,user=fier,channel=exampleChannel,channel-password=123 | ffplay -i -

Watch fier's exampleChannel channel at 127.0.0.1:61920, supplying 123 as the password, and pipe it into ffplay for playback.

Server

Settings

Edit modules/settings.py for generic server/socket-related settings, and modules/fstream/settings.py for fstream related settings.

Creating a user

Make a folder called users and make a file in it called YourUsername.ini, put this in it:

[DEFAULT]
password=foobar

If you would like to implement your own authentication, make your own module to replace the authenticate() function - see modules/fstream/authent.py and modules/fstream/main.mods.

The Protocol

Establishing a connection

Establish a TCP connection with the server, and send the payload. If the server likes your payload, it will stream data to you, or accept more of your data.

The payload

Send the length of the payload as a 4-byte (32-bit) big endian unsigned integer, a null byte (hex:00) and a UTF-8 encoded string identifying the client's intentions follows, for example: watch,user=fier,channel=exampleChannel,channel-password=123 or broadcast,user=fier,user-password=123,channel=exampleChannel,channel-password=456. The length includes only the string message, in bytes, it does not include the length itself, nor the null byte.

If you are a watcher, you will now be blasted with data. If you are a broadcaster, you can now blast data.