initial commit
This commit is contained in:
commit
0c3ccba783
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
__pycache__/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
14
README.md
Normal file
14
README.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Musik
|
||||||
|
Stream some music.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
Python 3.6+
|
||||||
|
FFmpeg compiled with `--enable-libopus`
|
||||||
|
Python packages: `flask gunicorn`
|
||||||
|
|
||||||
|
## Install
|
||||||
|
1. Get on the floor
|
||||||
|
2. Walk the dinosaur
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
`gunicorn -b localhost:5150 -e SCRIPT_NAME=/musik musik:app`
|
43
musik.py
Executable file
43
musik.py
Executable file
|
@ -0,0 +1,43 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Music streaming.
|
||||||
|
"""
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
from flask import Flask, Response, render_template
|
||||||
|
|
||||||
|
FFMPEG_CMD = [
|
||||||
|
'ffmpeg', '-y',
|
||||||
|
'-loglevel', 'panic',
|
||||||
|
'-i', '',
|
||||||
|
'-codec:a', 'libopus',
|
||||||
|
'-b:a', '64k',
|
||||||
|
'-f', 'opus',
|
||||||
|
'-'
|
||||||
|
]
|
||||||
|
|
||||||
|
app = Flask(__name__)
|
||||||
|
|
||||||
|
@app.route('/')
|
||||||
|
def index():
|
||||||
|
"""Main index page."""
|
||||||
|
track = "01 - Balls to the Wall.flac"
|
||||||
|
return render_template('index.html', track=track)
|
||||||
|
|
||||||
|
|
||||||
|
@app.route('/stream/<track>')
|
||||||
|
def stream(track):
|
||||||
|
"""View for the raw audio file."""
|
||||||
|
FFMPEG_CMD[5] = track
|
||||||
|
|
||||||
|
def generate():
|
||||||
|
with subprocess.Popen(FFMPEG_CMD, stdout=subprocess.PIPE) as proc:
|
||||||
|
data = proc.stdout.read(1024)
|
||||||
|
while data:
|
||||||
|
yield data
|
||||||
|
data = proc.stdout.read(1024)
|
||||||
|
return Response(generate(), mimetype="audio/ogg")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
app.run(host='0.0.0.0', port=5150)
|
2
static/musik.css
Normal file
2
static/musik.css
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
body {
|
||||||
|
}
|
2
static/musik.js
Normal file
2
static/musik.js
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
function ajax() {
|
||||||
|
}
|
19
templates/index.html
Normal file
19
templates/index.html
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Musik</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="/static/musik.css">
|
||||||
|
<script type="text/javascript" src="/static/musik.js"></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Musik</h1>
|
||||||
|
<div id="navigation">
|
||||||
|
</div>
|
||||||
|
<div id="playerContainer">
|
||||||
|
<hr>
|
||||||
|
<audio id="player" controls>
|
||||||
|
<source id="stream" src="{{ url_for('stream', track=track) }}" type="audio/ogg">
|
||||||
|
</audio>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user