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.