Wir versuchen, eine App zu erstellen, Live-Audio an mehrere Abonnenten zu übertragen. Der Server (geschrieben in go) akzeptiert PCM-Daten über Chunks und ein Client, der pyaudio verwendet, kann das Mikrofon anzapfen und diese Daten mit dem untenstehenden Code senden. Wir haben das getestet und es funktioniert. Das Audio wird von jedem Browser mit der Teilnehmer-URL abgespielt.Streaming der Mikrofonausgabe über HTTP POST mit Chunked-Übertragung
import pyaudio
import requests
import time
p = pyaudio.PyAudio()
# frames per buffer ?
CHUNK = 1024
# 16 bits per sample ?
FORMAT = pyaudio.paInt16
# 44.1k sampling rate ?
RATE = 44100
# number of channels
CHANNELS = 1
STREAM = p.open(
format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK
)
print "initialized stream"
def get_chunks(stream):
while True:
try:
chunk = stream.read(CHUNK,exception_on_overflow=False)
yield chunk
except IOError as ioe:
print "error %s" % ioe
url = "https://<server-host>/stream/publish/<uuid>/"
s = requests.session()
s.headers.update({'Content-Type': "audio/x-wav;codec=pcm"})
resp = s.post(url, data=get_chunks(STREAM))
Aber wir brauchen einen Browser, iOS und Android-Client das gleiche wie das oben Client führt zu tun. Wir können den Ton vom Mikrofon holen, indem wir die getUserMedia-API im Browser verwenden, können aber dieses Audio nicht wie beim obigen Python-Code an den Server senden. Kann jemand etwas Licht in die richtige Richtung werfen?