recording a remote webrtc stream with RecordRTC

opentok, web-audio-api, webrtc

Solution

This is the same issue occurs in following situations...

- If not a stereo audio (dual channel audio)...i.e. it is mono audio

- If audio input channels are not equal to audio output channels

- If audio input device is not the default device selected on chrome

I'm still trying to find the actual issue.

I added this experiment for testing purpose... see console...

https://webrtc-experiment.appspot.com/demos/remote-stream-recording.html

Updated at: Saturday, 1 February 2014, 09:22:04 PKT

Remote audio recording is not supported; and this issue is considered as low-priority wontfix:

- Support feeding remote WebRTC MediaStreamTrack output to WebAudio

- Connect WebRTC MediaStreamTrack output to Web Audio API

Updated at March 28, 2016

Remote audio+video recording is now supported in RecordRTC, since Chrome version 49+.

Firefox, on the other hand, can merely record remote-audio.

Problem

I am using Opentok JavaScript WebRTC library to host a 1-to-1 video chat (peer-to-peer). I can see my peer's video and hear the audio flawlessly. My wish is to record audio / video of other chat party (remote). For this purpose, I'm using RecordRTC. I was able to record the video of other chat participant (video is outputted to HTML video element), but, so far, I have not succeeded in recording audio (a dead-silence .wav file is as far as I could get). Using Chrome Canary (30.0.1554.0). This is my method: ``` var clientVideo = $('#peerdiv video')[0];//peer's video (html element) var serverVideo = $('#myselfdiv video')[0];//my video (html element) var context = new webkitAudioContext(); var clientStream = context.createMediaStreamSource(clientVideo.webRTCStream); var serverStream = context.createMediaStreamSource(serverVideo.webRTCStream); ``` webRTCStream is a custom property i assigned to HTMLVideoElement object by modifying source of opentok js library. It contains MediaStream object linked to respective < video > element. ``` var recorder = RecordRTC({ video: clientVideo, stream: clientStream }); recorder.recordAudio(); recorder.recordVideo(); ``` Video is recorded. Audio file is also created, it has a length that is close to video's length, however, it's completely silent (and yes, there was a lot of noise making on the other side during recording) I've tested this with video element which displays my webcam's video stream (and audio), and it worked: both audio and video were recorded: ``` ... var recorder = RecordRTC({ video: serverVideo, stream: serverStream }); ... ``` Is there something special about streams originating from a remote location? Any guidance on this issue would be very helpful.

Original source