Upload videos to be re-encoded and scheduled for streaming
Go to file
root ab642d9c51 Timestamp to log
Email on start encode
Encode audio 48000 bps
Clearly show error or success in Results page
Optional savedir
2022-10-09 12:24:15 +07:00
uploadpage Timestamp to log 2022-10-09 12:24:15 +07:00
_countdown Add countdown option 2022-09-18 09:48:53 +07:00
_mailhash Update readme 2022-09-13 01:37:58 +07:00
_vars Timestamp to log 2022-10-09 12:24:15 +07:00
.gitignore Add countdown option 2022-09-18 09:48:53 +07:00
Caddyfile Update readme 2022-09-13 01:37:58 +07:00
Dockerfile Consistent paths for downloaded binaries 2022-09-17 00:11:11 +07:00
encode Timestamp to log 2022-10-09 12:24:15 +07:00
init Consistent paths for downloaded binaries 2022-09-17 00:11:11 +07:00
LICENSE Add LICENSE 2022-08-31 10:26:46 +00:00
README.md Catch ffmpeg output in stream 2022-09-18 22:35:17 +07:00
stream Timestamp to log 2022-10-09 12:24:15 +07:00

streamupload

Upload videos to be re-encoded and scheduled for streaming

Install

Manual

  • Prepare a Linux server, set its timezone to the users' timezone (on deb-based systems: dpkg-reconfigure tzdata). the webserver user (often www-data) has access to the location!).
  • Make sure the packages git php-fpm ffmpeg are installed (on deb-based systems: apt install git php-fpm ffmpeg).
  • Clone repo: git clone https://gitlab.com/pepa65/streamupload.
  • Move the streamupload directory to a place that is accessible to the web server, like: mv streamupload /var/www and cd to that place. Now the output of pwd is the value for $repopath.
  • do mkdir "$repopath/uploadpage/streams" and chmod 777 "$repopath/uploadpage/streams".
  • Copy _vars to vars, _mailhash to mailhash and _countdown to countdown and set the variables in vars (webserver, SMTP-server), mailhash (usernames, emails and bcrypt-password-hashes) and countdown (if any countdown-files can be used).
  • Make a crontab-entry: "* * * * * $repopath/encode" (replace $repopath!).
  • Install the mailer binary by downloading it from the repo at https://https://github.com/pepa65/mailer/releases/latest and moving it to /usr/local/bin and make it executable: chmod +x /usr/local/bin/mailer. If it's not installed, everything (except the emails) will still work.
  • Run a php/webserver on $repopath/uploadpage:
    • Get it to restart on reboot.
    • Change the relevant php.ini to allow large file uploads:
      • post_max_size - Upper limit of uploaded video sizes, say 10G.
      • upload_max_filesize - same value as post_max_size.

Webserver

If no webserver has been installed, an easy way to get going is to use Caddy from https://caddyserver.com/download and place the caddy binary in /usr/local/bin and make it executable: chmod +x /usr/local/bin/caddy. Make the config file /root/Caddyfile like:

{
	email $email
}

:80 {
	log {
		output file $repopath/web.log
	}
	php_fastcgi unix//run/php/php-fpm.sock
	root * $repopath/uploadpage
	file_server
}
  • If the server IP has an DNS A record pointing to it, :80 can be replaced by the domainname with the A record, and it will be SSL-encrypted.
  • Replace $email with an email for the SSL-certificates.
  • Replace $repopath in both places (see above in Install).
  • The value of /run/php/php-fpm.sock might need to be adjusted, depending on the system used, it needs to be the unix socket for php.
  • Caddy can be started at boottime by including @reboot /root/Caddy as a line in root's crontab: crontab -e and make the file /root/Caddy with:
#!/usr/bin/env bash

# Make sure internet is reachable
while ! ping -q -c 1 1.1.1.1 &>/dev/null
do sleep 1
done

cd /root
/usr/local/bin/caddy stop &>/dev/null
sleep 1
killall -9 caddy &>/dev/null
/usr/local/bin/caddy start &>/root/caddy.log

and make it executable: chmod +x /root/Caddy.

Docker

After cloning this repo, cd streamupload, and setting the variables in vars and mailhash, a docker image can be built from the included Dockerfile by: docker build -t streamupload .. In the case of running on a LAN and not having a DNS A record, start it with: docker run -d -p 8080:80 -v $PWD/uploadpage:/var/www/uploadpage streamupload. In case of a domainname, replace 8080:80 by 443:443.

Usage

  • Get a streamkey for the target by scheduling a stream (supported are: Restream.io, YouTube.com, Facebook.com).
  • Go to the server's URL in the browser: http://$ipaddress:80 or for docker: http://$ipaddress:80 or in case of a domainname: https://$domainname.
  • Log in with the username and passwors as prepared in mailhash.
  • Fill in the form, and click "Schedule Stream".