使用分块传输通过 HTTP POST 流式传输麦克风输出

Posted

技术标签:

【中文标题】使用分块传输通过 HTTP POST 流式传输麦克风输出【英文标题】:Streaming the Microphone output via HTTP POST using chunked transfer 【发布时间】:2017-07-08 00:53:42 【问题描述】:

我们正在尝试构建一个应用程序来向多个订阅者广播实时音频。服务器(用 go 编写)通过块接受 pcm 数据,使用 pyaudio 的客户端能够接入麦克风并使用以下代码发送此数据。我们已经对此进行了测试,并且可以正常工作。音频从任何具有订阅者 URL 的浏览器播放。

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))

但我们需要一个浏览器、iosandroid 客户端来完成与上述客户端相同的操作。我们能够使用浏览器上的 getUserMedia API 从麦克风获取音频,但无法像上面的 python 代码那样将此音频发送到服务器。有人可以向正确的方向投一些光吗?

【问题讨论】:

【参考方案1】:

现在已经有一年了,所以我相信您已经继续前进,但我认为从浏览器使用的方法是通过 WebSocket 而不是 HTTP 流式传输数据。

【讨论】:

以上是关于使用分块传输通过 HTTP POST 流式传输麦克风输出的主要内容,如果未能解决你的问题,请参考以下文章

使用 HTTP Post 从客户端流式传输数据

使用套接字 IO 和 Node JS 通过套接字流式传输麦克风

如何通过套接字或框架将音频从 iPhone 的麦克风流式传输到 Mac/PC?

我可以使用 nodejs 将麦克风音频从客户端流式传输到客户端吗?

如何以 mp3 格式从麦克风流式传输声音?

将麦克风流式传输到 RTMP (red5) 并返回到 android