WebRTC - addStream()到主机连接

时间:2017-02-23 03:46:15

标签: webrtc

我正在尝试将文件中的音频播放到远程webrtc对等端。我可以让对等连接,麦克风音频在它们之间来回流动,没问题。但是,当我向远程对等体添加音频流时,来自流的音频不会在远程对等体系统上播放。

这是在Linux上使用Chrome 56用于本地系统,而Firefox 51用于远程用户。

文件加载到缓冲区中,我通过附加MediaRecorder并监视其ondataavailable()事件对此进行了测试,数据肯定会进入缓冲区并进入下面的source_dest。

以下是基本流程。我究竟做错了什么?

pc1 是已设置的localhost系统的AudioContext。下面的 mic_stream 是来自pc1的来自getUserMedia()的流,它获取本地麦克风。

// create a new stream source from the pc1 stream
mic_patch = pc1.context.createMediaStreamSource( mic_stream );

// create a new destination from the mic stream
source_dest = pc1.context.createMediaStreamDestination();

// create a new filter, we need this so that source_dest
// creates a stream that we can add to pc2.
biquadfilter = pc1.context.createBiquadFilter();
biquadfilter.type = 'highpass';
biquadfilter.frequency.value = 1500;

// connect the mic_patch to the filter
mic_patch.connect( biquadfilter );

// connect the filter to the new source dest
biquadfilter.connect( source_dest );

pc2 成功连接到pc1后,麦克风音频在pc1和pc2之间工作,一切都很好。然后我将source_dest流添加到pc2(RTCPeerConnection),当我通过pc2.getLocalStreams()检查pc2时,我看到source_dest流已连接。

pc2.addStream( source_dest.stream );

然后我将磁盘中的文件加载到缓冲区中。

此时,以下代码中的文件是使用HTML< input type =“file”>加载的File对象。领域。选择文件时会触发下面的代码。

我使用FileReader将其转换为AudioBuffer并使用连接到source_dest的createBufferSource()将其解码为缓冲区,因此buffer_source将其输出提供给source_dest,然后我立即通过buffer_source.start(0)开始播放

reader = new FileReader(); 

buffer_source = source_dest.context.createBufferSource();

buffer_source.connect( source_dest );

reader.onload = function(e) {
    var arrayBuffer = reader.result;
    Webcaster.node.context.decodeAudioData( arrayBuffer, function(buffer) {

        buffer_source.buffer = buffer;

        buffer_source.start(0);

        /** For testing to ensure the buffer data makes it into source_dest
        mediaRecorder = new MediaRecorder( source_dest.stream );
        mediaRecorder.ondataavailable = function(evt) {
            // push each chunk (blobs) in an array
            chunks.push(evt.data);
            // dump out the chunks array to ensure it receives buffer data successfully
            console.log( 'CHUNKS', chunks );
        };
        mediaRecorder.start();
        //stop recording after 10 seconds, no need to record longer,
        //this is only to test the source_dest connect and data flow
        //when recorders stop ondataavailable() will be triggered
        setTimeout( function() { mediaRecorder.stop() }, 10000 )
        **/
    })
}

reader.readAsArrayBuffer( file );

所以这一切都有效,除了放入source_dest的音频数据不能在远程pc2上播放。我花了很多时间试图找出原因,到目前为止没有运气。

有人有线索为什么?

0 个答案:

没有答案