5

私はしようとしています

  1. Android デバイスから音声を録音し、
  2. データを何らかのオーディオ エンコーディング (M4A、FLAC、Ogg) としてエンコードする
  3. サーバーにストリーミング アップロードします (チャンクされた http 投稿) - 記録が進行中です。

これらを達成する方法はありますか?


MediaRecorder 私はAndroid (オーディオを録音し、エンコードしてファイルに保存する)を使用HttpClientし、入力ストリームからデータをアップロードできるInputStreamEntityでAndroidを使用しようとしました。MediaRecorder の出力HttpClient の入力。

ただし、これは失敗しました-記録を停止すると、次のようになります:

06-27 17:58:47.259: A/libc(6759): Fatal signal 11 (SIGSEGV) at 0x00000010 (code=1), thread 6759

アプリケーションがクラッシュし、サーバーに到着したファイルは VLC で再生できないため、これは 2 回失敗します。

上記の要件 1..3 を実行する別の方法、またはそれをデバッグする方法についてのアイデアはありますか?

4

3 に答える 3

2

mediaRecorder ではなく Audiorecord クラスを使用します。前者の API を使用すると、マイクをサポートするバッファーに直接アクセスできます。バッファーからストリームに書き込むハンドラーを制御できます ( http chunked-encoding connection のように)。これにより、ストリーミング要件が処理されます。

audioRecord を使用して git proj を見てください...

https://github.com/Audioboo/audioboo-android?source=c

class=FLACRecorder.run() を参照してください。AudioRecord バッファーを読み取り、エンコーダー (FLAC) に書き込みます。flac でエンコードされたバイトをストリーミングする場合は、このアプリを使用して、エンコーダーの下流のバイトを取得し、このクラスのように http 接続に書き込むことができます。

于 2013-07-06T20:57:35.177 に答える
1

StreamingLoop を見ると混乱します。ストリームを StreamingLoop でアップロードしていますか、それとも HttpClient でアップロードしていますか?

実際に HttpClient を使用する場合は、 と を使用して 2 つのストリームを簡単に接続できjava.io.PipedReaderますjava.io.PipedWriter

MediaRecorder を設定して PipedWriter に書き込み、HttpClient を PipedReader から読み取るように設定します。どちらも異なるスレッドで実行する必要があります。

于 2013-07-01T12:47:42.200 に答える