Skip to content

Commit 16fac27

Browse files
authored
Merge pull request #16 from santipuppoQualabs/feature/web-component
Issue #10 - Web component
2 parents 28ef75a + 7d4a64e commit 16fac27

File tree

15 files changed

+955
-78
lines changed

15 files changed

+955
-78
lines changed

lib/package.json

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,20 @@
33
"version": "0.0.1",
44
"description": "Media over QUIC library",
55
"license": "(MIT OR Apache-2.0)",
6-
"entry": "playback/index.ts",
7-
"main": "dist/moq-player.cjs.js",
8-
"module": "dist/moq-player.esm.js",
6+
"wc-player": "video-moq/index.ts",
7+
"simple-player": "playback/index.ts",
8+
"exports": {
9+
".": {
10+
"import": "./dist/moq-player.esm.js",
11+
"require": "./dist/moq-player.cjs.js"
12+
},
13+
"./simple-player": {
14+
"import": "./dist/moq-simple-player.esm.js",
15+
"require": "./dist/moq-simple-player.cjs.js"
16+
}
17+
},
918
"iife": "dist/moq-player.iife.js",
19+
"iife-simple": "dist/moq-simple-player.iife.js",
1020
"types": "dist/types/moq-player.d.ts",
1121
"scripts": {
1222
"build": "rollup -c",
@@ -36,6 +46,7 @@
3646
"npm-run-all": "^4.1.5",
3747
"prettier": "^3.0.1",
3848
"rollup": "^4.28.0",
49+
"rollup-plugin-import-css": "^3.5.8",
3950
"rollup-plugin-sourcemaps": "^0.6.2",
4051
"rollup-plugin-web-worker-loader": "github:montevideo-tech/rollup-plugin-web-worker-loader",
4152
"tslib": "^2.8.1",

lib/playback/index.ts

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,6 @@ export default class Player {
129129
const kind = Catalog.isVideoTrack(track) ? "video" : Catalog.isAudioTrack(track) ? "audio" : "unknown"
130130
if (kind == "audio" && this.#muted) return
131131

132-
const sub = await this.#connection.subscribe(track.namespace, track.name)
133-
134132
if (kind == "audio") {
135133
// Save ref to last audio track we subscribed to for unmuting
136134
this.#audioTrackName = track.name
@@ -140,6 +138,8 @@ export default class Player {
140138
this.#videoTrackName = track.name
141139
}
142140

141+
const sub = await this.#connection.subscribe(track.namespace, track.name)
142+
143143
try {
144144
for (;;) {
145145
const segment = await Promise.race([sub.data(), this.#running])
@@ -216,6 +216,14 @@ export default class Player {
216216
return this.#paused
217217
}
218218

219+
get muted(): boolean {
220+
return this.#muted
221+
}
222+
223+
get videoTrackName(): string {
224+
return this.#videoTrackName
225+
}
226+
219227
async switchTrack(trackname: string) {
220228
const currentTrack = this.getCurrentTrack()
221229
if (this.#paused) {
@@ -298,6 +306,15 @@ export default class Player {
298306
}
299307
*/
300308

309+
// Added this to divide play and pause into two different functions
310+
async togglePlayPause() {
311+
if (this.#paused) {
312+
await this.play()
313+
} else {
314+
await this.pause()
315+
}
316+
}
317+
301318
async play() {
302319
if (this.#paused) {
303320
this.#paused = false
@@ -307,12 +324,16 @@ export default class Player {
307324
await this.#backend.unmute()
308325
}
309326
this.#backend.play()
310-
} else {
327+
}
328+
}
329+
330+
async pause() {
331+
if (!this.#paused) {
311332
this.#paused = true
312-
this.#backend.pause()
313333
const mutePromise = this.#backend.mute()
314334
const audioPromise = this.unsubscribeFromTrack(this.#audioTrackName)
315335
const videoPromise = this.unsubscribeFromTrack(this.#videoTrackName)
336+
this.#backend.pause()
316337
await Promise.all([mutePromise, audioPromise, videoPromise])
317338
}
318339
}

lib/rollup.config.js

Lines changed: 53 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -7,61 +7,61 @@ const workerLoader = require("rollup-plugin-web-worker-loader")
77
const babel = require("@rollup/plugin-babel")
88
const terser = require("@rollup/plugin-terser")
99
const sourceMaps = require("rollup-plugin-sourcemaps")
10+
const css = require("rollup-plugin-import-css")
1011
const pkg = require("./package.json")
1112

12-
const config = []
13+
const basePlugins = [
14+
resolve(),
15+
commonjs({
16+
include: [/node_modules/, /src/],
17+
transformMixedEsModules: true,
18+
}),
19+
workerLoader({ preserveSource: true }),
20+
typescript({
21+
typescript: require("typescript"),
22+
}),
23+
sourceMaps(),
24+
babel({
25+
babelHelpers: "bundled",
26+
presets: ["@babel/preset-env", "@babel/preset-typescript"],
27+
exclude: "./node_modules/*",
28+
}),
29+
terser(),
30+
]
1331

14-
config.push({
15-
input: pkg.entry,
16-
output: {
17-
file: pkg.iife,
18-
format: "iife",
19-
name: "moqplayer",
20-
sourcemap: true,
32+
module.exports = [
33+
{
34+
input: pkg["wc-player"],
35+
output: [
36+
{
37+
file: pkg.iife,
38+
format: "iife",
39+
name: "MoqPlayer",
40+
sourcemap: true,
41+
},
42+
{
43+
file: pkg.exports["."].import,
44+
format: "esm",
45+
sourcemap: true,
46+
},
47+
],
48+
plugins: [...basePlugins, css()],
2149
},
22-
plugins: [
23-
resolve(),
24-
commonjs({
25-
include: [/node_modules/, /src/],
26-
transformMixedEsModules: true,
27-
}),
28-
workerLoader({ preserveSource: true }),
29-
typescript({
30-
typescript: require("typescript"),
31-
}),
32-
sourceMaps(),
33-
babel({
34-
babelHelpers: "bundled",
35-
presets: ["@babel/preset-env", "@babel/preset-typescript"],
36-
exclude: "./node_modules/*",
37-
}),
38-
terser(),
39-
],
40-
})
41-
42-
config.push({
43-
input: pkg.entry,
44-
output: {
45-
file: pkg.module,
46-
format: "esm",
47-
sourcemap: true,
50+
{
51+
input: pkg["simple-player"],
52+
output: [
53+
{
54+
file: pkg["iife-simple"],
55+
format: "iife",
56+
name: "MoqSimplePlayer",
57+
sourcemap: true,
58+
},
59+
{
60+
file: pkg.exports["./simple-player"].import,
61+
format: "esm",
62+
sourcemap: true,
63+
},
64+
],
65+
plugins: basePlugins,
4866
},
49-
external: [],
50-
plugins: [
51-
resolve(),
52-
commonjs(),
53-
workerLoader({ preserveSource: true }),
54-
typescript({
55-
typescript: require("typescript"),
56-
}),
57-
sourceMaps(),
58-
babel({
59-
babelHelpers: "bundled",
60-
presets: ["@babel/preset-env", "@babel/preset-typescript"],
61-
exclude: "./node_modules/*",
62-
}),
63-
terser(),
64-
],
65-
})
66-
67-
module.exports = config
67+
]

lib/types/css.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
declare module "*.css" {
2+
const content: string
3+
export default content
4+
}

0 commit comments

Comments
 (0)