initial commit
This commit is contained in:
commit
9c2a3dc490
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
__pycache__
|
||||||
|
.vscode
|
||||||
|
constants.py
|
||||||
26
README.md
Normal file
26
README.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Octoprint ffmpeg
|
||||||
|
|
||||||
|
To get started copy `constants.example.py` to `constants.py`:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cp constants.example.py constants.py
|
||||||
|
```
|
||||||
|
|
||||||
|
Afterwards make `stream_start.py` and `stream_stop.py` executable:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ chmod +x stream_start.py
|
||||||
|
$ chmod +x stream_stop.py
|
||||||
|
```
|
||||||
|
|
||||||
|
You can now start the stream by simply running
|
||||||
|
|
||||||
|
```
|
||||||
|
./stream_start.py
|
||||||
|
```
|
||||||
|
|
||||||
|
and stop the stream with
|
||||||
|
|
||||||
|
```
|
||||||
|
./stream_stop.py
|
||||||
|
```
|
||||||
5
constants.example.py
Normal file
5
constants.example.py
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
WEBCAM_STREAM_URL = "" # <-- YOUR WEBCAM URL HERE
|
||||||
|
TWITCH_STREAM_KEY = "" # <-- YOUR STREAM KEY HERE
|
||||||
|
|
||||||
|
TWITCH_SERVER = f"rtmp://fra02.contribute.live-video.net/app/{TWITCH_STREAM_KEY}"
|
||||||
|
PIDFILE = "octoprint_ffmpeg.pid"
|
||||||
24
stream_start.py
Executable file
24
stream_start.py
Executable file
@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import subprocess, os, sys
|
||||||
|
from constants import *
|
||||||
|
|
||||||
|
pid_path = os.path.join("/tmp", PIDFILE)
|
||||||
|
|
||||||
|
if os.path.exists(pid_path):
|
||||||
|
with open(pid_path, "r") as pid_file:
|
||||||
|
check_pid = pid_file.read().strip()
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.kill(int(check_pid), 0)
|
||||||
|
print(f"ffmpeg is already running. Delete {pid_path} if it actually isn't.")
|
||||||
|
sys.exit(0) # apparently ffmpeg is running, just quit and do nothing
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
proc = subprocess.Popen([ "/usr/bin/ffmpeg", "-i", WEBCAM_STREAM_URL, "-video_size", "1280x720", "-an", "-f", "flv", "-c:v", "libx264", "-b:v", "500k", "-preset", "veryfast", "-bufsize", "1M", "-maxrate", "500k", TWITCH_SERVER ], stderr=open(os.devnull, "w"))
|
||||||
|
|
||||||
|
# write pid into pidfile so we can kill the process later
|
||||||
|
with open(pid_path, "w") as pid_file:
|
||||||
|
pid_file.write(str(proc.pid))
|
||||||
|
print(f"Wrote PID {proc.pid} into pidfile")
|
||||||
22
stream_stop.py
Executable file
22
stream_stop.py
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import subprocess, os, signal
|
||||||
|
from constants import *
|
||||||
|
|
||||||
|
pid_path = os.path.join("/tmp", PIDFILE)
|
||||||
|
|
||||||
|
if os.path.exists(pid_path):
|
||||||
|
with open(pid_path, "r") as pid_file:
|
||||||
|
kill_pid = pid_file.read().strip()
|
||||||
|
|
||||||
|
try:
|
||||||
|
os.kill(int(kill_pid), signal.SIGINT)
|
||||||
|
|
||||||
|
os.unlink(pid_path)
|
||||||
|
|
||||||
|
print("Stopped stream")
|
||||||
|
except Exception as err:
|
||||||
|
print("Error occured while killing process:", repr(err))
|
||||||
|
else:
|
||||||
|
print("No pidfile found")
|
||||||
|
# else do nothing I guess
|
||||||
Loading…
Reference in New Issue
Block a user