Skip to content

Instantly share code, notes, and snippets.

@karx
Created October 11, 2019 09:09
Show Gist options
  • Save karx/327ab5d980f8950e49fec356962dd8c8 to your computer and use it in GitHub Desktop.
Save karx/327ab5d980f8950e49fec356962dd8c8 to your computer and use it in GitHub Desktop.
HTML Canvas - Record and stream to Twitch.tv | Used along with a server instance with ffmpeg https://github.com/karx/kaaroStream-bridge
let kaaro_stream_bridge_url = "boomboom.store:3012";
let stream_key = '<twitch_streaming_key>';
let mediaRecorder;
let mediaStream;
let ws_url = window.location.protocol.replace('http', 'ws') + '//' + // http: => ws:, https: -> wss:
kaaro_stream_bridge_url +
'/rtmp/' +
encodeURIComponent(`rtmp://live-sin.twitch.tv/app/${stream_key}`);
console.log(ws_url);
const ws = new WebSocket(ws_url);
ws.addEventListener('open', (e) => {
console.log('WebSocket Open', e);
mediaStream = document.querySelector('canvas').captureStream(30); // 30 FPS
mediaRecorder = new MediaRecorder(mediaStream, {
mimeType: 'video/webm;codecs=h264',
videoBitsPerSecond: 3000000
});
mediaRecorder.addEventListener('dataavailable', (e) => {
ws.send(e.data);
});
mediaRecorder.addEventListener('stop', ws.close.bind(ws));
mediaRecorder.start(1000); // Start recording, and dump data every second
});
ws.addEventListener('close', (e) => {
console.log('WebSocket Close', e);
mediaRecorder.stop();
});
@karx
Copy link
Author

karx commented Oct 11, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment