在Android中将音频流传输到http post

在Android中将音频流传输到http post,android,audio-streaming,audio-recording,Android,Audio Streaming,Audio Recording,我正在努力 从Android设备录制语音 将数据编码为某些音频编码(M4A、FLAC、Ogg) 流将其上传到我的服务器(分块http post)-同时录制正在进行 如何实现这些目标有什么想法吗 我试着使用Android的MediaRecorder(它记录音频,对音频进行编码并保存到文件中),并将Android的HttpClient与InputStreamEntity一起使用,后者允许从输入流上传数据。我使用来自的“StreamingLoop”将输出文件描述符连接到inputStream,这样我

我正在努力

  • 从Android设备录制语音
  • 将数据编码为某些音频编码(M4A、FLAC、Ogg)
  • 流将其上传到我的服务器(分块http post)-同时录制正在进行
  • 如何实现这些目标有什么想法吗


    我试着使用Android的
    MediaRecorder
    (它记录音频,对音频进行编码并保存到文件中),并将Android的
    HttpClient
    与InputStreamEntity一起使用,后者允许从输入流上传数据。我使用来自的“StreamingLoop”将输出文件描述符连接到inputStream,这样我就可以将MediaRecorder的输出用于HttpClient的输入

    但是这失败了-当我停止录制时,我得到:

    06-27 17:58:47.259:A/libc(6759):线程6759的0x00000010(code=1)处的致命信号11(SIGSEGV)

    这会使应用程序崩溃,并且到达服务器的文件无法由VLC进行处理,因此这是两次失败


    有没有其他方法来满足上述要求1..3或如何调试它的想法?

    当查看StreamingLoop时,我感到困惑:您是使用StreamingLoop还是使用HttpClient上传流

    如果您真的使用HttpClient,您可以轻松地使用和连接这两个流


    然后将MediaRecorder配置为写入PipedWriter,将HttpClient配置为读取PipedWriter。两者必须在不同的线程上运行。

    您可以使用MediaRecorder。MediaRecorder中的函数可以采用文件描述符。幸运的是,Android允许您从套接字获取文件描述符。阅读代码和详细信息

    正如前面链接的帖子所提到的,您将拥有对流的控制权,这意味着您可以将其存储在缓冲区中,并可能将其传递给服务器。这甚至允许您在录制过程中动态播放音频,如果您愿意的话


    如果使用LocalSocket而不是Socket,则可以通过调用LocalSocket实例上的getFileDescriptor直接获取fileDescriptor。

    使用Audiorecord类而不是mediaRecorder。前者的API使您可以直接访问支持麦克风的缓冲区。您可以控制从缓冲区写入流的处理程序(如http分块编码连接)。这将满足您的流媒体要求

    看一个git项目使用录音


    请参见class=FLACRecorder.run(),其中它读取录音缓冲区并将其写入编码器(FLAC)。如果你想流式传输flac编码的字节,你可以使用这个应用程序,获取编码器下游的字节,然后像在这个类中那样将其写入http连接。

    通过ndk堆栈还有什么其他方法吗?另外,我们可以有API版本,并仔细检查我们处理的是http而不是https吗?谢谢。很抱歉我不在,无法获得反馈-我试图用StreamingLoop解决的问题是MediaRecorder不输出流,而是写入文件描述符。流循环允许我将文件描述符转换为流(因为我可以获得本地套接字的文件描述符),然后插入HttpClient进行上传抱歉,我不在,无法获得反馈。谢谢,你给了我一些想法,我明天会试试,让你知道。我想我的一些问题与AAC编码在我的设备上流媒体时被破坏有关(就像问题一样),我误认为无法正确流媒体。这种录音方法和FLAC编码器看起来很有前途。链接无效。您可以在链接上添加新的github链接upd吗