2016-06-01 3 views
0

Ich versuche im Grunde, Audio-Chunks aus einem webrtc-Stream aufzunehmen, ich bin in der Lage, die binären Daten mit Hilfe dieser Ressource HTML Audio Capture streaming to Node.js zu senden.Umgang mit einem WebRTC-byte [] stream?

Im mit netty-socketio, wie diese Bibliothek gut mit Socket-IO auf der Client-Seite spielt. Hier sind meine Server-Endpunkte:

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

Die Formateinstellungen:

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; 
} 

Im diese Klasse unter Verwendung des Byte-Arrays zu sammeln (und ja ich weiß das Risiko mit dieser Lösung)

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; 
    } 
} 

Die generierte WAV-Datei spielt nur Rauschen ab, keine Aufzeichnung ist vorhanden. Was mache ich falsch?

+0

Hey man nicht sicher, ob Sie auf diese Lösung eingestellt sind, aber ich würde stark empfehlen, einen WebRTC Media Server wie Kurento zu verwenden, um WebRTC st zu notieren Ries. Sie haben eine Knotenbindung lib. Sie können Twilio dann für STUN/TURN verwenden, um sicherzustellen, dass die Verbindung zwischen Ihrem Client/Server unabhängig vom Netzwerk immer routingfähig ist. – Vinay

+0

Ich sah att Kurento vor dem Start dieses Projekts, scheint ein schönes Rahmenwerk für Websocket/WebRTC-Projekt. Die Resonanz, die ich nicht mit Kurento verwende, ist, dass dieser Proof of Concept mir hilft, Websocket und WebRTC-Kommunikation zu verstehen. –

+0

Ich sehe! Nun, viel Glück, Mann. Um die Low-Level-WRTC-Kommunikation zu verstehen, müssen Sie verstehen, wie Sie über DTLS-SRTP zum zugrunde liegenden Stream gelangen. DTLS ist das Verwaltungsprotokoll der Schlüssel, die den zugrunde liegenden SRTP-Stream verschlüsseln. Ich weiß nicht viel darüber im Stapel, aber Janus ist vielleicht ein guter Ort, um zu sehen, wie es in C geschrieben ist: https://github.com/meetecho/janus-gateway – Vinay

Antwort

0

Bei Google: ing um für Antworten, die ich auf diese Ressource gestolpert how to save a wav file

Was ich falsch mache ist, dass ich eine feste Größe auf dem AudioInputstream Konstruktorparameter hatte:

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

es die veränderte :