paella-core
Version:
Multistream HTML video player
179 lines (142 loc) • 4.18 kB
Markdown
You can download the source code of this tutorial from [https://github.com/polimediaupv/paella-svelte-tutorial](https://github.com/polimediaupv/paella-svelte-tutorial).
Create a Svelte template and install `paella-core`
```sh
npx degit sveltejs/template paella-svelte
cd paella-svelte
npm install
npm install --save paella-core
```
Edit `src/App.svelte` to create the player:
```svelte
<script>
import { onMount } from 'svelte';
import { Paella } from 'paella-core';
onMount(async () => {
const paella = new Paella('player-container');
paella.loadManifest()
.then(() => console.log("Done"))
.catch(err => console.log(err));
});
</script>
<main>
<h1>Hello from Svelte</h1>
<div id="player-container"></div>
</main>
<style>
div {
width: 800px;
height: 600px;
}
</style>
```
Create the `config.json` and `data.json` in the `public` directory:
**public/config/config.json:**
```json
{
"repositoryUrl": "manifest",
"manifestFileName": "data.json",
"defaultLayout": "presenter-presentation",
"plugins": {
"es.upv.paella.singleVideo": {
"enabled": true,
"validContent": [
{ "id": "presenter", "content": ["presenter"], "icon": "present-mode-2.svg", "title": "Presenter" },
{ "id": "presentation", "content": ["presentation"], "icon": "present-mode-1.svg", "title": "Presentation" },
{ "id": "presenter-2", "content": ["presenter-2"], "icon": "present-mode-1.svg", "title": "Presentation" }
]
},
"es.upv.paella.dualVideo": {
"enabled": true,
"validContent": [
{ "id": "presenter-presentation", "content": ["presenter","presentation"], "icon": "present-mode-3.svg", "title": "Presenter and presentation" },
{ "id": "presenter-2-presentation", "content": ["presenter-2","presentation"], "icon": "present-mode-3.svg", "title": "Presenter and presentation" },
{ "id": "presenter-presenter-2", "content": ["presenter","presenter-2"], "icon": "present-mode-3.svg", "title": "Presenter and presentation" }
]
},
"es.upv.paella.mp4VideoFormat": {
"enabled": true,
"order": 1
},
"es.upv.paella.playPauseButton": {
"enabled": true,
"order": 1
}
}
}
```
**public/manifest/test/data.json:**
```json
{
"metadata": {
"duration": 909.13,
"title": "Belmar 15 minutes (multiresolution)",
"preview": "https://repository.paellaplayer.upv.es/belmar-multiresolution/preview/belmar-preview.jpg"
},
"streams": [
{
"sources": {
"mp4": [
{
"src": "https://repository.paellaplayer.upv.es/belmar-multiresolution/media/720-presentation.mp4",
"mimetype": "video/mp4",
"res": {
"w": "1442",
"h": "1080"
}
}
]
},
"preview": "https://repository.paellaplayer.upv.es/belmar-multiresolution/preview/presentation_cut.jpg",
"content":"presentation"
},
{
"sources": {
"mp4": [
{
"src": "https://repository.paellaplayer.upv.es/belmar-multiresolution/media/720-presenter.mp4",
"mimetype": "video/mp4",
"res": {
"w": "1920",
"h": "1080"
}
}
]
},
"preview": "https://repository.paellaplayer.upv.es/belmar-multiresolution/preview/presenter_cut.jpg",
"content":"presenter"
}
]
}
```
The icon customization APIs require SVG images to be used, as a text string ([define custom plugin icons](plugin_icon_customization.md)). It is possible to load icons in SVG format with Rollup using the `rollup-plugin-svg-import` plguin.
**rollupu.config.js:**
```js
import svg from 'rollup-plugin-svg-import'
export default {
...
plugins: [
svg: {
// Queremos que los iconos estén en formato texto SVG, by default
// this plugin converts the icon in a DOM tree.
stringify: true
},
...
]
}
```
```js
import myCustomIcon from './myCustomIcon.svg'
...
player.addCustomPluginIcon("es.upv.paella.aCustomizableButtonPlugin","iconName",myCustomIcon);
```
Run the player:
```sh
npm run dev
```
And open it in the following URL: [http://localhost:5000?id=test](http://localhost:5000?id=test).