Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial...

27
Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Transcript of Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial...

Page 1: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Tutorial 10 – Media Inputs & Streaming

Winter Semester 2019/20

Page 2: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

● 😀●

Page 3: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Page 4: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Page 5: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Video and Audio in Browser

● <video> <audio>●●

<audio src="./sound.m4a"></audio>

<video controls width="250">

<source src="/video.webm"

type="video/webm">

<source src="/video.mp4"

type="video/mp4">

Video element is not supported.

</video> https://caniuse.com/#feat=video

Page 6: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

How do we achieve multimedia input?

Page 7: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

HTML5, JavaScript and Media Capture

●●

●●

Page 8: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Media Devices API●

●●

navigator.mediaDevices.getUserMedia(constraints).then(successCallback).catch(errorCallback)

●{

active: true,

id: "Cp7wyEAYPZCFTzFkUDjN9R2xxzRqo4fzaueW",

onactive: null,

...

}

Page 9: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

MediaDevices API Browser Support

https://caniuse.com/#search=getusermedia

Page 10: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Availability Check<script>

function isMediaDevicesCapable() {

return navigator.mediaDevices &&

navigator.mediaDevices.getUserMedia;

}

if (isMediaDevicesCapable()) {

document.write('mediaDevices.getUserMedia supported');

} else {

document.write('sorry, mediaDevices.getUserMedia unsupported');

}

</script>

01-availability.html

Page 11: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Permissions● getUserMedia()●

let requestedPermissions = {

audio: true,

video: true

};

Page 12: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Simple A/V Capture Script<script>

let video = document.querySelector('video');

if (navigator.mediaDevices.getUserMedia) {

navigator.mediaDevices.getUserMedia({ audio: true, video: true })

.then(function(stream) {

video.srcObject = stream;

}).catch(function(error) {

document.write(error);

});

}

</script>

02-permissions.html

Page 13: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Taking Video Snapshots<video autoplay></video>

<script> let video = document.querySelector('video'), canvas;

navigator.mediaDevices.getUserMedia({video: true}).then(function(stream) {

video.src = stream;

video.addEventListener('click', () => {

let img = document.querySelector('img') || document.createElement('img');

let width = video.offsetWidth, height = video.offsetHeight, context;

canvas = document.createElement('canvas');

canvas.width = width; canvas.height = height;

context = canvas.getContext('2d');

context.drawImage(video, 0, 0, width, height);

img.src = canvas.toDataURL('image/png');

document.body.appendChild(img);

})})

</script>

03-snapshots.html

Page 14: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10Online Multimedia 2019/20 – Tutorial 10

Page 15: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Page 16: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

WebSocket

●○○

■■

●●

Page 17: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

WebSocket●● …●●

○○

Page 18: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Drawbacks●●●

Page 19: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Socket.IO

●●●●●●

○○

Page 20: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Socket.IO (server)var app = require('express')();

var http = require('http').createServer(app);

var io = require('socket.io')(http);

app.get('/', function(req, res) {

res.sendFile(__dirname + '/index.html');

});

io.on('connection', function(socket) {

socket.on('from-client', function(msg) {

io.emit('from-server', msg + ', again');

});

});

https.listen(3000);

04-ws-app/index.js

Page 21: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Socket.IO (client)<script>

let socket = io()

socket.emit('from-client', 'hello')

socket.on('from-server', (data) => {

console.log(data)// response 'hello, again'

})

</script>

04-ws-app/index.html

Page 22: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10Online Multimedia 2019/20 – Tutorial 10

Code Alone: Twitch MIMUC over WSAnchor

Viewer

Viewer

ServerVideo

Audio

●○

Page 23: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Issue: The Connection is Not Private

Page 24: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

TIP: Resolving HTTPS locally

openssl req -nodes -new -x509 -keyout server.key -out server.cert

var https = require('https').createServer({

key: fs.readFileSync('server.key'),

cert: fs.readFileSync('server.cert')

}, app);

var io = require('socket.io')(https);

https.listen(port, function(){

console.log('listening on *:' + port);

});macOS as example

Page 25: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Page 26: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10

Reminder: Register Exam

●○○

Page 27: Tutorial 10 – Media Inputs & Streaming · 2020. 4. 11. · Online Multimedia 2019/20 – Tutorial 10 Tutorial 10 – Media Inputs & Streaming Winter Semester 2019/20

Online Multimedia 2019/20 – Tutorial 10