{
test: /\.html$/,
loader: 'raw-loader',
- exclude: [ helpers.root('src/index.html') ]
+ exclude: [ helpers.root('src/index.html'), helpers.root('src/standalone/videos/embed.html') ]
}
]
{
from: 'node_modules/webtorrent/webtorrent.min.js',
to: 'assets/webtorrent'
+ },
+ {
+ from: 'node_modules/video.js/dist/video.min.js',
+ to: 'assets/video-js'
+ },
+ {
+ from: 'node_modules/video.js/dist/video-js.min.css',
+ to: 'assets/video-js'
+ },
+ {
+ from: 'node_modules/videojs-dock/dist/videojs-dock.min.js',
+ to: 'assets/video-js'
+ },
+ {
+ from: 'node_modules/videojs-dock/dist/videojs-dock.css',
+ to: 'assets/video-js'
+ },
+ {
+ from: 'src/standalone',
+ to: 'standalone'
}
]),
* See: https://github.com/numical/script-ext-html-webpack-plugin
*/
new ScriptExtHtmlWebpackPlugin({
+ sync: [ 'webtorrent.min.js' ],
defaultAttribute: 'defer'
}),
--- /dev/null
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>PeerTube</title>
+
+ <meta charset="UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+
+ <link rel="icon" type="image/png" href="/client/assets/favicon.png" />
+
+ <link rel="stylesheet" href="/client/assets/video-js/video-js.min.css">
+ <link rel="stylesheet" href="/client/assets/video-js/videojs-dock.css">
+
+ <script src="/client/assets/webtorrent/webtorrent.min.js"></script>
+ <script src="/client/assets/video-js/video.min.js"></script>
+ <script src="/client/assets/video-js/videojs-dock.min.js"></script>
+
+ <style>
+ video {
+ width: 99%;
+ }
+
+ /* fill the entire space */
+ html, body {
+ height: 100%;
+ margin: 0;
+ }
+
+ .video-js {
+ width: 100%;
+ height: 100%;
+ }
+
+ .vjs-poster {
+ background-size: 100% auto;
+ }
+ </style>
+ </head>
+
+ <body>
+
+ <video id="video-container" class="video-js vjs-default-skin vjs-big-play-centered">
+ </video>
+
+
+ <script>
+ function loadVideoInfos (videoId, callback) {
+ var xhttp = new XMLHttpRequest()
+ xhttp.onreadystatechange = function () {
+ if (this.readyState === 4 && this.status === 200) {
+ var json = JSON.parse(this.responseText)
+ return callback(json)
+ }
+ }
+
+ var url = window.location.origin + '/api/v1/videos/' + videoId
+ xhttp.open('GET', url, true)
+ xhttp.send()
+ }
+
+ function loadVideoTorrent (magnetUri) {
+ console.log('Loading video ' + videoId)
+ var client = new window.WebTorrent()
+
+ console.log('Adding magnet ' + magnetUri)
+ client.add(magnetUri, function (torrent) {
+ var file = torrent.files[0]
+
+ file.renderTo('video', { autoplay: true })
+ })
+ }
+
+ var urlParts = window.location.href.split('/')
+ var videoId = urlParts[urlParts.length - 1]
+ var videoContainer = document.getElementById('video-container')
+
+ loadVideoInfos(videoId, function (videoInfos) {
+ var magnetUri = videoInfos.magnetUri
+ var thumbnailUrl = 'http://' + videoInfos.podUrl + videoInfos.thumbnailPath
+ videoContainer.poster = thumbnailUrl
+
+ videojs('video-container', { controls: true, autoplay: false }, function () {
+ var player = this
+
+ player.dock({
+ title: videoInfos.name
+ })
+
+ document.querySelector('.vjs-big-play-button').addEventListener('click', function () {
+ loadVideoTorrent(magnetUri)
+
+ player.play()
+ }, false)
+ })
+ })
+
+ </script>
+ </body>
+</html>
app.use(constants.STATIC_PATHS.THUMBNAILS, express.static(thumbnailsPhysicalPath, { maxAge: constants.STATIC_MAX_AGE }))
// Client application
+app.use('/videos/embed', function (req, res, next) {
+ res.sendFile(path.join(__dirname, 'client/dist/standalone/videos/embed.html'))
+})
app.use('/*', function (req, res, next) {
res.sendFile(path.join(__dirname, 'client/dist/index.html'))
})