2016-06-01 10 views
0

私は基本的にwebrtcストリームからオーディオチャンクを録音しようとしていますが、このリソースの助けを借りてバイナリデータを送ることができましたHTML Audio Capture streaming to Node.jsWebRTC byte []ストリームの処理?

Im netty-socketioを使用しています。このライブラリはクライアント側でsocket-ioとよく動作します。

class ByteArrayList { 
    private List<Byte> bytesList; 

    public ByteArrayList() { 
     bytesList = new ArrayList<Byte>(); 
    } 

    public void add(byte[] bytes) { 
     add(bytes, 0, bytes.length); 
    } 

    public void add(byte[] bytes, int offset, int length) { 
     for (int i = offset; i < (offset + length); i++) { 
      bytesList.add(bytes[i]); 
     } 
    } 

    public int size(){ 
     return bytesList.size(); 
    } 

    public byte[] getArray() { 
     byte[] bytes = new byte[bytesList.size()]; 
     for (int i = 0; i < bytesList.size(); i++) { 
      bytes[i] = bytesList.get(i); 
     } 
     return bytes; 
    } 
} 
バイト配列を収集するために、このクラスを使用して

public static AudioFormat getAudioFormat() { 
    float sampleRate = 48000; 
    int sampleSizeInBits = 8; 
    int channels = 2; 
    boolean signed = true; 
    boolean bigEndian = true; 
    AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits, 
      channels, signed, bigEndian); 
    return format; 
} 

イム(とはい私は、このソリューションでリスクを知っている):

server.addEventListener("audio-blob", byte[].class, (socketIOClient, bytes, ackRequest) -> { 
    byteArrayList.add(bytes); 
}); 

server.addEventListener("audio-blob-end", Object.class, (socket, string, ackRequest) -> { 
    ByteArrayInputStream in = new ByteArrayInputStream(byteArrayList.getArray()); 
    AudioInputStream audiIn = new AudioInputStream(in, getAudioFormat(), 48000l); 
    AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE; 
    File wavFile = new File("RecordAudio.wav"); 
    AudioSystem.write(audiIn,fileType,wavFile); 
}); 

書式設定: ここに私のサーバーのエンドポイントです

生成されたWAVファイルはノイズを再生しますが、録音はありません。私は間違って何をしていますか?

+0

このソリューションに設定されているかどうかわかりませんが、WebRTC Media Server(Kurentoなど)を使用してWebRTC stの記録を処理することを強くお勧めします。連彼らはノードバインディングlibを持っています。 STUN/TURNにTwilioを使用すると、クライアント/サーバー間の接続がネットワークに関係なく常にルーティング可能であることを確認できます。 – Vinay

+0

私はこのプロジェクトを開始する前にKurentoを見て、Websocket/webRTCプロジェクトのための素敵なフレームワークのように思えます。私がKurentoを使用していない共振は、この概念証明がWebsocketとwebrtcの通信を理解するのに役立つということです。 –

+0

私は見る!よく幸運の人。低レベルのWRTC通信を理解するためには、DTLS-SRTPを介して基本ストリームに到達する方法を理解する必要があると思います。 DTLSは、基になるSRTPストリームを暗号化するキーの管理プロトコルです。私はスタックの低さについてはあまり知らないが、JanusはCで書かれていることを知るには良い場所かもしれない:https://github.com/meetecho/janus-gateway – Vinay

答えて

0

Googleは:私が間違ってやっていた私は、このリソースに応じhow to save a wav file

をつまずいた答えを周りINGのは、私はたAudioInputStreamコンストラクタパラメータに固定サイズを持っていたということです。

new AudioInputStream(in, getAudioFormat(), 48000l) 

はそれを変更:

new AudioInputStream(in, getAudioFormat(),byteArrayList.getArray().length); 
関連する問題