Skip to content

Commit

Permalink
Add support for subtitles on Chromecast
Browse files Browse the repository at this point in the history
  • Loading branch information
janza committed Apr 27, 2017
1 parent a82498b commit 2508701
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 16 deletions.
59 changes: 44 additions & 15 deletions src/renderer/lib/cast.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ module.exports = {
setRate
}

const http = require('http')

const config = require('../../config')
const {CastingError} = require('./errors')

Expand Down Expand Up @@ -131,22 +133,49 @@ function chromecastPlayer () {
}

function open () {
const torrentSummary = state.saved.torrents.find((x) => x.infoHash === state.playing.infoHash)
ret.device.play(state.server.networkURL + '/' + state.playing.fileIndex, {
type: 'video/mp4',
title: config.APP_NAME + ' - ' + torrentSummary.name
}, function (err) {
if (err) {
state.playing.location = 'local'
state.errors.push({
time: new Date().getTime(),
message: 'Could not connect to Chromecast. ' + err.message
const torrentSummary = state.saved.torrents.find((x) => x.infoHash === state.playing.infoHash) || {}
const subtitles = state.playing.subtitles
const selectedSubtitle = subtitles.tracks[subtitles.selectedIndex]
if (!selectedSubtitle) {
cast()
} else {
const subServer = http.createServer((req, res) => {
if (!selectedSubtitle) {
res.writeHead(400, {'Content-Type': 'text/html'})
return res.end('No subtitles selected')
}
res.writeHead(200, {
'Content-Type': 'text/vtt;charset=utf-8',
'Access-Control-Allow-Origin': '*',
'Transfer-Encoding': 'chunked'
})
} else {
state.playing.location = 'chromecast'
}
update()
})
res.end(Buffer.from(selectedSubtitle.buffer.substr(21), 'base64'))
}).listen(0, function () {
const port = subServer.address().port
const subtitlesUrl = 'http://' + state.server.networkAddress + ':' + port + '/'
cast([subtitlesUrl])
})
}

function cast (subtitles) {
ret.device.play(state.server.networkURL + '/' + state.playing.fileIndex, {
type: 'video/mp4',
title: config.APP_NAME + ' - ' + torrentSummary.name,
subtitles: subtitles,
autoSubtitles: !!subtitles
}, function (err) {
if (err) {
state.playing.location = 'local'
state.errors.push({
time: new Date().getTime(),
message: 'Could not connect to Chromecast. ' + err.message
})
} else {
state.playing.location = 'chromecast'
}
update()
})
}
}

function play (callback) {
Expand Down
3 changes: 2 additions & 1 deletion src/renderer/webtorrent.js
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down

0 comments on commit 2508701

Please sign in to comment.