Guest User

Untitled

a guest
Apr 19th, 2020
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.08 KB | None | 0 0
  1. import subprocess
  2. import flask
  3. import os
  4. app = flask.Flask(__name__)
  5.  
  6. CHUNK_SIZE = 64
  7.  
  8. @app.route('/pulseaudio', methods=["GET"])
  9. def pulseaudio():
  10.     def stream():
  11.         pulseaudio_popen = subprocess.Popen(
  12.             [
  13.                 "bash", "-c",
  14.                 """
  15.                 parec \
  16.                     --format=s16le | \
  17.                     ffmpeg \
  18.                         -loglevel panic \
  19.                         -ac 2 \
  20.                         -f s16le \
  21.                         -ar 44100 \
  22.                         -i - \
  23.                         -ac 2 \
  24.                         -f adts \
  25.                         -acodec aac \
  26.                         -tune zerolatency \
  27.                         -movflags +faststart \
  28.                         -bufsize 1k \
  29.                         -ar 44100 \
  30.                         -b:a 192k \
  31.                         -
  32.                 """
  33.             ],
  34.             bufsize=0,
  35.             stdout=subprocess.PIPE,
  36.         )
  37.         bytes_read = 0
  38.         kbytes_read = 0
  39.         try:
  40.             while True:
  41.                 data = os.read(
  42.                     pulseaudio_popen.stdout.fileno(),
  43.                     CHUNK_SIZE,
  44.                 )
  45.                 if not data:
  46.                     return
  47.                 bytes_read += len(data)
  48.                 new_kbytes_read = int(bytes_read / 1024)
  49.                 if new_kbytes_read != kbytes_read:
  50.                     kbytes_read = new_kbytes_read
  51.                 yield data
  52.         finally:
  53.             pulseaudio_popen.kill()
  54.             pulseaudio_popen.wait()
  55.  
  56.  
  57.     return flask.Response(stream(), mimetype="audio/aac")
Advertisement
Add Comment
Please, Sign In to add comment