diff --git a/src/main/windows/about.js b/src/main/windows/about.js index fc16d517..1e6d6dc5 100644 --- a/src/main/windows/about.js +++ b/src/main/windows/about.js @@ -25,7 +25,8 @@ function init () { title: 'About ' + config.APP_WINDOW_TITLE, useContentSize: true, webPreferences: { - nodeIntegration: true + nodeIntegration: true, + enableBlinkFeatures: 'AudioVideoTracks' }, width: 300 }) diff --git a/src/main/windows/main.js b/src/main/windows/main.js index dbfb7d0c..11aad3d0 100644 --- a/src/main/windows/main.js +++ b/src/main/windows/main.js @@ -44,7 +44,8 @@ function init (state, options) { useContentSize: true, // Specify web page size without OS chrome width: initialBounds.width, webPreferences: { - nodeIntegration: true + nodeIntegration: true, + enableBlinkFeatures: 'AudioVideoTracks' }, x: initialBounds.x, y: initialBounds.y diff --git a/src/main/windows/webtorrent.js b/src/main/windows/webtorrent.js index 8c58043b..cd08e225 100644 --- a/src/main/windows/webtorrent.js +++ b/src/main/windows/webtorrent.js @@ -26,7 +26,8 @@ function init () { title: 'webtorrent-hidden-window', useContentSize: true, webPreferences: { - nodeIntegration: true + nodeIntegration: true, + enableBlinkFeatures: 'AudioVideoTracks' }, width: 150 }) diff --git a/src/renderer/pages/player-page.js b/src/renderer/pages/player-page.js index 43f610d6..b9998d13 100644 --- a/src/renderer/pages/player-page.js +++ b/src/renderer/pages/player-page.js @@ -1,5 +1,3 @@ -/* global HTMLMediaElement */ - const React = require('react') const Bitfield = require('bitfield') const prettyBytes = require('prettier-bytes') @@ -130,7 +128,6 @@ function renderMedia (state) { onError={dispatcher('mediaError')} onTimeUpdate={dispatcher('mediaTimeUpdate')} onEncrypted={dispatcher('mediaEncrypted')} - onCanPlay={onCanPlay} > {trackTags} @@ -148,15 +145,38 @@ function renderMedia (state) { ) - // As soon as we know the video dimensions, resize the window function onLoadedMetadata (e) { - if (state.playing.type !== 'video') return - const video = e.target - const dimensions = { - width: video.videoWidth, - height: video.videoHeight + const mediaElement = e.target + + // check if we can decode video and audio track + if (state.playing.type === 'video') { + if (mediaElement.videoTracks.length === 0) { + dispatch('mediaError', 'Video codec unsupported') + } + + if (mediaElement.audioTracks.length === 0) { + dispatch('mediaError', 'Audio codec unsupported') + } + + dispatch('mediaSuccess') + + const dimensions = { + width: mediaElement.videoWidth, + height: mediaElement.videoHeight + } + + // As soon as we know the video dimensions, resize the window + dispatch('setDimensions', dimensions) + } + + // check if we can decode audio track + if (state.playing.type === 'audio') { + if (mediaElement.audioTracks.length === 0) { + dispatch('mediaError', 'Audio codec unsupported') + } + + dispatch('mediaSuccess') } - dispatch('setDimensions', dimensions) } function onEnded (e) { @@ -168,20 +188,6 @@ function renderMedia (state) { if (state.window.isFullScreen) dispatch('toggleFullScreen') } } - - function onCanPlay (e) { - const elem = e.target - if (elem.readyState < HTMLMediaElement.HAVE_FUTURE_DATA) return - if (state.playing.type === 'video' && - elem.webkitVideoDecodedByteCount === 0) { - dispatch('mediaError', 'Video codec unsupported') - } else if (elem.webkitAudioDecodedByteCount === 0) { - dispatch('mediaError', 'Audio codec unsupported') - } else { - dispatch('mediaSuccess') - elem.play() - } - } } function renderOverlay (state) {