Add support for subtitles on Chromecast
This commit is contained in:
@@ -13,6 +13,8 @@ module.exports = {
|
||||
setRate
|
||||
}
|
||||
|
||||
const http = require('http')
|
||||
|
||||
const config = require('../../config')
|
||||
const {CastingError} = require('./errors')
|
||||
|
||||
@@ -130,11 +132,35 @@ function chromecastPlayer () {
|
||||
})
|
||||
}
|
||||
|
||||
function serveSubtitles (callback) {
|
||||
const subtitles = state.playing.subtitles
|
||||
const selectedSubtitle = subtitles.tracks[subtitles.selectedIndex]
|
||||
if (!selectedSubtitle) {
|
||||
callback()
|
||||
} else {
|
||||
ret.subServer = http.createServer((req, res) => {
|
||||
res.writeHead(200, {
|
||||
'Content-Type': 'text/vtt;charset=utf-8',
|
||||
'Access-Control-Allow-Origin': '*',
|
||||
'Transfer-Encoding': 'chunked'
|
||||
})
|
||||
res.end(Buffer.from(selectedSubtitle.buffer.substr(21), 'base64'))
|
||||
}).listen(0, function () {
|
||||
const port = ret.subServer.address().port
|
||||
const subtitlesUrl = 'http://' + state.server.networkAddress + ':' + port + '/'
|
||||
callback(subtitlesUrl)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function open () {
|
||||
const torrentSummary = state.saved.torrents.find((x) => x.infoHash === state.playing.infoHash)
|
||||
serveSubtitles(function (subtitlesUrl) {
|
||||
ret.device.play(state.server.networkURL + '/' + state.playing.fileIndex, {
|
||||
type: 'video/mp4',
|
||||
title: config.APP_NAME + ' - ' + torrentSummary.name
|
||||
title: config.APP_NAME + ' - ' + torrentSummary.name,
|
||||
subtitles: subtitlesUrl ? [subtitlesUrl] : [],
|
||||
autoSubtitles: !!subtitlesUrl
|
||||
}, function (err) {
|
||||
if (err) {
|
||||
state.playing.location = 'local'
|
||||
@@ -147,6 +173,7 @@ function chromecastPlayer () {
|
||||
}
|
||||
update()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function play (callback) {
|
||||
@@ -159,6 +186,9 @@ function chromecastPlayer () {
|
||||
|
||||
function stop (callback) {
|
||||
ret.device.stop(callback)
|
||||
if (ret.subServer) {
|
||||
ret.subServer.close()
|
||||
}
|
||||
}
|
||||
|
||||
function status () {
|
||||
|
||||
@@ -320,7 +320,8 @@ function startServerFromReadyTorrent (torrent, cb) {
|
||||
const info = {
|
||||
torrentKey: torrent.key,
|
||||
localURL: 'http://localhost' + urlSuffix,
|
||||
networkURL: 'http://' + networkAddress() + urlSuffix
|
||||
networkURL: 'http://' + networkAddress() + urlSuffix,
|
||||
networkAddress: networkAddress()
|
||||
}
|
||||
|
||||
ipc.send('wt-server-running', info)
|
||||
|
||||
Reference in New Issue
Block a user