2017-02-18 2 views
2

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?

Antwort

0

Das ist jetzt ungefähr ein Jahr alt, ich bin mir sicher, dass Sie weitergegangen sind, aber ich denke, dass der Browser die Daten über einen WebSocket und nicht über HTTP streamt.