-
-
Notifications
You must be signed in to change notification settings - Fork 313
/
picture-in-picture.html
128 lines (106 loc) · 3.33 KB
/
picture-in-picture.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Picture-in-Picture Example - Record Plugin for Video.js</title>
<link href="../node_modules/video.js/dist/video-js.min.css" rel="stylesheet">
<link href="../dist/css/videojs.record.css" rel="stylesheet">
<link href="assets/css/examples.css" rel="stylesheet">
<script src="../node_modules/video.js/dist/video.min.js"></script>
<script src="../node_modules/recordrtc/RecordRTC.js"></script>
<script src="../node_modules/webrtc-adapter/out/adapter.js"></script>
<script src="../dist/videojs.record.js"></script>
<script src="browser-workarounds.js"></script>
<style>
/* change player background color */
#myVideo {
background-color: #89D963;
}
</style>
</head>
<body>
<video id="myVideo" playsinline class="video-js vjs-default-skin"></video>
<script>
/* eslint-disable */
// check for support
var pipEnabled = false;
var pipStatusMsg;
if (!('pictureInPictureEnabled' in document)) {
pipStatusMsg = 'The Picture-in-Picture API is not available.';
} else if (!document.pictureInPictureEnabled) {
pipStatusMsg = 'The Picture-in-Picture API is disabled.';
} else {
pipEnabled = true;
}
var options = {
controls: true,
width: 320,
height: 240,
fluid: false,
bigPlayButton: false,
controlBar: {
volumePanel: false
},
plugins: {
record: {
audio: false,
video: true,
pip: pipEnabled,
displayMilliseconds: false,
maxLength: 60,
debug: true
}
}
};
// apply some workarounds for opera browser
applyVideoWorkaround();
var player = videojs('myVideo', options, function() {
// print version information at startup
var msg = 'Using video.js ' + videojs.VERSION +
' with videojs-record ' + videojs.getPluginVersion('record') +
' and recordrtc ' + RecordRTC.version;
videojs.log(msg);
});
player.on('ready', function() {
if (!pipEnabled) {
alert(pipStatusMsg + ' Disabled the PiP button.');
}
});
// error handling
player.on('deviceError', function() {
console.warn('device error:', player.deviceErrorCode);
});
player.on('error', function(element, error) {
console.error(error);
});
// user clicked the record button and started recording
player.on('startRecord', function() {
console.log('started recording!');
});
// user completed recording and stream is available
player.on('finishRecord', function() {
// the blob object contains the recorded data that
// can be downloaded by the user, stored on server etc.
console.log('finished recording: ', player.recordedData);
});
// handle Picture-in-Picture events
var pipWindow;
player.on('enterPIP', function(element, evt) {
console.log('Entered Picture-in-Picture');
// listen for window resize
pipWindow = evt.pictureInPictureWindow;
pipWindow.addEventListener('resize', onPipWindowResize);
console.log(`Window size is ${pipWindow.width} x ${pipWindow.height}`);
});
player.on('leavePIP', function() {
console.log('Left Picture-in-Picture');
// stop listening for resize
pipWindow.removeEventListener('resize', onPipWindowResize);
});
function onPipWindowResize(evt) {
// print window size to console
console.log(`Window size changed to ${pipWindow.width} x ${pipWindow.height}`);
}
</script>
</body>
</html>