Migrate video player from video.js to shaka-player (#4978)
* Migrate video player from video.js to shaka-player * Fix syntax error introduced during cleanup * Fix typo Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com> * Show bitrate in stats for Invidious legacy formats * Sort legacy formats by bitrate instead of qualityLabel * Use Invidious' newly added isPostLiveDvr property * Invidious correctly returns the ratelimit for DASH manifests now * Properly hide unsupported screenshot functionality outside of Electron * Sort captions in data initialiser * Update shaka-player to version 4.8.1 * Use textTrackLabelFormat configuration option * Switch to manifestPreprocessorTXml * Add support for VR videos that use equirectangular projection * The AV1 video streams work okay for vr, so allow list them too * Use woff2 (169 KB) Material Icons font instead of otf (390 KB) * Use material icons for custom player elements * Fix legacy formats exception * Update shaka-player to version 4.8.3 * Sort default quality values the same as in the player * Cleanup representations search in live subtitle fix * Slightly speed up sortCaptions * Fix setPositionState error when playback rate is 0 * Update shaka-player to version 4.8.4 * Fix playback rate changes getting overridden * Fix current chapter index not updating * Fix next video not automatically playing * Fix volume changes not propagating to the mute button * Reduce work done during UI config updates * Fix UI customizations not applying after UI config changes * Update shaka-player to version 4.8.5 * Replace non-reactive workaround with a Vue 3 friendly one * Fix error when all sponsorblock segments are set to do nothing * Add some guards to hopefully reduce errors during fast naviagtions * Make SponsorBlock failure non-fatal * Update shaka-player to version 4.8.6 * Update shaka-player to version 4.8.8 * Update shaka-player to version 4.9.0 * Update shaka-player to version 4.9.1 * Minor performance improvements * Update shaka-player to version 4.9.6 * Update shaka-player to version 4.9.9 * Fix sponsor block markers not showing up * Add some basic error messages for expired urls and ratelimits * Add some basic error messages for 403s * Cleanup code comments * Migrate player to composition API for better performance * Use reactive for stats instead of ref, as it never gets reassigned * Update shaka-player to version 4.10.0 * Fix i18n import in custom player components * Add chapter markers * Move shaka-player CSS import into the Vue file * Bump mpd_version from 5 to 7 * Apply suggestions from code review Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com> * Fix seeking with the arrow keys * Update shaka-player to version 4.10.3 * Truncate long video titles to the screen width in the full screen overlay * Fix mouse scroll handlers firing multiple times * Cleanup unneeded code * Update shaka-player to version 4.10.6 * Various small optimisations * Move skipped sponsorblock segement messages to the top right corner * Support prefers-reduced-transparency in overlays * Fix stylelint errors * Update shaka-player to version 4.10.7 * Update shaka-player to version 4.10.8 * Only use variants that are predicted to play smoothly * Only set preferredDecodingAttributes for DASH playback * Implement a custom audio track selector instead of using shaka-player's * Move skipped sponsorblock segement messages to the bottom right corner * Fix scrolling over the big play pause button not working * Update shaka-player to version 4.10.9 * Fix some type issues * Add support for secondary audio tracks * Downgrade shaka-player to fix subtitle alignment * Actually downgrade shaka-player * Fix Invidious API error * Update outdated comment * Fix multiple audio track detection for Invidious * Fix duplicate qualities with the Invidious API * Use vp9 streams if the Invidious instance is running a new enough version * When an error occurs with the thumbnails just log it * Include the video ID in the error logs * Gracefully handle the internet connection disappearing during playback * Show a message while buffering if it was caused by the internet connection disappearing * Fix the text color and RTL handling * Cleanup the Invidious DASH manifest in builds without the local API * Fix quality selection when switching from audio to DASH Unfortunately shaka-player will still override the quality selections with its ABR bug. * Update shaka-player to version 4.10.10 * Fix position and alignment for auto-generated subtitles * Update shaka-player to version 4.10.11 * Use the HLS manifests for live streams The live DASH manifests are currently unusable on both API backends as they return 403s after 1 minute of playback. Unfortunately this means we lose the ability to seek and use the audio formats for live streams. * Update shaka-player to version 4.10.12 --------- Co-authored-by: ChunkyProgrammer <78101139+ChunkyProgrammer@users.noreply.github.com>
This commit is contained in:
parent
fa901d319d
commit
b3ff837468
@ -26,7 +26,7 @@
|
|||||||
"selector-pseudo-class-no-unknown": [
|
"selector-pseudo-class-no-unknown": [
|
||||||
true,
|
true,
|
||||||
{
|
{
|
||||||
"ignorePseudoClasses": ["deep"]
|
"ignorePseudoClasses": ["deep", "global"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"a11y/no-outline-none": true,
|
"a11y/no-outline-none": true,
|
||||||
|
@ -1,5 +0,0 @@
|
|||||||
const DOMParser = window.DOMParser
|
|
||||||
|
|
||||||
export {
|
|
||||||
DOMParser
|
|
||||||
}
|
|
@ -19,10 +19,14 @@ const web = process.argv.indexOf('--web') !== -1
|
|||||||
let mainConfig
|
let mainConfig
|
||||||
let rendererConfig
|
let rendererConfig
|
||||||
let webConfig
|
let webConfig
|
||||||
|
let SHAKA_LOCALES_TO_BE_BUNDLED
|
||||||
|
|
||||||
if (!web) {
|
if (!web) {
|
||||||
mainConfig = require('./webpack.main.config')
|
mainConfig = require('./webpack.main.config')
|
||||||
rendererConfig = require('./webpack.renderer.config')
|
rendererConfig = require('./webpack.renderer.config')
|
||||||
|
|
||||||
|
SHAKA_LOCALES_TO_BE_BUNDLED = rendererConfig.SHAKA_LOCALES_TO_BE_BUNDLED
|
||||||
|
delete rendererConfig.SHAKA_LOCALES_TO_BE_BUNDLED
|
||||||
} else {
|
} else {
|
||||||
webConfig = require('./webpack.web.config')
|
webConfig = require('./webpack.web.config')
|
||||||
}
|
}
|
||||||
@ -128,17 +132,27 @@ function startRenderer(callback) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
const server = new WebpackDevServer({
|
const server = new WebpackDevServer({
|
||||||
static: {
|
static: [
|
||||||
directory: path.resolve(__dirname, '..', 'static'),
|
{
|
||||||
watch: {
|
directory: path.resolve(__dirname, '..', 'static'),
|
||||||
ignored: [
|
watch: {
|
||||||
/(dashFiles|storyboards)\/*/,
|
ignored: [
|
||||||
'/**/.DS_Store',
|
/(dashFiles|storyboards)\/*/,
|
||||||
'**/static/locales/*'
|
'/**/.DS_Store',
|
||||||
]
|
'**/static/locales/*'
|
||||||
|
]
|
||||||
|
},
|
||||||
|
publicPath: '/static'
|
||||||
},
|
},
|
||||||
publicPath: '/static'
|
{
|
||||||
},
|
directory: path.resolve(__dirname, '..', 'node_modules', 'shaka-player', 'ui', 'locales'),
|
||||||
|
publicPath: '/static/shaka-player-locales',
|
||||||
|
watch: {
|
||||||
|
// Ignore everything that isn't one of the locales that we would bundle in production mode
|
||||||
|
ignored: `**/!(${SHAKA_LOCALES_TO_BE_BUNDLED.join('|')}).json`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
port
|
port
|
||||||
}, compiler)
|
}, compiler)
|
||||||
|
|
||||||
|
114
_scripts/getShakaLocales.js
Normal file
114
_scripts/getShakaLocales.js
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
const { readFileSync, readdirSync } = require('fs')
|
||||||
|
|
||||||
|
function getPreloadedLocales() {
|
||||||
|
const localesFile = readFileSync(`${__dirname}/../node_modules/shaka-player/dist/locales.js`, 'utf-8')
|
||||||
|
|
||||||
|
const localesLine = localesFile.match(/^\/\/ LOCALES: ([\w, -]+)$/m)
|
||||||
|
|
||||||
|
if (!localesLine) {
|
||||||
|
throw new Error("Failed to parse shaka-player's preloaded locales")
|
||||||
|
}
|
||||||
|
|
||||||
|
return localesLine[1].split(',').map(locale => locale.trim())
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAllLocales() {
|
||||||
|
const filenames = readdirSync(`${__dirname}/../node_modules/shaka-player/ui/locales`)
|
||||||
|
|
||||||
|
return new Set(filenames
|
||||||
|
.filter(filename => filename !== 'source.json' && filename.endsWith('.json'))
|
||||||
|
.map(filename => filename.replace('.json', '')))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Maps the shaka locales to FreeTube's active ones
|
||||||
|
* This allows us to know which locale files are actually needed
|
||||||
|
* and which shaka locale needs to be activated for a given FreeTube one.
|
||||||
|
* @param {Set<string>} shakaLocales
|
||||||
|
* @param {string[]} freeTubeLocales
|
||||||
|
*/
|
||||||
|
function getMappings(shakaLocales, freeTubeLocales) {
|
||||||
|
/**
|
||||||
|
* @type {[string, string][]}
|
||||||
|
* Using this structure as it gets passed to `new Map()` in the player component
|
||||||
|
* The first element is the FreeTube locale, the second one is the shaka-player one
|
||||||
|
**/
|
||||||
|
const mappings = []
|
||||||
|
|
||||||
|
for (const locale of freeTubeLocales) {
|
||||||
|
if (shakaLocales.has(locale)) {
|
||||||
|
mappings.push([
|
||||||
|
locale,
|
||||||
|
locale
|
||||||
|
])
|
||||||
|
} else if (shakaLocales.has(locale.replace('_', '-'))) {
|
||||||
|
mappings.push([
|
||||||
|
locale,
|
||||||
|
locale.replace('_', '-')
|
||||||
|
])
|
||||||
|
} else if (shakaLocales.has(locale.split(/[-_]/)[0])) {
|
||||||
|
mappings.push([
|
||||||
|
locale,
|
||||||
|
locale.split(/[-_]/)[0]
|
||||||
|
])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// special cases
|
||||||
|
|
||||||
|
mappings.push(
|
||||||
|
// according to https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||||
|
// "no" is the macro language for "nb" and "nn"
|
||||||
|
[
|
||||||
|
'nb_NO',
|
||||||
|
'no'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'nn',
|
||||||
|
'no'
|
||||||
|
],
|
||||||
|
|
||||||
|
// according to https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
|
||||||
|
// "iw" is the old/original code for Hebrew, these days it's "he"
|
||||||
|
[
|
||||||
|
'he',
|
||||||
|
'iw'
|
||||||
|
],
|
||||||
|
|
||||||
|
// not sure why we have pt, pt-PT and pt-BR in the FreeTube locales
|
||||||
|
// as pt and pt-PT are the same thing, but we should handle it here anyway
|
||||||
|
[
|
||||||
|
'pt',
|
||||||
|
'pt-PT'
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
return mappings
|
||||||
|
}
|
||||||
|
|
||||||
|
function getShakaLocales() {
|
||||||
|
const shakaLocales = getAllLocales()
|
||||||
|
|
||||||
|
/** @type {string[]} */
|
||||||
|
const freeTubeLocales = JSON.parse(readFileSync(`${__dirname}/../static/locales/activeLocales.json`, 'utf-8'))
|
||||||
|
|
||||||
|
const mappings = getMappings(shakaLocales, freeTubeLocales)
|
||||||
|
|
||||||
|
const preloaded = getPreloadedLocales()
|
||||||
|
|
||||||
|
const shakaMappings = mappings.map(mapping => mapping[1])
|
||||||
|
|
||||||
|
// use a set to deduplicate the list
|
||||||
|
// we don't need to bundle any locale files that are already embedded in shaka-player/preloaded
|
||||||
|
|
||||||
|
/** @type {string[]} */
|
||||||
|
const toBeBundled = [...new Set(shakaMappings.filter(locale => !preloaded.includes(locale)))]
|
||||||
|
|
||||||
|
return {
|
||||||
|
SHAKA_LOCALE_MAPPINGS: mappings,
|
||||||
|
SHAKA_LOCALES_PREBUNDLED: preloaded,
|
||||||
|
SHAKA_LOCALES_TO_BE_BUNDLED: toBeBundled
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = getShakaLocales()
|
135
_scripts/patchShaka.mjs
Normal file
135
_scripts/patchShaka.mjs
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
// This script fixes shaka not exporting its type definitions and referencing remote google fonts in its CSS
|
||||||
|
// by adding an export line to the type definitions and downloading the fonts and updating the CSS to point to the local files
|
||||||
|
// this script only makes changes if they are needed, so running it multiple times doesn't cause any problems
|
||||||
|
|
||||||
|
import { appendFileSync, closeSync, ftruncateSync, openSync, readFileSync, writeFileSync, writeSync } from 'fs'
|
||||||
|
import { resolve } from 'path'
|
||||||
|
|
||||||
|
const SHAKA_DIST_DIR = resolve(import.meta.dirname, '../node_modules/shaka-player/dist')
|
||||||
|
|
||||||
|
function fixTypes() {
|
||||||
|
let fixedTypes = false
|
||||||
|
|
||||||
|
let fileHandleNormal
|
||||||
|
try {
|
||||||
|
fileHandleNormal = openSync(`${SHAKA_DIST_DIR}/shaka-player.ui.d.ts`, 'a+')
|
||||||
|
|
||||||
|
const contents = readFileSync(fileHandleNormal, 'utf-8')
|
||||||
|
|
||||||
|
// This script is run after every `yarn install`, even if shaka-player wasn't updated
|
||||||
|
// So we want to check first, if we actually need to make any changes
|
||||||
|
// or if the ones from the previous run are still intact
|
||||||
|
if (!contents.includes('export default shaka')) {
|
||||||
|
appendFileSync(fileHandleNormal, 'export default shaka;\n')
|
||||||
|
|
||||||
|
fixedTypes = true
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (typeof fileHandleNormal !== 'undefined') {
|
||||||
|
closeSync(fileHandleNormal)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let fileHandleDebug
|
||||||
|
try {
|
||||||
|
fileHandleDebug = openSync(`${SHAKA_DIST_DIR}/shaka-player.ui.debug.d.ts`, 'a+')
|
||||||
|
|
||||||
|
const contents = readFileSync(fileHandleDebug, 'utf-8')
|
||||||
|
|
||||||
|
// This script is run after every `yarn install`, even if shaka-player wasn't updated
|
||||||
|
// So we want to check first, if we actually need to make any changes
|
||||||
|
// or if the ones from the previous run are still intact
|
||||||
|
if (!contents.includes('export default shaka')) {
|
||||||
|
appendFileSync(fileHandleDebug, 'export default shaka;\n')
|
||||||
|
|
||||||
|
fixedTypes = true
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (typeof fileHandleDebug !== 'undefined') {
|
||||||
|
closeSync(fileHandleDebug)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fixedTypes) {
|
||||||
|
console.log('Fixed shaka-player types')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function removeRobotoFont() {
|
||||||
|
let cssFileHandle
|
||||||
|
try {
|
||||||
|
cssFileHandle = openSync(`${SHAKA_DIST_DIR}/controls.css`, 'r+')
|
||||||
|
|
||||||
|
let cssContents = readFileSync(cssFileHandle, 'utf-8')
|
||||||
|
|
||||||
|
const beforeReplacement = cssContents.length
|
||||||
|
cssContents = cssContents.replace(/@font-face\{font-family:Roboto;[^}]+\}/, '')
|
||||||
|
|
||||||
|
if (cssContents.length !== beforeReplacement) {
|
||||||
|
ftruncateSync(cssFileHandle)
|
||||||
|
writeSync(cssFileHandle, cssContents, 0, 'utf-8')
|
||||||
|
|
||||||
|
console.log('Removed shaka-player Roboto font, so it uses ours')
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
if (typeof cssFileHandle !== 'undefined') {
|
||||||
|
closeSync(cssFileHandle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function replaceAndDownloadMaterialIconsFont() {
|
||||||
|
let cssFileHandle
|
||||||
|
try {
|
||||||
|
cssFileHandle = openSync(`${SHAKA_DIST_DIR}/controls.css`, 'r+')
|
||||||
|
|
||||||
|
let cssContents = readFileSync(cssFileHandle, 'utf-8')
|
||||||
|
|
||||||
|
const fontFaceRegex = /@font-face{font-family:'Material Icons Round'[^}]+format\('opentype'\)}/
|
||||||
|
|
||||||
|
if (fontFaceRegex.test(cssContents)) {
|
||||||
|
const cssResponse = await fetch('https://fonts.googleapis.com/icon?family=Material+Icons+Round', {
|
||||||
|
headers: {
|
||||||
|
// Without the user-agent it returns the otf file instead of the woff2 one
|
||||||
|
'user-agent': 'Firefox/125.0'
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const text = await cssResponse.text()
|
||||||
|
|
||||||
|
let newFontCSS = text.match(/(@font-face\s*{[^}]+})/)[1].replaceAll('\n', '')
|
||||||
|
|
||||||
|
|
||||||
|
const urlMatch = newFontCSS.match(/https:\/\/fonts\.gstatic\.com\/s\/materialiconsround\/(?<version>[^\/]+)\/[^.]+\.(?<extension>[\w]+)/)
|
||||||
|
|
||||||
|
const url = urlMatch[0]
|
||||||
|
const { version, extension } = urlMatch.groups
|
||||||
|
|
||||||
|
const fontResponse = await fetch(url)
|
||||||
|
const fontContent = new Uint8Array(await fontResponse.arrayBuffer())
|
||||||
|
|
||||||
|
const filename = `shaka-materialiconsround-${version}.${extension}`
|
||||||
|
writeFileSync(`${SHAKA_DIST_DIR}/${filename}`, fontContent)
|
||||||
|
|
||||||
|
newFontCSS = newFontCSS.replace(url, `./${filename}`)
|
||||||
|
|
||||||
|
cssContents = cssContents.replace(fontFaceRegex, newFontCSS)
|
||||||
|
|
||||||
|
ftruncateSync(cssFileHandle)
|
||||||
|
writeSync(cssFileHandle, cssContents, 0, 'utf-8')
|
||||||
|
|
||||||
|
console.log('Changed shaka-player Material Icons Rounded font to use the smaller woff2 format instead of otf')
|
||||||
|
console.log('Downloaded shaka-player Material Icons Rounded font')
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e)
|
||||||
|
} finally {
|
||||||
|
if (typeof cssFileHandle !== 'undefined') {
|
||||||
|
closeSync(cssFileHandle)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fixTypes()
|
||||||
|
await removeRobotoFont()
|
||||||
|
await replaceAndDownloadMaterialIconsFont()
|
@ -7,6 +7,11 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
|||||||
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
|
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
|
||||||
const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
|
const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
|
||||||
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
const CopyWebpackPlugin = require('copy-webpack-plugin')
|
||||||
|
const {
|
||||||
|
SHAKA_LOCALE_MAPPINGS,
|
||||||
|
SHAKA_LOCALES_PREBUNDLED,
|
||||||
|
SHAKA_LOCALES_TO_BE_BUNDLED
|
||||||
|
} = require('./getShakaLocales')
|
||||||
|
|
||||||
const isDevMode = process.env.NODE_ENV === 'development'
|
const isDevMode = process.env.NODE_ENV === 'development'
|
||||||
|
|
||||||
@ -122,7 +127,9 @@ const config = {
|
|||||||
'process.env.SUPPORTS_LOCAL_API': true,
|
'process.env.SUPPORTS_LOCAL_API': true,
|
||||||
'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames),
|
'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames),
|
||||||
'process.env.GEOLOCATION_NAMES': JSON.stringify(readdirSync(path.join(__dirname, '..', 'static', 'geolocations')).map(filename => filename.replace('.json', ''))),
|
'process.env.GEOLOCATION_NAMES': JSON.stringify(readdirSync(path.join(__dirname, '..', 'static', 'geolocations')).map(filename => filename.replace('.json', ''))),
|
||||||
'process.env.SWIPER_VERSION': `'${swiperVersion}'`
|
'process.env.SWIPER_VERSION': `'${swiperVersion}'`,
|
||||||
|
'process.env.SHAKA_LOCALE_MAPPINGS': JSON.stringify(SHAKA_LOCALE_MAPPINGS),
|
||||||
|
'process.env.SHAKA_LOCALES_PREBUNDLED': JSON.stringify(SHAKA_LOCALES_PREBUNDLED)
|
||||||
}),
|
}),
|
||||||
new HtmlWebpackPlugin({
|
new HtmlWebpackPlugin({
|
||||||
excludeChunks: ['processTaskWorker'],
|
excludeChunks: ['processTaskWorker'],
|
||||||
@ -143,7 +150,21 @@ const config = {
|
|||||||
transformAll: (assets) => {
|
transformAll: (assets) => {
|
||||||
return Buffer.concat(assets.map(asset => asset.data))
|
return Buffer.concat(assets.map(asset => asset.data))
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
// Don't need to copy them in dev mode,
|
||||||
|
// as we configure WebpackDevServer to serve them
|
||||||
|
...(isDevMode ? [] : [
|
||||||
|
{
|
||||||
|
from: path.join(__dirname, '../node_modules/shaka-player/ui/locales', `{${SHAKA_LOCALES_TO_BE_BUNDLED.join(',')}}.json`).replaceAll('\\', '/'),
|
||||||
|
to: path.join(__dirname, '../dist/static/shaka-player-locales'),
|
||||||
|
context: path.join(__dirname, '../node_modules/shaka-player/ui/locales'),
|
||||||
|
transform: {
|
||||||
|
transformer: (input) => {
|
||||||
|
return JSON.stringify(JSON.parse(input.toString('utf-8')))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
])
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
],
|
],
|
||||||
@ -156,14 +177,18 @@ const config = {
|
|||||||
|
|
||||||
'youtubei.js$': 'youtubei.js/web',
|
'youtubei.js$': 'youtubei.js/web',
|
||||||
|
|
||||||
// video.js's mpd-parser uses @xmldom/xmldom so that it can support both node and web browsers
|
// change to "shaka-player.ui.debug.js" to get debug logs (update jsconfig to get updated types)
|
||||||
// as FreeTube only runs in electron and web browsers we can use the native DOMParser class, instead of the "polyfill"
|
'shaka-player$': 'shaka-player/dist/shaka-player.ui.js',
|
||||||
// https://caniuse.com/mdn-api_domparser
|
|
||||||
'@xmldom/xmldom$': path.resolve(__dirname, '_domParser.js')
|
|
||||||
},
|
},
|
||||||
extensions: ['.js', '.vue']
|
extensions: ['.js', '.vue']
|
||||||
},
|
},
|
||||||
target: 'electron-renderer',
|
target: 'electron-renderer',
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isDevMode) {
|
||||||
|
// hack to pass it through to the dev-runner.js script
|
||||||
|
// gets removed there before the config object is passed to webpack
|
||||||
|
config.SHAKA_LOCALES_TO_BE_BUNDLED = SHAKA_LOCALES_TO_BE_BUNDLED
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = config
|
module.exports = config
|
||||||
|
@ -8,6 +8,11 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
|||||||
const JsonMinimizerPlugin = require('json-minimizer-webpack-plugin')
|
const JsonMinimizerPlugin = require('json-minimizer-webpack-plugin')
|
||||||
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
|
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
|
||||||
const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
|
const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
|
||||||
|
const {
|
||||||
|
SHAKA_LOCALE_MAPPINGS,
|
||||||
|
SHAKA_LOCALES_PREBUNDLED,
|
||||||
|
SHAKA_LOCALES_TO_BE_BUNDLED
|
||||||
|
} = require('./getShakaLocales')
|
||||||
|
|
||||||
const isDevMode = process.env.NODE_ENV === 'development'
|
const isDevMode = process.env.NODE_ENV === 'development'
|
||||||
|
|
||||||
@ -116,19 +121,7 @@ const config = {
|
|||||||
'process.env.IS_ELECTRON': false,
|
'process.env.IS_ELECTRON': false,
|
||||||
'process.env.IS_ELECTRON_MAIN': false,
|
'process.env.IS_ELECTRON_MAIN': false,
|
||||||
'process.env.SUPPORTS_LOCAL_API': false,
|
'process.env.SUPPORTS_LOCAL_API': false,
|
||||||
'process.env.SWIPER_VERSION': `'${swiperVersion}'`,
|
'process.env.SWIPER_VERSION': `'${swiperVersion}'`
|
||||||
|
|
||||||
// video.js' vhs-utils supports both atob() in web browsers and Buffer in node
|
|
||||||
// As the FreeTube web build only runs in web browsers, we can override their check for atob() here: https://github.com/videojs/vhs-utils/blob/main/src/decode-b64-to-uint8-array.js#L3
|
|
||||||
// overriding that check means we don't need to include a Buffer polyfill
|
|
||||||
// https://caniuse.com/atob-btoa
|
|
||||||
|
|
||||||
// NOTE FOR THE FUTURE: this override won't work with vite as their define does a find and replace in the code for production builds,
|
|
||||||
// but uses globals in development builds to save build time, so this would replace the actual atob() function with true if used with vite
|
|
||||||
// this works in webpack as webpack does a find and replace in the source code for both development and production builds
|
|
||||||
// https://vitejs.dev/config/shared-options.html#define
|
|
||||||
// https://webpack.js.org/plugins/define-plugin/
|
|
||||||
'window.atob': true
|
|
||||||
}),
|
}),
|
||||||
new webpack.ProvidePlugin({
|
new webpack.ProvidePlugin({
|
||||||
process: 'process/browser'
|
process: 'process/browser'
|
||||||
@ -163,10 +156,8 @@ const config = {
|
|||||||
|
|
||||||
DB_HANDLERS_ELECTRON_RENDERER_OR_WEB$: path.resolve(__dirname, '../src/datastores/handlers/web.js'),
|
DB_HANDLERS_ELECTRON_RENDERER_OR_WEB$: path.resolve(__dirname, '../src/datastores/handlers/web.js'),
|
||||||
|
|
||||||
// video.js's mpd-parser uses @xmldom/xmldom so that it can support both node and web browsers
|
// change to "shaka-player.ui.debug.js" to get debug logs (update jsconfig to get updated types)
|
||||||
// As FreeTube only runs in electron and web browsers, we can use the native DOMParser class, instead of the "polyfill"
|
'shaka-player$': 'shaka-player/dist/shaka-player.ui.js',
|
||||||
// https://caniuse.com/mdn-api_domparser
|
|
||||||
'@xmldom/xmldom$': path.resolve(__dirname, '_domParser.js')
|
|
||||||
},
|
},
|
||||||
fallback: {
|
fallback: {
|
||||||
'fs/promises': path.resolve(__dirname, '_empty.js'),
|
'fs/promises': path.resolve(__dirname, '_empty.js'),
|
||||||
@ -188,7 +179,9 @@ config.plugins.push(
|
|||||||
processLocalesPlugin,
|
processLocalesPlugin,
|
||||||
new webpack.DefinePlugin({
|
new webpack.DefinePlugin({
|
||||||
'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames),
|
'process.env.LOCALE_NAMES': JSON.stringify(processLocalesPlugin.localeNames),
|
||||||
'process.env.GEOLOCATION_NAMES': JSON.stringify(fs.readdirSync(path.join(__dirname, '..', 'static', 'geolocations')).map(filename => filename.replace('.json', '')))
|
'process.env.GEOLOCATION_NAMES': JSON.stringify(fs.readdirSync(path.join(__dirname, '..', 'static', 'geolocations')).map(filename => filename.replace('.json', ''))),
|
||||||
|
'process.env.SHAKA_LOCALE_MAPPINGS': JSON.stringify(SHAKA_LOCALE_MAPPINGS),
|
||||||
|
'process.env.SHAKA_LOCALES_PREBUNDLED': JSON.stringify(SHAKA_LOCALES_PREBUNDLED)
|
||||||
}),
|
}),
|
||||||
new CopyWebpackPlugin({
|
new CopyWebpackPlugin({
|
||||||
patterns: [
|
patterns: [
|
||||||
@ -203,7 +196,12 @@ config.plugins.push(
|
|||||||
dot: true,
|
dot: true,
|
||||||
ignore: ['**/.*', '**/locales/**', '**/pwabuilder-sw.js', '**/dashFiles/**', '**/storyboards/**'],
|
ignore: ['**/.*', '**/locales/**', '**/pwabuilder-sw.js', '**/dashFiles/**', '**/storyboards/**'],
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
from: path.join(__dirname, '../node_modules/shaka-player/ui/locales', `{${SHAKA_LOCALES_TO_BE_BUNDLED.join(',')}}.json`).replaceAll('\\', '/'),
|
||||||
|
to: path.join(__dirname, '../dist/web/static/shaka-player-locales'),
|
||||||
|
context: path.join(__dirname, '../node_modules/shaka-player/ui/locales')
|
||||||
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
@ -9,6 +9,9 @@
|
|||||||
"DB_HANDLERS_ELECTRON_RENDERER_OR_WEB": [
|
"DB_HANDLERS_ELECTRON_RENDERER_OR_WEB": [
|
||||||
"src/datastores/handlers/electron",
|
"src/datastores/handlers/electron",
|
||||||
"src/datastores/handlers/web"
|
"src/datastores/handlers/web"
|
||||||
|
],
|
||||||
|
"shaka-player": [
|
||||||
|
"./node_modules/shaka-player/dist/shaka-player.ui"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
21
package.json
21
package.json
@ -19,19 +19,20 @@
|
|||||||
"url": "https://github.com/FreeTubeApp/FreeTube/issues"
|
"url": "https://github.com/FreeTubeApp/FreeTube/issues"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "run-s rebuild:electron pack build-release",
|
"build": "run-s rebuild:electron patch-shaka pack build-release",
|
||||||
"build:arm64": "run-s rebuild:electron pack build-release:arm64",
|
"build:arm64": "run-s rebuild:electron patch-shaka pack build-release:arm64",
|
||||||
"build:arm32": "run-s rebuild:electron pack build-release:arm32",
|
"build:arm32": "run-s rebuild:electron patch-shaka pack build-release:arm32",
|
||||||
"build-release": "node _scripts/build.js",
|
"build-release": "node _scripts/build.js",
|
||||||
"build-release:arm64": "node _scripts/build.js arm64",
|
"build-release:arm64": "node _scripts/build.js arm64",
|
||||||
"build-release:arm32": "node _scripts/build.js arm32",
|
"build-release:arm32": "node _scripts/build.js arm32",
|
||||||
"clean": "rimraf build/ dist/",
|
"clean": "rimraf build/ dist/",
|
||||||
"debug": "run-s rebuild:electron debug-runner",
|
"debug": "run-s rebuild:electron patch-shaka debug-runner",
|
||||||
"debug-runner": "node _scripts/dev-runner.js --remote-debug",
|
"debug-runner": "node _scripts/dev-runner.js --remote-debug",
|
||||||
"dev": "run-s rebuild:electron dev-runner",
|
"dev": "run-s rebuild:electron patch-shaka dev-runner",
|
||||||
"dev:web": "node _scripts/dev-runner.js --web",
|
"dev:web": "node _scripts/dev-runner.js --web",
|
||||||
"dev-runner": "node _scripts/dev-runner.js",
|
"dev-runner": "node _scripts/dev-runner.js",
|
||||||
"get-instances": "node _scripts/getInstances.js",
|
"get-instances": "node _scripts/getInstances.js",
|
||||||
|
"patch-shaka": "node _scripts/patchShaka.mjs",
|
||||||
"get-regions": "node _scripts/getRegions.mjs",
|
"get-regions": "node _scripts/getRegions.mjs",
|
||||||
"lint-all": "run-p lint lint-json",
|
"lint-all": "run-p lint lint-json",
|
||||||
"lint": "run-p eslint-lint lint-style",
|
"lint": "run-p eslint-lint lint-style",
|
||||||
@ -46,7 +47,7 @@
|
|||||||
"pack:main": "webpack --mode=production --node-env=production --config _scripts/webpack.main.config.js",
|
"pack:main": "webpack --mode=production --node-env=production --config _scripts/webpack.main.config.js",
|
||||||
"pack:renderer": "webpack --mode=production --node-env=production --config _scripts/webpack.renderer.config.js",
|
"pack:renderer": "webpack --mode=production --node-env=production --config _scripts/webpack.renderer.config.js",
|
||||||
"pack:web": "webpack --mode=production --node-env=production --config _scripts/webpack.web.config.js",
|
"pack:web": "webpack --mode=production --node-env=production --config _scripts/webpack.web.config.js",
|
||||||
"postinstall": "yarn run --silent rebuild:electron",
|
"postinstall": "run-s --silent rebuild:electron patch-shaka",
|
||||||
"prettier": "prettier --write \"{src,_scripts}/**/*.{js,vue}\"",
|
"prettier": "prettier --write \"{src,_scripts}/**/*.{js,vue}\"",
|
||||||
"rebuild:electron": "electron-builder install-app-deps",
|
"rebuild:electron": "electron-builder install-app-deps",
|
||||||
"release": "run-s test build",
|
"release": "run-s test build",
|
||||||
@ -59,7 +60,6 @@
|
|||||||
"@fortawesome/free-solid-svg-icons": "^6.6.0",
|
"@fortawesome/free-solid-svg-icons": "^6.6.0",
|
||||||
"@fortawesome/vue-fontawesome": "^2.0.10",
|
"@fortawesome/vue-fontawesome": "^2.0.10",
|
||||||
"@seald-io/nedb": "^4.0.4",
|
"@seald-io/nedb": "^4.0.4",
|
||||||
"@silvermine/videojs-quality-selector": "^1.3.1",
|
|
||||||
"autolinker": "^4.0.0",
|
"autolinker": "^4.0.0",
|
||||||
"electron-context-menu": "^4.0.4",
|
"electron-context-menu": "^4.0.4",
|
||||||
"lodash.debounce": "^4.0.8",
|
"lodash.debounce": "^4.0.8",
|
||||||
@ -67,13 +67,8 @@
|
|||||||
"path-browserify": "^1.0.1",
|
"path-browserify": "^1.0.1",
|
||||||
"portal-vue": "^2.1.7",
|
"portal-vue": "^2.1.7",
|
||||||
"process": "^0.11.10",
|
"process": "^0.11.10",
|
||||||
|
"shaka-player": "^4.10.12",
|
||||||
"swiper": "^11.1.10",
|
"swiper": "^11.1.10",
|
||||||
"video.js": "7.21.5",
|
|
||||||
"videojs-contrib-quality-levels": "^3.0.0",
|
|
||||||
"videojs-http-source-selector": "^1.1.6",
|
|
||||||
"videojs-mobile-ui": "^0.8.0",
|
|
||||||
"videojs-overlay": "^3.1.0",
|
|
||||||
"videojs-vtt-thumbnails-freetube": "0.0.15",
|
|
||||||
"vue": "^2.7.16",
|
"vue": "^2.7.16",
|
||||||
"vue-i18n": "^8.28.2",
|
"vue-i18n": "^8.28.2",
|
||||||
"vue-observe-visibility": "^1.0.0",
|
"vue-observe-visibility": "^1.0.0",
|
||||||
|
@ -34,8 +34,6 @@ const IpcChannels = {
|
|||||||
GET_REPLACE_HTTP_CACHE: 'get-replace-http-cache',
|
GET_REPLACE_HTTP_CACHE: 'get-replace-http-cache',
|
||||||
TOGGLE_REPLACE_HTTP_CACHE: 'toggle-replace-http-cache',
|
TOGGLE_REPLACE_HTTP_CACHE: 'toggle-replace-http-cache',
|
||||||
|
|
||||||
SHOW_VIDEO_STATISTICS: 'show-video-statistics',
|
|
||||||
|
|
||||||
PLAYER_CACHE_GET: 'player-cache-get',
|
PLAYER_CACHE_GET: 'player-cache-get',
|
||||||
PLAYER_CACHE_SET: 'player-cache-set',
|
PLAYER_CACHE_SET: 'player-cache-set',
|
||||||
|
|
||||||
|
@ -57,13 +57,6 @@ function runApp() {
|
|||||||
showSelectAll: false,
|
showSelectAll: false,
|
||||||
showCopyLink: false,
|
showCopyLink: false,
|
||||||
prepend: (defaultActions, parameters, browserWindow) => [
|
prepend: (defaultActions, parameters, browserWindow) => [
|
||||||
{
|
|
||||||
label: 'Show / Hide Video Statistics',
|
|
||||||
visible: parameters.mediaType === 'video',
|
|
||||||
click: () => {
|
|
||||||
browserWindow.webContents.send(IpcChannels.SHOW_VIDEO_STATISTICS)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
label: 'Open in a New Window',
|
label: 'Open in a New Window',
|
||||||
// Only show the option for in-app URLs and not external ones
|
// Only show the option for in-app URLs and not external ones
|
||||||
@ -407,7 +400,7 @@ function runApp() {
|
|||||||
urls: ['https://*/*', 'http://*/*'],
|
urls: ['https://*/*', 'http://*/*'],
|
||||||
types: ['xhr', 'media', 'image']
|
types: ['xhr', 'media', 'image']
|
||||||
}
|
}
|
||||||
session.defaultSession.webRequest.onBeforeSendHeaders(onBeforeSendHeadersRequestFilter, ({ requestHeaders, url, resourceType, webContents }, callback) => {
|
session.defaultSession.webRequest.onBeforeSendHeaders(onBeforeSendHeadersRequestFilter, ({ requestHeaders, url, webContents }, callback) => {
|
||||||
const urlObj = new URL(url)
|
const urlObj = new URL(url)
|
||||||
|
|
||||||
if (url.startsWith('https://www.youtube.com/youtubei/')) {
|
if (url.startsWith('https://www.youtube.com/youtubei/')) {
|
||||||
@ -440,38 +433,6 @@ function runApp() {
|
|||||||
|
|
||||||
// YouTube doesn't send the Content-Type header for the media requests, so we shouldn't either
|
// YouTube doesn't send the Content-Type header for the media requests, so we shouldn't either
|
||||||
delete requestHeaders['Content-Type']
|
delete requestHeaders['Content-Type']
|
||||||
|
|
||||||
// YouTube throttles the adaptive formats if you request a chunk larger than 10MiB.
|
|
||||||
// For the DASH formats we are fine as video.js doesn't seem to ever request chunks that big.
|
|
||||||
// The legacy formats don't have any chunk size limits.
|
|
||||||
// For the audio formats we need to handle it ourselves, as the browser requests the entire audio file,
|
|
||||||
// which means that for most videos that are longer than 10 mins, we get throttled, as the audio track file sizes surpass that 10MiB limit.
|
|
||||||
|
|
||||||
// This code checks if the file is larger than the limit, by checking the `clen` query param,
|
|
||||||
// which YouTube helpfully populates with the content length for us.
|
|
||||||
// If it does surpass that limit, it then checks if the requested range is larger than the limit
|
|
||||||
// (seeking right at the end of the video, would result in a small enough range to be under the chunk limit)
|
|
||||||
// if that surpasses the limit too, it then limits the requested range to 10MiB, by setting the range to `start-${start + 10MiB}`.
|
|
||||||
if (resourceType === 'media' && urlObj.searchParams.get('mime')?.startsWith('audio/') && requestHeaders.Range) {
|
|
||||||
const TEN_MIB = 10 * 1024 * 1024
|
|
||||||
|
|
||||||
const contentLength = parseInt(new URL(url).searchParams.get('clen'))
|
|
||||||
|
|
||||||
if (contentLength > TEN_MIB) {
|
|
||||||
const [startStr, endStr] = requestHeaders.Range.split('=')[1].split('-')
|
|
||||||
|
|
||||||
const start = parseInt(startStr)
|
|
||||||
|
|
||||||
// handle open ended ranges like `0-` and `1234-`
|
|
||||||
const end = endStr.length === 0 ? contentLength : parseInt(endStr)
|
|
||||||
|
|
||||||
if (end - start > TEN_MIB) {
|
|
||||||
const newEnd = start + TEN_MIB
|
|
||||||
|
|
||||||
requestHeaders.Range = `bytes=${start}-${newEnd}`
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (webContents) {
|
} else if (webContents) {
|
||||||
const invidiousAuthorization = invidiousAuthorizations.get(webContents.id)
|
const invidiousAuthorization = invidiousAuthorizations.get(webContents.id)
|
||||||
|
|
||||||
@ -479,7 +440,6 @@ function runApp() {
|
|||||||
requestHeaders.Authorization = invidiousAuthorization.authorization
|
requestHeaders.Authorization = invidiousAuthorization.authorization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// eslint-disable-next-line n/no-callback-literal
|
// eslint-disable-next-line n/no-callback-literal
|
||||||
callback({ requestHeaders })
|
callback({ requestHeaders })
|
||||||
})
|
})
|
||||||
@ -623,8 +583,8 @@ function runApp() {
|
|||||||
return 'text/javascript'
|
return 'text/javascript'
|
||||||
case 'ttf':
|
case 'ttf':
|
||||||
return 'font/ttf'
|
return 'font/ttf'
|
||||||
case 'woff':
|
case 'woff2':
|
||||||
return 'font/woff'
|
return 'font/woff2'
|
||||||
case 'svg':
|
case 'svg':
|
||||||
return 'image/svg+xml'
|
return 'image/svg+xml'
|
||||||
case 'png':
|
case 'png':
|
||||||
|
@ -110,5 +110,4 @@
|
|||||||
<script src="./App.js" />
|
<script src="./App.js" />
|
||||||
|
|
||||||
<style src="./themes.css" />
|
<style src="./themes.css" />
|
||||||
<style src="./videoJS.css" />
|
|
||||||
<style scoped src="./App.css" />
|
<style scoped src="./App.css" />
|
||||||
|
Binary file not shown.
@ -1,13 +0,0 @@
|
|||||||
<svg
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
width="26" height="26" viewBox="0 0 24 24"
|
|
||||||
stroke-width="1.5"
|
|
||||||
stroke="#ffffff"
|
|
||||||
fill="none"
|
|
||||||
stroke-linecap="round"
|
|
||||||
stroke-linejoin="round"
|
|
||||||
>
|
|
||||||
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
|
||||||
<path d="M5 7h1a2 2 0 0 0 2 -2a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-9a2 2 0 0 1 2 -2" />
|
|
||||||
<circle cx="12" cy="13" r="3" />
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 443 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" viewBox="0 0 24 24" fill="white" width="20px" height="20px"><rect fill="none" height="24" width="24"/><path d="M22,3.41l-5.29,5.29L20,12h-8V4l3.29,3.29L20.59,2L22,3.41z M3.41,22l5.29-5.29L12,20v-8H4l3.29,3.29L2,20.59L3.41,22z"/></svg>
|
|
Before Width: | Height: | Size: 309 B |
@ -1 +0,0 @@
|
|||||||
<svg aria-hidden="true" focusable="false" fill="white" width="20px" height="19px" data-prefix="fas" data-icon="desktop" class="svg-inline--fa fa-desktop fa-w-18" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M528 0H48C21.5 0 0 21.5 0 48v320c0 26.5 21.5 48 48 48h192l-16 48h-72c-13.3 0-24 10.7-24 24s10.7 24 24 24h272c13.3 0 24-10.7 24-24s-10.7-24-24-24h-72l-16-48h192c26.5 0 48-21.5 48-48V48c0-26.5-21.5-48-48-48zm-16 352H64V64h448v288z"></path></svg>
|
|
Before Width: | Height: | Size: 483 B |
@ -1 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="white" width="20px" height="20px"><path class="loop" d="M12 4V2.21c0-.45-.54-.67-.85-.35l-2.8 2.79c-.2.2-.2.51 0 .71l2.79 2.79c.32.31.86.09.86-.36V6c3.31 0 6 2.69 6 6 0 .79-.15 1.56-.44 2.25-.15.36-.04.77.23 1.04.51.51 1.37.33 1.64-.34.37-.91.57-1.91.57-2.95 0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-.79.15-1.56.44-2.25.15-.36.04-.77-.23-1.04-.51-.51-1.37-.33-1.64.34C4.2 9.96 4 10.96 4 12c0 4.42 3.58 8 8 8v1.79c0 .45.54.67.85.35l2.79-2.79c.2-.2.2-.51 0-.71l-2.79-2.79c-.31-.31-.85-.09-.85.36V18z"/></svg>
|
|
Before Width: | Height: | Size: 577 B |
@ -1 +0,0 @@
|
|||||||
<svg aria-hidden="true" focusable="false" data-prefix="fas" fill="white" width="18px" height="18px" data-icon="expand-alt" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M212.686 315.314L120 408l32.922 31.029c15.12 15.12 4.412 40.971-16.97 40.971h-112C10.697 480 0 469.255 0 456V344c0-21.382 25.803-32.09 40.922-16.971L72 360l92.686-92.686c6.248-6.248 16.379-6.248 22.627 0l25.373 25.373c6.249 6.248 6.249 16.378 0 22.627zm22.628-118.628L328 104l-32.922-31.029C279.958 57.851 290.666 32 312.048 32h112C437.303 32 448 42.745 448 56v112c0 21.382-25.803 32.09-40.922 16.971L376 152l-92.686 92.686c-6.248 6.248-16.379 6.248-22.627 0l-25.373-25.373c-6.249-6.248-6.249-16.378 0-22.627z"></path></svg>
|
|
Before Width: | Height: | Size: 726 B |
@ -1 +0,0 @@
|
|||||||
<svg aria-hidden="true" focusable="false" data-prefix="fas" fill="white" width="20px" height="19px" data-icon="tv" class="svg-inline--fa fa-tv fa-w-20" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M592 0H48A48 48 0 0 0 0 48v320a48 48 0 0 0 48 48h240v32H112a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16H352v-32h240a48 48 0 0 0 48-48V48a48 48 0 0 0-48-48zm-16 352H64V64h512z"></path></svg>
|
|
Before Width: | Height: | Size: 458 B |
@ -0,0 +1,229 @@
|
|||||||
|
/* stylelint-disable liberty/use-logical-spec */
|
||||||
|
.ftVideoPlayer {
|
||||||
|
display: flex;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
/*
|
||||||
|
For vertical videos and full window mode the background is visible,
|
||||||
|
so we want to make it black as it defaults to transparent
|
||||||
|
*/
|
||||||
|
background-color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.player {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.vrCanvas {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.shaka-bottom-controls) {
|
||||||
|
/*
|
||||||
|
Force left to right, so that the UI doesn't break.
|
||||||
|
With rtl, the progress bar was filling from the left, but the scrubber was moving from the right.
|
||||||
|
video.js forced the direction for their controls too
|
||||||
|
*/
|
||||||
|
direction: ltr;
|
||||||
|
|
||||||
|
/* Place the seek bar above the controls (the default is below) */
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
With the legacy formats, shaka hands over the captions to the browser,
|
||||||
|
that causes issues like the captions being displayed under the player controls.
|
||||||
|
The browser positions captions based on the video element as it doesn't know about shaka's custom controls.
|
||||||
|
To solve that we use shaka's caption displayer (UITextDisplayer), so we need to hide the browser's ones
|
||||||
|
*/
|
||||||
|
.player::-webkit-media-text-track-container {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sixteenByNine {
|
||||||
|
aspect-ratio: 16 / 9;
|
||||||
|
}
|
||||||
|
|
||||||
|
.stats {
|
||||||
|
position: absolute;
|
||||||
|
left: 5px;
|
||||||
|
top: 5px;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 5px;
|
||||||
|
line-height: 1.4em;
|
||||||
|
background-color: rgb(0 0 0 / 70%);
|
||||||
|
color: #fff;
|
||||||
|
z-index: 2;
|
||||||
|
|
||||||
|
/* user-select is intentionally not disabled, so that you can select and copy the stats */
|
||||||
|
}
|
||||||
|
|
||||||
|
.offlineWrapper {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
inset-inline-end: 20px;
|
||||||
|
margin-inline-start: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
gap: 10px;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #000;
|
||||||
|
color: #fff;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.offlineIcon {
|
||||||
|
font-size: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.offlineMessage {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.offlineMessageSubtitle {
|
||||||
|
font-size: 0.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.shaka-volume-bar-container) {
|
||||||
|
flex-shrink: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skippedSegmentsWrapper {
|
||||||
|
position: absolute;
|
||||||
|
right: 2%;
|
||||||
|
bottom: max(15%, calc(46px + 2.5% + 3%)); /* 46px + 2.5% is the height of the controls */
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 10px;
|
||||||
|
align-items: center;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.skippedSegment {
|
||||||
|
margin-block: 0;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 20px;
|
||||||
|
background-color: rgb(0 0 0 / 80%);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.markerContainer) {
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.sponsorBlockMarker) {
|
||||||
|
background-color: var(--primary-color);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.chapterMarker) {
|
||||||
|
width: 2px;
|
||||||
|
background-color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.sponsorBlockMarker),
|
||||||
|
:deep(.chapterMarker) {
|
||||||
|
position: absolute;
|
||||||
|
opacity: 0.6;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.playerFullscreenTitleOverlay) {
|
||||||
|
display: none;
|
||||||
|
opacity: 0;
|
||||||
|
position: absolute;
|
||||||
|
margin: 0;
|
||||||
|
top: 5px;
|
||||||
|
left: 5px;
|
||||||
|
max-width: calc(100% - 10px);
|
||||||
|
font-size: xx-large;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: normal;
|
||||||
|
background-color: rgb(0 0 0 / 50%);
|
||||||
|
border-radius: 5px;
|
||||||
|
user-select: none;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
text-wrap: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
/* copied from .shaka-scrim-container */
|
||||||
|
transition: opacity cubic-bezier(0.4, 0, 0.6, 1) 0.6s;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(body[dir='rtl'] .playerFullscreenTitleOverlay) {
|
||||||
|
left: initial;
|
||||||
|
right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ftVideoPlayer:fullscreen :deep(.playerFullscreenTitleOverlay) {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.shaka-controls-container[shown='true'] > .playerFullscreenTitleOverlay) {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.ftVideoPlayer:fullscreen :deep(.theatre-button),
|
||||||
|
.ftVideoPlayer:fullscreen :deep(.full-window-button),
|
||||||
|
.fullWindow :deep(.theatre-button) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fullWindow {
|
||||||
|
position: absolute !important;
|
||||||
|
max-width: initial !important;
|
||||||
|
inset: 0;
|
||||||
|
z-index: 1000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fullWindow > .player {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* added to the body element */
|
||||||
|
:global(.playerFullWindow) {
|
||||||
|
overflow: hidden;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (width <=400px) {
|
||||||
|
:deep(.shaka-text-container) {
|
||||||
|
/* make subtitles take up slightly less space when a mobile phone is in portrait orientation */
|
||||||
|
font-size: 16px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (width <=1000px) {
|
||||||
|
:deep(.playerFullscreenTitleOverlay) {
|
||||||
|
font-size: large;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (width <=1350px) {
|
||||||
|
:deep(.theatre-button) {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-reduced-transparency) {
|
||||||
|
:deep(.playerFullscreenTitleOverlay),
|
||||||
|
.skippedSegment {
|
||||||
|
background-color: rgb(0 0 0 / 90%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* stylelint-enable liberty/use-logical-spec */
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,111 @@
|
|||||||
|
<template>
|
||||||
|
<div
|
||||||
|
ref="container"
|
||||||
|
class="ftVideoPlayer"
|
||||||
|
:class="{
|
||||||
|
fullWindow: fullWindowEnabled,
|
||||||
|
sixteenByNine: forceAspectRatio
|
||||||
|
}"
|
||||||
|
>
|
||||||
|
<!-- eslint-disable-next-line vuejs-accessibility/media-has-caption -->
|
||||||
|
<video
|
||||||
|
ref="video"
|
||||||
|
class="player"
|
||||||
|
preload="auto"
|
||||||
|
crossorigin="anonymous"
|
||||||
|
playsinline
|
||||||
|
:autoplay="autoplayVideos ? true : null"
|
||||||
|
:poster="thumbnail"
|
||||||
|
@play="handlePlay"
|
||||||
|
@pause="handlePause"
|
||||||
|
@ended="handleEnded"
|
||||||
|
@volumechange="updateVolume"
|
||||||
|
@timeupdate="handleTimeupdate"
|
||||||
|
@ratechange="updateMediaSessionPositionState"
|
||||||
|
@seeked="updateMediaSessionPositionState"
|
||||||
|
/>
|
||||||
|
<canvas
|
||||||
|
ref="vrCanvas"
|
||||||
|
class="vrCanvas"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
v-if="showStats"
|
||||||
|
class="stats"
|
||||||
|
>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Video ID', { videoId }) }}</span>
|
||||||
|
<br>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Media Formats', { formats: format }) }}</span>
|
||||||
|
<br>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Bitrate', { bitrate: stats.bitrate }) }}</span>
|
||||||
|
<br>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Volume', { volumePercentage: stats.volume }) }}</span>
|
||||||
|
<br>
|
||||||
|
<template
|
||||||
|
v-if="format !== 'legacy'"
|
||||||
|
>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Bandwidth', { bandwidth: stats.bandwidth }) }}</span>
|
||||||
|
<br>
|
||||||
|
</template>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Buffered', { bufferedPercentage: stats.buffered }) }}</span>
|
||||||
|
<br>
|
||||||
|
<span
|
||||||
|
v-if="format === 'audio'"
|
||||||
|
>{{ $t('Video.Player.Stats.CodecAudio', stats.codecs) }}</span>
|
||||||
|
<span
|
||||||
|
v-else-if="stats.codecs.audioItag && stats.codecs.videoItag"
|
||||||
|
>{{ $t('Video.Player.Stats.CodecsVideoAudio', stats.codecs) }}</span>
|
||||||
|
<span
|
||||||
|
v-else
|
||||||
|
>{{ $t('Video.Player.Stats.CodecsVideoAudioNoItags', stats.codecs) }}</span>
|
||||||
|
<br>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Player Dimensions', stats.playerDimensions) }}</span>
|
||||||
|
<br>
|
||||||
|
<template
|
||||||
|
v-if="format !== 'audio'"
|
||||||
|
>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Resolution', stats.resolution) }}</span>
|
||||||
|
<br>
|
||||||
|
<span>{{ $t('Video.Player.Stats.Dropped Frames / Total Frames', stats.frames) }}</span>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="showOfflineMessage"
|
||||||
|
class="offlineWrapper"
|
||||||
|
>
|
||||||
|
<font-awesome-layers
|
||||||
|
fixed-width
|
||||||
|
class="offlineIcon"
|
||||||
|
aria-hidden="true"
|
||||||
|
>
|
||||||
|
<font-awesome-icon :icon="['fas', 'wifi']" />
|
||||||
|
<font-awesome-icon :icon="['fas', 'slash']" />
|
||||||
|
</font-awesome-layers>
|
||||||
|
<p class="offlineMessage">
|
||||||
|
<span>
|
||||||
|
{{ $t('Video.Player.You appear to be offline') }}
|
||||||
|
</span>
|
||||||
|
<br>
|
||||||
|
<span class="offlineMessageSubtitle">
|
||||||
|
{{ $t('Video.Player.Playback will resume automatically when your connection comes back') }}
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
v-if="sponsorBlockShowSkippedToast && skippedSponsorBlockSegments.length > 0"
|
||||||
|
class="skippedSegmentsWrapper"
|
||||||
|
>
|
||||||
|
<p
|
||||||
|
v-for="{ uuid, translatedCategory } in skippedSponsorBlockSegments"
|
||||||
|
:key="uuid"
|
||||||
|
class="skippedSegment"
|
||||||
|
>
|
||||||
|
{{ $t('Video.Player.Skipped segment', { segmentCategory: translatedCategory }) }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script src="./ft-shaka-video-player.js" />
|
||||||
|
|
||||||
|
<style src="shaka-player/dist/controls.css" />
|
||||||
|
<style scoped src="./ft-shaka-video-player.css" />
|
@ -0,0 +1,136 @@
|
|||||||
|
import shaka from 'shaka-player'
|
||||||
|
|
||||||
|
import i18n from '../../../i18n/index'
|
||||||
|
|
||||||
|
export class AudioTrackSelection extends shaka.ui.SettingsMenu {
|
||||||
|
/**
|
||||||
|
* @param {EventTarget} events
|
||||||
|
* @param {!HTMLElement} parent
|
||||||
|
* @param {!shaka.ui.Controls} controls
|
||||||
|
*/
|
||||||
|
constructor(events, parent, controls) {
|
||||||
|
super(parent, controls, 'spatial_audio_off')
|
||||||
|
|
||||||
|
this.button.classList.add('audio-track-button', 'shaka-tooltip-status')
|
||||||
|
this.menu.classList.add('audio-tracks')
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'localeChanged', () => {
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(this.player, 'loading', () => {
|
||||||
|
this.onTracksChanged_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(this.player, 'trackschanged', () => {
|
||||||
|
this.onTracksChanged_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(this.player, 'variantchanged', () => {
|
||||||
|
this.updateAudioTracks_()
|
||||||
|
})
|
||||||
|
|
||||||
|
// selectVariantsByLabel doesn't trigger variant changed
|
||||||
|
this.eventManager.listen(this.player, 'adaptation', () => {
|
||||||
|
this.updateAudioTracks_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
|
||||||
|
this.updateAudioTracks_()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
updateAudioTracks_() {
|
||||||
|
const tracks = this.player.getVariantTracks()
|
||||||
|
|
||||||
|
const selectedTrack = tracks.find(track => track.active)
|
||||||
|
|
||||||
|
const menu = this.menu
|
||||||
|
|
||||||
|
const backButton = menu.querySelector('.shaka-back-to-overflow-button')
|
||||||
|
|
||||||
|
while (menu.firstChild) {
|
||||||
|
menu.removeChild(menu.firstChild)
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.appendChild(backButton)
|
||||||
|
|
||||||
|
/** @type {Set<string>} */
|
||||||
|
const knownLabels = new Set()
|
||||||
|
|
||||||
|
for (const track of tracks) {
|
||||||
|
if (!track.label || knownLabels.has(track.label)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
knownLabels.add(track.label)
|
||||||
|
|
||||||
|
const button = document.createElement('button')
|
||||||
|
button.addEventListener('click', () => {
|
||||||
|
this.onAudioTrackSelected_(track)
|
||||||
|
})
|
||||||
|
|
||||||
|
const span = document.createElement('span')
|
||||||
|
button.appendChild(span)
|
||||||
|
|
||||||
|
span.textContent = track.label
|
||||||
|
|
||||||
|
if (selectedTrack && track.label === selectedTrack.label) {
|
||||||
|
const icon = document.createElement('i')
|
||||||
|
icon.classList.add('material-icons-round', 'shaka-chosen-item')
|
||||||
|
icon.textContent = 'done'
|
||||||
|
icon.ariaHidden = 'true'
|
||||||
|
button.appendChild(icon)
|
||||||
|
|
||||||
|
span.classList.add('shaka-chosen-item')
|
||||||
|
button.ariaSelected = 'true'
|
||||||
|
this.currentSelection.textContent = span.textContent
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.appendChild(button)
|
||||||
|
}
|
||||||
|
|
||||||
|
menu.querySelector('shaka-chosen-item')?.parentElement.focus()
|
||||||
|
|
||||||
|
this.button.setAttribute('shaka-status', this.currentSelection.innerText)
|
||||||
|
|
||||||
|
if (knownLabels.size > 0) {
|
||||||
|
this.button.classList.remove('shaka-hidden')
|
||||||
|
} else {
|
||||||
|
this.button.classList.add('shaka-hidden')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
onTracksChanged_() {
|
||||||
|
const hasVariants = this.player.getVariantTracks().length > 0
|
||||||
|
|
||||||
|
if (hasVariants) {
|
||||||
|
this.button.classList.remove('shaka-hidden')
|
||||||
|
} else {
|
||||||
|
this.button.classList.add('shaka-hidden')
|
||||||
|
}
|
||||||
|
|
||||||
|
this.updateAudioTracks_()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {shaka.extern.Track} track
|
||||||
|
* @private
|
||||||
|
*/
|
||||||
|
onAudioTrackSelected_(track) {
|
||||||
|
this.player.selectVariantsByLabel(track.label)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
updateLocalisedStrings_() {
|
||||||
|
this.backButton.ariaLabel = this.localization.resolve('BACK')
|
||||||
|
|
||||||
|
const audioTracksText = i18n.t('Video.Player.Audio Tracks')
|
||||||
|
|
||||||
|
this.button.ariaLabel = audioTracksText
|
||||||
|
this.nameSpan.textContent = audioTracksText
|
||||||
|
this.backSpan.textContent = audioTracksText
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
import shaka from 'shaka-player'
|
||||||
|
|
||||||
|
import i18n from '../../../i18n/index'
|
||||||
|
|
||||||
|
export class FullWindowButton extends shaka.ui.Element {
|
||||||
|
/**
|
||||||
|
* @param {boolean} fullWindowEnabled
|
||||||
|
* @param {EventTarget} events
|
||||||
|
* @param {HTMLElement} parent
|
||||||
|
* @param {shaka.ui.Controls} controls
|
||||||
|
*/
|
||||||
|
constructor(fullWindowEnabled, events, parent, controls) {
|
||||||
|
super(parent, controls)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.button_ = document.createElement('button')
|
||||||
|
this.button_.classList.add('full-window-button')
|
||||||
|
this.button_.classList.add('shaka-tooltip')
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.icon_ = document.createElement('i')
|
||||||
|
this.icon_.classList.add('material-icons-round')
|
||||||
|
this.icon_.textContent = 'open_in_full'
|
||||||
|
|
||||||
|
this.button_.appendChild(this.icon_)
|
||||||
|
|
||||||
|
const label = document.createElement('label')
|
||||||
|
label.classList.add('shaka-overflow-button-label')
|
||||||
|
label.classList.add('shaka-overflow-menu-only')
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.nameSpan_ = document.createElement('span')
|
||||||
|
label.appendChild(this.nameSpan_)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.currentState_ = document.createElement('span')
|
||||||
|
this.currentState_.classList.add('shaka-current-selection-span')
|
||||||
|
label.appendChild(this.currentState_)
|
||||||
|
|
||||||
|
this.button_.appendChild(label)
|
||||||
|
|
||||||
|
this.parent.appendChild(this.button_)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.fullWindowEnabled_ = fullWindowEnabled
|
||||||
|
|
||||||
|
// listeners
|
||||||
|
|
||||||
|
this.eventManager.listen(this.button_, 'click', () => {
|
||||||
|
events.dispatchEvent(new CustomEvent('setFullWindow', {
|
||||||
|
detail: !this.fullWindowEnabled_
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'setFullWindow', (/** @type {CustomEvent} */ event) => {
|
||||||
|
this.fullWindowEnabled_ = event.detail
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'localeChanged', () => {
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
updateLocalisedStrings_() {
|
||||||
|
this.nameSpan_.textContent = i18n.t('Video.Player.Full Window')
|
||||||
|
|
||||||
|
this.icon_.textContent = this.fullWindowEnabled_ ? 'close_fullscreen' : 'open_in_full'
|
||||||
|
|
||||||
|
this.currentState_.textContent = this.localization.resolve(this.fullWindowEnabled_ ? 'ON' : 'OFF')
|
||||||
|
|
||||||
|
this.button_.ariaLabel = this.fullWindowEnabled_ ? i18n.t('Video.Player.Exit Full Window') : i18n.t('Video.Player.Full Window')
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,148 @@
|
|||||||
|
import shaka from 'shaka-player'
|
||||||
|
|
||||||
|
export class LegacyQualitySelection extends shaka.ui.SettingsMenu {
|
||||||
|
/**
|
||||||
|
* @param {object} activeLegacyFormat
|
||||||
|
* @param {object[]} legacyFormats
|
||||||
|
* @param {EventTarget} events
|
||||||
|
* @param {!HTMLElement} parent
|
||||||
|
* @param {!shaka.ui.Controls} controls
|
||||||
|
*/
|
||||||
|
constructor(activeLegacyFormat, legacyFormats, events, parent, controls) {
|
||||||
|
super(parent, controls, 'settings')
|
||||||
|
|
||||||
|
this.button.classList.add('legacy-quality-button')
|
||||||
|
this.button.classList.add('shaka-tooltip-status')
|
||||||
|
this.menu.classList.add('legacy-qualities')
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.events_ = events
|
||||||
|
/** @private */
|
||||||
|
this.activeLegacyFormat_ = activeLegacyFormat
|
||||||
|
|
||||||
|
const sortedLegacyFormats = [...legacyFormats]
|
||||||
|
|
||||||
|
// Invidious doesn't return the height or width for the legacy formats, so we have to use the bitrate instead
|
||||||
|
if (typeof legacyFormats[0].width === 'undefined' || typeof legacyFormats[0].height === 'undefined') {
|
||||||
|
sortedLegacyFormats.sort((a, b) => {
|
||||||
|
return b.bitrate - a.bitrate
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
const isPortrait = legacyFormats[0].height > legacyFormats[0].width
|
||||||
|
sortedLegacyFormats.sort((a, b) => isPortrait ? b.width - a.width : b.height - a.height)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.legacyFormats_ = sortedLegacyFormats
|
||||||
|
|
||||||
|
for (const format of sortedLegacyFormats) {
|
||||||
|
const button = document.createElement('button')
|
||||||
|
button.classList.add('legacy-resolution')
|
||||||
|
|
||||||
|
this.eventManager.listen(button, 'click', () => {
|
||||||
|
this.onFormatSelected_(format)
|
||||||
|
})
|
||||||
|
|
||||||
|
const span = document.createElement('span')
|
||||||
|
span.textContent = format.qualityLabel
|
||||||
|
button.appendChild(span)
|
||||||
|
|
||||||
|
this.menu.appendChild(button)
|
||||||
|
}
|
||||||
|
|
||||||
|
// listeners
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'localeChanged', () => {
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'setLegacyFormat', (/** @type {CustomEvent} */ event) => {
|
||||||
|
this.activeLegacyFormat_ = event.detail.format
|
||||||
|
this.updateResolutionSelection_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.updateResolutionSelection_()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
updateResolutionSelection_() {
|
||||||
|
if (!this.activeLegacyFormat_) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove previous selection
|
||||||
|
|
||||||
|
const previousSpan = this.menu.querySelector('.shaka-chosen-item')
|
||||||
|
if (previousSpan) {
|
||||||
|
previousSpan.classList.remove('shaka-chosen-item')
|
||||||
|
|
||||||
|
const button = previousSpan.parentElement
|
||||||
|
button.ariaSelected = 'false'
|
||||||
|
button.querySelector('.material-icons-round').remove()
|
||||||
|
}
|
||||||
|
|
||||||
|
// current selection
|
||||||
|
|
||||||
|
const index = this.legacyFormats_.indexOf(this.activeLegacyFormat_)
|
||||||
|
|
||||||
|
const button = this.menu.querySelectorAll('.legacy-resolution')[index]
|
||||||
|
const span = button.querySelector('span')
|
||||||
|
|
||||||
|
button.ariaSelected = 'true'
|
||||||
|
|
||||||
|
span.classList.add('shaka-chosen-item')
|
||||||
|
|
||||||
|
const icon = document.createElement('i')
|
||||||
|
icon.classList.add('material-icons-round')
|
||||||
|
icon.classList.add('shaka-chosen-item')
|
||||||
|
icon.textContent = 'done'
|
||||||
|
icon.ariaHidden = 'true'
|
||||||
|
button.appendChild(icon)
|
||||||
|
|
||||||
|
this.currentSelection.textContent = span.textContent
|
||||||
|
|
||||||
|
this.button.setAttribute('shaka-status', span.textContent)
|
||||||
|
|
||||||
|
button.focus()
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
async onFormatSelected_(format) {
|
||||||
|
if (format === this.activeLegacyFormat_) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const playbackPosition = this.player.getMediaElement().currentTime
|
||||||
|
|
||||||
|
const activeCaptionIndex = this.player.getTextTracks().findIndex(caption => caption.active)
|
||||||
|
let restoreCaptionIndex = null
|
||||||
|
|
||||||
|
if (activeCaptionIndex >= 0 && this.player.isTextTrackVisible()) {
|
||||||
|
restoreCaptionIndex = activeCaptionIndex
|
||||||
|
|
||||||
|
// hide captions before switching as shaka/the browser doesn't clean up the displayed captions
|
||||||
|
// when switching away from the legacy formats
|
||||||
|
await this.player.setTextTrackVisibility(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
this.events_.dispatchEvent(new CustomEvent('setLegacyFormat', {
|
||||||
|
detail: {
|
||||||
|
format,
|
||||||
|
playbackPosition,
|
||||||
|
restoreCaptionIndex
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
updateLocalisedStrings_() {
|
||||||
|
const resolutionText = this.localization.resolve('RESOLUTION')
|
||||||
|
|
||||||
|
this.button.ariaLabel = resolutionText
|
||||||
|
this.backButton.ariaLabel = resolutionText
|
||||||
|
this.backSpan.textContent = resolutionText
|
||||||
|
this.nameSpan.textContent = resolutionText
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
import shaka from 'shaka-player'
|
||||||
|
|
||||||
|
import i18n from '../../../i18n/index'
|
||||||
|
|
||||||
|
export class ScreenshotButton extends shaka.ui.Element {
|
||||||
|
/**
|
||||||
|
* @param {EventTarget} events
|
||||||
|
* @param {HTMLElement} parent
|
||||||
|
* @param {shaka.ui.Controls} controls
|
||||||
|
*/
|
||||||
|
constructor(events, parent, controls) {
|
||||||
|
super(parent, controls)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.button_ = document.createElement('button')
|
||||||
|
this.button_.classList.add('screenshot-button')
|
||||||
|
this.button_.classList.add('shaka-tooltip')
|
||||||
|
|
||||||
|
const icon = document.createElement('i')
|
||||||
|
icon.classList.add('material-icons-round')
|
||||||
|
icon.textContent = 'photo_camera'
|
||||||
|
|
||||||
|
this.button_.appendChild(icon)
|
||||||
|
|
||||||
|
const label = document.createElement('label')
|
||||||
|
label.classList.add('shaka-overflow-button-label')
|
||||||
|
label.classList.add('shaka-overflow-menu-only')
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.nameSpan_ = document.createElement('span')
|
||||||
|
label.appendChild(this.nameSpan_)
|
||||||
|
|
||||||
|
this.button_.appendChild(label)
|
||||||
|
|
||||||
|
this.parent.appendChild(this.button_)
|
||||||
|
|
||||||
|
// listeners
|
||||||
|
|
||||||
|
this.eventManager.listen(this.button_, 'click', () => {
|
||||||
|
events.dispatchEvent(new CustomEvent('takeScreenshot'))
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'localeChanged', () => {
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
updateLocalisedStrings_() {
|
||||||
|
this.nameSpan_.textContent = i18n.t('Video.Player.Take Screenshot')
|
||||||
|
|
||||||
|
this.button_.ariaLabel = i18n.t('Video.Player.Take Screenshot')
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
import shaka from 'shaka-player'
|
||||||
|
|
||||||
|
import i18n from '../../../i18n/index'
|
||||||
|
|
||||||
|
export class StatsButton extends shaka.ui.Element {
|
||||||
|
/**
|
||||||
|
* @param {boolean} showStats
|
||||||
|
* @param {EventTarget} events
|
||||||
|
* @param {HTMLElement} parent
|
||||||
|
* @param {shaka.ui.Controls} controls
|
||||||
|
*/
|
||||||
|
constructor(showStats, events, parent, controls) {
|
||||||
|
super(parent, controls)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.button_ = document.createElement('button')
|
||||||
|
this.button_.classList.add('stats-button')
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.icon_ = document.createElement('i')
|
||||||
|
this.icon_.classList.add('material-icons-round')
|
||||||
|
this.icon_.textContent = 'insert_chart_outlined'
|
||||||
|
|
||||||
|
this.button_.appendChild(this.icon_)
|
||||||
|
|
||||||
|
const label = document.createElement('label')
|
||||||
|
label.classList.add('shaka-overflow-button-label')
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.nameSpan_ = document.createElement('span')
|
||||||
|
label.appendChild(this.nameSpan_)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.currentState_ = document.createElement('span')
|
||||||
|
this.currentState_.classList.add('shaka-current-selection-span')
|
||||||
|
label.appendChild(this.currentState_)
|
||||||
|
|
||||||
|
this.button_.appendChild(label)
|
||||||
|
|
||||||
|
this.parent.appendChild(this.button_)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.showStats_ = showStats
|
||||||
|
|
||||||
|
// listeners
|
||||||
|
|
||||||
|
this.eventManager.listen(this.button_, 'click', () => {
|
||||||
|
events.dispatchEvent(new CustomEvent('setStatsVisibility', {
|
||||||
|
detail: !this.showStats_
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'setStatsVisibility', (/** @type {CustomEvent} */ event) => {
|
||||||
|
this.showStats_ = event.detail
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'localeChanged', () => {
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
updateLocalisedStrings_() {
|
||||||
|
this.nameSpan_.textContent = i18n.t('Video.Player.Stats.Stats')
|
||||||
|
|
||||||
|
this.icon_.textContent = this.showStats_ ? 'insert_chart' : 'insert_chart_outlined'
|
||||||
|
|
||||||
|
this.currentState_.textContent = this.localization.resolve(this.showStats_ ? 'ON' : 'OFF')
|
||||||
|
|
||||||
|
this.button_.ariaLabel = this.showStats_ ? i18n.t('Video.Player.Hide Stats') : i18n.t('Video.Player.Show Stats')
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,78 @@
|
|||||||
|
import shaka from 'shaka-player'
|
||||||
|
|
||||||
|
import i18n from '../../../i18n/index'
|
||||||
|
|
||||||
|
export class TheatreModeButton extends shaka.ui.Element {
|
||||||
|
/**
|
||||||
|
* @param {boolean} theatreModeEnabled
|
||||||
|
* @param {EventTarget} events
|
||||||
|
* @param {HTMLElement} parent
|
||||||
|
* @param {shaka.ui.Controls} controls
|
||||||
|
*/
|
||||||
|
constructor(theatreModeEnabled, events, parent, controls) {
|
||||||
|
super(parent, controls)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.button_ = document.createElement('button')
|
||||||
|
this.button_.classList.add('theatre-button')
|
||||||
|
this.button_.classList.add('shaka-tooltip')
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.icon_ = document.createElement('i')
|
||||||
|
this.icon_.classList.add('material-icons-round')
|
||||||
|
this.icon_.textContent = 'tv'
|
||||||
|
|
||||||
|
this.button_.appendChild(this.icon_)
|
||||||
|
|
||||||
|
const label = document.createElement('label')
|
||||||
|
label.classList.add('shaka-overflow-button-label')
|
||||||
|
label.classList.add('shaka-overflow-menu-only')
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.nameSpan_ = document.createElement('span')
|
||||||
|
label.appendChild(this.nameSpan_)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.currentState_ = document.createElement('span')
|
||||||
|
this.currentState_.classList.add('shaka-current-selection-span')
|
||||||
|
label.appendChild(this.currentState_)
|
||||||
|
|
||||||
|
this.button_.appendChild(label)
|
||||||
|
|
||||||
|
this.parent.appendChild(this.button_)
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
this.theatreModeEnabled_ = theatreModeEnabled
|
||||||
|
|
||||||
|
// listeners
|
||||||
|
|
||||||
|
this.eventManager.listen(this.button_, 'click', () => {
|
||||||
|
events.dispatchEvent(new CustomEvent('toggleTheatreMode', {
|
||||||
|
detail: !this.theatreModeEnabled_
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'toggleTheatreMode', (/** @type {CustomEvent} */event) => {
|
||||||
|
this.theatreModeEnabled_ = event.detail
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.eventManager.listen(events, 'localeChanged', () => {
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
})
|
||||||
|
|
||||||
|
this.updateLocalisedStrings_()
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @private */
|
||||||
|
updateLocalisedStrings_() {
|
||||||
|
this.nameSpan_.textContent = i18n.t('Video.Player.Theatre Mode')
|
||||||
|
|
||||||
|
this.icon_.textContent = this.theatreModeEnabled_ ? 'monitor' : 'tv'
|
||||||
|
|
||||||
|
this.currentState_.textContent = this.localization.resolve(this.theatreModeEnabled_ ? 'ON' : 'OFF')
|
||||||
|
|
||||||
|
this.button_.ariaLabel = this.theatreModeEnabled_ ? i18n.t('Video.Player.Exit Theatre Mode') : i18n.t('Video.Player.Theatre Mode')
|
||||||
|
}
|
||||||
|
}
|
@ -1,38 +0,0 @@
|
|||||||
/* stylelint-disable liberty/use-logical-spec */
|
|
||||||
.relative {
|
|
||||||
position: relative;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ftVideoPlayer {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.ftVideoPlayer.vjs-user-inactive {
|
|
||||||
cursor: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.sponsorBlockMarker),
|
|
||||||
:deep(.chapterMarker) {
|
|
||||||
position: absolute;
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.sponsorBlockMarker) {
|
|
||||||
block-size: 100%;
|
|
||||||
background-color: var(--primary-color);
|
|
||||||
}
|
|
||||||
|
|
||||||
:deep(.chapterMarker) {
|
|
||||||
height: 100%;
|
|
||||||
top: 0;
|
|
||||||
width: 2px;
|
|
||||||
z-index: 2;
|
|
||||||
background-color: #000;
|
|
||||||
}
|
|
||||||
/* stylelint-enable liberty/use-logical-spec */
|
|
||||||
|
|
||||||
@media only screen and (width <= 460px) {
|
|
||||||
:deep(.dash-selector .vjs-menu) {
|
|
||||||
max-block-size: 14em;
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
@ -1,36 +0,0 @@
|
|||||||
<!-- eslint-disable vuejs-accessibility/mouse-events-have-key-events -->
|
|
||||||
<!-- eslint-disable vuejs-accessibility/media-has-caption -->
|
|
||||||
|
|
||||||
<template>
|
|
||||||
<div
|
|
||||||
class="relative"
|
|
||||||
:class="{
|
|
||||||
'vjs-using-touch': usingTouch,
|
|
||||||
'vjs-hide-play-button': !displayVideoPlayButton
|
|
||||||
}"
|
|
||||||
@mouseover="handleMouseOver"
|
|
||||||
>
|
|
||||||
<video
|
|
||||||
ref="video"
|
|
||||||
class="ftVideoPlayer video-js vjs-default-skin dark"
|
|
||||||
:poster="thumbnail"
|
|
||||||
controls
|
|
||||||
preload="auto"
|
|
||||||
:data-setup="JSON.stringify(dataSetup)"
|
|
||||||
crossorigin="anonymous"
|
|
||||||
@touchstart="handleTouchStart"
|
|
||||||
>
|
|
||||||
<source
|
|
||||||
v-for="(source, index) in activeSourceList"
|
|
||||||
:key="index + '_source'"
|
|
||||||
:src="source.url"
|
|
||||||
:type="source.type || source.mimeType"
|
|
||||||
:label="source.qualityLabel"
|
|
||||||
:selected="source.qualityLabel === selectedDefaultQuality"
|
|
||||||
>
|
|
||||||
</video>
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script src="./ft-video-player.js" />
|
|
||||||
<style scoped src="./ft-video-player.css" />
|
|
@ -1,7 +1,3 @@
|
|||||||
.av1Switch {
|
|
||||||
align-self: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.screenshotFolderContainer {
|
.screenshotFolderContainer {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
column-gap: 1rem;
|
column-gap: 1rem;
|
||||||
|
@ -33,13 +33,15 @@ export default defineComponent({
|
|||||||
'audio'
|
'audio'
|
||||||
],
|
],
|
||||||
qualityValues: [
|
qualityValues: [
|
||||||
'auto',
|
2160,
|
||||||
144,
|
1440,
|
||||||
240,
|
1080,
|
||||||
360,
|
|
||||||
480,
|
|
||||||
720,
|
720,
|
||||||
1080
|
480,
|
||||||
|
360,
|
||||||
|
240,
|
||||||
|
144,
|
||||||
|
'auto'
|
||||||
],
|
],
|
||||||
playbackRateIntervalValues: [
|
playbackRateIntervalValues: [
|
||||||
0.1,
|
0.1,
|
||||||
@ -113,10 +115,6 @@ export default defineComponent({
|
|||||||
return this.$store.getters.getDefaultQuality
|
return this.$store.getters.getDefaultQuality
|
||||||
},
|
},
|
||||||
|
|
||||||
allowDashAv1Formats: function () {
|
|
||||||
return this.$store.getters.getAllowDashAv1Formats
|
|
||||||
},
|
|
||||||
|
|
||||||
defaultTheatreMode: function () {
|
defaultTheatreMode: function () {
|
||||||
return this.$store.getters.getDefaultTheatreMode
|
return this.$store.getters.getDefaultTheatreMode
|
||||||
},
|
},
|
||||||
@ -163,13 +161,15 @@ export default defineComponent({
|
|||||||
|
|
||||||
qualityNames: function () {
|
qualityNames: function () {
|
||||||
return [
|
return [
|
||||||
this.$t('Settings.Player Settings.Default Quality.Auto'),
|
this.$t('Settings.Player Settings.Default Quality.4k'),
|
||||||
this.$t('Settings.Player Settings.Default Quality.144p'),
|
this.$t('Settings.Player Settings.Default Quality.1440p'),
|
||||||
this.$t('Settings.Player Settings.Default Quality.240p'),
|
this.$t('Settings.Player Settings.Default Quality.1080p'),
|
||||||
this.$t('Settings.Player Settings.Default Quality.360p'),
|
|
||||||
this.$t('Settings.Player Settings.Default Quality.480p'),
|
|
||||||
this.$t('Settings.Player Settings.Default Quality.720p'),
|
this.$t('Settings.Player Settings.Default Quality.720p'),
|
||||||
this.$t('Settings.Player Settings.Default Quality.1080p')
|
this.$t('Settings.Player Settings.Default Quality.480p'),
|
||||||
|
this.$t('Settings.Player Settings.Default Quality.360p'),
|
||||||
|
this.$t('Settings.Player Settings.Default Quality.240p'),
|
||||||
|
this.$t('Settings.Player Settings.Default Quality.144p'),
|
||||||
|
this.$t('Settings.Player Settings.Default Quality.Auto')
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -293,7 +293,6 @@ export default defineComponent({
|
|||||||
'updateDefaultPlayback',
|
'updateDefaultPlayback',
|
||||||
'updateDefaultVideoFormat',
|
'updateDefaultVideoFormat',
|
||||||
'updateDefaultQuality',
|
'updateDefaultQuality',
|
||||||
'updateAllowDashAv1Formats',
|
|
||||||
'updateVideoVolumeMouseScroll',
|
'updateVideoVolumeMouseScroll',
|
||||||
'updateVideoPlaybackRateMouseScroll',
|
'updateVideoPlaybackRateMouseScroll',
|
||||||
'updateVideoSkipMouseScroll',
|
'updateVideoSkipMouseScroll',
|
||||||
|
@ -161,14 +161,6 @@
|
|||||||
:icon="['fas', 'photo-film']"
|
:icon="['fas', 'photo-film']"
|
||||||
@change="updateDefaultQuality"
|
@change="updateDefaultQuality"
|
||||||
/>
|
/>
|
||||||
<ft-toggle-switch
|
|
||||||
class="av1Switch"
|
|
||||||
:label="$t('Settings.Player Settings.Allow DASH AV1 formats')"
|
|
||||||
:compact="true"
|
|
||||||
:default-value="allowDashAv1Formats"
|
|
||||||
:tooltip="$t('Tooltips.Player Settings.Allow DASH AV1 formats')"
|
|
||||||
@change="updateAllowDashAv1Formats"
|
|
||||||
/>
|
|
||||||
</ft-flex-box>
|
</ft-flex-box>
|
||||||
<br>
|
<br>
|
||||||
<ft-flex-box
|
<ft-flex-box
|
||||||
|
@ -311,40 +311,19 @@ function parseInvidiousCommunityAttachments(data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* video.js only supports MP4 DASH not WebM DASH
|
* Invidious doesn't include the correct height or width for all formats in their API response and are also missing the fps and qualityLabel for the AV1 formats.
|
||||||
* so we filter out the WebM DASH formats
|
* When the local API is supported we generate our own manifest with the local API manifest generator, based on the Invidious API response and the height, width and fps extracted from Invidious' DASH manifest.
|
||||||
|
* As Invidious only includes h264 and AV1 in their DASH manifest, we have to always filter out the VP9 formats, due to missing information.
|
||||||
* @param {any[]} formats
|
* @param {any[]} formats
|
||||||
* @param {boolean} allowAv1 Use the AV1 formats if they are available
|
|
||||||
*/
|
*/
|
||||||
export function filterInvidiousFormats(formats, allowAv1 = false) {
|
export function filterInvidiousFormats(formats) {
|
||||||
const audioFormats = []
|
return formats.filter(format => {
|
||||||
const h264Formats = []
|
|
||||||
const av1Formats = []
|
|
||||||
|
|
||||||
formats.forEach(format => {
|
|
||||||
const mimeType = format.type
|
const mimeType = format.type
|
||||||
|
|
||||||
if (mimeType.startsWith('audio/mp4')) {
|
return mimeType.startsWith('audio/') ||
|
||||||
audioFormats.push(format)
|
mimeType.startsWith('video/mp4; codecs="avc') ||
|
||||||
} else if (allowAv1 && mimeType.startsWith('video/mp4; codecs="av01')) {
|
mimeType.startsWith('video/mp4; codecs="av01')
|
||||||
av1Formats.push(format)
|
|
||||||
} else if (mimeType.startsWith('video/mp4; codecs="avc')) {
|
|
||||||
h264Formats.push(format)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
// Disabled AV1 as a workaround to https://github.com/FreeTubeApp/FreeTube/issues/3382
|
|
||||||
// Which is caused by Invidious API limitation on AV1 formats (see related issues)
|
|
||||||
// Commented code to be restored after Invidious issue fixed
|
|
||||||
//
|
|
||||||
// As we generate our own DASH manifest (using YouTube.js) for multiple audio track support when the local API is supported,
|
|
||||||
// we can allow AV1 in that situation. When the local API isn't supported,
|
|
||||||
// we still can't use them until Invidious fixes the issue on their side
|
|
||||||
if (process.env.SUPPORTS_LOCAL_API && allowAv1 && av1Formats.length > 0) {
|
|
||||||
return [...audioFormats, ...av1Formats]
|
|
||||||
}
|
|
||||||
|
|
||||||
return [...audioFormats, ...h264Formats]
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getHashtagInvidious(hashtag, page) {
|
export async function getHashtagInvidious(hashtag, page) {
|
||||||
@ -396,7 +375,6 @@ export function convertInvidiousToLocalFormat(format) {
|
|||||||
// audioQuality and qualityLabel don't go inside the DASH manifest, but are used by YouTube.js
|
// audioQuality and qualityLabel don't go inside the DASH manifest, but are used by YouTube.js
|
||||||
// to determine whether a format is an audio or video stream respectively.
|
// to determine whether a format is an audio or video stream respectively.
|
||||||
|
|
||||||
/** @type {import('./local').LocalFormat} */
|
|
||||||
const localFormat = new Misc.Format({
|
const localFormat = new Misc.Format({
|
||||||
itag: format.itag,
|
itag: format.itag,
|
||||||
mimeType: format.type,
|
mimeType: format.type,
|
||||||
@ -424,13 +402,36 @@ export function convertInvidiousToLocalFormat(format) {
|
|||||||
: {
|
: {
|
||||||
fps: format.fps,
|
fps: format.fps,
|
||||||
qualityLabel: format.qualityLabel,
|
qualityLabel: format.qualityLabel,
|
||||||
colorInfo: format.colorInfo ?? {}
|
...(format.colorInfo ? { colorInfo: format.colorInfo } : {})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// Adding freeTubeUrl allows us to reuse the code,
|
|
||||||
// to generate the audio tracks for audio only mode, that we use for the local API
|
|
||||||
localFormat.freeTubeUrl = format.url
|
|
||||||
|
|
||||||
return localFormat
|
return localFormat
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {any} format
|
||||||
|
* @param {boolean} trustApiResponse
|
||||||
|
*/
|
||||||
|
export function mapInvidiousLegacyFormat(format, trustApiResponse) {
|
||||||
|
let width
|
||||||
|
let height
|
||||||
|
|
||||||
|
if (trustApiResponse) {
|
||||||
|
const [stringWidth, stringHeight] = format.size.split('x')
|
||||||
|
|
||||||
|
width = parseInt(stringWidth)
|
||||||
|
height = parseInt(stringHeight)
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
itag: format.itag,
|
||||||
|
qualityLabel: format.qualityLabel,
|
||||||
|
fps: format.fps,
|
||||||
|
bitrate: parseInt(format.bitrate),
|
||||||
|
mimeType: format.type,
|
||||||
|
height,
|
||||||
|
width,
|
||||||
|
url: format.url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -1240,7 +1240,7 @@ export function parseLocalTextRuns(runs, emojiSize = 16, options = { looseChanne
|
|||||||
/**
|
/**
|
||||||
* @param {LocalFormat} format
|
* @param {LocalFormat} format
|
||||||
*/
|
*/
|
||||||
export function mapLocalFormat(format) {
|
export function mapLocalLegacyFormat(format) {
|
||||||
return {
|
return {
|
||||||
itag: format.itag,
|
itag: format.itag,
|
||||||
qualityLabel: format.quality_label,
|
qualityLabel: format.quality_label,
|
||||||
|
297
src/renderer/helpers/player/legacyFormatsVttCueParser.js
Normal file
297
src/renderer/helpers/player/legacyFormatsVttCueParser.js
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
import shaka from 'shaka-player'
|
||||||
|
|
||||||
|
const ShakaCue = shaka.text.Cue
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a shaka Cue from a browser native VTTCue
|
||||||
|
* including parsing the karake style text, styling information and unescaping the text.
|
||||||
|
*
|
||||||
|
* Please note this is designed specifically to parse YouTube's VTT files
|
||||||
|
* and makes some assumptions that won't be applicable to other VTT files.
|
||||||
|
* E.g. that the class names always refer to colours, as the actual CSS that the class name points to,
|
||||||
|
* isn't accessible through the VTTCues. It's the only way (as far as I can tell) to support coloured text,
|
||||||
|
* without parsing the VTT file to extract the style section.
|
||||||
|
*
|
||||||
|
* The only tag this currently doesn't parse, is the voice (`<v>`) one, as I wasn't able to find a video with them.
|
||||||
|
* @param {VTTCue} vttCue
|
||||||
|
* @param {boolean} ignoreTextAlignAndPosition auto-generated text tracks are displayed in the bottom left corner if we don't ignore these properties
|
||||||
|
*/
|
||||||
|
export function shakaCueFromVTTCue(vttCue, ignoreTextAlignAndPosition) {
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/WebVTT_API#cue_payload_text_tags
|
||||||
|
// https://w3c.github.io/webvtt
|
||||||
|
|
||||||
|
// strip the voice tags as we don't support them yet
|
||||||
|
/** @type {string} */
|
||||||
|
const text = vttCue.text.replaceAll(/<(?:v(?:[\t .][^>]+)?|\/v)>/g, '')
|
||||||
|
|
||||||
|
// if the text doesn't contain any tags, we can bypass all the parsing and directly return a Cue
|
||||||
|
if (!text.includes('<')) {
|
||||||
|
const shakaCue = new ShakaCue(vttCue.startTime, vttCue.endTime, replaceCueTextEscapeSequences(text))
|
||||||
|
|
||||||
|
copyFromVttCueToShakaCue(vttCue, shakaCue, ignoreTextAlignAndPosition)
|
||||||
|
|
||||||
|
return shakaCue
|
||||||
|
}
|
||||||
|
|
||||||
|
const nestedCues = []
|
||||||
|
|
||||||
|
const TIME_TAG_REGEX = /(?:(?<hours>\d{2,}):)?(?<minutes>\d{2}):(?<seconds>\d{2}\.\d{3})/
|
||||||
|
|
||||||
|
let currentStartTime = vttCue.startTime
|
||||||
|
let currentText = ''
|
||||||
|
/** @type {string|null} */
|
||||||
|
let currentColor = null
|
||||||
|
let bold = false
|
||||||
|
let italic = false
|
||||||
|
let underline = false
|
||||||
|
|
||||||
|
let ruby = false
|
||||||
|
let rubyRt = false
|
||||||
|
|
||||||
|
let inTag = false
|
||||||
|
let tagText = ''
|
||||||
|
|
||||||
|
const createCueWithCurrentConfig = () => {
|
||||||
|
/** @type {'rt'|'ruby'|null} */
|
||||||
|
let rubyTag = null
|
||||||
|
|
||||||
|
if (rubyRt) {
|
||||||
|
rubyTag = 'rt'
|
||||||
|
} else if (ruby) {
|
||||||
|
rubyTag = 'ruby'
|
||||||
|
}
|
||||||
|
|
||||||
|
const cue = createFormattedShakaCue(currentStartTime, vttCue.endTime, currentText, bold, italic, underline, currentColor, rubyTag)
|
||||||
|
|
||||||
|
currentText = ''
|
||||||
|
|
||||||
|
return cue
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let i = 0; i < text.length; i++) {
|
||||||
|
const character = text.charAt(i)
|
||||||
|
|
||||||
|
if (inTag) {
|
||||||
|
if (character === '>') {
|
||||||
|
if (currentText.length > 0) {
|
||||||
|
nestedCues.push(createCueWithCurrentConfig())
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (tagText) {
|
||||||
|
case 'b':
|
||||||
|
bold = true
|
||||||
|
break
|
||||||
|
case '/b':
|
||||||
|
bold = false
|
||||||
|
break
|
||||||
|
case 'i':
|
||||||
|
italic = true
|
||||||
|
break
|
||||||
|
case '/i':
|
||||||
|
italic = false
|
||||||
|
break
|
||||||
|
case 'u':
|
||||||
|
underline = true
|
||||||
|
break
|
||||||
|
case '/u':
|
||||||
|
underline = false
|
||||||
|
break
|
||||||
|
case 'ruby':
|
||||||
|
ruby = true
|
||||||
|
break
|
||||||
|
case '/ruby':
|
||||||
|
ruby = false
|
||||||
|
break
|
||||||
|
case 'rt':
|
||||||
|
rubyRt = true
|
||||||
|
break
|
||||||
|
case '/rt':
|
||||||
|
rubyRt = false
|
||||||
|
break
|
||||||
|
case '/c':
|
||||||
|
currentColor = null
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
if (tagText.charAt(0) === 'c') {
|
||||||
|
// examples
|
||||||
|
// <c></c>
|
||||||
|
// <c.yellow></c>
|
||||||
|
// <c.colorA0AAB4></c>
|
||||||
|
currentColor = tagText.substring(2)
|
||||||
|
} else {
|
||||||
|
const match = tagText.match(TIME_TAG_REGEX)
|
||||||
|
|
||||||
|
if (match) {
|
||||||
|
let startSeconds = parseFloat(match.groups.seconds)
|
||||||
|
startSeconds += parseInt(match.groups.minutes) * 60
|
||||||
|
|
||||||
|
if (match.groups.hours) {
|
||||||
|
startSeconds += parseInt(match.groups.hours) * 60 * 60
|
||||||
|
}
|
||||||
|
|
||||||
|
currentStartTime = startSeconds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
inTag = false
|
||||||
|
tagText = ''
|
||||||
|
} else {
|
||||||
|
tagText += character
|
||||||
|
}
|
||||||
|
} else if (character === '<') {
|
||||||
|
inTag = true
|
||||||
|
|
||||||
|
if (currentText.length > 0) {
|
||||||
|
nestedCues.push(createCueWithCurrentConfig())
|
||||||
|
}
|
||||||
|
|
||||||
|
// create cue with current settings
|
||||||
|
} else if (character === '\n') {
|
||||||
|
const cue = createCueWithCurrentConfig()
|
||||||
|
|
||||||
|
const lineBreakCue = new ShakaCue(currentStartTime, vttCue.endTime, '')
|
||||||
|
lineBreakCue.lineBreak = true
|
||||||
|
|
||||||
|
nestedCues.push(cue, lineBreakCue)
|
||||||
|
} else {
|
||||||
|
currentText += character
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentText.length > 0) {
|
||||||
|
nestedCues.push(createCueWithCurrentConfig())
|
||||||
|
}
|
||||||
|
|
||||||
|
const shakaCue = new ShakaCue(vttCue.startTime, vttCue.endTime, '')
|
||||||
|
|
||||||
|
copyFromVttCueToShakaCue(vttCue, shakaCue, ignoreTextAlignAndPosition)
|
||||||
|
|
||||||
|
shakaCue.nestedCues = nestedCues
|
||||||
|
|
||||||
|
return shakaCue
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {number} startTime
|
||||||
|
* @param {number} endTime
|
||||||
|
* @param {string} text
|
||||||
|
* @param {boolean} bold
|
||||||
|
* @param {boolean} italic
|
||||||
|
* @param {boolean} underline
|
||||||
|
* @param {string|null} color
|
||||||
|
* @param {'ruby'|'rt'|null} rubyTag
|
||||||
|
*/
|
||||||
|
function createFormattedShakaCue(startTime, endTime, text, bold, italic, underline, color, rubyTag) {
|
||||||
|
const cue = new ShakaCue(startTime, endTime, replaceCueTextEscapeSequences(text))
|
||||||
|
|
||||||
|
if (bold) {
|
||||||
|
cue.fontWeight = ShakaCue.fontWeight.BOLD
|
||||||
|
}
|
||||||
|
|
||||||
|
if (italic) {
|
||||||
|
cue.fontStyle = ShakaCue.fontStyle.ITALIC
|
||||||
|
}
|
||||||
|
|
||||||
|
if (underline) {
|
||||||
|
cue.textDecoration = [ShakaCue.textDecoration.UNDERLINE]
|
||||||
|
}
|
||||||
|
|
||||||
|
if (color !== null && color.length > 0) {
|
||||||
|
// even though we can't directly access the style section in the vtt file
|
||||||
|
// YouTube uses predictable class names for their colour classes:
|
||||||
|
// either the name of a colour e.g. "c.yellow" or the hex values e.g. "c.colorEEEEEE"
|
||||||
|
// (I checked the style section in one of their VTT files to verify that)
|
||||||
|
|
||||||
|
if (color.startsWith('color')) {
|
||||||
|
cue.color = color.replace('color', '#')
|
||||||
|
} else {
|
||||||
|
cue.color = color
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rubyTag !== null) {
|
||||||
|
cue.rubyTag = rubyTag
|
||||||
|
}
|
||||||
|
|
||||||
|
return cue
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {VTTCue} vttCue
|
||||||
|
* @param {shaka.text.Cue} shakaCue
|
||||||
|
* @param {boolean} ignoreTextAlignAndPosition
|
||||||
|
*/
|
||||||
|
function copyFromVttCueToShakaCue(vttCue, shakaCue, ignoreTextAlignAndPosition) {
|
||||||
|
shakaCue.lineAlign = vttCue.lineAlign ?? ShakaCue.lineAlign.START
|
||||||
|
shakaCue.positionAlign = vttCue.positionAlign ?? ShakaCue.positionAlign.AUTO
|
||||||
|
shakaCue.size = vttCue.size
|
||||||
|
|
||||||
|
switch (vttCue.vertical) {
|
||||||
|
case '':
|
||||||
|
shakaCue.writingMode = ShakaCue.writingMode.HORIZONTAL_TOP_TO_BOTTOM
|
||||||
|
break
|
||||||
|
case 'lr':
|
||||||
|
shakaCue.writingMode = ShakaCue.writingMode.VERTICAL_LEFT_TO_RIGHT
|
||||||
|
break
|
||||||
|
case 'rl':
|
||||||
|
shakaCue.writingMode = ShakaCue.writingMode.VERTICAL_RIGHT_TO_LEFT
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
shakaCue.lineInterpretation = vttCue.snapToLines ? ShakaCue.lineInterpretation.LINE_NUMBER : ShakaCue.lineInterpretation.PERCENTAGE
|
||||||
|
|
||||||
|
shakaCue.line = vttCue.line === 'auto' ? null : vttCue.line
|
||||||
|
|
||||||
|
if (!ignoreTextAlignAndPosition) {
|
||||||
|
shakaCue.textAlign = vttCue.align
|
||||||
|
shakaCue.position = vttCue.position === 'auto' ? null : vttCue.position
|
||||||
|
}
|
||||||
|
|
||||||
|
// only available in Firefox at the moment, but we might as well copy it, when it's there
|
||||||
|
if (vttCue.region) {
|
||||||
|
const shakaRegion = shakaCue.region
|
||||||
|
|
||||||
|
shakaRegion.id = vttCue.region.id
|
||||||
|
shakaRegion.viewportAnchorX = vttCue.region.viewportAnchorX
|
||||||
|
shakaRegion.viewportAnchorY = vttCue.region.viewportAnchorY
|
||||||
|
shakaRegion.regionAnchorX = vttCue.region.regionAnchorX
|
||||||
|
shakaRegion.regionAnchorY = vttCue.region.regionAnchorY
|
||||||
|
shakaRegion.width = vttCue.region.width
|
||||||
|
shakaRegion.height = vttCue.region.lines
|
||||||
|
shakaRegion.heightUnits = shaka.text.CueRegion.units.LINES
|
||||||
|
shakaRegion.scroll = vttCue.region.scroll
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} text
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
function replaceCueTextEscapeSequences(text) {
|
||||||
|
return text.replaceAll(/&(amp|lt|gt|lrm|rlm|nbsp);/g, escapeSequenceReplacer)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} _match
|
||||||
|
* @param {string} sequence
|
||||||
|
* @returns {string}
|
||||||
|
*/
|
||||||
|
function escapeSequenceReplacer(_match, sequence) {
|
||||||
|
switch (sequence) {
|
||||||
|
case 'amp':
|
||||||
|
return '&'
|
||||||
|
case 'lt':
|
||||||
|
return '<'
|
||||||
|
case 'gt':
|
||||||
|
return '>'
|
||||||
|
case 'lrm':
|
||||||
|
return '\u200E'
|
||||||
|
case 'rlm':
|
||||||
|
return '\u200F'
|
||||||
|
case 'nbsp':
|
||||||
|
return '\u00A0'
|
||||||
|
}
|
||||||
|
}
|
319
src/renderer/helpers/player/utils.js
Normal file
319
src/renderer/helpers/player/utils.js
Normal file
@ -0,0 +1,319 @@
|
|||||||
|
import shaka from 'shaka-player'
|
||||||
|
import { deepCopy } from '../utils'
|
||||||
|
import i18n from '../../i18n/index'
|
||||||
|
import { sponsorBlockSkipSegments } from '../sponsorblock'
|
||||||
|
|
||||||
|
/** @typedef {import('../sponsorblock').SponsorBlockCategory} SponsorBlockCategory */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {shaka.util.Error} error
|
||||||
|
* @param {string} context
|
||||||
|
* @param {string} videoId
|
||||||
|
* @param {object=} details
|
||||||
|
*/
|
||||||
|
export function logShakaError(error, context, videoId, details) {
|
||||||
|
const { Severity, Category, Code } = shaka.util.Error
|
||||||
|
|
||||||
|
// shaka's error type also has a message property but that is apparently only available in uncompiled mode
|
||||||
|
|
||||||
|
/** @type {keyof Severity} */
|
||||||
|
const severityText = Object.keys(Severity).find((/** @type {keyof Severity} */ key) => Severity[key] === error.severity)
|
||||||
|
|
||||||
|
/** @type {keyof Category} */
|
||||||
|
const categoryText = Object.keys(Category).find((/** @type {keyof Category} */ key) => Category[key] === error.category)
|
||||||
|
|
||||||
|
/** @type {keyof Code} */
|
||||||
|
const codeText = Object.keys(Code).find((/** @type {keyof Code} */ key) => Code[key] === error.code)
|
||||||
|
|
||||||
|
const message =
|
||||||
|
'Player Error (category and code explainations here: https://shaka-player-demo.appspot.com/docs/api/shaka.util.Error.html)\n' +
|
||||||
|
`Video ID: "${videoId}"\n` +
|
||||||
|
`FreeTube player context: "${context}"\n\n` +
|
||||||
|
`Severity: ${severityText} (${error.severity})\n` +
|
||||||
|
`Category: ${categoryText} (${error.category})\n` +
|
||||||
|
`Code: ${codeText} (${error.code})\n` +
|
||||||
|
`Stack trace:\n${error.stack}`
|
||||||
|
|
||||||
|
/** @type {*[]} */
|
||||||
|
const args = [message]
|
||||||
|
|
||||||
|
if (error.data && error.data.length > 0) {
|
||||||
|
args.push(
|
||||||
|
'\n\nshaka-player Data:',
|
||||||
|
error.data
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (details) {
|
||||||
|
args.push(
|
||||||
|
'\n\nFreeTube data:',
|
||||||
|
// use deepCopy to get rid of Vue's proxying,
|
||||||
|
// as that requires you click the 3 dots for every property in the logged object to see their values
|
||||||
|
// doing it like this, results in a "clean" object where everything is immediately visible
|
||||||
|
typeof details === 'object' ? deepCopy(details) : details
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
console.error(...args)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} videoId
|
||||||
|
* @param {SponsorBlockCategory[]} categories
|
||||||
|
*/
|
||||||
|
export async function getSponsorBlockSegments(videoId, categories) {
|
||||||
|
const segments = await sponsorBlockSkipSegments(videoId, categories)
|
||||||
|
|
||||||
|
if (segments.length === 0) {
|
||||||
|
return {
|
||||||
|
segments: [],
|
||||||
|
averageDuration: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const averageDuration = segments.reduce((accumulator, segment) => {
|
||||||
|
return accumulator + segment.videoDuration
|
||||||
|
}, 0) / segments.length
|
||||||
|
|
||||||
|
const mappedSegments = segments.map(({ category, segment: [startTime, endTime], UUID }) => {
|
||||||
|
return {
|
||||||
|
uuid: UUID,
|
||||||
|
category,
|
||||||
|
startTime,
|
||||||
|
endTime
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
mappedSegments.sort((a, b) => a.startTime - b.startTime)
|
||||||
|
|
||||||
|
return {
|
||||||
|
segments: mappedSegments,
|
||||||
|
averageDuration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {SponsorBlockCategory} category
|
||||||
|
*/
|
||||||
|
export function translateSponsorBlockCategory(category) {
|
||||||
|
switch (category) {
|
||||||
|
case 'sponsor':
|
||||||
|
return i18n.t('Video.Sponsor Block category.sponsor')
|
||||||
|
case 'intro':
|
||||||
|
return i18n.t('Video.Sponsor Block category.intro')
|
||||||
|
case 'outro':
|
||||||
|
return i18n.t('Video.Sponsor Block category.outro')
|
||||||
|
case 'recap':
|
||||||
|
return this.$t('Video.Sponsor Block category.recap')
|
||||||
|
case 'selfpromo':
|
||||||
|
return i18n.t('Video.Sponsor Block category.self-promotion')
|
||||||
|
case 'interaction':
|
||||||
|
return i18n.t('Video.Sponsor Block category.interaction')
|
||||||
|
case 'music_offtopic':
|
||||||
|
return i18n.t('Video.Sponsor Block category.music offtopic')
|
||||||
|
case 'filler':
|
||||||
|
return i18n.t('Video.Sponsor Block category.filler')
|
||||||
|
default:
|
||||||
|
console.error(`Unknown translation for SponsorBlock category ${category}`)
|
||||||
|
return category
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} qualityLabel
|
||||||
|
* @returns {number}
|
||||||
|
*/
|
||||||
|
export function qualityLabelToDimension(qualityLabel) {
|
||||||
|
return parseInt(qualityLabel.split('p')[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Moves the captions that are the most similar to the display language to the top
|
||||||
|
* and sorts the remaining ones alphabetically.
|
||||||
|
* @param {{
|
||||||
|
* url: string,
|
||||||
|
* label: string,
|
||||||
|
* language: string,
|
||||||
|
* mimeType: string,
|
||||||
|
* isAutotranslated?: boolean
|
||||||
|
* }[]} captions
|
||||||
|
*/
|
||||||
|
export function sortCaptions(captions) {
|
||||||
|
const currentLocale = i18n.locale.replace('_', '-')
|
||||||
|
const userLocale = currentLocale.split('-') // ex. [en,US]
|
||||||
|
|
||||||
|
const collator = new Intl.Collator([currentLocale, 'en'])
|
||||||
|
|
||||||
|
return captions.slice().sort((captionA, captionB) => {
|
||||||
|
const aCode = captionA.language.split('-') // ex. [en,US] or [en]
|
||||||
|
const bCode = captionB.language.split('-')
|
||||||
|
const aName = captionA.label // ex: english (auto-generated)
|
||||||
|
const bName = captionB.label
|
||||||
|
const aIsAutotranslated = !!captionA.isAutotranslated
|
||||||
|
const bIsAutotranslated = !!captionB.isAutotranslated
|
||||||
|
if (aCode[0] === userLocale[0]) { // caption a has same language as user's locale
|
||||||
|
if (bCode[0] === userLocale[0]) { // caption b has same language as user's locale
|
||||||
|
if (bName.includes('auto')) {
|
||||||
|
// prefer caption a: b is auto-generated captions
|
||||||
|
return -1
|
||||||
|
} else if (aName.includes('auto')) {
|
||||||
|
// prefer caption b: a is auto-generated captions
|
||||||
|
return 1
|
||||||
|
} else if (bIsAutotranslated) {
|
||||||
|
// prefer caption a: b is auto-translated captions
|
||||||
|
return -1
|
||||||
|
} else if (aIsAutotranslated) {
|
||||||
|
// prefer caption b: a is auto-translated captions
|
||||||
|
return 1
|
||||||
|
} else if (aCode[1] === userLocale[1]) {
|
||||||
|
// prefer caption a: caption a has same county code as user's locale
|
||||||
|
return -1
|
||||||
|
} else if (bCode[1] === userLocale[1]) {
|
||||||
|
// prefer caption b: caption b has same county code as user's locale
|
||||||
|
return 1
|
||||||
|
} else if (aCode[1] === undefined) {
|
||||||
|
// prefer caption a: no country code is better than wrong country code
|
||||||
|
return -1
|
||||||
|
} else if (bCode[1] === undefined) {
|
||||||
|
// prefer caption b: no country code is better than wrong country code
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// prefer caption a: b does not match user's language
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
} else if (bCode[0] === userLocale[0]) {
|
||||||
|
// prefer caption b: a does not match user's language
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
// sort alphabetically
|
||||||
|
return collator.compare(aName, bName)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When the build doesn't support the local API
|
||||||
|
* we have to use Invidious' DASH manifest, instead of generating our own one.
|
||||||
|
* This function cleans it up, so that we can use it.
|
||||||
|
*
|
||||||
|
* Here is a list of things this function does:
|
||||||
|
* * Removes bogus roles and labels
|
||||||
|
* * Extracts the languages from the audio URLs if available and adds it to the adapation sets
|
||||||
|
* * Adds roles and labels when possible to add support for multiple audio tracks
|
||||||
|
*
|
||||||
|
* Things this function does not do:
|
||||||
|
* * Separate DRC (Stable Volume) from their original counterparts
|
||||||
|
* * Tag HDR video streams (Invidious puts all video streams in the same adaptation set,
|
||||||
|
* to tag HDR and SDR streams we would have to separate them out into multiple adaptation sets)
|
||||||
|
* @param {shaka.extern.xml.Node[]} periods
|
||||||
|
*/
|
||||||
|
export function repairInvidiousManifest(periods) {
|
||||||
|
/** @type {shaka.extern.xml.Node[]} */
|
||||||
|
const audioAdaptationSets = []
|
||||||
|
|
||||||
|
for (const period of periods) {
|
||||||
|
if (Array.isArray(period.children)) {
|
||||||
|
for (const periodChild of period.children) {
|
||||||
|
if (typeof periodChild !== 'string' && periodChild.tagName === 'AdaptationSet' && periodChild.attributes.mimeType?.startsWith('audio/')) {
|
||||||
|
audioAdaptationSets.push(periodChild)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// match YouTube's local API response with English
|
||||||
|
const languageNames = new Intl.DisplayNames('en-US', { type: 'language' })
|
||||||
|
|
||||||
|
for (const audioAdaptationSet of audioAdaptationSets) {
|
||||||
|
// Invidious adds a label to every audio stream with it's bitrate
|
||||||
|
// we need to remove those labels, so that they don't get treated as multiple audio tracks
|
||||||
|
if (audioAdaptationSet.attributes.label) {
|
||||||
|
delete audioAdaptationSet.attributes.label
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Array.isArray(audioAdaptationSet.children)) {
|
||||||
|
// Invidious gives the first audio stream the main role and then the rest of them the alternate role
|
||||||
|
// regardless of which one is actually the main track
|
||||||
|
const roleIndex = audioAdaptationSet.children.findIndex((adaptationSetChild) => {
|
||||||
|
return typeof adaptationSetChild !== 'string' && adaptationSetChild.tagName === 'Role'
|
||||||
|
})
|
||||||
|
|
||||||
|
if (roleIndex !== -1) {
|
||||||
|
audioAdaptationSet.children.splice(roleIndex, 1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract the language and audio content type from the URL if available
|
||||||
|
// and add the language, role and label to the adaption set
|
||||||
|
|
||||||
|
/** @type {shaka.extern.xml.Node | undefined} */
|
||||||
|
const representation = audioAdaptationSet.children
|
||||||
|
.find((child) => typeof child !== 'string' && child.tagName === 'Representation')
|
||||||
|
|
||||||
|
if (representation && Array.isArray(representation.children)) {
|
||||||
|
/** @type {string | undefined} */
|
||||||
|
const baseUrl = representation.children
|
||||||
|
.find((child) => typeof child !== 'string' && child.tagName === 'BaseURL')
|
||||||
|
?.children[0]
|
||||||
|
|
||||||
|
if (baseUrl) {
|
||||||
|
const url = new URL(baseUrl.replaceAll('&', '&'))
|
||||||
|
|
||||||
|
if (url.searchParams.has('xtags')) {
|
||||||
|
const xtags = url.searchParams.get('xtags').split(':')
|
||||||
|
|
||||||
|
const lang = xtags.find(xtag => xtag.startsWith('lang='))?.replace('lang=', '')
|
||||||
|
const audioContent = xtags.find(xtag => xtag.startsWith('acont='))?.replace('acont=', '')
|
||||||
|
|
||||||
|
const labelParts = []
|
||||||
|
|
||||||
|
if (lang) {
|
||||||
|
audioAdaptationSet.attributes.lang = lang
|
||||||
|
|
||||||
|
labelParts.push(languageNames.of(lang))
|
||||||
|
}
|
||||||
|
|
||||||
|
if (audioContent) {
|
||||||
|
let role = ''
|
||||||
|
|
||||||
|
switch (audioContent) {
|
||||||
|
case 'original':
|
||||||
|
role = 'main'
|
||||||
|
labelParts.push('original')
|
||||||
|
break
|
||||||
|
case 'dubbed':
|
||||||
|
role = 'dub'
|
||||||
|
break
|
||||||
|
case 'descriptive':
|
||||||
|
role = 'description'
|
||||||
|
labelParts.push('descriptive')
|
||||||
|
break
|
||||||
|
case 'secondary':
|
||||||
|
role = 'alternate'
|
||||||
|
labelParts.push('secondary')
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
role = 'alternate'
|
||||||
|
labelParts.push('alternative')
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
audioAdaptationSet.children.push({
|
||||||
|
tagName: 'Role',
|
||||||
|
attributes: {
|
||||||
|
schemeIdUri: 'urn:mpeg:dash:role:2011',
|
||||||
|
value: role
|
||||||
|
},
|
||||||
|
children: [],
|
||||||
|
parent: audioAdaptationSet
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (labelParts.length > 0) {
|
||||||
|
audioAdaptationSet.attributes.label = labelParts.join(' ')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,27 @@ async function getVideoHash(videoId) {
|
|||||||
hashArray[1].toString(16).padStart(2, '0')
|
hashArray[1].toString(16).padStart(2, '0')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @typedef {'sponsor' | 'selfpromo' | 'interaction' | 'intro' | 'outro' | 'preview' | 'music_offtopic' | 'filler'} SponsorBlockCategory
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} videoId
|
||||||
|
* @param {SponsorBlockCategory[]} categories
|
||||||
|
* @returns {Promise<{
|
||||||
|
* UUID: string,
|
||||||
|
* actionType: string,
|
||||||
|
* category: SponsorBlockCategory,
|
||||||
|
* description: string,
|
||||||
|
* locked: 1|0,
|
||||||
|
* segment: [
|
||||||
|
* number,
|
||||||
|
* number
|
||||||
|
* ],
|
||||||
|
* videoDuration: number,
|
||||||
|
* votes: number
|
||||||
|
* }[]>}
|
||||||
|
*/
|
||||||
export async function sponsorBlockSkipSegments(videoId, categories) {
|
export async function sponsorBlockSkipSegments(videoId, categories) {
|
||||||
const videoIdHashPrefix = await getVideoHash(videoId)
|
const videoIdHashPrefix = await getVideoHash(videoId)
|
||||||
const requestUrl = `${store.getters.getSponsorBlockUrl}/api/skipSegments/${videoIdHashPrefix}?categories=${JSON.stringify(categories)}`
|
const requestUrl = `${store.getters.getSponsorBlockUrl}/api/skipSegments/${videoIdHashPrefix}?categories=${JSON.stringify(categories)}`
|
||||||
|
@ -253,41 +253,6 @@ export function buildVTTFileLocally(storyboard, videoLengthSeconds) {
|
|||||||
return vttString
|
return vttString
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getFormatsFromHLSManifest(manifestUrl) {
|
|
||||||
const response = await fetch(manifestUrl)
|
|
||||||
const text = await response.text()
|
|
||||||
|
|
||||||
const lines = text.split('\n').filter(line => line)
|
|
||||||
|
|
||||||
const formats = []
|
|
||||||
let currentHeight = 0
|
|
||||||
let currentFPS = 0
|
|
||||||
|
|
||||||
for (const line of lines) {
|
|
||||||
if (line.startsWith('#')) {
|
|
||||||
if (!line.startsWith('#EXT-X-STREAM-INF:')) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
const parts = line.split(',')
|
|
||||||
const height = parts.find(part => part.startsWith('RESOLUTION'))
|
|
||||||
.split('x')[1]
|
|
||||||
const fps = parts.find(part => part.startsWith('FRAME-RATE'))
|
|
||||||
.split('=')[1]
|
|
||||||
currentHeight = parseInt(height)
|
|
||||||
currentFPS = parseInt(fps)
|
|
||||||
} else {
|
|
||||||
formats.push({
|
|
||||||
height: currentHeight,
|
|
||||||
fps: currentFPS,
|
|
||||||
url: line.trim()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return formats
|
|
||||||
}
|
|
||||||
|
|
||||||
export function showToast(message, time = null, action = null) {
|
export function showToast(message, time = null, action = null) {
|
||||||
FtToastEvents.dispatchEvent(new CustomEvent('toast-open', {
|
FtToastEvents.dispatchEvent(new CustomEvent('toast-open', {
|
||||||
detail: {
|
detail: {
|
||||||
|
@ -27,6 +27,7 @@ import {
|
|||||||
faCheck,
|
faCheck,
|
||||||
faChevronRight,
|
faChevronRight,
|
||||||
faCircleUser,
|
faCircleUser,
|
||||||
|
faClock,
|
||||||
faClone,
|
faClone,
|
||||||
faComment,
|
faComment,
|
||||||
faCommentDots,
|
faCommentDots,
|
||||||
@ -76,6 +77,7 @@ import {
|
|||||||
faSearch,
|
faSearch,
|
||||||
faServer,
|
faServer,
|
||||||
faShareAlt,
|
faShareAlt,
|
||||||
|
faSlash,
|
||||||
faSlidersH,
|
faSlidersH,
|
||||||
faSortAlphaDown,
|
faSortAlphaDown,
|
||||||
faSortAlphaDownAlt,
|
faSortAlphaDownAlt,
|
||||||
@ -92,6 +94,7 @@ import {
|
|||||||
faUserCheck,
|
faUserCheck,
|
||||||
faUsers,
|
faUsers,
|
||||||
faUsersSlash,
|
faUsersSlash,
|
||||||
|
faWifi,
|
||||||
} from '@fortawesome/free-solid-svg-icons'
|
} from '@fortawesome/free-solid-svg-icons'
|
||||||
import {
|
import {
|
||||||
faBookmark as farBookmark
|
faBookmark as farBookmark
|
||||||
@ -101,7 +104,7 @@ import {
|
|||||||
faGithub,
|
faGithub,
|
||||||
faMastodon,
|
faMastodon,
|
||||||
} from '@fortawesome/free-brands-svg-icons'
|
} from '@fortawesome/free-brands-svg-icons'
|
||||||
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
|
import { FontAwesomeIcon, FontAwesomeLayers } from '@fortawesome/vue-fontawesome'
|
||||||
import PortalVue from 'portal-vue'
|
import PortalVue from 'portal-vue'
|
||||||
|
|
||||||
Vue.config.devtools = process.env.NODE_ENV === 'development'
|
Vue.config.devtools = process.env.NODE_ENV === 'development'
|
||||||
@ -125,6 +128,7 @@ library.add(
|
|||||||
faCheck,
|
faCheck,
|
||||||
faChevronRight,
|
faChevronRight,
|
||||||
faCircleUser,
|
faCircleUser,
|
||||||
|
faClock,
|
||||||
faClone,
|
faClone,
|
||||||
faComment,
|
faComment,
|
||||||
faCommentDots,
|
faCommentDots,
|
||||||
@ -175,6 +179,7 @@ library.add(
|
|||||||
faSearch,
|
faSearch,
|
||||||
faServer,
|
faServer,
|
||||||
faShareAlt,
|
faShareAlt,
|
||||||
|
faSlash,
|
||||||
faSlidersH,
|
faSlidersH,
|
||||||
faSortAlphaDown,
|
faSortAlphaDown,
|
||||||
faSortAlphaDownAlt,
|
faSortAlphaDownAlt,
|
||||||
@ -191,6 +196,7 @@ library.add(
|
|||||||
faUserCheck,
|
faUserCheck,
|
||||||
faUsers,
|
faUsers,
|
||||||
faUsersSlash,
|
faUsersSlash,
|
||||||
|
faWifi,
|
||||||
|
|
||||||
// solid icons
|
// solid icons
|
||||||
farBookmark,
|
farBookmark,
|
||||||
@ -204,6 +210,7 @@ library.add(
|
|||||||
registerSwiper()
|
registerSwiper()
|
||||||
|
|
||||||
Vue.component('FontAwesomeIcon', FontAwesomeIcon)
|
Vue.component('FontAwesomeIcon', FontAwesomeIcon)
|
||||||
|
Vue.component('FontAwesomeLayers', FontAwesomeLayers)
|
||||||
Vue.directive('observe-visibility', ObserveVisibility)
|
Vue.directive('observe-visibility', ObserveVisibility)
|
||||||
|
|
||||||
/* eslint-disable-next-line no-new */
|
/* eslint-disable-next-line no-new */
|
||||||
|
@ -10,6 +10,7 @@ import profiles from './profiles'
|
|||||||
import settings from './settings'
|
import settings from './settings'
|
||||||
import subscriptions from './subscriptions'
|
import subscriptions from './subscriptions'
|
||||||
import utils from './utils'
|
import utils from './utils'
|
||||||
|
import player from './player'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
history,
|
history,
|
||||||
@ -18,5 +19,6 @@ export default {
|
|||||||
profiles,
|
profiles,
|
||||||
settings,
|
settings,
|
||||||
subscriptions,
|
subscriptions,
|
||||||
utils
|
utils,
|
||||||
|
player
|
||||||
}
|
}
|
||||||
|
35
src/renderer/store/modules/player.js
Normal file
35
src/renderer/store/modules/player.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import { set as vueSet } from 'vue'
|
||||||
|
import { createWebURL } from '../../helpers/utils'
|
||||||
|
|
||||||
|
// replace with a Map after the Vue 3 and Pinia migrations
|
||||||
|
const state = {
|
||||||
|
cachedPlayerLocales: {}
|
||||||
|
}
|
||||||
|
|
||||||
|
const getters = {}
|
||||||
|
|
||||||
|
const actions = {
|
||||||
|
async cachePlayerLocale({ commit }, locale) {
|
||||||
|
const url = createWebURL(`/static/shaka-player-locales/${locale}.json`)
|
||||||
|
|
||||||
|
const response = await fetch(url)
|
||||||
|
const data = await response.json()
|
||||||
|
|
||||||
|
Object.freeze(data)
|
||||||
|
|
||||||
|
commit('addPlayerLocaleToCache', { locale, data })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const mutations = {
|
||||||
|
addPlayerLocaleToCache(state, { locale, data }) {
|
||||||
|
vueSet(state.cachedPlayerLocales, locale, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {
|
||||||
|
state,
|
||||||
|
getters,
|
||||||
|
actions,
|
||||||
|
mutations
|
||||||
|
}
|
@ -300,7 +300,6 @@ const state = {
|
|||||||
settingsSectionSortEnabled: false,
|
settingsSectionSortEnabled: false,
|
||||||
fetchSubscriptionsAutomatically: true,
|
fetchSubscriptionsAutomatically: true,
|
||||||
settingsPassword: '',
|
settingsPassword: '',
|
||||||
allowDashAv1Formats: false,
|
|
||||||
useDeArrowTitles: false,
|
useDeArrowTitles: false,
|
||||||
useDeArrowThumbnails: false,
|
useDeArrowThumbnails: false,
|
||||||
deArrowThumbnailGeneratorUrl: 'https://dearrow-thumb.ajay.app',
|
deArrowThumbnailGeneratorUrl: 'https://dearrow-thumb.ajay.app',
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -47,7 +47,7 @@
|
|||||||
max-inline-size: calc(80vh * 1.78);
|
max-inline-size: calc(80vh * 1.78);
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
.upcomingThumbnail {
|
.videoThumbnail {
|
||||||
inline-size: 100%;
|
inline-size: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,6 +82,46 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.errorContainer {
|
||||||
|
position: absolute;
|
||||||
|
inset: 30px;
|
||||||
|
display: grid;
|
||||||
|
place-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errorWrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
border-radius: 20px;
|
||||||
|
background-color: rgb(0 0 0 / 90%);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errorIcon {
|
||||||
|
font-size: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errorMessage {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (width <= 680px) {
|
||||||
|
.errorContainer {
|
||||||
|
inset: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errorWrapper {
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.errorIcon {
|
||||||
|
font-size: 60px;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,42 +16,42 @@
|
|||||||
class="videoArea"
|
class="videoArea"
|
||||||
>
|
>
|
||||||
<div class="videoAreaMargin">
|
<div class="videoAreaMargin">
|
||||||
<ft-video-player
|
<ft-shaka-video-player
|
||||||
v-if="!isLoading && !hidePlayer && !isUpcoming"
|
v-if="!isLoading && !isUpcoming && !errorMessage"
|
||||||
ref="videoPlayer"
|
ref="player"
|
||||||
:dash-src="dashSrc"
|
:manifest-src="manifestSrc"
|
||||||
:source-list="activeSourceList"
|
:manifest-mime-type="manifestMimeType"
|
||||||
:audio-tracks="audioTracks"
|
:legacy-formats="legacyFormats"
|
||||||
:adaptive-formats="adaptiveFormats"
|
:start-time="startTimeSeconds"
|
||||||
:caption-hybrid-list="captionHybridList"
|
:captions="captions"
|
||||||
:storyboard-src="videoStoryboardSrc"
|
:storyboard-src="videoStoryboardSrc"
|
||||||
:format="activeFormat"
|
:format="activeFormat"
|
||||||
:thumbnail="thumbnail"
|
:thumbnail="thumbnail"
|
||||||
:video-id="videoId"
|
:video-id="videoId"
|
||||||
:length-seconds="videoLengthSeconds"
|
|
||||||
:chapters="videoChapters"
|
:chapters="videoChapters"
|
||||||
:current-chapter-index="videoCurrentChapterIndex"
|
:current-chapter-index="videoCurrentChapterIndex"
|
||||||
|
:title="videoTitle"
|
||||||
:theatre-possible="theatrePossible"
|
:theatre-possible="theatrePossible"
|
||||||
:use-theatre-mode="useTheatreMode"
|
:use-theatre-mode="useTheatreMode"
|
||||||
|
:vr-projection="vrProjection"
|
||||||
class="videoPlayer"
|
class="videoPlayer"
|
||||||
:class="{ theatrePlayer: useTheatreMode }"
|
@error="handlePlayerError"
|
||||||
@ready="handleVideoReady"
|
@loaded="handleVideoLoaded"
|
||||||
|
@timeupdate="updateCurrentChapter"
|
||||||
@ended="handleVideoEnded"
|
@ended="handleVideoEnded"
|
||||||
@error="handleVideoError"
|
|
||||||
@store-caption-list="captionHybridList = $event"
|
|
||||||
@toggle-theatre-mode="useTheatreMode = !useTheatreMode"
|
@toggle-theatre-mode="useTheatreMode = !useTheatreMode"
|
||||||
v-on="!hideChapters && videoChapters.length > 0 ? { timeupdate: updateCurrentChapter } : {}"
|
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
v-if="!isLoading && isUpcoming"
|
v-if="!isLoading && (isUpcoming || errorMessage)"
|
||||||
class="videoPlayer"
|
class="videoPlayer"
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
:src="thumbnail"
|
:src="thumbnail"
|
||||||
class="upcomingThumbnail"
|
class="videoThumbnail"
|
||||||
alt=""
|
alt=""
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
|
v-if="isUpcoming"
|
||||||
class="premiereDate"
|
class="premiereDate"
|
||||||
>
|
>
|
||||||
<font-awesome-icon
|
<font-awesome-icon
|
||||||
@ -81,6 +81,25 @@
|
|||||||
{{ $t("Video.Starting soon, please refresh the page to check again") }}
|
{{ $t("Video.Starting soon, please refresh the page to check again") }}
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
v-else-if="errorMessage"
|
||||||
|
class="errorContainer"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
class="errorWrapper"
|
||||||
|
>
|
||||||
|
<font-awesome-icon
|
||||||
|
:icon="customErrorIcon || ['fas', 'exclamation-circle']"
|
||||||
|
aria-hidden="true"
|
||||||
|
class="errorIcon"
|
||||||
|
/>
|
||||||
|
<p
|
||||||
|
class="errorMessage"
|
||||||
|
>
|
||||||
|
{{ errorMessage }}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -150,7 +169,7 @@
|
|||||||
:class="{ theatreWatchVideo: useTheatreMode }"
|
:class="{ theatreWatchVideo: useTheatreMode }"
|
||||||
:channel-thumbnail="channelThumbnail"
|
:channel-thumbnail="channelThumbnail"
|
||||||
:channel-name="channelName"
|
:channel-name="channelName"
|
||||||
:video-player-ready="videoPlayerReady"
|
:video-player-ready="videoPlayerLoaded"
|
||||||
:force-state="commentsEnabled ? null : 'noComment'"
|
:force-state="commentsEnabled ? null : 'noComment'"
|
||||||
@timestamp-event="changeTimestamp"
|
@timestamp-event="changeTimestamp"
|
||||||
/>
|
/>
|
||||||
|
@ -426,7 +426,6 @@ Settings:
|
|||||||
أرقام. %i معرف الفيديو. يمكنك أيضا استخدام "\" أو "/" لإنشاء مجلدات فرعية.
|
أرقام. %i معرف الفيديو. يمكنك أيضا استخدام "\" أو "/" لإنشاء مجلدات فرعية.
|
||||||
Enter Fullscreen on Display Rotate: وضع ملء الشاشة عند تدوير الشاشة
|
Enter Fullscreen on Display Rotate: وضع ملء الشاشة عند تدوير الشاشة
|
||||||
Skip by Scrolling Over Video Player: تخطي بالتمرير فوق مشغل الفيديو
|
Skip by Scrolling Over Video Player: تخطي بالتمرير فوق مشغل الفيديو
|
||||||
Allow DASH AV1 formats: السماح بتنسيقات DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'إعدادات الخصوصية'
|
Privacy Settings: 'إعدادات الخصوصية'
|
||||||
Remember History: 'تذّكر سجلّ المشاهدة'
|
Remember History: 'تذّكر سجلّ المشاهدة'
|
||||||
@ -905,11 +904,6 @@ Video:
|
|||||||
Loop Playlist: تكرار قائمة التشغيل
|
Loop Playlist: تكرار قائمة التشغيل
|
||||||
Starting soon, please refresh the page to check again: سيبدأ قريباً ، يرجى تحديث
|
Starting soon, please refresh the page to check again: سيبدأ قريباً ، يرجى تحديث
|
||||||
الصفحة للتحقق مرة أخرى
|
الصفحة للتحقق مرة أخرى
|
||||||
Audio:
|
|
||||||
Best: الأفضل
|
|
||||||
High: عال
|
|
||||||
Medium: متوسط
|
|
||||||
Low: منخفض
|
|
||||||
audio only: الصوت فقط
|
audio only: الصوت فقط
|
||||||
video only: الفيديو فقط
|
video only: الفيديو فقط
|
||||||
Download Video: تحميل الفيديو
|
Download Video: تحميل الفيديو
|
||||||
@ -922,7 +916,6 @@ Video:
|
|||||||
Video has been saved: تم حفظ الفيديو
|
Video has been saved: تم حفظ الفيديو
|
||||||
Save Video: احفظ الفيديو
|
Save Video: احفظ الفيديو
|
||||||
Video has been removed from your saved list: تمت إزالة الفيديو من قائمتك المحفوظة
|
Video has been removed from your saved list: تمت إزالة الفيديو من قائمتك المحفوظة
|
||||||
translated from English: مترجمة من الإنجليزية
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: موسيقى خارجة عن المألوف
|
music offtopic: موسيقى خارجة عن المألوف
|
||||||
interaction: تفاعل
|
interaction: تفاعل
|
||||||
@ -932,7 +925,6 @@ Video:
|
|||||||
sponsor: الرعاة
|
sponsor: الرعاة
|
||||||
filler: حشو
|
filler: حشو
|
||||||
recap: الخلاصة
|
recap: الخلاصة
|
||||||
Skipped segment: تم تخطي المقطع
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: تكرار قوائم التشغيل
|
looping playlists: تكرار قوائم التشغيل
|
||||||
@ -949,26 +941,6 @@ Video:
|
|||||||
video: فيديو
|
video: فيديو
|
||||||
OpenInTemplate: فتح في {externalPlayer}
|
OpenInTemplate: فتح في {externalPlayer}
|
||||||
Premieres on: العرض الأول بتاريخ
|
Premieres on: العرض الأول بتاريخ
|
||||||
Stats:
|
|
||||||
video id: معرف الفيديو (يوتيوب)
|
|
||||||
player resolution: المعاينه
|
|
||||||
fps: معدل الإطارات
|
|
||||||
frame drop: إسقاط الإطار
|
|
||||||
buffered: مخزنة
|
|
||||||
out of: خارج عن
|
|
||||||
bandwidth: سرعة الاتصال
|
|
||||||
volume: الصوت
|
|
||||||
Video statistics are not available for legacy videos: إحصائيات الفيديو غير متوفرة
|
|
||||||
لمقاطع الفيديو القديمة
|
|
||||||
Video ID: معرف الفيديو
|
|
||||||
Resolution: الدقة
|
|
||||||
Bitrate: معدل البت
|
|
||||||
Player Dimensions: عدد اللاعبين
|
|
||||||
Volume: الصوت
|
|
||||||
Bandwidth: عرض النطاق الترددي
|
|
||||||
Buffered: مخزنة
|
|
||||||
Dropped / Total Frames: إسقاط / إجمالي الإطارات
|
|
||||||
Mimetype: نمط ميمي
|
|
||||||
Premieres in: العرض الأول في
|
Premieres in: العرض الأول في
|
||||||
Premieres: العرض الأولي
|
Premieres: العرض الأولي
|
||||||
Scroll to Bottom: انتقل إلى الأسفل
|
Scroll to Bottom: انتقل إلى الأسفل
|
||||||
@ -1119,9 +1091,6 @@ Tooltips:
|
|||||||
على Mac) ثم انقر فوق الماوس للعودة بسرعة إلى معدل التشغيل الافتراضي (1x ما لم
|
على Mac) ثم انقر فوق الماوس للعودة بسرعة إلى معدل التشغيل الافتراضي (1x ما لم
|
||||||
يتم تغييره في الإعدادات).
|
يتم تغييره في الإعدادات).
|
||||||
Skip by Scrolling Over Video Player: استخدم عجلة التمرير لتخطي الفيديو بنمط MPV.
|
Skip by Scrolling Over Video Player: استخدم عجلة التمرير لتخطي الفيديو بنمط MPV.
|
||||||
Allow DASH AV1 formats: قد تبدو تنسيقات DASH AV1 أفضل من تنسيقات DASH H.264. تتطلب
|
|
||||||
تنسيقات DASH AV1 مزيدا من الطاقة للتشغيل! وهي غير متوفرة في جميع مقاطع الفيديو
|
|
||||||
، وفي هذه الحالات سيستخدم المشغل تنسيقات DASH H.264 بدلا من ذلك.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: عند تفعيلها، سوف يستخدم فريتيوب طريقة RSS بدلًا من طريقته
|
Fetch Feeds from RSS: عند تفعيلها، سوف يستخدم فريتيوب طريقة RSS بدلًا من طريقته
|
||||||
المعتادة لجلب صفحة اشتراكاتك. طريقة RSS أسرع وتتخطى حجب الآي بي IP، لكنها لا
|
المعتادة لجلب صفحة اشتراكاتك. طريقة RSS أسرع وتتخطى حجب الآي بي IP، لكنها لا
|
||||||
|
@ -277,7 +277,6 @@ Settings:
|
|||||||
1440p: ''
|
1440p: ''
|
||||||
4k: ''
|
4k: ''
|
||||||
8k: ''
|
8k: ''
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Screenshot:
|
Screenshot:
|
||||||
Enable: ''
|
Enable: ''
|
||||||
Format Label: ''
|
Format Label: ''
|
||||||
@ -612,11 +611,6 @@ Video:
|
|||||||
Download Video: ''
|
Download Video: ''
|
||||||
video only: ''
|
video only: ''
|
||||||
audio only: ''
|
audio only: ''
|
||||||
Audio:
|
|
||||||
Low: ''
|
|
||||||
Medium: ''
|
|
||||||
High: ''
|
|
||||||
Best: ''
|
|
||||||
Published:
|
Published:
|
||||||
Jan: ''
|
Jan: ''
|
||||||
Feb: ''
|
Feb: ''
|
||||||
@ -650,9 +644,7 @@ Video:
|
|||||||
Published on: ''
|
Published on: ''
|
||||||
Streamed on: ''
|
Streamed on: ''
|
||||||
Started streaming on: ''
|
Started streaming on: ''
|
||||||
translated from English: ''
|
|
||||||
Publicationtemplate: ''
|
Publicationtemplate: ''
|
||||||
Skipped segment: ''
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: ''
|
sponsor: ''
|
||||||
intro: ''
|
intro: ''
|
||||||
@ -676,17 +668,6 @@ Video:
|
|||||||
reversing playlists: ''
|
reversing playlists: ''
|
||||||
shuffling playlists: ''
|
shuffling playlists: ''
|
||||||
looping playlists: ''
|
looping playlists: ''
|
||||||
Stats:
|
|
||||||
Video statistics are not available for legacy videos: ''
|
|
||||||
Video ID: ''
|
|
||||||
Resolution: ''
|
|
||||||
Player Dimensions: ''
|
|
||||||
Bitrate: ''
|
|
||||||
Volume: ''
|
|
||||||
Bandwidth: ''
|
|
||||||
Buffered: ''
|
|
||||||
Dropped / Total Frames: ''
|
|
||||||
Mimetype: ''
|
|
||||||
#& Videos
|
#& Videos
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
@ -782,7 +763,6 @@ Tooltips:
|
|||||||
Force Local Backend for Legacy Formats: ''
|
Force Local Backend for Legacy Formats: ''
|
||||||
Proxy Videos Through Invidious: ''
|
Proxy Videos Through Invidious: ''
|
||||||
Default Video Format: ''
|
Default Video Format: ''
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Scroll Playback Rate Over Video Player: ''
|
Scroll Playback Rate Over Video Player: ''
|
||||||
Skip by Scrolling Over Video Player: ''
|
Skip by Scrolling Over Video Player: ''
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
|
@ -441,7 +441,6 @@ Settings:
|
|||||||
Folder Button: Избор на папка
|
Folder Button: Избор на папка
|
||||||
Enter Fullscreen on Display Rotate: Режим на цял екран при завъртане на дисплея
|
Enter Fullscreen on Display Rotate: Режим на цял екран при завъртане на дисплея
|
||||||
Skip by Scrolling Over Video Player: Превъртане над видео плейъра
|
Skip by Scrolling Over Video Player: Превъртане над видео плейъра
|
||||||
Allow DASH AV1 formats: Разрешаване на форматите DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Настройки за поверителност'
|
Privacy Settings: 'Настройки за поверителност'
|
||||||
Remember History: 'Запазване на историята'
|
Remember History: 'Запазване на историята'
|
||||||
@ -924,11 +923,6 @@ Video:
|
|||||||
Published on: 'Публикувано на'
|
Published on: 'Публикувано на'
|
||||||
Publicationtemplate: 'Преди {number} {unit}'
|
Publicationtemplate: 'Преди {number} {unit}'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
Best: Най-добро
|
|
||||||
High: Високо
|
|
||||||
Medium: Средно
|
|
||||||
Low: Ниско
|
|
||||||
audio only: само аудио
|
audio only: само аудио
|
||||||
video only: само видео
|
video only: само видео
|
||||||
Download Video: Сваляне на видео
|
Download Video: Сваляне на видео
|
||||||
@ -942,7 +936,6 @@ Video:
|
|||||||
със запазени
|
със запазени
|
||||||
Video has been saved: Видеото е запазено
|
Video has been saved: Видеото е запазено
|
||||||
Save Video: Запазване на видео
|
Save Video: Запазване на видео
|
||||||
translated from English: преведено от английски
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
interaction: Взаимодействие
|
interaction: Взаимодействие
|
||||||
self-promotion: Самореклама
|
self-promotion: Самореклама
|
||||||
@ -952,7 +945,6 @@ Video:
|
|||||||
music offtopic: Музика извън темата
|
music offtopic: Музика извън темата
|
||||||
recap: Резюме
|
recap: Резюме
|
||||||
filler: Запълване
|
filler: Запълване
|
||||||
Skipped segment: Пропуснат сегмент
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: повтаряне на плейлисти
|
looping playlists: повтаряне на плейлисти
|
||||||
@ -968,26 +960,6 @@ Video:
|
|||||||
playlist: плейлист
|
playlist: плейлист
|
||||||
video: видео
|
video: видео
|
||||||
OpenInTemplate: Отваряне във {externalPlayer}
|
OpenInTemplate: Отваряне във {externalPlayer}
|
||||||
Stats:
|
|
||||||
fps: Кадри в секунда
|
|
||||||
video id: Идентификатор на видеоклип (YouTube)
|
|
||||||
player resolution: Изглед
|
|
||||||
volume: Сила на звука
|
|
||||||
frame drop: Пропускане на кадър
|
|
||||||
bandwidth: Скорост на свързване
|
|
||||||
buffered: Буферирани
|
|
||||||
out of: от
|
|
||||||
Resolution: Резолюция
|
|
||||||
Video ID: Идентификатор на видеото
|
|
||||||
Player Dimensions: Размери на плейъра
|
|
||||||
Bitrate: Побитова скорост
|
|
||||||
Bandwidth: Пропускателна способност
|
|
||||||
Volume: Сила на звука
|
|
||||||
Dropped / Total Frames: Отпаднали / Общо кадри
|
|
||||||
Mimetype: MIME тип
|
|
||||||
Buffered: Буферирани
|
|
||||||
Video statistics are not available for legacy videos: Статистиката не е налична
|
|
||||||
за наследени видеа
|
|
||||||
Premieres on: Премиера на
|
Premieres on: Премиера на
|
||||||
Premieres in: Премиери в
|
Premieres in: Премиери в
|
||||||
Premieres: Премиерa
|
Premieres: Премиерa
|
||||||
@ -1133,10 +1105,6 @@ Tooltips:
|
|||||||
(1x, освен ако не е променена в настройките).
|
(1x, освен ако не е променена в настройките).
|
||||||
Skip by Scrolling Over Video Player: Използване колелцето на мишката за превъртане
|
Skip by Scrolling Over Video Player: Използване колелцето на мишката за превъртане
|
||||||
на видео в стил MPV.
|
на видео в стил MPV.
|
||||||
Allow DASH AV1 formats: Форматите DASH AV1 може да изглеждат по-добре от DASH
|
|
||||||
H.264. DASH AV1 форматите изискват повече енергия за възпроизвеждане! Те не
|
|
||||||
са налични за всички видеа, като в тези случаи плейърът ще използва DASH H.264
|
|
||||||
вместо тях.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Region for Trending: Регионът на набиращите популярност дава възможност да се
|
Region for Trending: Регионът на набиращите популярност дава възможност да се
|
||||||
избере страната, за която това се отнася.
|
избере страната, за която това се отнася.
|
||||||
|
@ -534,11 +534,6 @@ Video:
|
|||||||
Published on: 'Publicat el'
|
Published on: 'Publicat el'
|
||||||
Publicationtemplate: '{number} {unit} fa'
|
Publicationtemplate: '{number} {unit} fa'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
High: Alta
|
|
||||||
Best: Millor
|
|
||||||
Low: Baixa
|
|
||||||
Medium: Mitjana
|
|
||||||
Started streaming on: Retransmissió iniciada el
|
Started streaming on: Retransmissió iniciada el
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
interaction: interacció
|
interaction: interacció
|
||||||
@ -547,7 +542,6 @@ Video:
|
|||||||
intro: introducció
|
intro: introducció
|
||||||
outro: conclusió
|
outro: conclusió
|
||||||
self-promotion: autopromoció
|
self-promotion: autopromoció
|
||||||
Skipped segment: Segment saltat
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
starting video at offset: començant el vídeo al punt donat
|
starting video at offset: començant el vídeo al punt donat
|
||||||
@ -572,7 +566,6 @@ Video:
|
|||||||
Download Video: Descàrrega El Vídeo
|
Download Video: Descàrrega El Vídeo
|
||||||
video only: només vídeo
|
video only: només vídeo
|
||||||
Streamed on: Retransmès en directe el
|
Streamed on: Retransmès en directe el
|
||||||
translated from English: traduït de l'anglès
|
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
Sort By:
|
Sort By:
|
||||||
|
@ -281,7 +281,6 @@ Settings:
|
|||||||
1440p: '١٤٤٠p'
|
1440p: '١٤٤٠p'
|
||||||
4k: '٤k'
|
4k: '٤k'
|
||||||
8k: '٨k'
|
8k: '٨k'
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Screenshot:
|
Screenshot:
|
||||||
Enable: ''
|
Enable: ''
|
||||||
Format Label: ''
|
Format Label: ''
|
||||||
@ -626,11 +625,6 @@ Video:
|
|||||||
Download Video: 'داگرتنی ڤیدیۆ'
|
Download Video: 'داگرتنی ڤیدیۆ'
|
||||||
video only: 'تەنیا ڤیدیۆ'
|
video only: 'تەنیا ڤیدیۆ'
|
||||||
audio only: 'تەنیا دەنگ'
|
audio only: 'تەنیا دەنگ'
|
||||||
Audio:
|
|
||||||
Low: 'نزم'
|
|
||||||
Medium: 'مامناوەند'
|
|
||||||
High: 'بەرز'
|
|
||||||
Best: 'باشترین'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: ''
|
Jan: ''
|
||||||
Feb: ''
|
Feb: ''
|
||||||
@ -664,9 +658,7 @@ Video:
|
|||||||
Published on: 'بڵاوکرایەوە لە'
|
Published on: 'بڵاوکرایەوە لە'
|
||||||
Streamed on: ''
|
Streamed on: ''
|
||||||
Started streaming on: ''
|
Started streaming on: ''
|
||||||
translated from English: ''
|
|
||||||
Publicationtemplate: ''
|
Publicationtemplate: ''
|
||||||
Skipped segment: ''
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: ''
|
sponsor: ''
|
||||||
intro: ''
|
intro: ''
|
||||||
@ -690,17 +682,6 @@ Video:
|
|||||||
reversing playlists: ''
|
reversing playlists: ''
|
||||||
shuffling playlists: ''
|
shuffling playlists: ''
|
||||||
looping playlists: ''
|
looping playlists: ''
|
||||||
Stats:
|
|
||||||
Video statistics are not available for legacy videos: ''
|
|
||||||
Video ID: ''
|
|
||||||
Resolution: ''
|
|
||||||
Player Dimensions: ''
|
|
||||||
Bitrate: ''
|
|
||||||
Volume: ''
|
|
||||||
Bandwidth: ''
|
|
||||||
Buffered: ''
|
|
||||||
Dropped / Total Frames: ''
|
|
||||||
Mimetype: ''
|
|
||||||
#& Videos
|
#& Videos
|
||||||
Unhide Channel: پیشاندانی کەناڵ
|
Unhide Channel: پیشاندانی کەناڵ
|
||||||
Hide Channel: شاردنەوەی کەناڵ
|
Hide Channel: شاردنەوەی کەناڵ
|
||||||
@ -798,7 +779,6 @@ Tooltips:
|
|||||||
Force Local Backend for Legacy Formats: ''
|
Force Local Backend for Legacy Formats: ''
|
||||||
Proxy Videos Through Invidious: ''
|
Proxy Videos Through Invidious: ''
|
||||||
Default Video Format: ''
|
Default Video Format: ''
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Scroll Playback Rate Over Video Player: ''
|
Scroll Playback Rate Over Video Player: ''
|
||||||
Skip by Scrolling Over Video Player: ''
|
Skip by Scrolling Over Video Player: ''
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
|
@ -439,7 +439,6 @@ Settings:
|
|||||||
Folder Button: Vybrat složku
|
Folder Button: Vybrat složku
|
||||||
Enter Fullscreen on Display Rotate: Při otočení displeje přejít na celou obrazovku
|
Enter Fullscreen on Display Rotate: Při otočení displeje přejít na celou obrazovku
|
||||||
Skip by Scrolling Over Video Player: Posouvat čas posuvem kolečka myši na přehrávači
|
Skip by Scrolling Over Video Player: Posouvat čas posuvem kolečka myši na přehrávači
|
||||||
Allow DASH AV1 formats: Povolit formáty DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Nastavení soukromí'
|
Privacy Settings: 'Nastavení soukromí'
|
||||||
Remember History: 'Zapamatovat historii'
|
Remember History: 'Zapamatovat historii'
|
||||||
@ -880,11 +879,6 @@ Video:
|
|||||||
Download Video: 'Stáhnout Video'
|
Download Video: 'Stáhnout Video'
|
||||||
video only: 'pouze video'
|
video only: 'pouze video'
|
||||||
audio only: 'pouze zvuk'
|
audio only: 'pouze zvuk'
|
||||||
Audio:
|
|
||||||
Low: 'Nízká'
|
|
||||||
Medium: 'Střední'
|
|
||||||
High: 'Vysoká'
|
|
||||||
Best: 'Nejlepší'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: 'Leden'
|
Jan: 'Leden'
|
||||||
Feb: 'Únor'
|
Feb: 'Únor'
|
||||||
@ -925,7 +919,6 @@ Video:
|
|||||||
Save Video: Uložit video
|
Save Video: Uložit video
|
||||||
Video has been removed from your saved list: Video bylo odstraněno z vašeho uloženého
|
Video has been removed from your saved list: Video bylo odstraněno z vašeho uloženého
|
||||||
seznamu
|
seznamu
|
||||||
translated from English: přeloženo z angličtiny
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Není hudba
|
music offtopic: Není hudba
|
||||||
interaction: Interakce
|
interaction: Interakce
|
||||||
@ -935,7 +928,6 @@ Video:
|
|||||||
sponsor: Sponzor
|
sponsor: Sponzor
|
||||||
recap: Shrnutí
|
recap: Shrnutí
|
||||||
filler: Výplň
|
filler: Výplň
|
||||||
Skipped segment: Přeskočen segment
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
opening specific video in a playlist (falling back to opening the video): Otevření
|
opening specific video in a playlist (falling back to opening the video): Otevření
|
||||||
@ -952,18 +944,6 @@ Video:
|
|||||||
video: video
|
video: video
|
||||||
OpenInTemplate: Otevřít v {externalPlayer}
|
OpenInTemplate: Otevřít v {externalPlayer}
|
||||||
Premieres on: Premiéra
|
Premieres on: Premiéra
|
||||||
Stats:
|
|
||||||
Mimetype: Typ int. média
|
|
||||||
Video statistics are not available for legacy videos: Statistiky videí nejsou
|
|
||||||
k dispozici pro starší videa
|
|
||||||
Video ID: ID videa
|
|
||||||
Resolution: Rozlišení
|
|
||||||
Player Dimensions: Rozměry přehrávače
|
|
||||||
Bitrate: Bitrate
|
|
||||||
Volume: Hlasitost
|
|
||||||
Bandwidth: Bandwidth
|
|
||||||
Buffered: V mezipaměti
|
|
||||||
Dropped / Total Frames: Vyřazené / Celkový počet snímků
|
|
||||||
Premieres in: Premiéra za
|
Premieres in: Premiéra za
|
||||||
Premieres: Premiéra
|
Premieres: Premiéra
|
||||||
Show Super Chat Comment: Zobrazit komentář Super Chat
|
Show Super Chat Comment: Zobrazit komentář Super Chat
|
||||||
@ -1100,9 +1080,6 @@ Tooltips:
|
|||||||
není změněná v nastavení).
|
není změněná v nastavení).
|
||||||
Skip by Scrolling Over Video Player: Pomocí rolovacího kolečka můžete video přeskakovat
|
Skip by Scrolling Over Video Player: Pomocí rolovacího kolečka můžete video přeskakovat
|
||||||
ve stylu MPV.
|
ve stylu MPV.
|
||||||
Allow DASH AV1 formats: Formáty DASH AV1 mohou vypadat lépe než formáty DASH H.264,
|
|
||||||
vyžadují ale k přehrávání větší výkon! Nejsou k dispozici u všech videí, v těchto
|
|
||||||
případech přehrávač místo nich použije formáty DASH H.264.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: 'Je-li povoleno, FreeTube použije RSS místo své výchozí
|
Fetch Feeds from RSS: 'Je-li povoleno, FreeTube použije RSS místo své výchozí
|
||||||
metody pro získání vašich odběrů. RSS je rychlejší a brání blokování IP, ale
|
metody pro získání vašich odběrů. RSS je rychlejší a brání blokování IP, ale
|
||||||
|
@ -284,7 +284,6 @@ Settings:
|
|||||||
1440p: '1440p'
|
1440p: '1440p'
|
||||||
4k: '4k'
|
4k: '4k'
|
||||||
8k: '8k'
|
8k: '8k'
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Screenshot:
|
Screenshot:
|
||||||
Enable: 'Galluogi Sgrinlun'
|
Enable: 'Galluogi Sgrinlun'
|
||||||
Format Label: 'Fformat Sgrinluniau'
|
Format Label: 'Fformat Sgrinluniau'
|
||||||
@ -630,11 +629,6 @@ Video:
|
|||||||
Download Video: 'Lawrlwytho Fideo'
|
Download Video: 'Lawrlwytho Fideo'
|
||||||
video only: 'fideo yn unig'
|
video only: 'fideo yn unig'
|
||||||
audio only: 'sain yn unig'
|
audio only: 'sain yn unig'
|
||||||
Audio:
|
|
||||||
Low: 'Isel'
|
|
||||||
Medium: 'Canolig'
|
|
||||||
High: 'Uwch'
|
|
||||||
Best: 'Gorau'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: 'Ion'
|
Jan: 'Ion'
|
||||||
Feb: 'Chw'
|
Feb: 'Chw'
|
||||||
@ -668,9 +662,7 @@ Video:
|
|||||||
Published on: ''
|
Published on: ''
|
||||||
Streamed on: ''
|
Streamed on: ''
|
||||||
Started streaming on: ''
|
Started streaming on: ''
|
||||||
translated from English: ''
|
|
||||||
Publicationtemplate: ''
|
Publicationtemplate: ''
|
||||||
Skipped segment: ''
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: 'Noddwr'
|
sponsor: 'Noddwr'
|
||||||
intro: 'Cyflwyniad'
|
intro: 'Cyflwyniad'
|
||||||
@ -694,17 +686,6 @@ Video:
|
|||||||
reversing playlists: ''
|
reversing playlists: ''
|
||||||
shuffling playlists: ''
|
shuffling playlists: ''
|
||||||
looping playlists: ''
|
looping playlists: ''
|
||||||
Stats:
|
|
||||||
Video statistics are not available for legacy videos: ''
|
|
||||||
Video ID: 'ID fideo'
|
|
||||||
Resolution: 'Eglurdeb'
|
|
||||||
Player Dimensions: ''
|
|
||||||
Bitrate: 'Cyfradd didau'
|
|
||||||
Volume: 'Sain'
|
|
||||||
Bandwidth: 'Lled band'
|
|
||||||
Buffered: ''
|
|
||||||
Dropped / Total Frames: ''
|
|
||||||
Mimetype: 'Math mime'
|
|
||||||
#& Videos
|
#& Videos
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
@ -800,7 +781,6 @@ Tooltips:
|
|||||||
Force Local Backend for Legacy Formats: ''
|
Force Local Backend for Legacy Formats: ''
|
||||||
Proxy Videos Through Invidious: ''
|
Proxy Videos Through Invidious: ''
|
||||||
Default Video Format: ''
|
Default Video Format: ''
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Scroll Playback Rate Over Video Player: ''
|
Scroll Playback Rate Over Video Player: ''
|
||||||
Skip by Scrolling Over Video Player: ''
|
Skip by Scrolling Over Video Player: ''
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
|
@ -363,7 +363,6 @@ Settings:
|
|||||||
Scroll Playback Rate Over Video Player: Scroll Afspilningshastighed i Videoafspiller
|
Scroll Playback Rate Over Video Player: Scroll Afspilningshastighed i Videoafspiller
|
||||||
Scroll Volume Over Video Player: Scroll Lydstyrke i Videoafspiller
|
Scroll Volume Over Video Player: Scroll Lydstyrke i Videoafspiller
|
||||||
Skip by Scrolling Over Video Player: Spring Over ved at Scrolle Over Videoafspilleren
|
Skip by Scrolling Over Video Player: Spring Over ved at Scrolle Over Videoafspilleren
|
||||||
Allow DASH AV1 formats: Tillad DASH AV1-formater
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Privatlivsindstillinger'
|
Privacy Settings: 'Privatlivsindstillinger'
|
||||||
Remember History: 'Husk Historik'
|
Remember History: 'Husk Historik'
|
||||||
@ -801,28 +800,10 @@ Video:
|
|||||||
Save Video: Gem Video
|
Save Video: Gem Video
|
||||||
Started streaming on: Begyndte at sende
|
Started streaming on: Begyndte at sende
|
||||||
Streamed on: Sendt
|
Streamed on: Sendt
|
||||||
Audio:
|
|
||||||
Best: Bedst
|
|
||||||
High: Høj
|
|
||||||
Medium: Middel
|
|
||||||
Low: Lav
|
|
||||||
audio only: kun lyd
|
audio only: kun lyd
|
||||||
video only: kun video
|
video only: kun video
|
||||||
Download Video: Hent Video
|
Download Video: Hent Video
|
||||||
Premieres on: Har premiere på
|
Premieres on: Har premiere på
|
||||||
Stats:
|
|
||||||
Resolution: Skærmopløsning
|
|
||||||
Player Dimensions: Afspillerdimensioner
|
|
||||||
Bitrate: Bitrate
|
|
||||||
Volume: Lydstyrke
|
|
||||||
Bandwidth: Båndbredde
|
|
||||||
Buffered: Bufferet
|
|
||||||
Dropped / Total Frames: Tabte / Antal Billeder
|
|
||||||
Mimetype: Mimetype
|
|
||||||
Video statistics are not available for legacy videos: Videostatistikker er ikke
|
|
||||||
tilgængelige for gamle videoer
|
|
||||||
Video ID: Video ID
|
|
||||||
translated from English: oversat fra engelsk
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
intro: Intro
|
intro: Intro
|
||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
@ -847,7 +828,6 @@ Video:
|
|||||||
video: video
|
video: video
|
||||||
playlist: playliste
|
playlist: playliste
|
||||||
UnsupportedActionTemplate: '{externalPlayer} understøtter ikke: {action}'
|
UnsupportedActionTemplate: '{externalPlayer} understøtter ikke: {action}'
|
||||||
Skipped segment: Sprunget over segment
|
|
||||||
Hide Channel: Skjul Kanal
|
Hide Channel: Skjul Kanal
|
||||||
Unhide Channel: Vis Kanal
|
Unhide Channel: Vis Kanal
|
||||||
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Live
|
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Live
|
||||||
|
@ -447,7 +447,6 @@ Settings:
|
|||||||
Unterordner zu erstellen.
|
Unterordner zu erstellen.
|
||||||
Enter Fullscreen on Display Rotate: Beim Drehen des Bildschirms zu Vollbild wechseln
|
Enter Fullscreen on Display Rotate: Beim Drehen des Bildschirms zu Vollbild wechseln
|
||||||
Skip by Scrolling Over Video Player: Überspringen durch Scrollen über den Videoabspieler
|
Skip by Scrolling Over Video Player: Überspringen durch Scrollen über den Videoabspieler
|
||||||
Allow DASH AV1 formats: DASH AV1-Formate zulassen
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: Abo-Einstellungen
|
Subscription Settings: Abo-Einstellungen
|
||||||
Hide Videos on Watch: Videos bei Wiedergabe ausblenden
|
Hide Videos on Watch: Videos bei Wiedergabe ausblenden
|
||||||
@ -905,11 +904,6 @@ Video:
|
|||||||
Loop Playlist: Wiedergabeliste wiederholen
|
Loop Playlist: Wiedergabeliste wiederholen
|
||||||
Starting soon, please refresh the page to check again: Es beginnt bald, bitte aktualisiere
|
Starting soon, please refresh the page to check again: Es beginnt bald, bitte aktualisiere
|
||||||
die Seite, um es erneut zu überprüfen
|
die Seite, um es erneut zu überprüfen
|
||||||
Audio:
|
|
||||||
Best: Am besten
|
|
||||||
High: Hoch
|
|
||||||
Medium: Mittel
|
|
||||||
Low: Niedrig
|
|
||||||
audio only: nur Audio
|
audio only: nur Audio
|
||||||
video only: nur Video
|
video only: nur Video
|
||||||
Download Video: Video herunterladen
|
Download Video: Video herunterladen
|
||||||
@ -923,7 +917,6 @@ Video:
|
|||||||
Videos entfernt
|
Videos entfernt
|
||||||
Video has been saved: Video wurde gespeichert
|
Video has been saved: Video wurde gespeichert
|
||||||
Save Video: Video speichern
|
Save Video: Video speichern
|
||||||
translated from English: aus dem Englischen übersetzt
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Musik Offtopic
|
music offtopic: Musik Offtopic
|
||||||
interaction: Interaktion
|
interaction: Interaktion
|
||||||
@ -933,7 +926,6 @@ Video:
|
|||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
recap: Rekapitulation
|
recap: Rekapitulation
|
||||||
filler: Füller
|
filler: Füller
|
||||||
Skipped segment: Segment übersprungen
|
|
||||||
External Player:
|
External Player:
|
||||||
OpenInTemplate: In {externalPlayer} öffnen
|
OpenInTemplate: In {externalPlayer} öffnen
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
@ -950,26 +942,6 @@ Video:
|
|||||||
playlist: Wiedergabeliste
|
playlist: Wiedergabeliste
|
||||||
video: Video
|
video: Video
|
||||||
Premieres on: Premiere am
|
Premieres on: Premiere am
|
||||||
Stats:
|
|
||||||
volume: Lautstärke
|
|
||||||
fps: BpS
|
|
||||||
frame drop: Bildverlust
|
|
||||||
bandwidth: Verbindungsgeschwindigkeit
|
|
||||||
out of: aus
|
|
||||||
player resolution: Ansichtsfenster
|
|
||||||
video id: Video-ID (YouTube)
|
|
||||||
buffered: Gepuffert
|
|
||||||
Video ID: Video-ID
|
|
||||||
Resolution: Auflösung
|
|
||||||
Player Dimensions: Abspieler-Größe
|
|
||||||
Bitrate: Bitrate
|
|
||||||
Volume: Lautstärke
|
|
||||||
Bandwidth: Bandbreite
|
|
||||||
Buffered: Gepuffert
|
|
||||||
Dropped / Total Frames: Entfallene / gesamte Einzelbilder
|
|
||||||
Mimetype: MIME-Typ
|
|
||||||
Video statistics are not available for legacy videos: Videostatistiken sind für
|
|
||||||
ältere Videos nicht verfügbar
|
|
||||||
Premieres in: Premieren in
|
Premieres in: Premieren in
|
||||||
Premieres: Premiere
|
Premieres: Premiere
|
||||||
Show Super Chat Comment: Super-Chat-Kommentar anzeigen
|
Show Super Chat Comment: Super-Chat-Kommentar anzeigen
|
||||||
@ -1192,10 +1164,6 @@ Tooltips:
|
|||||||
(1x, sofern sie nicht in den Einstellungen geändert wurde).
|
(1x, sofern sie nicht in den Einstellungen geändert wurde).
|
||||||
Skip by Scrolling Over Video Player: Verwende das Scrollrad, um durch das Video
|
Skip by Scrolling Over Video Player: Verwende das Scrollrad, um durch das Video
|
||||||
zu springen, MPV-Stil.
|
zu springen, MPV-Stil.
|
||||||
Allow DASH AV1 formats: DASH AV1-Formate können besser aussehen als DASH H.264-Formate.
|
|
||||||
Die DASH AV1-Formate benötigen mehr Leistung für die Wiedergabe! Sie sind nicht
|
|
||||||
bei allen Videos verfügbar. In diesen Fällen verwendet der Abspieler stattdessen
|
|
||||||
die DASH H.264-Formate.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Alle benutzerdefinierten Befehlszeilenargumente,
|
Custom External Player Arguments: Alle benutzerdefinierten Befehlszeilenargumente,
|
||||||
getrennt durch Semikolon (';'), die an den externen Abspieler übergeben werden
|
getrennt durch Semikolon (';'), die an den externen Abspieler übergeben werden
|
||||||
|
@ -303,7 +303,6 @@ Settings:
|
|||||||
Βίντεο
|
Βίντεο
|
||||||
Enter Fullscreen on Display Rotate: Μετάβαση στην Πλήρη Οθόνη κατά την Περιστροφή
|
Enter Fullscreen on Display Rotate: Μετάβαση στην Πλήρη Οθόνη κατά την Περιστροφή
|
||||||
Οθόνης
|
Οθόνης
|
||||||
Allow DASH AV1 formats: Να επιτρέπονται οι μορφές DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Ρυθμίσεις απορρήτου'
|
Privacy Settings: 'Ρυθμίσεις απορρήτου'
|
||||||
Remember History: 'Διατήρηση ιστορικού'
|
Remember History: 'Διατήρηση ιστορικού'
|
||||||
@ -776,11 +775,6 @@ Video:
|
|||||||
Published on: 'Δημοσιεύθηκε στις'
|
Published on: 'Δημοσιεύθηκε στις'
|
||||||
Publicationtemplate: 'δημοσιεύθηκε πριν από {number} {unit}'
|
Publicationtemplate: 'δημοσιεύθηκε πριν από {number} {unit}'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
Best: Καλύτερο
|
|
||||||
High: Υψηλή
|
|
||||||
Medium: Μεσαία
|
|
||||||
Low: Χαμηλή
|
|
||||||
Starting soon, please refresh the page to check again: Έναρξη σύντομα, παρακαλούμε
|
Starting soon, please refresh the page to check again: Έναρξη σύντομα, παρακαλούμε
|
||||||
κάντε ανανέωση της σελίδας για επανέλεγχο
|
κάντε ανανέωση της σελίδας για επανέλεγχο
|
||||||
audio only: μόνο ήχος
|
audio only: μόνο ήχος
|
||||||
@ -796,7 +790,6 @@ Video:
|
|||||||
λίστα σας
|
λίστα σας
|
||||||
Video has been saved: Το βίντεο έχει αποθηκευτεί
|
Video has been saved: Το βίντεο έχει αποθηκευτεί
|
||||||
Save Video: Αποθήκευση βίντεο
|
Save Video: Αποθήκευση βίντεο
|
||||||
translated from English: μεταφράστηκε από τα Αγγλικά
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
intro: Εισαγωγή
|
intro: Εισαγωγή
|
||||||
interaction: Αλληλεπίδραση
|
interaction: Αλληλεπίδραση
|
||||||
@ -823,26 +816,6 @@ Video:
|
|||||||
OpeningTemplate: Άνοιγμα {videoOrPlaylist} σε {externalPlayer}...
|
OpeningTemplate: Άνοιγμα {videoOrPlaylist} σε {externalPlayer}...
|
||||||
UnsupportedActionTemplate: 'Το {externalPlayer} δεν υποστηρίζει: {action}'
|
UnsupportedActionTemplate: 'Το {externalPlayer} δεν υποστηρίζει: {action}'
|
||||||
Premieres on: Πρεμιέρες στις
|
Premieres on: Πρεμιέρες στις
|
||||||
Stats:
|
|
||||||
video id: Αναγνωριστικό του βίντεο (YouTube)
|
|
||||||
player resolution: Θύρα προβολής
|
|
||||||
volume: Ένταση ήχου
|
|
||||||
fps: FPS
|
|
||||||
out of: από
|
|
||||||
frame drop: Πτώση καρέ
|
|
||||||
bandwidth: Ταχύτητα σύνδεσης
|
|
||||||
Mimetype: Τύπος αρχείου
|
|
||||||
Video statistics are not available for legacy videos: Τα στατιστικά βίντεο δεν
|
|
||||||
είναι διαθέσιμα για βίντεο παλαιού τύπου
|
|
||||||
Video ID: Αναγνωριστικό βίντεο
|
|
||||||
Resolution: Ανάλυση
|
|
||||||
Player Dimensions: Διαστάσεις αναπαραγωγής βίντεο
|
|
||||||
Bitrate: Ρυθμός μεταβίβασης δεδομένων
|
|
||||||
Volume: Ένταση
|
|
||||||
Bandwidth: Εύρος ζώνης
|
|
||||||
Buffered: Φορτωμένο
|
|
||||||
Dropped / Total Frames: Πτωμένα / Συνολικά Καρέ
|
|
||||||
Skipped segment: Τμήμα που παραλείφθηκε
|
|
||||||
Show Super Chat Comment: Εμφάνιση Σχολίου Super Chat
|
Show Super Chat Comment: Εμφάνιση Σχολίου Super Chat
|
||||||
Scroll to Bottom: Κύλιση προς τα Κάτω
|
Scroll to Bottom: Κύλιση προς τα Κάτω
|
||||||
Premieres: Πρεμιέρες
|
Premieres: Πρεμιέρες
|
||||||
@ -992,10 +965,6 @@ Tooltips:
|
|||||||
ρυθμό αναπαραγωγής (1x εκτός αν έχει αλλάξει στις ρυθμίσεις).
|
ρυθμό αναπαραγωγής (1x εκτός αν έχει αλλάξει στις ρυθμίσεις).
|
||||||
Skip by Scrolling Over Video Player: Χρησιμοποιήστε τον τροχό κύλισης για να παρακάμψετε
|
Skip by Scrolling Over Video Player: Χρησιμοποιήστε τον τροχό κύλισης για να παρακάμψετε
|
||||||
το βίντεο, στυλ MPV.
|
το βίντεο, στυλ MPV.
|
||||||
Allow DASH AV1 formats: Οι μορφές DASH AV1 μπορεί να φαίνονται καλύτερες από τις
|
|
||||||
μορφές DASH H.264. Οι μορφές DASH AV1 απαιτούν περισσότερη ισχύ για την αναπαραγωγή!
|
|
||||||
Δεν είναι διαθέσιμα σε όλα τα βίντεο, σε αυτές τις περιπτώσεις το πρόγραμμα
|
|
||||||
αναπαραγωγής θα χρησιμοποιήσει τις μορφές DASH H.264.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Region for Trending: Η περιοχή των τάσεων σας επιτρέπει να επιλέξετε τα δημοφιλή
|
Region for Trending: Η περιοχή των τάσεων σας επιτρέπει να επιλέξετε τα δημοφιλή
|
||||||
βίντεο της χώρας που θέλετε να εμφανίζονται.
|
βίντεο της χώρας που θέλετε να εμφανίζονται.
|
||||||
|
@ -422,7 +422,6 @@ Settings:
|
|||||||
1440p: 1440p
|
1440p: 1440p
|
||||||
4k: 4k
|
4k: 4k
|
||||||
8k: 8k
|
8k: 8k
|
||||||
Allow DASH AV1 formats: Allow DASH AV1 formats
|
|
||||||
Screenshot:
|
Screenshot:
|
||||||
Enable: Enable Screenshot
|
Enable: Enable Screenshot
|
||||||
Format Label: Screenshot Format
|
Format Label: Screenshot Format
|
||||||
@ -818,11 +817,6 @@ Video:
|
|||||||
Download Video: Download Video
|
Download Video: Download Video
|
||||||
video only: video only
|
video only: video only
|
||||||
audio only: audio only
|
audio only: audio only
|
||||||
Audio:
|
|
||||||
Low: Low
|
|
||||||
Medium: Medium
|
|
||||||
High: High
|
|
||||||
Best: Best
|
|
||||||
Published:
|
Published:
|
||||||
Jan: Jan
|
Jan: Jan
|
||||||
Feb: Feb
|
Feb: Feb
|
||||||
@ -856,9 +850,7 @@ Video:
|
|||||||
Published on: Published on
|
Published on: Published on
|
||||||
Streamed on: Streamed on
|
Streamed on: Streamed on
|
||||||
Started streaming on: Started streaming on
|
Started streaming on: Started streaming on
|
||||||
translated from English: translated from English
|
|
||||||
Publicationtemplate: '{number} {unit} ago'
|
Publicationtemplate: '{number} {unit} ago'
|
||||||
Skipped segment: Skipped segment
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
intro: Intro
|
intro: Intro
|
||||||
@ -882,17 +874,33 @@ Video:
|
|||||||
reversing playlists: reversing playlists
|
reversing playlists: reversing playlists
|
||||||
shuffling playlists: shuffling playlists
|
shuffling playlists: shuffling playlists
|
||||||
looping playlists: looping playlists
|
looping playlists: looping playlists
|
||||||
Stats:
|
Player:
|
||||||
Video statistics are not available for legacy videos: Video statistics are not available for legacy videos
|
TranslatedCaptionTemplate: '{language} (translated from "{originalLanguage}")'
|
||||||
Video ID: Video ID
|
Audio Tracks: Audio Tracks
|
||||||
Resolution: Resolution
|
Theatre Mode: Theater Mode
|
||||||
Player Dimensions: Player Dimensions
|
Exit Theatre Mode: Exit Theater Mode
|
||||||
Bitrate: Bitrate
|
Full Window: Full Window
|
||||||
Volume: Volume
|
Exit Full Window: Exit Full Window
|
||||||
Bandwidth: Bandwidth
|
Take Screenshot: Take Screenshot
|
||||||
Buffered: Buffered
|
Show Stats: Show Stats
|
||||||
Dropped / Total Frames: Dropped / Total Frames
|
Hide Stats: Hide Stats
|
||||||
Mimetype: Mimetype
|
Stats:
|
||||||
|
Stats: Stats
|
||||||
|
Video ID: 'Video ID: {videoId}'
|
||||||
|
Media Formats: 'Media Formats: {formats}'
|
||||||
|
Resolution: 'Resolution: {width}x{height}@{frameRate}'
|
||||||
|
Player Dimensions: 'Player Dimensions: {width}x{height}'
|
||||||
|
Bitrate: 'Bitrate: {bitrate} kbps'
|
||||||
|
Volume: 'Volume: {volumePercentage}%'
|
||||||
|
Bandwidth: 'Bandwidth: {bandwidth} kbps'
|
||||||
|
Buffered: 'Buffered: {bufferedPercentage}%'
|
||||||
|
Dropped Frames / Total Frames: 'Dropped Frames: {droppedFrames} / Total Frames: {totalFrames}'
|
||||||
|
CodecAudio: 'Codec: {audioCodec} ({audioItag})'
|
||||||
|
CodecsVideoAudio: 'Codecs: {videoCodec} ({videoItag}) / {audioCodec} ({audioItag})'
|
||||||
|
CodecsVideoAudioNoItags: 'Codecs: {videoCodec} / {audioCodec}'
|
||||||
|
You appear to be offline: You appear to be offline.
|
||||||
|
Playback will resume automatically when your connection comes back: Playback will resume automatically when your connection comes back.
|
||||||
|
Skipped segment: 'Skipped {segmentCategory} segment'
|
||||||
#& Videos
|
#& Videos
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
@ -932,6 +940,8 @@ Change Format:
|
|||||||
this video
|
this video
|
||||||
Audio formats are not available for this video: Audio formats are not available
|
Audio formats are not available for this video: Audio formats are not available
|
||||||
for this video
|
for this video
|
||||||
|
Legacy formats are not available for this video: Legacy formats are not available
|
||||||
|
for this video
|
||||||
Share:
|
Share:
|
||||||
Share Video: Share Video
|
Share Video: Share Video
|
||||||
Share Channel: Share Channel
|
Share Channel: Share Channel
|
||||||
@ -1015,9 +1025,6 @@ Tooltips:
|
|||||||
Default Video Format: Set the formats used when a video plays. DASH formats can
|
Default Video Format: Set the formats used when a video plays. DASH formats can
|
||||||
play higher qualities. Legacy formats are limited to a max of 720p but use less
|
play higher qualities. Legacy formats are limited to a max of 720p but use less
|
||||||
bandwidth. Audio formats are audio only streams.
|
bandwidth. Audio formats are audio only streams.
|
||||||
Allow DASH AV1 formats: DASH AV1 formats may look better than DASH H.264 formats.
|
|
||||||
DASH AV1 formats require more power to playback! They are not available on all videos,
|
|
||||||
in those cases the player will use the DASH H.264 formats instead.
|
|
||||||
Scroll Playback Rate Over Video Player: While the cursor is over the video, press and
|
Scroll Playback Rate Over Video Player: While the cursor is over the video, press and
|
||||||
hold the Control key (Command Key on Mac) and scroll the mouse wheel forwards or backwards to control
|
hold the Control key (Command Key on Mac) and scroll the mouse wheel forwards or backwards to control
|
||||||
the playback rate. Press and hold the Control key (Command Key on Mac) and left click the mouse
|
the playback rate. Press and hold the Control key (Command Key on Mac) and left click the mouse
|
||||||
|
@ -434,7 +434,6 @@ Settings:
|
|||||||
Ask Path: Ask for Save Folder
|
Ask Path: Ask for Save Folder
|
||||||
File Name Label: Filename pattern
|
File Name Label: Filename pattern
|
||||||
Skip by Scrolling Over Video Player: Skip by scrolling over video player
|
Skip by Scrolling Over Video Player: Skip by scrolling over video player
|
||||||
Allow DASH AV1 formats: Allow DASH AV1 formats
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
External Player Settings: External Player Settings
|
External Player Settings: External Player Settings
|
||||||
External Player: External Player
|
External Player: External Player
|
||||||
@ -899,11 +898,6 @@ Video:
|
|||||||
#& Videos
|
#& Videos
|
||||||
Started streaming on: Started streaming on
|
Started streaming on: Started streaming on
|
||||||
Streamed on: Streamed on
|
Streamed on: Streamed on
|
||||||
Audio:
|
|
||||||
Best: Best
|
|
||||||
High: High
|
|
||||||
Medium: Medium
|
|
||||||
Low: Low
|
|
||||||
audio only: audio only
|
audio only: audio only
|
||||||
video only: video only
|
video only: video only
|
||||||
Download Video: Download Video
|
Download Video: Download Video
|
||||||
@ -915,7 +909,6 @@ Video:
|
|||||||
list
|
list
|
||||||
Video has been saved: Video has been saved
|
Video has been saved: Video has been saved
|
||||||
Save Video: Save Video
|
Save Video: Save Video
|
||||||
translated from English: translated from English
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Music offtopic
|
music offtopic: Music offtopic
|
||||||
interaction: Interaction
|
interaction: Interaction
|
||||||
@ -925,7 +918,6 @@ Video:
|
|||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
recap: Recap
|
recap: Recap
|
||||||
filler: Filler
|
filler: Filler
|
||||||
Skipped segment: Skipped segment
|
|
||||||
External Player:
|
External Player:
|
||||||
OpenInTemplate: Open in {externalPlayer}
|
OpenInTemplate: Open in {externalPlayer}
|
||||||
video: video
|
video: video
|
||||||
@ -942,26 +934,6 @@ Video:
|
|||||||
shuffling playlists: shuffling playlists
|
shuffling playlists: shuffling playlists
|
||||||
looping playlists: looping playlists
|
looping playlists: looping playlists
|
||||||
Premieres on: Premieres on
|
Premieres on: Premieres on
|
||||||
Stats:
|
|
||||||
video id: Video ID (YouTube)
|
|
||||||
player resolution: Viewport
|
|
||||||
volume: Volume
|
|
||||||
frame drop: Frame Drop
|
|
||||||
buffered: Buffered
|
|
||||||
fps: FPS
|
|
||||||
bandwidth: Connection Speed
|
|
||||||
out of: out of
|
|
||||||
Player Dimensions: Player dimensions
|
|
||||||
Bitrate: Bitrate
|
|
||||||
Volume: Volume
|
|
||||||
Bandwidth: Bandwidth
|
|
||||||
Buffered: Buffered
|
|
||||||
Dropped / Total Frames: Dropped / Total frames
|
|
||||||
Mimetype: Media type
|
|
||||||
Resolution: Resolution
|
|
||||||
Video statistics are not available for legacy videos: Video statistics are not
|
|
||||||
available for legacy videos
|
|
||||||
Video ID: Video ID
|
|
||||||
Premieres in: Premieres in
|
Premieres in: Premieres in
|
||||||
Premieres: Premieres
|
Premieres: Premieres
|
||||||
Show Super Chat Comment: Show Super Chat comment
|
Show Super Chat Comment: Show Super Chat comment
|
||||||
@ -973,6 +945,33 @@ Video:
|
|||||||
Hide Channel: Hide channel
|
Hide Channel: Hide channel
|
||||||
Unhide Channel: Show channel
|
Unhide Channel: Show channel
|
||||||
More Options: More options
|
More Options: More options
|
||||||
|
Player:
|
||||||
|
TranslatedCaptionTemplate: '{language} (translated from ‘{originalLanguage}’)'
|
||||||
|
Audio Tracks: Audio Tracks
|
||||||
|
Theatre Mode: Theatre Mode
|
||||||
|
Exit Theatre Mode: Exit Theatre Mode
|
||||||
|
Full Window: Full Window
|
||||||
|
Exit Full Window: Exit Full Window
|
||||||
|
Take Screenshot: Take Screenshot
|
||||||
|
Show Stats: Show Stats
|
||||||
|
Hide Stats: Hide Stats
|
||||||
|
Stats:
|
||||||
|
Stats: Stats
|
||||||
|
Video ID: 'Video ID: {videoId}'
|
||||||
|
Media Formats: 'Media formats: {formats}'
|
||||||
|
Resolution: 'Resolution: {width}x{height}@{frameRate}'
|
||||||
|
Player Dimensions: 'Player dimensions: {width}x{height}'
|
||||||
|
Bitrate: 'Bitrate: {bitrate} kbps'
|
||||||
|
Volume: 'Volume: {volumePercentage}%'
|
||||||
|
Bandwidth: 'Bandwidth: {bandwidth} kbps'
|
||||||
|
Buffered: 'Buffered: {bufferedPercentage}%'
|
||||||
|
Dropped Frames / Total Frames: 'Dropped frames: {droppedFrames} / Total frames: {totalFrames}'
|
||||||
|
CodecAudio: 'Codec: {audioCodec} ({audioItag})'
|
||||||
|
CodecsVideoAudio: 'Codecs: {videoCodec} ({videoItag}) / {audioCodec} ({audioItag})'
|
||||||
|
CodecsVideoAudioNoItags: 'Codecs: {videoCodec} / {audioCodec}'
|
||||||
|
You appear to be offline: You appear to be offline.
|
||||||
|
Playback will resume automatically when your connection comes back: Playback will resume automatically when your connection comes back.
|
||||||
|
Skipped segment: 'Skipped {segmentCategory} segment'
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
Sort By:
|
Sort By:
|
||||||
@ -1104,9 +1103,6 @@ Tooltips:
|
|||||||
rate (1x unless it has been changed in the settings).
|
rate (1x unless it has been changed in the settings).
|
||||||
Skip by Scrolling Over Video Player: Use the scroll wheel to skip through the
|
Skip by Scrolling Over Video Player: Use the scroll wheel to skip through the
|
||||||
video, MPV style.
|
video, MPV style.
|
||||||
Allow DASH AV1 formats: DASH AV1 formats may look better than DASH H.264 formats.
|
|
||||||
DASH AV1 formats require more power to playback! They are not available on all
|
|
||||||
videos, in those cases the player will use the DASH H.264 formats instead.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Region for Trending: The region of trends allows you to pick which country’s trending
|
Region for Trending: The region of trends allows you to pick which country’s trending
|
||||||
videos you want to have displayed.
|
videos you want to have displayed.
|
||||||
|
@ -539,29 +539,11 @@ Video:
|
|||||||
Reverse Playlist: Lista de reproducción invertida
|
Reverse Playlist: Lista de reproducción invertida
|
||||||
Shuffle Playlist: Lista de reproducción aleatoria
|
Shuffle Playlist: Lista de reproducción aleatoria
|
||||||
Loop Playlist: Lista de reproducción en bucle
|
Loop Playlist: Lista de reproducción en bucle
|
||||||
translated from English: traducido del inglés
|
|
||||||
Stats:
|
|
||||||
Mimetype: Tipo de medio
|
|
||||||
Resolution: Resolución
|
|
||||||
Player Dimensions: Tamaño del reproductor
|
|
||||||
Bitrate: Tasa de bits
|
|
||||||
Volume: Volumen
|
|
||||||
Bandwidth: Ancho de banda
|
|
||||||
Video statistics are not available for legacy videos: Estadísticas no disponibles
|
|
||||||
para videos heredados
|
|
||||||
Video ID: ID del video
|
|
||||||
Buffered: Amplificado
|
|
||||||
Dropped / Total Frames: Caídos / Fotogramas totales
|
|
||||||
Video has been removed from your saved list: El video se ha eliminado de su lista
|
Video has been removed from your saved list: El video se ha eliminado de su lista
|
||||||
de guardado
|
de guardado
|
||||||
Video has been saved: Video guardado
|
Video has been saved: Video guardado
|
||||||
Starting soon, please refresh the page to check again: Empezará pronto, por favor
|
Starting soon, please refresh the page to check again: Empezará pronto, por favor
|
||||||
actualice la página para volver a revisar
|
actualice la página para volver a revisar
|
||||||
Audio:
|
|
||||||
Best: Máxima
|
|
||||||
Low: Baja
|
|
||||||
Medium: Media
|
|
||||||
High: Alta
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
reversing playlists: revirtiendo listas
|
reversing playlists: revirtiendo listas
|
||||||
@ -594,7 +576,6 @@ Video:
|
|||||||
Copy Invidious Channel Link: Copiar link del canal en Invidious
|
Copy Invidious Channel Link: Copiar link del canal en Invidious
|
||||||
Copy YouTube Channel Link: Copiar link del canal en YouTube
|
Copy YouTube Channel Link: Copiar link del canal en YouTube
|
||||||
Premieres on: En estreno
|
Premieres on: En estreno
|
||||||
Skipped segment: Omitida esta parte
|
|
||||||
Download Video: Descargar video
|
Download Video: Descargar video
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
|
@ -441,7 +441,6 @@ Settings:
|
|||||||
Enter Fullscreen on Display Rotate: Entrar en pantalla completa al girar la pantalla
|
Enter Fullscreen on Display Rotate: Entrar en pantalla completa al girar la pantalla
|
||||||
Skip by Scrolling Over Video Player: Omitir al desplazarse sobre el reproductor
|
Skip by Scrolling Over Video Player: Omitir al desplazarse sobre el reproductor
|
||||||
de vídeo
|
de vídeo
|
||||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Ajustes de Privacidad'
|
Privacy Settings: 'Ajustes de Privacidad'
|
||||||
Remember History: 'Recordar historial'
|
Remember History: 'Recordar historial'
|
||||||
@ -926,11 +925,6 @@ Video:
|
|||||||
Loop Playlist: Reproducción en bucle
|
Loop Playlist: Reproducción en bucle
|
||||||
Starting soon, please refresh the page to check again: Comenzará en breve. Por favor,
|
Starting soon, please refresh the page to check again: Comenzará en breve. Por favor,
|
||||||
recarga la página para comprobarlo
|
recarga la página para comprobarlo
|
||||||
Audio:
|
|
||||||
Best: Máxima
|
|
||||||
High: Alta
|
|
||||||
Medium: Media
|
|
||||||
Low: Baja
|
|
||||||
audio only: audio únicamente
|
audio only: audio únicamente
|
||||||
video only: vídeo únicamente
|
video only: vídeo únicamente
|
||||||
Download Video: Descargar vídeo
|
Download Video: Descargar vídeo
|
||||||
@ -944,7 +938,6 @@ Video:
|
|||||||
de guardados
|
de guardados
|
||||||
Video has been saved: El vídeo ha sido guardado
|
Video has been saved: El vídeo ha sido guardado
|
||||||
Save Video: Guardar el vídeo
|
Save Video: Guardar el vídeo
|
||||||
translated from English: traducido del inglés
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: No relacionado con la música
|
music offtopic: No relacionado con la música
|
||||||
interaction: Interacción
|
interaction: Interacción
|
||||||
@ -954,7 +947,6 @@ Video:
|
|||||||
sponsor: Patrocinador
|
sponsor: Patrocinador
|
||||||
recap: Recapitulación
|
recap: Recapitulación
|
||||||
filler: Relleno
|
filler: Relleno
|
||||||
Skipped segment: Segmento saltado
|
|
||||||
External Player:
|
External Player:
|
||||||
playlist: lista de reproducción
|
playlist: lista de reproducción
|
||||||
video: vídeo
|
video: vídeo
|
||||||
@ -971,26 +963,6 @@ Video:
|
|||||||
UnsupportedActionTemplate: '{externalPlayer} no soporta: {action}'
|
UnsupportedActionTemplate: '{externalPlayer} no soporta: {action}'
|
||||||
OpeningTemplate: Abriendo {videoOrPlaylist} en {externalPlayer}...
|
OpeningTemplate: Abriendo {videoOrPlaylist} en {externalPlayer}...
|
||||||
Premieres on: Se estrena el
|
Premieres on: Se estrena el
|
||||||
Stats:
|
|
||||||
bandwidth: Velocidad de conexión
|
|
||||||
volume: Volumen
|
|
||||||
video id: ID del vídeo (Youtube)
|
|
||||||
player resolution: Ventana
|
|
||||||
fps: FPS
|
|
||||||
frame drop: Pérdida de fotogramas
|
|
||||||
buffered: En buffer
|
|
||||||
out of: sin
|
|
||||||
Video statistics are not available for legacy videos: Las estadísticas de vídeo
|
|
||||||
no están disponibles para los vídeos heredados
|
|
||||||
Bitrate: Tasa de bits
|
|
||||||
Volume: Volumen
|
|
||||||
Mimetype: Tipo de medio
|
|
||||||
Resolution: Resolución
|
|
||||||
Player Dimensions: Dimensiones del reproductor
|
|
||||||
Bandwidth: Ancho de banda
|
|
||||||
Video ID: ID de vídeo
|
|
||||||
Buffered: En búfer
|
|
||||||
Dropped / Total Frames: Fotogramas Perdidos / Fotogramas Totales
|
|
||||||
Premieres in: Estrenos en
|
Premieres in: Estrenos en
|
||||||
Premieres: Estrenos
|
Premieres: Estrenos
|
||||||
Show Super Chat Comment: Mostrar los comentarios del Super Chat
|
Show Super Chat Comment: Mostrar los comentarios del Super Chat
|
||||||
@ -1147,10 +1119,6 @@ Tooltips:
|
|||||||
ajustes).
|
ajustes).
|
||||||
Skip by Scrolling Over Video Player: Use la rueda de desplazamiento para saltar
|
Skip by Scrolling Over Video Player: Use la rueda de desplazamiento para saltar
|
||||||
el vídeo, estilo MPV.
|
el vídeo, estilo MPV.
|
||||||
Allow DASH AV1 formats: Los formatos DASH AV1 pueden verse mejor que los formatos
|
|
||||||
DASH H.264. ¡Los formatos DASH AV1 requieren más potencia para reproducirse!
|
|
||||||
No están disponibles en todos los videos, en esos casos el reproductor usará
|
|
||||||
los formatos DASH H.264 en su lugar.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Region for Trending: La región de las tendencias permite ver los vídeos más populares
|
Region for Trending: La región de las tendencias permite ver los vídeos más populares
|
||||||
en un país determinado.
|
en un país determinado.
|
||||||
|
@ -274,7 +274,6 @@ Settings:
|
|||||||
Scroll Volume Over Video Player: Barra de volumen en el reproductor
|
Scroll Volume Over Video Player: Barra de volumen en el reproductor
|
||||||
Skip by Scrolling Over Video Player: Saltar Deslizando sobre el Reproductor de
|
Skip by Scrolling Over Video Player: Saltar Deslizando sobre el Reproductor de
|
||||||
Video
|
Video
|
||||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
|
||||||
Scroll Playback Rate Over Video Player: Acelerar video con la rueda del mouse
|
Scroll Playback Rate Over Video Player: Acelerar video con la rueda del mouse
|
||||||
Fast-Forward / Rewind Interval: Período de Avance Rápido / Retroceso
|
Fast-Forward / Rewind Interval: Período de Avance Rápido / Retroceso
|
||||||
Video Playback Rate Interval: Intervalo entre velocidades del video
|
Video Playback Rate Interval: Intervalo entre velocidades del video
|
||||||
@ -446,10 +445,6 @@ Channel:
|
|||||||
Tags:
|
Tags:
|
||||||
Search for: Buscar por «{tag}»
|
Search for: Buscar por «{tag}»
|
||||||
Details: Detalles
|
Details: Detalles
|
||||||
Video:
|
|
||||||
translated from English: traducido del inglés
|
|
||||||
Stats:
|
|
||||||
Mimetype: Tipo de medio
|
|
||||||
Yes: 'Sí'
|
Yes: 'Sí'
|
||||||
No: 'No'
|
No: 'No'
|
||||||
A new blog is now available, {blogTitle}. Click to view more: 'Un nuevo blog está
|
A new blog is now available, {blogTitle}. Click to view more: 'Un nuevo blog está
|
||||||
|
@ -435,7 +435,6 @@ Settings:
|
|||||||
%s 2-numbriline videosekund. %t 3-numbriline video millisekund. %i video tunnus.
|
%s 2-numbriline videosekund. %t 3-numbriline video millisekund. %i video tunnus.
|
||||||
Alamkaustade loomiseks võid kasutada ka „\“ või „/“.
|
Alamkaustade loomiseks võid kasutada ka „\“ või „/“.
|
||||||
Skip by Scrolling Over Video Player: Jäta vahele, kerides üle videopleieri
|
Skip by Scrolling Over Video Player: Jäta vahele, kerides üle videopleieri
|
||||||
Allow DASH AV1 formats: Luba DASH AV1 vormingud
|
|
||||||
Enter Fullscreen on Display Rotate: Ekraani pööramisel ava täisekraanivaade
|
Enter Fullscreen on Display Rotate: Ekraani pööramisel ava täisekraanivaade
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Privaatsuse seadistused'
|
Privacy Settings: 'Privaatsuse seadistused'
|
||||||
@ -866,14 +865,8 @@ Video:
|
|||||||
videote loendist
|
videote loendist
|
||||||
Video has been saved: Video on salvestatud
|
Video has been saved: Video on salvestatud
|
||||||
Save Video: Salvesta video
|
Save Video: Salvesta video
|
||||||
translated from English: tõlgitud inglise keelest
|
|
||||||
Started streaming on: Voogedastus algas
|
Started streaming on: Voogedastus algas
|
||||||
Streamed on: Voogedastatud
|
Streamed on: Voogedastatud
|
||||||
Audio:
|
|
||||||
High: Kõrge kvaliteet
|
|
||||||
Medium: Keskmine kvaliteet
|
|
||||||
Low: Madal kvaliteet
|
|
||||||
Best: Parim kvaliteet
|
|
||||||
audio only: vaid helivoog
|
audio only: vaid helivoog
|
||||||
video only: vaid videovoog
|
video only: vaid videovoog
|
||||||
Download Video: Laadi video alla
|
Download Video: Laadi video alla
|
||||||
@ -886,7 +879,6 @@ Video:
|
|||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
filler: Täitevideo
|
filler: Täitevideo
|
||||||
recap: Kokkuvõte
|
recap: Kokkuvõte
|
||||||
Skipped segment: Vahelejäetud lõik
|
|
||||||
External Player:
|
External Player:
|
||||||
UnsupportedActionTemplate: 'Rakenduses {externalPlayer} puudub tugi: {action}'
|
UnsupportedActionTemplate: 'Rakenduses {externalPlayer} puudub tugi: {action}'
|
||||||
OpeningTemplate: Avan {videoOrPlaylist} {externalPlayer} rakendusega...
|
OpeningTemplate: Avan {videoOrPlaylist} {externalPlayer} rakendusega...
|
||||||
@ -903,26 +895,6 @@ Video:
|
|||||||
setting a playback rate: taasesituskiiruse määramine
|
setting a playback rate: taasesituskiiruse määramine
|
||||||
starting video at offset: video esitamine ajanihkega
|
starting video at offset: video esitamine ajanihkega
|
||||||
Premieres on: Esilinastub
|
Premieres on: Esilinastub
|
||||||
Stats:
|
|
||||||
video id: YouTube video tunnus
|
|
||||||
player resolution: Vaate suurus
|
|
||||||
volume: Helivaljus
|
|
||||||
fps: FPS
|
|
||||||
frame drop: Vahelejäetud kaadreid
|
|
||||||
bandwidth: Võrguühenduse kiirus
|
|
||||||
buffered: Puhverdatud
|
|
||||||
out of: /
|
|
||||||
Bandwidth: Ribalaius
|
|
||||||
Bitrate: Bitikiirus
|
|
||||||
Volume: Helivaljus
|
|
||||||
Dropped / Total Frames: Vahele jäetud kaadreid / kaadreid kokku
|
|
||||||
Player Dimensions: Meediaesitaja mõõdud
|
|
||||||
Buffered: Puhverdatud
|
|
||||||
Video ID: Video tunnus
|
|
||||||
Mimetype: Meedia MIME-tüüp
|
|
||||||
Video statistics are not available for legacy videos: Vana tüüpi videote puhul
|
|
||||||
pole statistika saataval
|
|
||||||
Resolution: Resolutsioon
|
|
||||||
Premieres: Esilinastus
|
Premieres: Esilinastus
|
||||||
Show Super Chat Comment: Näita Super Chat'i kommentaare
|
Show Super Chat Comment: Näita Super Chat'i kommentaare
|
||||||
Scroll to Bottom: Keri alla
|
Scroll to Bottom: Keri alla
|
||||||
@ -1097,10 +1069,6 @@ Tooltips:
|
|||||||
edasi ja tagasi. Tavakiiruse taastamiseks (kui sa seda seadistustest pole muutnud,
|
edasi ja tagasi. Tavakiiruse taastamiseks (kui sa seda seadistustest pole muutnud,
|
||||||
siis on see 1x) hoia all Ctrl klahvi (Mac'is ⌘ klahvi) ja klõpsi hiire vasakut
|
siis on see 1x) hoia all Ctrl klahvi (Mac'is ⌘ klahvi) ja klõpsi hiire vasakut
|
||||||
nuppu.
|
nuppu.
|
||||||
Allow DASH AV1 formats: DASH AV1 vormingu puhul pilt võib tunduda paremad kui
|
|
||||||
DASH H.264 puhul. DASH AV1 vormingu dekodeerimine kasutab esitamise ajal rohkem
|
|
||||||
energiat! See vorming ei ole saadaval kõikide videote puhul, mispuhul kasutab
|
|
||||||
videoesitaja selle asemel DASH H.264 vormingut.
|
|
||||||
Skip by Scrolling Over Video Player: MPV-stiilis video läbilappamiseks kasuta
|
Skip by Scrolling Over Video Player: MPV-stiilis video läbilappamiseks kasuta
|
||||||
hiire ratast.
|
hiire ratast.
|
||||||
Distraction Free Settings:
|
Distraction Free Settings:
|
||||||
|
@ -440,7 +440,6 @@ Settings:
|
|||||||
Video Playback Rate Interval: Bideo Erreprodukzio-tasa tartea
|
Video Playback Rate Interval: Bideo Erreprodukzio-tasa tartea
|
||||||
Skip by Scrolling Over Video Player: Saltatu bideo-erreproduzitzailean korrituz
|
Skip by Scrolling Over Video Player: Saltatu bideo-erreproduzitzailean korrituz
|
||||||
Enter Fullscreen on Display Rotate: Sartu pantaila osoko pantaila biratu pantailan
|
Enter Fullscreen on Display Rotate: Sartu pantaila osoko pantaila biratu pantailan
|
||||||
Allow DASH AV1 formats: Baimendu DASH AV1 formatuak
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Pribatutasunari buruzko ezarpenak'
|
Privacy Settings: 'Pribatutasunari buruzko ezarpenak'
|
||||||
Remember History: 'Historikoa oroitu'
|
Remember History: 'Historikoa oroitu'
|
||||||
@ -845,11 +844,6 @@ Video:
|
|||||||
Download Video: 'Bideoa deskargatu'
|
Download Video: 'Bideoa deskargatu'
|
||||||
video only: 'Bideoa soilik'
|
video only: 'Bideoa soilik'
|
||||||
audio only: 'Audioa soilik'
|
audio only: 'Audioa soilik'
|
||||||
Audio:
|
|
||||||
Low: 'Eskasa'
|
|
||||||
Medium: 'Erdi-mailakoa'
|
|
||||||
High: 'Altua'
|
|
||||||
Best: 'Onena'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: 'Urtarrila'
|
Jan: 'Urtarrila'
|
||||||
Feb: 'Otsaila'
|
Feb: 'Otsaila'
|
||||||
@ -883,7 +877,6 @@ Video:
|
|||||||
Published on: 'Noiz argitaratua'
|
Published on: 'Noiz argitaratua'
|
||||||
Streamed on: 'Noiz zuzenean emana'
|
Streamed on: 'Noiz zuzenean emana'
|
||||||
Started streaming on: 'Noiz hasi zen zuzenekoa'
|
Started streaming on: 'Noiz hasi zen zuzenekoa'
|
||||||
translated from English: 'Ingelesetik itzulia'
|
|
||||||
Publicationtemplate: 'Duela {number} {unit}'
|
Publicationtemplate: 'Duela {number} {unit}'
|
||||||
#& Videos
|
#& Videos
|
||||||
External Player:
|
External Player:
|
||||||
@ -901,18 +894,6 @@ Video:
|
|||||||
OpeningTemplate: '{videoOrPlaylist} irekitzen {externalPlayer}-an...'
|
OpeningTemplate: '{videoOrPlaylist} irekitzen {externalPlayer}-an...'
|
||||||
UnsupportedActionTemplate: '{externalPlayer}-k ez du onartzen: {action}'
|
UnsupportedActionTemplate: '{externalPlayer}-k ez du onartzen: {action}'
|
||||||
playlist: erreprodukzio zerrenda
|
playlist: erreprodukzio zerrenda
|
||||||
Stats:
|
|
||||||
Video ID: Bideoaren identifikatzailea
|
|
||||||
Bitrate: biten tasa
|
|
||||||
Volume: Bolumena
|
|
||||||
Bandwidth: Banda zabalera
|
|
||||||
Buffered: Bufferera igota
|
|
||||||
Video statistics are not available for legacy videos: Bideoen estatistikak ez
|
|
||||||
daude eskuragarri legacy bideoentzat
|
|
||||||
Resolution: Bereizmena
|
|
||||||
Player Dimensions: Erreproduzitzailearen neurriak
|
|
||||||
Dropped / Total Frames: Bidalitako / Guztira Frame-ak
|
|
||||||
Mimetype: MIME mota
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Gaiaz kanpoko musika
|
music offtopic: Gaiaz kanpoko musika
|
||||||
interaction: Elkarrekintza
|
interaction: Elkarrekintza
|
||||||
@ -922,7 +903,6 @@ Video:
|
|||||||
recap: Laburpen
|
recap: Laburpen
|
||||||
filler: Betegarria
|
filler: Betegarria
|
||||||
intro: Sarrera
|
intro: Sarrera
|
||||||
Skipped segment: Saltatu egin da segmentua
|
|
||||||
Premieres on: Estreinaldiak
|
Premieres on: Estreinaldiak
|
||||||
Hide Channel: Kanala ezkutatu
|
Hide Channel: Kanala ezkutatu
|
||||||
Unhide Channel: Kanala erakutsi
|
Unhide Channel: Kanala erakutsi
|
||||||
@ -1063,10 +1043,6 @@ Tooltips:
|
|||||||
aldaketarik egin ez bada).
|
aldaketarik egin ez bada).
|
||||||
Skip by Scrolling Over Video Player: Erabili korritze-gurpila bideoa saltatzeko,
|
Skip by Scrolling Over Video Player: Erabili korritze-gurpila bideoa saltatzeko,
|
||||||
MPV estiloa.
|
MPV estiloa.
|
||||||
Allow DASH AV1 formats: DASH AV1 formatuak DASH H.264 formatuak baino itxura hobea
|
|
||||||
izan dezake. DASH AV1 formatuek potentzia gehiago behar dute erreproduzitzeko!
|
|
||||||
Ez daude bideo guztietan eskuragarri, kasu horietan erreproduzitzaileak DASH
|
|
||||||
H.264 formatuak erabiliko ditu ordez.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: 'Posible denean, Freetube-k bere lehenetsitako metodoa erabili
|
Fetch Feeds from RSS: 'Posible denean, Freetube-k bere lehenetsitako metodoa erabili
|
||||||
beharrean RSS-ak baliatuko ditu zure harpidetzen jariora konektatzeko. RSS arinagoa
|
beharrean RSS-ak baliatuko ditu zure harpidetzen jariora konektatzeko. RSS arinagoa
|
||||||
|
@ -284,7 +284,6 @@ Settings:
|
|||||||
Folder Label: پوشه اسکرین شات
|
Folder Label: پوشه اسکرین شات
|
||||||
Folder Button: پوشه را انتخاب کنید
|
Folder Button: پوشه را انتخاب کنید
|
||||||
Skip by Scrolling Over Video Player: با پیمایش روی پخشکننده ویدیو از آن بگذرید
|
Skip by Scrolling Over Video Player: با پیمایش روی پخشکننده ویدیو از آن بگذرید
|
||||||
Allow DASH AV1 formats: فرمتهای DASH AV1 را مجاز کنید
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
External Player Settings: 'تنظیمات پخش کننده خارجی'
|
External Player Settings: 'تنظیمات پخش کننده خارجی'
|
||||||
External Player: 'پخش کننده خارجی'
|
External Player: 'پخش کننده خارجی'
|
||||||
@ -573,12 +572,10 @@ Video:
|
|||||||
Ago: پیش
|
Ago: پیش
|
||||||
Upcoming: اولین نمایش در
|
Upcoming: اولین نمایش در
|
||||||
In less than a minute: در کمتر از یک دقیقه
|
In less than a minute: در کمتر از یک دقیقه
|
||||||
translated from English: ترجمه شده از انگلیسی
|
|
||||||
Copy Invidious Link: لینک Invidious را کپی کنید
|
Copy Invidious Link: لینک Invidious را کپی کنید
|
||||||
Play Previous Video: پخش ویدیوی قبلی
|
Play Previous Video: پخش ویدیوی قبلی
|
||||||
Autoplay: پخش خودکار
|
Autoplay: پخش خودکار
|
||||||
Started streaming on: پخش جریانی را شروع کرد
|
Started streaming on: پخش جریانی را شروع کرد
|
||||||
Skipped segment: بخش رد شد
|
|
||||||
'Chat is disabled or the Live Stream has ended.': چت غیرفعال است یا پخش زنده به
|
'Chat is disabled or the Live Stream has ended.': چت غیرفعال است یا پخش زنده به
|
||||||
پایان رسیده است.
|
پایان رسیده است.
|
||||||
Copy YouTube Channel Link: لینک کانال یوتیوب را کپی کنید
|
Copy YouTube Channel Link: لینک کانال یوتیوب را کپی کنید
|
||||||
@ -599,11 +596,6 @@ Video:
|
|||||||
Live Now: زنده هم اکنون
|
Live Now: زنده هم اکنون
|
||||||
Save Video: ذخیره ویدیو
|
Save Video: ذخیره ویدیو
|
||||||
Open in Invidious: در Invidious باز کنید
|
Open in Invidious: در Invidious باز کنید
|
||||||
Audio:
|
|
||||||
Medium: متوسط
|
|
||||||
Best: بهترین
|
|
||||||
High: عالی
|
|
||||||
Low: کم
|
|
||||||
Video has been removed from your saved list: ویدیو از لیست ذخیره شده شما حذف شده
|
Video has been removed from your saved list: ویدیو از لیست ذخیره شده شما حذف شده
|
||||||
است
|
است
|
||||||
Download Video: دانلود ویدیو
|
Download Video: دانلود ویدیو
|
||||||
@ -627,18 +619,6 @@ Video:
|
|||||||
audio only: فقط صدا
|
audio only: فقط صدا
|
||||||
Publicationtemplate: '{number} {unit} پیش'
|
Publicationtemplate: '{number} {unit} پیش'
|
||||||
Video has been saved: ویدیو ذخیره شده است
|
Video has been saved: ویدیو ذخیره شده است
|
||||||
Stats:
|
|
||||||
Dropped / Total Frames: حذف شده / مجموع فریم ها
|
|
||||||
Video ID: شناسه ویدیو
|
|
||||||
Player Dimensions: ابعاد پخش کننده
|
|
||||||
Bitrate: میزان بیت
|
|
||||||
Volume: درجه صدا
|
|
||||||
Bandwidth: پهنای باند
|
|
||||||
Buffered: بافر شده
|
|
||||||
Video statistics are not available for legacy videos: آمار ویدیویی برای ویدیوهای
|
|
||||||
قدیمی موجود نیست
|
|
||||||
Resolution: کیفیت
|
|
||||||
Mimetype: نوع مایم
|
|
||||||
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': گفتگوی
|
'Live Chat is currently not supported with the Invidious API. A direct connection to YouTube is required.': گفتگوی
|
||||||
زنده در حال حاضر با Invidious API پشتیبانی نمی شود. اتصال مستقیم به YouTube مورد
|
زنده در حال حاضر با Invidious API پشتیبانی نمی شود. اتصال مستقیم به YouTube مورد
|
||||||
نیاز است.
|
نیاز است.
|
||||||
@ -679,10 +659,6 @@ Tooltips:
|
|||||||
Player Settings:
|
Player Settings:
|
||||||
Skip by Scrolling Over Video Player: از چرخ اسکرول برای رد شدن از ویدیو، سبک MPV
|
Skip by Scrolling Over Video Player: از چرخ اسکرول برای رد شدن از ویدیو، سبک MPV
|
||||||
استفاده کنید.
|
استفاده کنید.
|
||||||
Allow DASH AV1 formats: فرمتهای DASH AV1 ممکن است بهتر از فرمتهای DASH H.264
|
|
||||||
به نظر برسند. فرمت های DASH AV1 برای پخش به قدرت بیشتری نیاز دارند! آنها در
|
|
||||||
همه ویدیوها در دسترس نیستند، در این موارد پخش کننده به جای آن از فرمت های DASH
|
|
||||||
H.264 استفاده می کند.
|
|
||||||
Scroll Playback Rate Over Video Player: در حالی که مکان نما روی ویدیو است، کلید
|
Scroll Playback Rate Over Video Player: در حالی که مکان نما روی ویدیو است، کلید
|
||||||
کنترل (کلید فرمان در مک) را فشار داده و نگه دارید و چرخ ماوس را به جلو یا عقب
|
کنترل (کلید فرمان در مک) را فشار داده و نگه دارید و چرخ ماوس را به جلو یا عقب
|
||||||
ببرید تا سرعت پخش را کنترل کنید. کلید کنترل (کلید فرمان در مک) را فشار داده
|
ببرید تا سرعت پخش را کنترل کنید. کلید کنترل (کلید فرمان در مک) را فشار داده
|
||||||
|
@ -361,7 +361,6 @@ Settings:
|
|||||||
"\" tai "/" luodaksesi alikansioita.
|
"\" tai "/" luodaksesi alikansioita.
|
||||||
Enter Fullscreen on Display Rotate: Siirry koko näytön tilaan näyttöä kiertäessä
|
Enter Fullscreen on Display Rotate: Siirry koko näytön tilaan näyttöä kiertäessä
|
||||||
Skip by Scrolling Over Video Player: Ohita vierittämällä videosoittimen yli
|
Skip by Scrolling Over Video Player: Ohita vierittämällä videosoittimen yli
|
||||||
Allow DASH AV1 formats: Salli DASH AV1 -formaatit
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Tilausasetukset'
|
Subscription Settings: 'Tilausasetukset'
|
||||||
Hide Videos on Watch: 'Piilota katsotut videot'
|
Hide Videos on Watch: 'Piilota katsotut videot'
|
||||||
@ -772,11 +771,6 @@ Video:
|
|||||||
Loop Playlist: Kierrätä soittolistaa
|
Loop Playlist: Kierrätä soittolistaa
|
||||||
Starting soon, please refresh the page to check again: Hetki pieni, päivitä sivu
|
Starting soon, please refresh the page to check again: Hetki pieni, päivitä sivu
|
||||||
uudelleen
|
uudelleen
|
||||||
Audio:
|
|
||||||
Best: Paras
|
|
||||||
High: Korkea
|
|
||||||
Medium: Keskitaso
|
|
||||||
Low: Alhainen
|
|
||||||
audio only: vain ääni
|
audio only: vain ääni
|
||||||
video only: vain video
|
video only: vain video
|
||||||
Download Video: Lataa video
|
Download Video: Lataa video
|
||||||
@ -810,31 +804,10 @@ Video:
|
|||||||
sponsor: Sponsori
|
sponsor: Sponsori
|
||||||
recap: Kertaus
|
recap: Kertaus
|
||||||
filler: Täyte
|
filler: Täyte
|
||||||
Skipped segment: Ylihypätty osio
|
|
||||||
translated from English: käännetty englanninkielestä
|
|
||||||
Video has been removed from your saved list: Video poistettiin tallennettujen videoiden
|
Video has been removed from your saved list: Video poistettiin tallennettujen videoiden
|
||||||
luettelostasi
|
luettelostasi
|
||||||
Video has been saved: Video on tallennettu
|
Video has been saved: Video on tallennettu
|
||||||
Save Video: Tallenna video
|
Save Video: Tallenna video
|
||||||
Stats:
|
|
||||||
video id: Videon tunniste (YouTube)
|
|
||||||
player resolution: Näkymäikkuna
|
|
||||||
bandwidth: Yhteyden nopeus
|
|
||||||
buffered: Puskuroitu
|
|
||||||
volume: Äänenvoimakkuus
|
|
||||||
fps: Kuvanopeus
|
|
||||||
out of: /
|
|
||||||
Video ID: Videotunnus
|
|
||||||
Bitrate: Tiedonsiirtonopeus
|
|
||||||
Bandwidth: Kaistanleveys
|
|
||||||
Mimetype: Internet-mediatyyppi
|
|
||||||
Video statistics are not available for legacy videos: Vanhojen videoiden videotilastot
|
|
||||||
eivät ole saatavilla
|
|
||||||
Player Dimensions: Soittimen mitat
|
|
||||||
Volume: Äänenvoimakkuus
|
|
||||||
Buffered: Puskuroitu
|
|
||||||
Resolution: Resoluutio
|
|
||||||
Dropped / Total Frames: Pudotettu / Yhteensä
|
|
||||||
Premieres on: Julkaistaan
|
Premieres on: Julkaistaan
|
||||||
Premieres: Ensilähetykset
|
Premieres: Ensilähetykset
|
||||||
Show Super Chat Comment: Näytä Super Chat -kommentti
|
Show Super Chat Comment: Näytä Super Chat -kommentti
|
||||||
@ -1033,10 +1006,6 @@ Tooltips:
|
|||||||
painettuna ja paina hiiren vasenta näppäintä.
|
painettuna ja paina hiiren vasenta näppäintä.
|
||||||
Skip by Scrolling Over Video Player: Käytä vieritysrullaa videon selaamiseen,
|
Skip by Scrolling Over Video Player: Käytä vieritysrullaa videon selaamiseen,
|
||||||
MPV-tyyliin.
|
MPV-tyyliin.
|
||||||
Allow DASH AV1 formats: DASH AV1 formaatit saattavat näyttää paremmalta kuin DASH
|
|
||||||
H.264 formaatit. DASH AV1 formaatit vaativat enemmän tehoa toistamiseen! Ne
|
|
||||||
eivät ole käytettävissä kaikissa videoissa ja näissä tapauksissa soitin käyttää
|
|
||||||
sen sijaan DASH H.264 formaatteja.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Kaikki ne omavalintaiset komentorivin määreet,
|
Custom External Player Arguments: Kaikki ne omavalintaiset komentorivin määreet,
|
||||||
puolipisteillä eroteltuina (';'), jotka haluat siirtää eteenpäin ulkoiselle
|
puolipisteillä eroteltuina (';'), jotka haluat siirtää eteenpäin ulkoiselle
|
||||||
|
@ -455,7 +455,6 @@ Settings:
|
|||||||
Folder Label: Dossier de capture d'écran
|
Folder Label: Dossier de capture d'écran
|
||||||
Enter Fullscreen on Display Rotate: Entrer en plein écran sur l'affichage Rotation
|
Enter Fullscreen on Display Rotate: Entrer en plein écran sur l'affichage Rotation
|
||||||
Skip by Scrolling Over Video Player: Sauter en faisant défiler le lecteur vidéo
|
Skip by Scrolling Over Video Player: Sauter en faisant défiler le lecteur vidéo
|
||||||
Allow DASH AV1 formats: Autoriser les formats DASH AV1
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Paramètres des abonnements'
|
Subscription Settings: 'Paramètres des abonnements'
|
||||||
Hide Videos on Watch: 'Masquer les vidéos visionnées'
|
Hide Videos on Watch: 'Masquer les vidéos visionnées'
|
||||||
@ -916,11 +915,6 @@ Video:
|
|||||||
Loop Playlist: Liste de lecture en boucle
|
Loop Playlist: Liste de lecture en boucle
|
||||||
Starting soon, please refresh the page to check again: Débute prochainement, veuillez
|
Starting soon, please refresh the page to check again: Débute prochainement, veuillez
|
||||||
actualiser la page pour vérifier à nouveau
|
actualiser la page pour vérifier à nouveau
|
||||||
Audio:
|
|
||||||
Best: Meilleure
|
|
||||||
Medium: Normale
|
|
||||||
Low: Basse
|
|
||||||
High: Haute
|
|
||||||
audio only: audio uniquement
|
audio only: audio uniquement
|
||||||
video only: vidéo uniquement
|
video only: vidéo uniquement
|
||||||
Download Video: Télécharger la vidéo
|
Download Video: Télécharger la vidéo
|
||||||
@ -934,7 +928,6 @@ Video:
|
|||||||
enregistrée
|
enregistrée
|
||||||
Video has been saved: La vidéo a été enregistrée
|
Video has been saved: La vidéo a été enregistrée
|
||||||
Save Video: Enregistrer la vidéo
|
Save Video: Enregistrer la vidéo
|
||||||
translated from English: traduit de l'anglais
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Musique hors sujet
|
music offtopic: Musique hors sujet
|
||||||
interaction: Interaction
|
interaction: Interaction
|
||||||
@ -944,7 +937,6 @@ Video:
|
|||||||
intro: Intro
|
intro: Intro
|
||||||
filler: Bouche-trou
|
filler: Bouche-trou
|
||||||
recap: Récap
|
recap: Récap
|
||||||
Skipped segment: Segment ignoré
|
|
||||||
External Player:
|
External Player:
|
||||||
playlist: liste de lecture
|
playlist: liste de lecture
|
||||||
video: vidéo
|
video: vidéo
|
||||||
@ -961,26 +953,6 @@ Video:
|
|||||||
UnsupportedActionTemplate: '{externalPlayer} non pris en charge : {action}'
|
UnsupportedActionTemplate: '{externalPlayer} non pris en charge : {action}'
|
||||||
OpeningTemplate: Ouverture de {videoOrPlaylist} en {externalPlayer}…
|
OpeningTemplate: Ouverture de {videoOrPlaylist} en {externalPlayer}…
|
||||||
OpenInTemplate: Ouvrir avec {externalPlayer}
|
OpenInTemplate: Ouvrir avec {externalPlayer}
|
||||||
Stats:
|
|
||||||
video id: "Identifiant de la vidéo (YouTube)"
|
|
||||||
player resolution: "Résolution du lecteur"
|
|
||||||
volume: "Volume"
|
|
||||||
fps: "IPS"
|
|
||||||
frame drop: "Perte d'image"
|
|
||||||
bandwidth: "Vitesse de connexion"
|
|
||||||
buffered: "En tampon"
|
|
||||||
out of: "sur"
|
|
||||||
Player Dimensions: Dimensions du lecteur
|
|
||||||
Bitrate: Débit binaire
|
|
||||||
Volume: Volume
|
|
||||||
Mimetype: Type de médias
|
|
||||||
Video statistics are not available for legacy videos: Les statistiques vidéo ne
|
|
||||||
sont pas disponibles pour les anciennes vidéos
|
|
||||||
Resolution: Résolution
|
|
||||||
Bandwidth: Bande passante
|
|
||||||
Video ID: Identifiant vidéo
|
|
||||||
Buffered: En mémoire tampon
|
|
||||||
Dropped / Total Frames: Images perdues / Nombre total d'images
|
|
||||||
Premieres on: Avant-première le
|
Premieres on: Avant-première le
|
||||||
Premieres in: Première dans
|
Premieres in: Première dans
|
||||||
Premieres: Avant-première
|
Premieres: Avant-première
|
||||||
@ -1192,10 +1164,6 @@ Tooltips:
|
|||||||
de lecture par défaut (1x, sauf si elle a été modifiée dans les paramètres).
|
de lecture par défaut (1x, sauf si elle a été modifiée dans les paramètres).
|
||||||
Skip by Scrolling Over Video Player: Utilisez la molette de défilement pour passer
|
Skip by Scrolling Over Video Player: Utilisez la molette de défilement pour passer
|
||||||
d'une vidéo à l'autre, en style MPV.
|
d'une vidéo à l'autre, en style MPV.
|
||||||
Allow DASH AV1 formats: Les formats DASH AV1 peuvent être plus beaux que les formats
|
|
||||||
DASH H.264. Les formats DASH AV1 nécessitent plus de puissance pour être lus !
|
|
||||||
Ils ne sont pas disponibles sur toutes les vidéos, dans ce cas le lecteur utilisera
|
|
||||||
les formats DASH H.264 à la place.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Invidious Instance: L'instance Invidious à laquelle FreeTube se connectera pour
|
Invidious Instance: L'instance Invidious à laquelle FreeTube se connectera pour
|
||||||
les appels API.
|
les appels API.
|
||||||
|
@ -288,7 +288,6 @@ Settings:
|
|||||||
Max Video Playback Rate: Velocidade máxima da reprodución do vídeo
|
Max Video Playback Rate: Velocidade máxima da reprodución do vídeo
|
||||||
Enter Fullscreen on Display Rotate: Poñase a pantalla enteira o xirala pantalla
|
Enter Fullscreen on Display Rotate: Poñase a pantalla enteira o xirala pantalla
|
||||||
Skip by Scrolling Over Video Player: Saltar desprazándose polo reprodutor de vídeo
|
Skip by Scrolling Over Video Player: Saltar desprazándose polo reprodutor de vídeo
|
||||||
Allow DASH AV1 formats: Permitilos formatos DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Axustes de privacidade'
|
Privacy Settings: 'Axustes de privacidade'
|
||||||
Remember History: 'Lembrar histórico'
|
Remember History: 'Lembrar histórico'
|
||||||
@ -663,11 +662,6 @@ Video:
|
|||||||
Download Video: 'Descargar vídeo'
|
Download Video: 'Descargar vídeo'
|
||||||
video only: 'Só vídeo'
|
video only: 'Só vídeo'
|
||||||
audio only: 'Só audio'
|
audio only: 'Só audio'
|
||||||
Audio:
|
|
||||||
Low: 'Baixa'
|
|
||||||
Medium: 'Media'
|
|
||||||
High: 'Alta'
|
|
||||||
Best: 'Máxima'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: 'Xan'
|
Jan: 'Xan'
|
||||||
Feb: 'Feb'
|
Feb: 'Feb'
|
||||||
@ -727,23 +721,9 @@ Video:
|
|||||||
sponsor: Patrocinador
|
sponsor: Patrocinador
|
||||||
recap: Recapitulación
|
recap: Recapitulación
|
||||||
filler: Recheo
|
filler: Recheo
|
||||||
Skipped segment: Segmento omitido
|
|
||||||
translated from English: traducido do inglés
|
|
||||||
Video has been removed from your saved list: Eliminouse este vídeo da lista de gardados
|
Video has been removed from your saved list: Eliminouse este vídeo da lista de gardados
|
||||||
Video has been saved: Gardouse o vídeo
|
Video has been saved: Gardouse o vídeo
|
||||||
Save Video: Gardar vídeo
|
Save Video: Gardar vídeo
|
||||||
Stats:
|
|
||||||
Player Dimensions: Dimensións do reproductor
|
|
||||||
Video ID: Identificador do video
|
|
||||||
Buffered: No bufer
|
|
||||||
Mimetype: Tipo de medio
|
|
||||||
Video statistics are not available for legacy videos: As estadísticas dos vídeo
|
|
||||||
non se atopan dispoñibles para os vídeos antigos
|
|
||||||
Bitrate: Taxa dos bits
|
|
||||||
Volume: Volume
|
|
||||||
Resolution: Resolución
|
|
||||||
Bandwidth: Ancho da banda
|
|
||||||
Dropped / Total Frames: Fotogramas Perdidos / Fotogramas Totales
|
|
||||||
Premieres on: Estrease o
|
Premieres on: Estrease o
|
||||||
Premieres: Estreos
|
Premieres: Estreos
|
||||||
Show Super Chat Comment: Mostralos comentarios do Super Chat
|
Show Super Chat Comment: Mostralos comentarios do Super Chat
|
||||||
@ -865,10 +845,6 @@ Tooltips:
|
|||||||
que o modificase na configuración).
|
que o modificase na configuración).
|
||||||
Skip by Scrolling Over Video Player: Usala roda de desprazamento para saltalo
|
Skip by Scrolling Over Video Player: Usala roda de desprazamento para saltalo
|
||||||
vídeo, estilo MPV.
|
vídeo, estilo MPV.
|
||||||
Allow DASH AV1 formats: Os formatos DASH AV1 poden parecer mellor que os formatos
|
|
||||||
DASH H.264. Os formatos DASH AV1 requiren máis potencia para reproducir. Non
|
|
||||||
están dispoñibles en todolos vídeos, neses casos o reprodutor utilizará os formatos
|
|
||||||
DASH H.264.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: 'Cando está activado, FreeTube usará RSS no canto do método
|
Fetch Feeds from RSS: 'Cando está activado, FreeTube usará RSS no canto do método
|
||||||
predeterminao para obter as subscricións. RSS é máis rápido e impide o bloqueo
|
predeterminao para obter as subscricións. RSS é máis rápido e impide o bloqueo
|
||||||
|
@ -341,7 +341,6 @@ Settings:
|
|||||||
ב־3 ספרות. %i מזהה הסרטון. אפשר להשתמש גם ב־„/” או ב־„\” כדי ליצור תת־תיקיות.
|
ב־3 ספרות. %i מזהה הסרטון. אפשר להשתמש גם ב־„/” או ב־„\” כדי ליצור תת־תיקיות.
|
||||||
Enter Fullscreen on Display Rotate: מעבר למסך מלא עם סיבוב התצוגה
|
Enter Fullscreen on Display Rotate: מעבר למסך מלא עם סיבוב התצוגה
|
||||||
Skip by Scrolling Over Video Player: אפשר לדלג על ידי גלילה על נגן הווידאו
|
Skip by Scrolling Over Video Player: אפשר לדלג על ידי גלילה על נגן הווידאו
|
||||||
Allow DASH AV1 formats: לאפשר תצורות DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'הגדרות פרטיות'
|
Privacy Settings: 'הגדרות פרטיות'
|
||||||
Remember History: 'לזכור את היסטוריית הצפייה'
|
Remember History: 'לזכור את היסטוריית הצפייה'
|
||||||
@ -773,11 +772,6 @@ Video:
|
|||||||
Published on: 'פורסם'
|
Published on: 'פורסם'
|
||||||
Publicationtemplate: 'לפני {number} {unit}'
|
Publicationtemplate: 'לפני {number} {unit}'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
Best: איכות הכי טובה
|
|
||||||
High: איכות גבוהה
|
|
||||||
Medium: איכות בינונית
|
|
||||||
Low: איכות נמוכה
|
|
||||||
audio only: שמע בלבד
|
audio only: שמע בלבד
|
||||||
video only: סרטון בלבד
|
video only: סרטון בלבד
|
||||||
Download Video: להוריד סרטון
|
Download Video: להוריד סרטון
|
||||||
@ -790,7 +784,6 @@ Video:
|
|||||||
Video has been removed from your saved list: הסרטון הוסר מרשימת השמורים שלך
|
Video has been removed from your saved list: הסרטון הוסר מרשימת השמורים שלך
|
||||||
Video has been saved: סרטון נשמר
|
Video has been saved: סרטון נשמר
|
||||||
Save Video: שמירת סרטון
|
Save Video: שמירת סרטון
|
||||||
translated from English: תורגם מאנגלית
|
|
||||||
Premieres on: שידור הבכורה ב־
|
Premieres on: שידור הבכורה ב־
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
outro: סיום
|
outro: סיום
|
||||||
@ -816,26 +809,6 @@ Video:
|
|||||||
looping playlists: לולאה על רשימות נגינה
|
looping playlists: לולאה על רשימות נגינה
|
||||||
opening specific video in a playlist (falling back to opening the video): פתיחת
|
opening specific video in a playlist (falling back to opening the video): פתיחת
|
||||||
סרטון מסוים ברשימת נגינה (ייסוג לפתיחת הסרטון)
|
סרטון מסוים ברשימת נגינה (ייסוג לפתיחת הסרטון)
|
||||||
Skipped segment: קטע שדילגת עליו
|
|
||||||
Stats:
|
|
||||||
video id: מזהה סרטון (YouTube)
|
|
||||||
bandwidth: מהירות החיבור
|
|
||||||
out of: מתוך
|
|
||||||
volume: עוצמת שמע
|
|
||||||
buffered: בזיכרון
|
|
||||||
frame drop: השמטת תמוניות
|
|
||||||
fps: תמוניות לשנייה
|
|
||||||
Video statistics are not available for legacy videos: סטטיסטיקת וידאו אינה זמינה
|
|
||||||
לסרטונים ישנים
|
|
||||||
Video ID: מזהה וידאו
|
|
||||||
Resolution: רזולוציה
|
|
||||||
Player Dimensions: ממדי נגן
|
|
||||||
Bitrate: קצב סיביות
|
|
||||||
Volume: עצמת שמע
|
|
||||||
Bandwidth: רוחב פס
|
|
||||||
Buffered: שמור בזיכרון
|
|
||||||
Dropped / Total Frames: תמוניות שהושמטו / סה״כ
|
|
||||||
Mimetype: טיפוס MIME
|
|
||||||
Premieres in: בכורה בעוד
|
Premieres in: בכורה בעוד
|
||||||
Premieres: בכורות
|
Premieres: בכורות
|
||||||
Scroll to Bottom: גלילה לתחתית
|
Scroll to Bottom: גלילה לתחתית
|
||||||
@ -969,9 +942,6 @@ Tooltips:
|
|||||||
בהגדרות).
|
בהגדרות).
|
||||||
Skip by Scrolling Over Video Player: ניתן להשתמש בגלגלת כדי לדלג בתוך הסרטון,
|
Skip by Scrolling Over Video Player: ניתן להשתמש בגלגלת כדי לדלג בתוך הסרטון,
|
||||||
כמו ב־MPV.
|
כמו ב־MPV.
|
||||||
Allow DASH AV1 formats: תסדירי DASH AV1 עשויים להיראות טוב יותר מתסדירי DASH H.264.
|
|
||||||
תסדירי DASH AV1 דורשים יותר חשמל כדי לנגן! הם אינם זמינים בכל הסרטונים, במקרים
|
|
||||||
האלה הנגן ישתמש בתסדירי DASH H.264 במקום.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: כאשר אפשרות זו פעילה. FreeTube ישתמש ב־RSS במקום בשיטת ברירת
|
Fetch Feeds from RSS: כאשר אפשרות זו פעילה. FreeTube ישתמש ב־RSS במקום בשיטת ברירת
|
||||||
המחדל לאיסוף הזנת המינויים שלך. RSS היא שיטה מהירה יותר ומונעת חסימת IP אבל
|
המחדל לאיסוף הזנת המינויים שלך. RSS היא שיטה מהירה יותר ומונעת חסימת IP אבל
|
||||||
|
@ -429,7 +429,6 @@ Settings:
|
|||||||
Enter Fullscreen on Display Rotate: Koristi cjeloekranski prikaz pri okretanju
|
Enter Fullscreen on Display Rotate: Koristi cjeloekranski prikaz pri okretanju
|
||||||
ekrana
|
ekrana
|
||||||
Skip by Scrolling Over Video Player: Preskoči pomicanjem preko video playera
|
Skip by Scrolling Over Video Player: Preskoči pomicanjem preko video playera
|
||||||
Allow DASH AV1 formats: Dozvoli DASH AV1 formate
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Postavke privatnosti'
|
Privacy Settings: 'Postavke privatnosti'
|
||||||
Remember History: 'Zapamti povijest'
|
Remember History: 'Zapamti povijest'
|
||||||
@ -915,11 +914,6 @@ Video:
|
|||||||
Loop Playlist: Ponavljaj zbirku
|
Loop Playlist: Ponavljaj zbirku
|
||||||
Starting soon, please refresh the page to check again: Uskoro počinje. Aktualiziraj
|
Starting soon, please refresh the page to check again: Uskoro počinje. Aktualiziraj
|
||||||
stranicu za ponovnu provjeru
|
stranicu za ponovnu provjeru
|
||||||
Audio:
|
|
||||||
Best: Najbolja
|
|
||||||
High: Visoka
|
|
||||||
Medium: Srednja
|
|
||||||
Low: Niska
|
|
||||||
audio only: samo audiosnimku
|
audio only: samo audiosnimku
|
||||||
video only: samo video
|
video only: samo video
|
||||||
Download Video: Preuzmi video
|
Download Video: Preuzmi video
|
||||||
@ -933,7 +927,6 @@ Video:
|
|||||||
spremljenih
|
spremljenih
|
||||||
Video has been saved: Video je spremljen
|
Video has been saved: Video je spremljen
|
||||||
Save Video: Spremi video
|
Save Video: Spremi video
|
||||||
translated from English: prevedeno iz engleskog
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Druga vrsta glazbe
|
music offtopic: Druga vrsta glazbe
|
||||||
interaction: Interakcija
|
interaction: Interakcija
|
||||||
@ -943,7 +936,6 @@ Video:
|
|||||||
sponsor: Sponzor
|
sponsor: Sponzor
|
||||||
recap: Rekapitulacija
|
recap: Rekapitulacija
|
||||||
filler: Dodatni materijal
|
filler: Dodatni materijal
|
||||||
Skipped segment: Preskočeni segment
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
starting video at offset: pokretanje videa pri odmaku
|
starting video at offset: pokretanje videa pri odmaku
|
||||||
@ -960,26 +952,6 @@ Video:
|
|||||||
video: video
|
video: video
|
||||||
OpenInTemplate: Otvori u {externalPlayer}
|
OpenInTemplate: Otvori u {externalPlayer}
|
||||||
Premieres on: Premijera
|
Premieres on: Premijera
|
||||||
Stats:
|
|
||||||
fps: Kadrova u sekundi
|
|
||||||
player resolution: Rezolucija prikaza
|
|
||||||
video id: Video ID (YouTube)
|
|
||||||
volume: Glasnoća
|
|
||||||
frame drop: Ispuštanje kadrova
|
|
||||||
bandwidth: Brzina veze
|
|
||||||
buffered: Učitano u memoriju
|
|
||||||
out of: od
|
|
||||||
Video statistics are not available for legacy videos: Statistika videa nije dostupna
|
|
||||||
za stara videa
|
|
||||||
Video ID: Video ID
|
|
||||||
Resolution: Razlučivost
|
|
||||||
Player Dimensions: Dimenzije playera
|
|
||||||
Bitrate: Brzina prijenosa
|
|
||||||
Volume: Direktorij
|
|
||||||
Bandwidth: Propusnost
|
|
||||||
Buffered: Učitano u memoriju
|
|
||||||
Mimetype: Mimetype
|
|
||||||
Dropped / Total Frames: Ispušteni/ukupni kadrovi
|
|
||||||
Premieres in: Premijera u
|
Premieres in: Premijera u
|
||||||
Premieres: Premijere
|
Premieres: Premijere
|
||||||
Show Super Chat Comment: Prikaži Super Chat komentar
|
Show Super Chat Comment: Prikaži Super Chat komentar
|
||||||
@ -1121,10 +1093,6 @@ Tooltips:
|
|||||||
brzinu reprodukcije (jednostruka brzina, ukoliko nije promijenjena u postavkama).
|
brzinu reprodukcije (jednostruka brzina, ukoliko nije promijenjena u postavkama).
|
||||||
Skip by Scrolling Over Video Player: Koristi kotačić za pregledavanje videa, MPV
|
Skip by Scrolling Over Video Player: Koristi kotačić za pregledavanje videa, MPV
|
||||||
stil.
|
stil.
|
||||||
Allow DASH AV1 formats: DASH AV1 formati mogu izgledati bolje od DASH H.264 formata.
|
|
||||||
DASH AV1 formati zahtijevaju više kapaciteta za reprodukciju! Nisu dostupni
|
|
||||||
pri svim videima. U tim će slučajevima player umjesto njih koristiti DASH H.264
|
|
||||||
formate.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Invidious Instance: Invidious primjerak na koji će se FreeTube povezati za pozive
|
Invidious Instance: Invidious primjerak na koji će se FreeTube povezati za pozive
|
||||||
API-a.
|
API-a.
|
||||||
|
@ -449,7 +449,6 @@ Settings:
|
|||||||
Video Playback Rate Interval: Videó lejátszási sebesség léptetési köze
|
Video Playback Rate Interval: Videó lejátszási sebesség léptetési köze
|
||||||
Enter Fullscreen on Display Rotate: Teljes képernyős mód a kijelzőn forgatáshoz
|
Enter Fullscreen on Display Rotate: Teljes képernyős mód a kijelzőn forgatáshoz
|
||||||
Skip by Scrolling Over Video Player: Kihagyás a Videolejátszó felett görgetve
|
Skip by Scrolling Over Video Player: Kihagyás a Videolejátszó felett görgetve
|
||||||
Allow DASH AV1 formats: DASH AV1 formátumok engedélyezése
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Adatvédelmi beállítások'
|
Privacy Settings: 'Adatvédelmi beállítások'
|
||||||
Remember History: 'Előzmények megjegyzése'
|
Remember History: 'Előzmények megjegyzése'
|
||||||
@ -933,11 +932,6 @@ Video:
|
|||||||
Published on: 'Megjelent'
|
Published on: 'Megjelent'
|
||||||
Publicationtemplate: '{number} {unit} ezelőtt'
|
Publicationtemplate: '{number} {unit} ezelőtt'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
Best: Legjobb
|
|
||||||
High: Magas
|
|
||||||
Medium: Közepes
|
|
||||||
Low: Alacsony
|
|
||||||
audio only: csak hang
|
audio only: csak hang
|
||||||
video only: csak videó
|
video only: csak videó
|
||||||
Download Video: Videó letöltése
|
Download Video: Videó letöltése
|
||||||
@ -950,7 +944,6 @@ Video:
|
|||||||
Video has been removed from your saved list: A videót eltávolítottuk a mentett listáról
|
Video has been removed from your saved list: A videót eltávolítottuk a mentett listáról
|
||||||
Video has been saved: A videó mentve
|
Video has been saved: A videó mentve
|
||||||
Save Video: Videó mentése
|
Save Video: Videó mentése
|
||||||
translated from English: angolról fordítva
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Témán kívüli zene
|
music offtopic: Témán kívüli zene
|
||||||
interaction: Interakció
|
interaction: Interakció
|
||||||
@ -960,7 +953,6 @@ Video:
|
|||||||
sponsor: Szponzor
|
sponsor: Szponzor
|
||||||
filler: Kitöltő
|
filler: Kitöltő
|
||||||
recap: Összegzés
|
recap: Összegzés
|
||||||
Skipped segment: Kihagyott szegmens
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: lejátszási lista folyamatos lejátszása
|
looping playlists: lejátszási lista folyamatos lejátszása
|
||||||
@ -979,18 +971,6 @@ Video:
|
|||||||
video: videó
|
video: videó
|
||||||
OpenInTemplate: 'Megnyitás itt: {externalPlayer}'
|
OpenInTemplate: 'Megnyitás itt: {externalPlayer}'
|
||||||
Premieres on: 'Bemutató dátuma'
|
Premieres on: 'Bemutató dátuma'
|
||||||
Stats:
|
|
||||||
Player Dimensions: Lejátszási méretek
|
|
||||||
Video ID: Videóazonosító
|
|
||||||
Video statistics are not available for legacy videos: Az örökölt videókhoz videóstatisztika
|
|
||||||
nem érhető el
|
|
||||||
Resolution: Felbontás
|
|
||||||
Mimetype: MIME-típus
|
|
||||||
Volume: Hangerő
|
|
||||||
Bandwidth: Sávszélesség
|
|
||||||
Buffered: Pufferelt
|
|
||||||
Dropped / Total Frames: Eldobott/Összes képkocka
|
|
||||||
Bitrate: Átviteli sebesség
|
|
||||||
Premieres: Első előadások
|
Premieres: Első előadások
|
||||||
Show Super Chat Comment: Haladó csevegési hozzászólás megjelenítése
|
Show Super Chat Comment: Haladó csevegési hozzászólás megjelenítése
|
||||||
Scroll to Bottom: Görgetés legalulra
|
Scroll to Bottom: Görgetés legalulra
|
||||||
@ -1158,10 +1138,6 @@ Tooltips:
|
|||||||
(1x, hacsak nem módosították a beállításokban).
|
(1x, hacsak nem módosították a beállításokban).
|
||||||
Skip by Scrolling Over Video Player: MPV módban a görgetőkerék használatával kihagyhatja
|
Skip by Scrolling Over Video Player: MPV módban a görgetőkerék használatával kihagyhatja
|
||||||
a videót.
|
a videót.
|
||||||
Allow DASH AV1 formats: A DASH AV1 formátumok jobban nézhetnek ki, mint a DASH
|
|
||||||
H.264 formátumok. A DASH AV1 formátumok több energiát igényelnek a lejátszáshoz!
|
|
||||||
Nem minden videónál érhetők el, ilyenkor a lejátszó a DASH H.264 formátumot
|
|
||||||
használja helyette.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Executable: Alapértelmezés szerint a FreeTube feltételezi,
|
Custom External Player Executable: Alapértelmezés szerint a FreeTube feltételezi,
|
||||||
hogy a kiválasztott külső lejátszó megtalálható a PATH (ÚTVONAL) környezeti
|
hogy a kiválasztott külső lejátszó megtalálható a PATH (ÚTVONAL) környezeti
|
||||||
|
@ -328,7 +328,6 @@ Settings:
|
|||||||
Ask Path: Tanya Lokasi Penyimpanan
|
Ask Path: Tanya Lokasi Penyimpanan
|
||||||
Quality Label: Kualitas Tangkapan Layar
|
Quality Label: Kualitas Tangkapan Layar
|
||||||
File Name Label: Pola Nama Berkas
|
File Name Label: Pola Nama Berkas
|
||||||
Allow DASH AV1 formats: Izinkan format DASH AV1
|
|
||||||
Enter Fullscreen on Display Rotate: Masuk ke Layar Penuh ketika Perangkat Diputar
|
Enter Fullscreen on Display Rotate: Masuk ke Layar Penuh ketika Perangkat Diputar
|
||||||
Skip by Scrolling Over Video Player: Lewati dengan Menggulir Di Atas Pemutar Video
|
Skip by Scrolling Over Video Player: Lewati dengan Menggulir Di Atas Pemutar Video
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
@ -770,11 +769,6 @@ Video:
|
|||||||
Published on: 'Dipublikasi pada'
|
Published on: 'Dipublikasi pada'
|
||||||
Publicationtemplate: '{number} {unit} yang lalu'
|
Publicationtemplate: '{number} {unit} yang lalu'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
Best: Terbaik
|
|
||||||
High: Tinggi
|
|
||||||
Medium: Sedang
|
|
||||||
Low: Rendah
|
|
||||||
audio only: hanya audio
|
audio only: hanya audio
|
||||||
video only: hanya video
|
video only: hanya video
|
||||||
Download Video: Unduh Video
|
Download Video: Unduh Video
|
||||||
@ -790,7 +784,6 @@ Video:
|
|||||||
Anda
|
Anda
|
||||||
Video has been saved: Video telah disimpan
|
Video has been saved: Video telah disimpan
|
||||||
Save Video: Simpan Video
|
Save Video: Simpan Video
|
||||||
translated from English: diterjemahkan dari Bahasa Inggris
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
interaction: Interaksi
|
interaction: Interaksi
|
||||||
music offtopic: Musik Non-Topik
|
music offtopic: Musik Non-Topik
|
||||||
@ -798,7 +791,6 @@ Video:
|
|||||||
outro: Outro
|
outro: Outro
|
||||||
intro: Intro
|
intro: Intro
|
||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
Skipped segment: Segmen yang dilewati
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
starting video at offset: memulai video pada offset
|
starting video at offset: memulai video pada offset
|
||||||
@ -816,24 +808,6 @@ Video:
|
|||||||
video: video
|
video: video
|
||||||
OpenInTemplate: Buka di {externalPlayer}
|
OpenInTemplate: Buka di {externalPlayer}
|
||||||
Premieres on: Pemutaran Perdana pada
|
Premieres on: Pemutaran Perdana pada
|
||||||
Stats:
|
|
||||||
bandwidth: Kecepatan Koneksi
|
|
||||||
volume: Volume
|
|
||||||
fps: FPS
|
|
||||||
video id: ID Video (YouTube)
|
|
||||||
frame drop: Frame Drop
|
|
||||||
buffered: Buffered
|
|
||||||
player resolution: Area pandang
|
|
||||||
out of: keluar dari
|
|
||||||
Bandwidth: Bandwidth
|
|
||||||
Video statistics are not available for legacy videos: Statistik video tidak tersedia
|
|
||||||
untuk video dengan format lawas
|
|
||||||
Video ID: ID Video
|
|
||||||
Resolution: Resolusi
|
|
||||||
Volume: Volume
|
|
||||||
Mimetype: Tipe Mime
|
|
||||||
Player Dimensions: Ukuran Pemutar
|
|
||||||
Bitrate: Laju Bit
|
|
||||||
Hide Channel: Sembunyikan Kanal
|
Hide Channel: Sembunyikan Kanal
|
||||||
Upcoming: Akan Datang
|
Upcoming: Akan Datang
|
||||||
Videos:
|
Videos:
|
||||||
|
@ -445,7 +445,6 @@ Settings:
|
|||||||
File Name Label: Mynstur skráaheita
|
File Name Label: Mynstur skráaheita
|
||||||
Enter Fullscreen on Display Rotate: Fara í skjáfylli við snúning á skjá
|
Enter Fullscreen on Display Rotate: Fara í skjáfylli við snúning á skjá
|
||||||
Skip by Scrolling Over Video Player: Sleppa með því að skruna ofan á myndspilara
|
Skip by Scrolling Over Video Player: Sleppa með því að skruna ofan á myndspilara
|
||||||
Allow DASH AV1 formats: Leyfa DASH AV1 snið
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Stillingar gagnaleyndar'
|
Privacy Settings: 'Stillingar gagnaleyndar'
|
||||||
Remember History: 'Muna áhorfsferil'
|
Remember History: 'Muna áhorfsferil'
|
||||||
@ -847,11 +846,6 @@ Video:
|
|||||||
Download Video: 'Sækja myndskeið'
|
Download Video: 'Sækja myndskeið'
|
||||||
video only: 'einungis myndmerki'
|
video only: 'einungis myndmerki'
|
||||||
audio only: 'einungis hljóð'
|
audio only: 'einungis hljóð'
|
||||||
Audio:
|
|
||||||
Low: 'Lág'
|
|
||||||
Medium: 'Miðlungs'
|
|
||||||
High: 'Há'
|
|
||||||
Best: 'Besta'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: 'Jan'
|
Jan: 'Jan'
|
||||||
Feb: 'Feb'
|
Feb: 'Feb'
|
||||||
@ -888,7 +882,6 @@ Video:
|
|||||||
Started streaming on: 'Byrjaði streymi'
|
Started streaming on: 'Byrjaði streymi'
|
||||||
Publicationtemplate: 'Fyrir {number} {unit} síðan'
|
Publicationtemplate: 'Fyrir {number} {unit} síðan'
|
||||||
#& Videos
|
#& Videos
|
||||||
translated from English: þýtt úr ensku
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Tónlist óskyld efni
|
music offtopic: Tónlist óskyld efni
|
||||||
interaction: Gagnvirkni
|
interaction: Gagnvirkni
|
||||||
@ -898,7 +891,6 @@ Video:
|
|||||||
outro: Afkynning
|
outro: Afkynning
|
||||||
recap: Upprifjun
|
recap: Upprifjun
|
||||||
filler: Uppfylling
|
filler: Uppfylling
|
||||||
Skipped segment: Búti sleppt
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: endurtaka spilunarlista
|
looping playlists: endurtaka spilunarlista
|
||||||
@ -915,26 +907,6 @@ Video:
|
|||||||
video: myndskeið
|
video: myndskeið
|
||||||
OpenInTemplate: Opna í {externalPlayer}
|
OpenInTemplate: Opna í {externalPlayer}
|
||||||
Premieres on: Frumsýnt
|
Premieres on: Frumsýnt
|
||||||
Stats:
|
|
||||||
player resolution: Myndgluggi
|
|
||||||
fps: r/sek
|
|
||||||
bandwidth: Hraði tengingar
|
|
||||||
buffered: Í biðminni
|
|
||||||
out of: af
|
|
||||||
frame drop: Rammatap
|
|
||||||
video id: Auðkenni myndskeiðs (YouTube)
|
|
||||||
volume: Hljóðstyrkur
|
|
||||||
Video ID: Auðkenni myndmerkis
|
|
||||||
Resolution: Upplausn
|
|
||||||
Player Dimensions: Stærðir spilara
|
|
||||||
Bandwidth: Bandbreidd
|
|
||||||
Buffered: Biðminni
|
|
||||||
Dropped / Total Frames: Sleppt / Fjöldi ramma
|
|
||||||
Mimetype: MIME-tegund
|
|
||||||
Video statistics are not available for legacy videos: Tölfræði myndskeiða er ekki
|
|
||||||
í boði fyrir eldri gerðir myndskeiða
|
|
||||||
Bitrate: Bitahraði
|
|
||||||
Volume: Hljóðstyrkur
|
|
||||||
Premieres in: Frumsýnt eftir
|
Premieres in: Frumsýnt eftir
|
||||||
Premieres: Frumsýnt
|
Premieres: Frumsýnt
|
||||||
Show Super Chat Comment: Birta athugasemd Super Chat
|
Show Super Chat Comment: Birta athugasemd Super Chat
|
||||||
@ -1071,9 +1043,6 @@ Tooltips:
|
|||||||
breytt í stillingunum).
|
breytt í stillingunum).
|
||||||
Skip by Scrolling Over Video Player: Nota skrunhjólið til að fletta í gegnum myndskeið,
|
Skip by Scrolling Over Video Player: Nota skrunhjólið til að fletta í gegnum myndskeið,
|
||||||
svipað og í MPV.
|
svipað og í MPV.
|
||||||
Allow DASH AV1 formats: DASH AV1 snið geta litið betur út en DASH H.264 snið.
|
|
||||||
DASH AV1 snið krefjast hins vegar meira afls í afspilun! Það er ekki til taks
|
|
||||||
í öllum myndskeiðum, þá mun spilarinn nota DASH H.264 snið í staðinn.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: 'Þegar þetta er virkt, mun FreeTube nota RSS í stað sjálfgefinnar
|
Fetch Feeds from RSS: 'Þegar þetta er virkt, mun FreeTube nota RSS í stað sjálfgefinnar
|
||||||
aðferðar við að safna streymi áskriftarinnar þinnar. RSS er hraðvirkara og kemur
|
aðferðar við að safna streymi áskriftarinnar þinnar. RSS er hraðvirkara og kemur
|
||||||
|
@ -439,7 +439,6 @@ Settings:
|
|||||||
del video 3 cifre. %i ID video. Puoi anche usare \ o / per creare sottocartelle.
|
del video 3 cifre. %i ID video. Puoi anche usare \ o / per creare sottocartelle.
|
||||||
Enter Fullscreen on Display Rotate: Entra a schermo intero su Ruota schermo
|
Enter Fullscreen on Display Rotate: Entra a schermo intero su Ruota schermo
|
||||||
Skip by Scrolling Over Video Player: Salta tramite scorrimento sul lettore video
|
Skip by Scrolling Over Video Player: Salta tramite scorrimento sul lettore video
|
||||||
Allow DASH AV1 formats: Consenti formati DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Impostazioni della privacy'
|
Privacy Settings: 'Impostazioni della privacy'
|
||||||
Remember History: 'Salva la cronologia'
|
Remember History: 'Salva la cronologia'
|
||||||
@ -885,11 +884,6 @@ Video:
|
|||||||
Autoplay: Riproduzione automatica
|
Autoplay: Riproduzione automatica
|
||||||
Starting soon, please refresh the page to check again: La riproduzione partirà tra
|
Starting soon, please refresh the page to check again: La riproduzione partirà tra
|
||||||
breve, aggiorna la pagina per ricontrollare
|
breve, aggiorna la pagina per ricontrollare
|
||||||
Audio:
|
|
||||||
Best: Migliore
|
|
||||||
High: Alto
|
|
||||||
Medium: Medio
|
|
||||||
Low: Basso
|
|
||||||
audio only: solo audio
|
audio only: solo audio
|
||||||
video only: solo video
|
video only: solo video
|
||||||
Download Video: Download video
|
Download Video: Download video
|
||||||
@ -927,29 +921,7 @@ Video:
|
|||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
recap: Ricapitolazione
|
recap: Ricapitolazione
|
||||||
filler: Riempitivo
|
filler: Riempitivo
|
||||||
Skipped segment: Segmento saltato
|
|
||||||
translated from English: tradotto dall'inglese
|
|
||||||
Premieres on: Première il
|
Premieres on: Première il
|
||||||
Stats:
|
|
||||||
volume: Volume
|
|
||||||
fps: FPS
|
|
||||||
frame drop: Perdita di immagine
|
|
||||||
buffered: Bufferizzato
|
|
||||||
bandwidth: Velocità di connessione
|
|
||||||
out of: per
|
|
||||||
video id: ID video (YouTube)
|
|
||||||
player resolution: Finestra di visualizzazione
|
|
||||||
Video statistics are not available for legacy videos: Le statistiche sui video
|
|
||||||
non sono disponibili per i video obsoleti
|
|
||||||
Video ID: ID video
|
|
||||||
Resolution: Risoluzione
|
|
||||||
Player Dimensions: Dimensioni del lettore
|
|
||||||
Bitrate: Velocità di trasmissione
|
|
||||||
Volume: Volume
|
|
||||||
Bandwidth: Larghezza di banda
|
|
||||||
Buffered: Memoria buffer
|
|
||||||
Dropped / Total Frames: Frame persi / Frame totali
|
|
||||||
Mimetype: Tipo di media
|
|
||||||
Premieres in: Anteprima in
|
Premieres in: Anteprima in
|
||||||
Premieres: Première
|
Premieres: Première
|
||||||
Scroll to Bottom: Scorri fino in fondo
|
Scroll to Bottom: Scorri fino in fondo
|
||||||
@ -1147,10 +1119,6 @@ Tooltips:
|
|||||||
nelle Impostazioni).
|
nelle Impostazioni).
|
||||||
Skip by Scrolling Over Video Player: Usa la rotella di scorrimento per saltare
|
Skip by Scrolling Over Video Player: Usa la rotella di scorrimento per saltare
|
||||||
il video, in stile MPV.
|
il video, in stile MPV.
|
||||||
Allow DASH AV1 formats: I formati DASH AV1 possono avere un aspetto migliore dei
|
|
||||||
formati DASH H.264. I formati DASH AV1 richiedono più potenza per la riproduzione!
|
|
||||||
Non sono disponibili su tutti i video, in questo caso il lettore userà invece
|
|
||||||
i formati DASH H.264.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: Se abilitato, FreeTube userà gli RSS invece del metodo standard
|
Fetch Feeds from RSS: Se abilitato, FreeTube userà gli RSS invece del metodo standard
|
||||||
per leggere le iscrizioni. Gli RSS sono più veloci e impediscono il blocco dell'IP,
|
per leggere le iscrizioni. Gli RSS sono più veloci e impediscono il blocco dell'IP,
|
||||||
|
@ -165,7 +165,7 @@ User Playlists:
|
|||||||
Playlist name cannot be empty. Please input a name.: 再生リストの名前は空白にできません。名前を入力してください.
|
Playlist name cannot be empty. Please input a name.: 再生リストの名前は空白にできません。名前を入力してください.
|
||||||
Reverted to use {oldPlaylistName} for quick bookmark: クイックブックマークを {oldPlaylistName}
|
Reverted to use {oldPlaylistName} for quick bookmark: クイックブックマークを {oldPlaylistName}
|
||||||
に戻しました
|
に戻しました
|
||||||
"{videoCount} video(s) have been removed": 1 本の動画を削除しました | {video Count} 本の動画を削除しました
|
"{videoCount} video(s) have been removed": 1 本の動画を削除しました | {videoCount} 本の動画を削除しました
|
||||||
Playlist {playlistName} has been deleted.: 再生リスト {playlistName} が削除されました。
|
Playlist {playlistName} has been deleted.: 再生リスト {playlistName} が削除されました。
|
||||||
There were no videos to remove.: 削除する動画はありません。
|
There were no videos to remove.: 削除する動画はありません。
|
||||||
This playlist does not exist: この再生リストは存在しません
|
This playlist does not exist: この再生リストは存在しません
|
||||||
@ -395,7 +395,6 @@ Settings:
|
|||||||
Folder Button: フォルダの選択
|
Folder Button: フォルダの選択
|
||||||
Enter Fullscreen on Display Rotate: 画面の回転時に全画面表示にする
|
Enter Fullscreen on Display Rotate: 画面の回転時に全画面表示にする
|
||||||
Skip by Scrolling Over Video Player: 動画プレーヤーをスクロールして動画をスキップ
|
Skip by Scrolling Over Video Player: 動画プレーヤーをスクロールして動画をスキップ
|
||||||
Allow DASH AV1 formats: DASH AV1形式を許可
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: '登録チャンネルの設定'
|
Subscription Settings: '登録チャンネルの設定'
|
||||||
Hide Videos on Watch: '視聴済みの動画を非表示にする'
|
Hide Videos on Watch: '視聴済みの動画を非表示にする'
|
||||||
@ -784,11 +783,6 @@ Video:
|
|||||||
Shuffle Playlist: 再生リストをシャッフル
|
Shuffle Playlist: 再生リストをシャッフル
|
||||||
Loop Playlist: 再生リストのループ
|
Loop Playlist: 再生リストのループ
|
||||||
Starting soon, please refresh the page to check again: すぐに再生されます、ページを再読み込みしてお待ちください
|
Starting soon, please refresh the page to check again: すぐに再生されます、ページを再読み込みしてお待ちください
|
||||||
Audio:
|
|
||||||
Best: 最適
|
|
||||||
High: 高
|
|
||||||
Medium: 中
|
|
||||||
Low: 低
|
|
||||||
audio only: '音声のみ'
|
audio only: '音声のみ'
|
||||||
video only: '映像のみ'
|
video only: '映像のみ'
|
||||||
Download Video: '動画のダウンロード'
|
Download Video: '動画のダウンロード'
|
||||||
@ -801,7 +795,6 @@ Video:
|
|||||||
Video has been removed from your saved list: 動画を保存一覧から削除しました
|
Video has been removed from your saved list: 動画を保存一覧から削除しました
|
||||||
Video has been saved: 動画を保存しました
|
Video has been saved: 動画を保存しました
|
||||||
Save Video: 動画の保存
|
Save Video: 動画の保存
|
||||||
translated from English: 英語から翻訳
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: スポンサー
|
sponsor: スポンサー
|
||||||
music offtopic: 音楽以外
|
music offtopic: 音楽以外
|
||||||
@ -811,7 +804,6 @@ Video:
|
|||||||
intro: イントロ(冒頭)
|
intro: イントロ(冒頭)
|
||||||
recap: 要約
|
recap: 要約
|
||||||
filler: フィラー(穴埋め)
|
filler: フィラー(穴埋め)
|
||||||
Skipped segment: スキップされたセグメント
|
|
||||||
External Player:
|
External Player:
|
||||||
OpeningTemplate: '{externalPlayer} で {videoOrPlaylist} を開く...'
|
OpeningTemplate: '{externalPlayer} で {videoOrPlaylist} を開く...'
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
@ -828,25 +820,6 @@ Video:
|
|||||||
video: 動画
|
video: 動画
|
||||||
OpenInTemplate: '{externalPlayer} で開く'
|
OpenInTemplate: '{externalPlayer} で開く'
|
||||||
Premieres on: プレミア公開日時
|
Premieres on: プレミア公開日時
|
||||||
Stats:
|
|
||||||
player resolution: 表示領域
|
|
||||||
fps: FPS
|
|
||||||
frame drop: コマ落ち
|
|
||||||
buffered: バッファー
|
|
||||||
video id: Video ID (YouTube)
|
|
||||||
volume: 音量
|
|
||||||
bandwidth: 接続速度
|
|
||||||
out of: のうち
|
|
||||||
Mimetype: メディアタイプ
|
|
||||||
Video ID: ビデオ ID
|
|
||||||
Resolution: 解像度
|
|
||||||
Bitrate: ビットレート
|
|
||||||
Volume: 音量
|
|
||||||
Buffered: バッファー
|
|
||||||
Player Dimensions: プレーヤーのサイズ
|
|
||||||
Video statistics are not available for legacy videos: 従来のビデオでは、ビデオ統計を使用できません
|
|
||||||
Bandwidth: 帯域幅
|
|
||||||
Dropped / Total Frames: ドロップ率 / 総フレーム数
|
|
||||||
Premieres in: 配信開始まで
|
Premieres in: 配信開始まで
|
||||||
Premieres: プレミア公開
|
Premieres: プレミア公開
|
||||||
Show Super Chat Comment: Super Chat のコメント表示
|
Show Super Chat Comment: Super Chat のコメント表示
|
||||||
@ -1019,8 +992,6 @@ Tooltips:
|
|||||||
Scroll Playback Rate Over Video Player: カーソルが動画上にあるとき、Ctrl キー(Mac では Command キー)を押したまま、マウスホイールを前後にスクロールして再生速度を調整します。Control
|
Scroll Playback Rate Over Video Player: カーソルが動画上にあるとき、Ctrl キー(Mac では Command キー)を押したまま、マウスホイールを前後にスクロールして再生速度を調整します。Control
|
||||||
キー(Mac では Command キー)を押したままマウスを左クリックすると、すぐにデフォルトの再生速度(設定を変更していない場合は 1 x)に戻ります。
|
キー(Mac では Command キー)を押したままマウスを左クリックすると、すぐにデフォルトの再生速度(設定を変更していない場合は 1 x)に戻ります。
|
||||||
Skip by Scrolling Over Video Player: MPVスタイルでスクロールホイールを使って動画をスキップします。
|
Skip by Scrolling Over Video Player: MPVスタイルでスクロールホイールを使って動画をスキップします。
|
||||||
Allow DASH AV1 formats: DASH H.264形式よりもDASH AV1形式の方がきれいに見える可能性がありますが、再生にはより多くの処理能力が必要となります。DASH
|
|
||||||
AV1形式を使用できない場合、プレイヤーはDASH H.264形式を自動で使用します。
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Invidious Instance: FreeTube が API 呼び出しのために接続する Invidious のインスタンスです。
|
Invidious Instance: FreeTube が API 呼び出しのために接続する Invidious のインスタンスです。
|
||||||
Preferred API Backend: FreeTube がデータを取得するために使用する方法を選択してください。内部 API はアプリ内蔵の取得機能です。
|
Preferred API Backend: FreeTube がデータを取得するために使用する方法を選択してください。内部 API はアプリ内蔵の取得機能です。
|
||||||
|
@ -269,7 +269,6 @@ Settings:
|
|||||||
File Name Tooltip: 아래 변수를 사용할 수 있습니다. %Y 년 4자리. %M 월 2자리. %D 일 2자리. %H 시간 2자리.
|
File Name Tooltip: 아래 변수를 사용할 수 있습니다. %Y 년 4자리. %M 월 2자리. %D 일 2자리. %H 시간 2자리.
|
||||||
%N 분 2자리. %S 초 2자리. %T 밀리초 3자리. %s 비디오초. %t 비디오 밀리초 3자리. %i 비디오 ID. "\" 또는
|
%N 분 2자리. %S 초 2자리. %T 밀리초 3자리. %s 비디오초. %t 비디오 밀리초 3자리. %i 비디오 ID. "\" 또는
|
||||||
"/" 를 사용하여 하위 폴더를 만들 수도 있습니다.
|
"/" 를 사용하여 하위 폴더를 만들 수도 있습니다.
|
||||||
Allow DASH AV1 formats: DASH AV1 포맷 허용
|
|
||||||
Skip by Scrolling Over Video Player: 비디오 플레이어를 스크롤하여 건너뛰기
|
Skip by Scrolling Over Video Player: 비디오 플레이어를 스크롤하여 건너뛰기
|
||||||
Enter Fullscreen on Display Rotate: 화면 회전 시 전체화면 활성화하기
|
Enter Fullscreen on Display Rotate: 화면 회전 시 전체화면 활성화하기
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
@ -551,11 +550,6 @@ Video:
|
|||||||
Download Video: '동영상 다운로드'
|
Download Video: '동영상 다운로드'
|
||||||
video only: '비디오만'
|
video only: '비디오만'
|
||||||
audio only: '오디오만'
|
audio only: '오디오만'
|
||||||
Audio:
|
|
||||||
Low: '낮음'
|
|
||||||
Medium: '중간'
|
|
||||||
High: '높음'
|
|
||||||
Best: '최고'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: '1월'
|
Jan: '1월'
|
||||||
Feb: '2월'
|
Feb: '2월'
|
||||||
@ -594,18 +588,6 @@ Video:
|
|||||||
Video has been saved: 동영상이 저장되었습니다
|
Video has been saved: 동영상이 저장되었습니다
|
||||||
Video has been removed from your saved list: 저장된 목록에서 동영상이 제거되었습니다
|
Video has been removed from your saved list: 저장된 목록에서 동영상이 제거되었습니다
|
||||||
Save Video: 비디오 저장
|
Save Video: 비디오 저장
|
||||||
Stats:
|
|
||||||
Mimetype: 미디어 타입
|
|
||||||
Video statistics are not available for legacy videos: 레거시 비디오에 대한 비디오 통계를 사용할
|
|
||||||
수 없습니다
|
|
||||||
Player Dimensions: 플레이어 치수
|
|
||||||
Bandwidth: 대역폭
|
|
||||||
Video ID: 비디오 ID
|
|
||||||
Resolution: 해상도
|
|
||||||
Bitrate: 비트 전송률
|
|
||||||
Volume: 음량
|
|
||||||
Buffered: 버퍼링된
|
|
||||||
Dropped / Total Frames: 손실된 / 총 프레임 수
|
|
||||||
Premieres on: 개봉일
|
Premieres on: 개봉일
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
@ -631,8 +613,6 @@ Video:
|
|||||||
outro: 결말부
|
outro: 결말부
|
||||||
self-promotion: 자기 홍보
|
self-promotion: 자기 홍보
|
||||||
interaction: 상호 작용
|
interaction: 상호 작용
|
||||||
translated from English: 영어에서 번역됨
|
|
||||||
Skipped segment: 건너뛴 세그먼트
|
|
||||||
Premieres: 프리미어
|
Premieres: 프리미어
|
||||||
Upcoming: 공개 예정
|
Upcoming: 공개 예정
|
||||||
Show Super Chat Comment: 슈퍼채팅 댓글 보이기
|
Show Super Chat Comment: 슈퍼채팅 댓글 보이기
|
||||||
@ -732,8 +712,6 @@ Tooltips:
|
|||||||
Scroll Playback Rate Over Video Player: 커서가 비디오 위에 있는 동안 Control 키( Mac의 경우 Command
|
Scroll Playback Rate Over Video Player: 커서가 비디오 위에 있는 동안 Control 키( Mac의 경우 Command
|
||||||
키)를 길게 누르고 마우스 휠을 앞뒤로 스크롤하여 재생 속도를 제어합니다. Control 키 (Mac의 경우 Command 키)를 길게
|
키)를 길게 누르고 마우스 휠을 앞뒤로 스크롤하여 재생 속도를 제어합니다. Control 키 (Mac의 경우 Command 키)를 길게
|
||||||
누르고 마우스 왼쪽 버튼을 클릭하여 기본 재생 속도(설정에서 변경되지 않은 경우 1배)로 빠르게 돌아갑니다.
|
누르고 마우스 왼쪽 버튼을 클릭하여 기본 재생 속도(설정에서 변경되지 않은 경우 1배)로 빠르게 돌아갑니다.
|
||||||
Allow DASH AV1 formats: DASH AV1 포맷은 DASH H.264 포맷보다 화질이 좋을 수 있으나, 영상 재생을 위해 더
|
|
||||||
높은 성능을 요구합니다. 모든 영상에서 사용 가능한 것은 아니며, 사용이 불가능할 경우 DASH H.264 포맷을 사용합니다.
|
|
||||||
Skip by Scrolling Over Video Player: MPV 방식으로 마우스 스크롤을 이용해 영상을 스킵합니다.
|
Skip by Scrolling Over Video Player: MPV 방식으로 마우스 스크롤을 이용해 영상을 스킵합니다.
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: '활성화되면 FreeTube는 구독 피드를 가져오는 기본 방법 대신 RSS를 사용합니다. RSS는 더
|
Fetch Feeds from RSS: '활성화되면 FreeTube는 구독 피드를 가져오는 기본 방법 대신 RSS를 사용합니다. RSS는 더
|
||||||
|
@ -294,7 +294,6 @@ Settings:
|
|||||||
Max Video Playback Rate: Maksimalus vaizdo įrašų atkūrimo dažnis
|
Max Video Playback Rate: Maksimalus vaizdo įrašų atkūrimo dažnis
|
||||||
Enter Fullscreen on Display Rotate: Viso ekrano režimas pasukus ekraną
|
Enter Fullscreen on Display Rotate: Viso ekrano režimas pasukus ekraną
|
||||||
Skip by Scrolling Over Video Player: Praleiskite slinkdami per vaizdo grotuvą
|
Skip by Scrolling Over Video Player: Praleiskite slinkdami per vaizdo grotuvą
|
||||||
Allow DASH AV1 formats: Leisti DASH AV1 formatus
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
External Player Settings: 'Išorinio grotuvo nustatymai'
|
External Player Settings: 'Išorinio grotuvo nustatymai'
|
||||||
External Player: 'Išorinis grotuvas'
|
External Player: 'Išorinis grotuvas'
|
||||||
@ -606,11 +605,6 @@ Video:
|
|||||||
Download Video: 'Atsisiųsti vaizdo įrašą'
|
Download Video: 'Atsisiųsti vaizdo įrašą'
|
||||||
video only: 'tik video'
|
video only: 'tik video'
|
||||||
audio only: 'tik audio'
|
audio only: 'tik audio'
|
||||||
Audio:
|
|
||||||
Low: 'Žemiausia'
|
|
||||||
Medium: 'Vidutinė'
|
|
||||||
High: 'Aukščiausia'
|
|
||||||
Best: 'Pati geriausia'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: 'Sau'
|
Jan: 'Sau'
|
||||||
Feb: 'Vas'
|
Feb: 'Vas'
|
||||||
@ -644,9 +638,7 @@ Video:
|
|||||||
Published on: 'Publikuota'
|
Published on: 'Publikuota'
|
||||||
Streamed on: 'Transliuota'
|
Streamed on: 'Transliuota'
|
||||||
Started streaming on: 'Transliaciją pradėjo'
|
Started streaming on: 'Transliaciją pradėjo'
|
||||||
translated from English: 'išversta iš anglų kalbos'
|
|
||||||
Publicationtemplate: 'prieš {number} {unit}'
|
Publicationtemplate: 'prieš {number} {unit}'
|
||||||
Skipped segment: 'Praleistas segmentas'
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: 'Rėmėjas'
|
sponsor: 'Rėmėjas'
|
||||||
intro: 'Įžanga'
|
intro: 'Įžanga'
|
||||||
@ -673,26 +665,6 @@ Video:
|
|||||||
looping playlists: 'ciklu sukami grojaraščiai'
|
looping playlists: 'ciklu sukami grojaraščiai'
|
||||||
#& Videos
|
#& Videos
|
||||||
Premieres on: Premjera
|
Premieres on: Premjera
|
||||||
Stats:
|
|
||||||
video id: Vaizdo įrašo ID (YouTube)
|
|
||||||
player resolution: Peržiūros sritis
|
|
||||||
fps: Kadrai per sekundę (FPS)
|
|
||||||
frame drop: Praleisti kadrai
|
|
||||||
bandwidth: Ryšio greitis
|
|
||||||
buffered: Užkrauta atmintyje
|
|
||||||
volume: Garsas
|
|
||||||
out of: iš
|
|
||||||
Video ID: Vaizdo įrašo ID
|
|
||||||
Resolution: Rezoliucija
|
|
||||||
Bitrate: Bitų sparta
|
|
||||||
Bandwidth: Pralaidumas
|
|
||||||
Volume: Apimtis
|
|
||||||
Player Dimensions: Grotuvo matmenys
|
|
||||||
Video statistics are not available for legacy videos: Vaizdo įrašų statistika
|
|
||||||
nepateikiama seniems vaizdo įrašams
|
|
||||||
Dropped / Total Frames: Pamesti / Iš viso kadrų
|
|
||||||
Mimetype: Mimetipas
|
|
||||||
Buffered: Buferizuota
|
|
||||||
Premieres: Premjera
|
Premieres: Premjera
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
|
@ -279,7 +279,6 @@ Settings:
|
|||||||
1440p: '1440p'
|
1440p: '1440p'
|
||||||
4k: '4k'
|
4k: '4k'
|
||||||
8k: '8k'
|
8k: '8k'
|
||||||
Allow DASH AV1 formats: 'Atļaut DASH AV1 formātus'
|
|
||||||
Screenshot:
|
Screenshot:
|
||||||
Enable: 'Iespējot ekrānšāviņu'
|
Enable: 'Iespējot ekrānšāviņu'
|
||||||
Format Label: 'Ekrānšāviņa formāti'
|
Format Label: 'Ekrānšāviņa formāti'
|
||||||
@ -627,11 +626,6 @@ Video:
|
|||||||
Download Video: ''
|
Download Video: ''
|
||||||
video only: ''
|
video only: ''
|
||||||
audio only: ''
|
audio only: ''
|
||||||
Audio:
|
|
||||||
Low: ''
|
|
||||||
Medium: ''
|
|
||||||
High: ''
|
|
||||||
Best: ''
|
|
||||||
Published:
|
Published:
|
||||||
Jan: ''
|
Jan: ''
|
||||||
Feb: ''
|
Feb: ''
|
||||||
@ -665,9 +659,7 @@ Video:
|
|||||||
Published on: ''
|
Published on: ''
|
||||||
Streamed on: ''
|
Streamed on: ''
|
||||||
Started streaming on: ''
|
Started streaming on: ''
|
||||||
translated from English: ''
|
|
||||||
Publicationtemplate: ''
|
Publicationtemplate: ''
|
||||||
Skipped segment: ''
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: ''
|
sponsor: ''
|
||||||
intro: ''
|
intro: ''
|
||||||
@ -691,17 +683,6 @@ Video:
|
|||||||
reversing playlists: ''
|
reversing playlists: ''
|
||||||
shuffling playlists: ''
|
shuffling playlists: ''
|
||||||
looping playlists: ''
|
looping playlists: ''
|
||||||
Stats:
|
|
||||||
Video statistics are not available for legacy videos: ''
|
|
||||||
Video ID: ''
|
|
||||||
Resolution: ''
|
|
||||||
Player Dimensions: ''
|
|
||||||
Bitrate: ''
|
|
||||||
Volume: ''
|
|
||||||
Bandwidth: ''
|
|
||||||
Buffered: ''
|
|
||||||
Dropped / Total Frames: ''
|
|
||||||
Mimetype: ''
|
|
||||||
#& Videos
|
#& Videos
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
@ -797,7 +778,6 @@ Tooltips:
|
|||||||
Force Local Backend for Legacy Formats: ''
|
Force Local Backend for Legacy Formats: ''
|
||||||
Proxy Videos Through Invidious: ''
|
Proxy Videos Through Invidious: ''
|
||||||
Default Video Format: ''
|
Default Video Format: ''
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Scroll Playback Rate Over Video Player: ''
|
Scroll Playback Rate Over Video Player: ''
|
||||||
Skip by Scrolling Over Video Player: ''
|
Skip by Scrolling Over Video Player: ''
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
|
@ -276,7 +276,6 @@ Settings:
|
|||||||
Video Playback Rate Interval: Intervall for videoavspillingshastighet
|
Video Playback Rate Interval: Intervall for videoavspillingshastighet
|
||||||
Enter Fullscreen on Display Rotate: Fullskjermsvisning når skjermen roteres
|
Enter Fullscreen on Display Rotate: Fullskjermsvisning når skjermen roteres
|
||||||
Skip by Scrolling Over Video Player: Hopp over ved å rulle over videoavspiller
|
Skip by Scrolling Over Video Player: Hopp over ved å rulle over videoavspiller
|
||||||
Allow DASH AV1 formats: Tillat DASH AV1-formater
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Personvernsinnstillinger'
|
Privacy Settings: 'Personvernsinnstillinger'
|
||||||
Remember History: 'Husk historikk'
|
Remember History: 'Husk historikk'
|
||||||
@ -626,11 +625,6 @@ Video:
|
|||||||
Published on: 'Publisert'
|
Published on: 'Publisert'
|
||||||
Publicationtemplate: '{number} {unit} siden'
|
Publicationtemplate: '{number} {unit} siden'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
High: Høy
|
|
||||||
Medium: Middels
|
|
||||||
Low: Lav
|
|
||||||
Best: Beste
|
|
||||||
audio only: Bare lyd
|
audio only: Bare lyd
|
||||||
video only: Bare video
|
video only: Bare video
|
||||||
Download Video: Last ned video
|
Download Video: Last ned video
|
||||||
@ -652,7 +646,6 @@ Video:
|
|||||||
Open Channel in YouTube: Åpne kanal i YouTube
|
Open Channel in YouTube: Åpne kanal i YouTube
|
||||||
Play Previous Video: Spill av forrige video
|
Play Previous Video: Spill av forrige video
|
||||||
Play Next Video: Spill av neste video
|
Play Next Video: Spill av neste video
|
||||||
translated from English: oversatt fra engelsk
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
interaction: samhandling
|
interaction: samhandling
|
||||||
outro: utgang
|
outro: utgang
|
||||||
@ -662,7 +655,6 @@ Video:
|
|||||||
self-promotion: egenpromotering
|
self-promotion: egenpromotering
|
||||||
recap: Oppsummering
|
recap: Oppsummering
|
||||||
filler: Fyllstoff
|
filler: Fyllstoff
|
||||||
Skipped segment: Overhoppet del
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
shuffling playlists: omstokking av spillelister
|
shuffling playlists: omstokking av spillelister
|
||||||
@ -678,18 +670,6 @@ Video:
|
|||||||
playlist: spilleliste
|
playlist: spilleliste
|
||||||
video: video
|
video: video
|
||||||
OpenInTemplate: Åpne i {externalPlayer}
|
OpenInTemplate: Åpne i {externalPlayer}
|
||||||
Stats:
|
|
||||||
Bitrate: Bitrate
|
|
||||||
Volume: Lydstyrke
|
|
||||||
Bandwidth: Båndbredde
|
|
||||||
Resolution: Oppløsning
|
|
||||||
Player Dimensions: Avspillerdimensjoner
|
|
||||||
Mimetype: Media-type
|
|
||||||
Buffered: Mellomlagret
|
|
||||||
Video ID: Video-ID
|
|
||||||
Video statistics are not available for legacy videos: Videostatistikk er ikke
|
|
||||||
tilgjengelig for gammeldagse videoer
|
|
||||||
Dropped / Total Frames: Tapte/totalt antall rammer
|
|
||||||
Show Super Chat Comment: Vis supersludringskommentar
|
Show Super Chat Comment: Vis supersludringskommentar
|
||||||
Scroll to Bottom: Rull til bunnen
|
Scroll to Bottom: Rull til bunnen
|
||||||
Premieres on: Har première
|
Premieres on: Har première
|
||||||
@ -879,9 +859,6 @@ Tooltips:
|
|||||||
å kontrollere avspillingshastigheten. Trykk og hold Ctrl-tasten (⌘ på Mac) og
|
å kontrollere avspillingshastigheten. Trykk og hold Ctrl-tasten (⌘ på Mac) og
|
||||||
venstreklikk på musen for å gå tilbake til fovalgt avspillingshastighet (1x
|
venstreklikk på musen for å gå tilbake til fovalgt avspillingshastighet (1x
|
||||||
med minde det har blitt endret i innstillingene).
|
med minde det har blitt endret i innstillingene).
|
||||||
Allow DASH AV1 formats: DASH AV1-formater kan ha bedre kvalitet enn DASH H.264
|
|
||||||
-formater. DASH AV1-formater krever dog mer regnekraft for avspilling. Ikke
|
|
||||||
tilgjengelig for alle videoer, og i sådant fall bruker avspilleren DASH H.264-formater.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Alle egendefinerte kommandolinjeargumenter,
|
Custom External Player Arguments: Alle egendefinerte kommandolinjeargumenter,
|
||||||
semikoloninndelt («;») du ønsker å sende til den eksterne avspilleren.
|
semikoloninndelt («;») du ønsker å sende til den eksterne avspilleren.
|
||||||
|
@ -435,7 +435,6 @@ Settings:
|
|||||||
video; %i ID van de video. U kunt ook "\" of "/" gebruiken om deelmappen aan
|
video; %i ID van de video. U kunt ook "\" of "/" gebruiken om deelmappen aan
|
||||||
te maken.'
|
te maken.'
|
||||||
Skip by Scrolling Over Video Player: Overslaan door over de videospeler te scrollen
|
Skip by Scrolling Over Video Player: Overslaan door over de videospeler te scrollen
|
||||||
Allow DASH AV1 formats: DASH-AV1-bestandstypes toestaan
|
|
||||||
Enter Fullscreen on Display Rotate: Volledig scherm bij draaien van scherm
|
Enter Fullscreen on Display Rotate: Volledig scherm bij draaien van scherm
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Privacy-instellingen'
|
Privacy Settings: 'Privacy-instellingen'
|
||||||
@ -874,11 +873,6 @@ Video:
|
|||||||
Loop Playlist: Playlist herhalen
|
Loop Playlist: Playlist herhalen
|
||||||
Starting soon, please refresh the page to check again: Start binnenkort, vernieuw
|
Starting soon, please refresh the page to check again: Start binnenkort, vernieuw
|
||||||
de pagina om opnieuw te controleren
|
de pagina om opnieuw te controleren
|
||||||
Audio:
|
|
||||||
Best: Beste
|
|
||||||
High: Hoog
|
|
||||||
Medium: Gemiddeld
|
|
||||||
Low: Laag
|
|
||||||
audio only: alleen audio
|
audio only: alleen audio
|
||||||
video only: alleen video
|
video only: alleen video
|
||||||
Download Video: Video downloaden
|
Download Video: Video downloaden
|
||||||
@ -892,7 +886,6 @@ Video:
|
|||||||
opgeslagen video's
|
opgeslagen video's
|
||||||
Video has been saved: Video is opgeslagen
|
Video has been saved: Video is opgeslagen
|
||||||
Save Video: Video opslaan
|
Save Video: Video opslaan
|
||||||
translated from English: vertaald uit het Engels
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Niet-muziek
|
music offtopic: Niet-muziek
|
||||||
interaction: Interactie
|
interaction: Interactie
|
||||||
@ -902,7 +895,6 @@ Video:
|
|||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
recap: Samenvatting
|
recap: Samenvatting
|
||||||
filler: Opvulling
|
filler: Opvulling
|
||||||
Skipped segment: Segment overgeslagen
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
shuffling playlists: afspeellijsten shufflen
|
shuffling playlists: afspeellijsten shufflen
|
||||||
@ -918,26 +910,6 @@ Video:
|
|||||||
playlist: afspeellijst
|
playlist: afspeellijst
|
||||||
video: video
|
video: video
|
||||||
OpenInTemplate: Openen in {externalPlayer}
|
OpenInTemplate: Openen in {externalPlayer}
|
||||||
Stats:
|
|
||||||
player resolution: Venster
|
|
||||||
volume: Volume
|
|
||||||
video id: Video-ID (YouTube)
|
|
||||||
fps: FPS
|
|
||||||
frame drop: Frame verlies
|
|
||||||
bandwidth: Verbindingssnelheid
|
|
||||||
buffered: Gebufferd
|
|
||||||
out of: van de
|
|
||||||
Buffered: Gebufferd
|
|
||||||
Dropped / Total Frames: Frames verloren/totaal
|
|
||||||
Mimetype: MIME-type
|
|
||||||
Video statistics are not available for legacy videos: Videogegevens zijn niet
|
|
||||||
beschikbaar voor oudere video's
|
|
||||||
Video ID: Video-ID
|
|
||||||
Resolution: Resolutie
|
|
||||||
Bandwidth: Bandbreedte
|
|
||||||
Bitrate: Bitrate
|
|
||||||
Volume: Volume
|
|
||||||
Player Dimensions: Spelerafmetingen
|
|
||||||
Premieres on: Gaat in première op
|
Premieres on: Gaat in première op
|
||||||
Premieres: Premières
|
Premieres: Premières
|
||||||
Scroll to Bottom: Helemaal naar onderen scrollen
|
Scroll to Bottom: Helemaal naar onderen scrollen
|
||||||
@ -1132,10 +1104,6 @@ Tooltips:
|
|||||||
om de afspeelsnelheid te besturen. Houd de Control-toets (Command-toets op Mac)
|
om de afspeelsnelheid te besturen. Houd de Control-toets (Command-toets op Mac)
|
||||||
ingedrukt en klik met de linker muisknop om snel terug te schakelen naar de
|
ingedrukt en klik met de linker muisknop om snel terug te schakelen naar de
|
||||||
standaard afspeelsnelheid (1x tenzij aangepast in de instellingen).
|
standaard afspeelsnelheid (1x tenzij aangepast in de instellingen).
|
||||||
Allow DASH AV1 formats: Video's in DASH AV1-formaat kunnen er beter uitzien dan
|
|
||||||
die in DASH H.264-formaat. DASH AV1 verbruikt op oudere apparaten meer energie!
|
|
||||||
Dit formaat is niet beschikbaar voor alle video's, in welk geval het DASH H.264-formaat
|
|
||||||
wordt gebruikt.
|
|
||||||
Skip by Scrolling Over Video Player: Gebruik het scroll-wieltje om door de video
|
Skip by Scrolling Over Video Player: Gebruik het scroll-wieltje om door de video
|
||||||
te spoelen, zoals bij MPV.
|
te spoelen, zoals bij MPV.
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
|
@ -590,11 +590,6 @@ Video:
|
|||||||
Download Video: 'Last ned video'
|
Download Video: 'Last ned video'
|
||||||
video only: 'berre video'
|
video only: 'berre video'
|
||||||
audio only: 'berre lyd'
|
audio only: 'berre lyd'
|
||||||
Audio:
|
|
||||||
Low: 'Låg'
|
|
||||||
Medium: 'Middels'
|
|
||||||
High: 'Høg'
|
|
||||||
Best: 'Beste'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: 'Jan'
|
Jan: 'Jan'
|
||||||
Feb: 'Feb'
|
Feb: 'Feb'
|
||||||
@ -630,7 +625,6 @@ Video:
|
|||||||
Started streaming on: 'Begynte å straume på'
|
Started streaming on: 'Begynte å straume på'
|
||||||
Publicationtemplate: '{number} {unit} sidan'
|
Publicationtemplate: '{number} {unit} sidan'
|
||||||
#& Videos
|
#& Videos
|
||||||
translated from English: omsett frå engelsk
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
outro: Avslutting
|
outro: Avslutting
|
||||||
interaction: Samhandling
|
interaction: Samhandling
|
||||||
@ -640,7 +634,6 @@ Video:
|
|||||||
self-promotion: Eigenpromotering
|
self-promotion: Eigenpromotering
|
||||||
recap: Oppsummering
|
recap: Oppsummering
|
||||||
filler: Fyllstoff
|
filler: Fyllstoff
|
||||||
Skipped segment: Overhoppa del
|
|
||||||
External Player:
|
External Player:
|
||||||
video: video
|
video: video
|
||||||
playlist: speleliste
|
playlist: speleliste
|
||||||
@ -657,18 +650,6 @@ Video:
|
|||||||
opening specific video in a playlist (falling back to opening the video): opner
|
opening specific video in a playlist (falling back to opening the video): opner
|
||||||
valt video i ei speleliste (faller tilbake til å opne videoen)
|
valt video i ei speleliste (faller tilbake til å opne videoen)
|
||||||
Premieres on: Har premiere
|
Premieres on: Har premiere
|
||||||
Stats:
|
|
||||||
Volume: Lydstyrke
|
|
||||||
Bandwidth: Bandbreidde
|
|
||||||
Player Dimensions: Avspelarstorleik
|
|
||||||
Bitrate: Bithastigheit
|
|
||||||
Resolution: Oppløysing
|
|
||||||
Buffered: Hurtiglagra
|
|
||||||
Video ID: Video-ID
|
|
||||||
Mimetype: Medietype
|
|
||||||
Video statistics are not available for legacy videos: Videostatestikk er ikkje
|
|
||||||
tilgjengeleg for utdaterte videoar
|
|
||||||
Dropped / Total Frames: Redusert/total mengd bilete
|
|
||||||
Show Super Chat Comment: Vis super-chat-kommentar
|
Show Super Chat Comment: Vis super-chat-kommentar
|
||||||
Premieres: Premiere
|
Premieres: Premiere
|
||||||
Scroll to Bottom: Rull til botn
|
Scroll to Bottom: Rull til botn
|
||||||
|
@ -88,7 +88,6 @@ Settings:
|
|||||||
1440p: '୧୪୪୦p'
|
1440p: '୧୪୪୦p'
|
||||||
4k: '୪k'
|
4k: '୪k'
|
||||||
8k: '୮k'
|
8k: '୮k'
|
||||||
Allow DASH AV1 formats: DASH AV1 ଫର୍ମାଟ୍କୁ ଅନୁମତି ଦେବା
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
External Player Settings: 'ବାହ୍ୟ ଚାଳକ ସେଟିଂ'
|
External Player Settings: 'ବାହ୍ୟ ଚାଳକ ସେଟିଂ'
|
||||||
External Player: 'ବାହ୍ୟ ଚାଳକ'
|
External Player: 'ବାହ୍ୟ ଚାଳକ'
|
||||||
|
@ -438,7 +438,6 @@ Settings:
|
|||||||
orientacji ekranu
|
orientacji ekranu
|
||||||
Skip by Scrolling Over Video Player: Przewijaj film kółkiem myszy na obszarze
|
Skip by Scrolling Over Video Player: Przewijaj film kółkiem myszy na obszarze
|
||||||
odtwarzacza
|
odtwarzacza
|
||||||
Allow DASH AV1 formats: Zezwól na format AV1 DASH
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Ustawienia subskrypcji'
|
Subscription Settings: 'Ustawienia subskrypcji'
|
||||||
Hide Videos on Watch: 'Ukrywaj filmy po obejrzeniu'
|
Hide Videos on Watch: 'Ukrywaj filmy po obejrzeniu'
|
||||||
@ -889,11 +888,6 @@ Video:
|
|||||||
Loop Playlist: Zapętl playlistę
|
Loop Playlist: Zapętl playlistę
|
||||||
Starting soon, please refresh the page to check again: Wkrótce się zacznie. Proszę
|
Starting soon, please refresh the page to check again: Wkrótce się zacznie. Proszę
|
||||||
odświeżyć stronę, aby ponownie sprawdzić
|
odświeżyć stronę, aby ponownie sprawdzić
|
||||||
Audio:
|
|
||||||
Best: Najlepsza
|
|
||||||
High: Wysoka
|
|
||||||
Medium: Średnia
|
|
||||||
Low: Niska
|
|
||||||
audio only: tylko audio
|
audio only: tylko audio
|
||||||
video only: tylko wideo
|
video only: tylko wideo
|
||||||
Download Video: Pobierz film
|
Download Video: Pobierz film
|
||||||
@ -907,7 +901,6 @@ Video:
|
|||||||
zapisanych
|
zapisanych
|
||||||
Video has been saved: Film został zapisany
|
Video has been saved: Film został zapisany
|
||||||
Save Video: Zapisz film
|
Save Video: Zapisz film
|
||||||
translated from English: przetłumaczone z angielskiego
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: niemuzyczny
|
music offtopic: niemuzyczny
|
||||||
interaction: o interakcji
|
interaction: o interakcji
|
||||||
@ -917,7 +910,6 @@ Video:
|
|||||||
sponsor: sponsorowany
|
sponsor: sponsorowany
|
||||||
filler: z wypełniaczem
|
filler: z wypełniaczem
|
||||||
recap: z podsumowaniem
|
recap: z podsumowaniem
|
||||||
Skipped segment: Pominięto segment
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
reversing playlists: odwracania playlist
|
reversing playlists: odwracania playlist
|
||||||
@ -934,26 +926,6 @@ Video:
|
|||||||
video: filmu
|
video: filmu
|
||||||
OpenInTemplate: Otwórz w {externalPlayer}
|
OpenInTemplate: Otwórz w {externalPlayer}
|
||||||
Premieres on: Premiera
|
Premieres on: Premiera
|
||||||
Stats:
|
|
||||||
buffered: Zbuforowano
|
|
||||||
out of: z
|
|
||||||
video id: ID filmu (YouTube)
|
|
||||||
player resolution: Odtwarzacz
|
|
||||||
volume: Głośność
|
|
||||||
bandwidth: Prędkość połączenia
|
|
||||||
fps: FPS
|
|
||||||
frame drop: Pominięte klatki
|
|
||||||
Video ID: ID filmu
|
|
||||||
Resolution: Rozdzielczość
|
|
||||||
Player Dimensions: Wymiary odtwarzacza
|
|
||||||
Bitrate: Szybkość transmisji
|
|
||||||
Volume: Głośność
|
|
||||||
Bandwidth: Przepustowość
|
|
||||||
Buffered: Zbuforowano
|
|
||||||
Mimetype: Typ MIME
|
|
||||||
Video statistics are not available for legacy videos: Statystyki filmu nie są
|
|
||||||
dostępne dla starych formatów
|
|
||||||
Dropped / Total Frames: Opuszczone klatki / klatki ogółem
|
|
||||||
Premieres in: Premiera za
|
Premieres in: Premiera za
|
||||||
Premieres: Premiery
|
Premieres: Premiery
|
||||||
Show Super Chat Comment: Pokazuj komentarze z „Superczatu”
|
Show Super Chat Comment: Pokazuj komentarze z „Superczatu”
|
||||||
@ -1171,10 +1143,6 @@ Tooltips:
|
|||||||
wartości (1x, chyba że została zmieniona w ustawieniach).
|
wartości (1x, chyba że została zmieniona w ustawieniach).
|
||||||
Skip by Scrolling Over Video Player: Użyj kółka myszy, by przewijać film tak jak
|
Skip by Scrolling Over Video Player: Użyj kółka myszy, by przewijać film tak jak
|
||||||
w MPV.
|
w MPV.
|
||||||
Allow DASH AV1 formats: Film w formacie AV1 DASH może wyglądać lepiej, niż w formacie
|
|
||||||
H.264 DASH. Dekodowanie formatu AV1 DASH wymaga większej mocy obliczeniowej.
|
|
||||||
W filmach, dla których ten format nie jest dostępny, zostanie użyty format H.264
|
|
||||||
DASH.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Ignore Warnings: Nie pokazuj ostrzeżeń o nieobsługiwanych akcjach przez zewnętrzny
|
Ignore Warnings: Nie pokazuj ostrzeżeń o nieobsługiwanych akcjach przez zewnętrzny
|
||||||
odtwarzacz (n.p. odwracanie playlist, itp.).
|
odtwarzacz (n.p. odwracanie playlist, itp.).
|
||||||
|
@ -435,7 +435,6 @@ Settings:
|
|||||||
Enter Fullscreen on Display Rotate: Entrar em tela cheia ao girar o dispositivo
|
Enter Fullscreen on Display Rotate: Entrar em tela cheia ao girar o dispositivo
|
||||||
para o modo paisagem
|
para o modo paisagem
|
||||||
Skip by Scrolling Over Video Player: Pular vídeo ao rolar sobre o player
|
Skip by Scrolling Over Video Player: Pular vídeo ao rolar sobre o player
|
||||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Configurações de inscrições'
|
Subscription Settings: 'Configurações de inscrições'
|
||||||
Hide Videos on Watch: 'Ocultar vídeos após assisti-los'
|
Hide Videos on Watch: 'Ocultar vídeos após assisti-los'
|
||||||
@ -872,11 +871,6 @@ Video:
|
|||||||
#& Videos
|
#& Videos
|
||||||
Started streaming on: Transmissão iniciada em
|
Started streaming on: Transmissão iniciada em
|
||||||
Streamed on: Transmitido em
|
Streamed on: Transmitido em
|
||||||
Audio:
|
|
||||||
Best: Máxima
|
|
||||||
Medium: Média
|
|
||||||
Low: Baixa
|
|
||||||
High: Alta
|
|
||||||
audio only: somente áudio
|
audio only: somente áudio
|
||||||
video only: somente vídeo
|
video only: somente vídeo
|
||||||
Download Video: Baixar vídeo
|
Download Video: Baixar vídeo
|
||||||
@ -896,7 +890,6 @@ Video:
|
|||||||
vídeos salvos
|
vídeos salvos
|
||||||
Video has been saved: O vídeo foi salvo
|
Video has been saved: O vídeo foi salvo
|
||||||
Save Video: Salvar vídeo
|
Save Video: Salvar vídeo
|
||||||
translated from English: traduzido do Inglês
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Música fora do contexto
|
music offtopic: Música fora do contexto
|
||||||
interaction: Interação
|
interaction: Interação
|
||||||
@ -906,7 +899,6 @@ Video:
|
|||||||
sponsor: Patrocinador
|
sponsor: Patrocinador
|
||||||
filler: Preenchimento
|
filler: Preenchimento
|
||||||
recap: Recapitulação
|
recap: Recapitulação
|
||||||
Skipped segment: Segmento ignorado
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
shuffling playlists: Playlists aleatórias
|
shuffling playlists: Playlists aleatórias
|
||||||
@ -923,26 +915,6 @@ Video:
|
|||||||
OpenInTemplate: Abrir em {externalPlayer}
|
OpenInTemplate: Abrir em {externalPlayer}
|
||||||
video: vídeo
|
video: vídeo
|
||||||
Premieres on: Estreia em
|
Premieres on: Estreia em
|
||||||
Stats:
|
|
||||||
video id: ID do vídeo (YouTube)
|
|
||||||
volume: Volume
|
|
||||||
fps: FPS
|
|
||||||
frame drop: Frame Drop
|
|
||||||
bandwidth: Velocidade de conexão
|
|
||||||
buffered: Buffered
|
|
||||||
out of: de
|
|
||||||
player resolution: Janela de exibição
|
|
||||||
Mimetype: Mimetype
|
|
||||||
Video statistics are not available for legacy videos: As estatísticas de vídeo
|
|
||||||
não estão disponíveis para vídeos mais antigos
|
|
||||||
Video ID: ID do vídeo
|
|
||||||
Player Dimensions: Dimensões do player
|
|
||||||
Bitrate: Taxa de bits
|
|
||||||
Volume: Volume
|
|
||||||
Bandwidth: Largura de banda
|
|
||||||
Resolution: Resolução
|
|
||||||
Buffered: Em buffer
|
|
||||||
Dropped / Total Frames: Quadros perdidos / Total de quadros
|
|
||||||
Premieres in: Estréias em
|
Premieres in: Estréias em
|
||||||
Premieres: Estreia
|
Premieres: Estreia
|
||||||
Scroll to Bottom: Ir para o final
|
Scroll to Bottom: Ir para o final
|
||||||
@ -1148,10 +1120,6 @@ Tooltips:
|
|||||||
sido alterada nas configurações).
|
sido alterada nas configurações).
|
||||||
Skip by Scrolling Over Video Player: Use a roda de rolagem para pular o vídeo,
|
Skip by Scrolling Over Video Player: Use a roda de rolagem para pular o vídeo,
|
||||||
estilo MPV.
|
estilo MPV.
|
||||||
Allow DASH AV1 formats: Os formatos DASH AV1 podem ter melhor aspecto do que os
|
|
||||||
formatos DASH H.264. Os formatos DASH AV1 requerem mais potência para reprodução!
|
|
||||||
Eles não estão disponíveis em todos os vídeos, e nesses casos o player usará
|
|
||||||
os formatos DASH H.264.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Region for Trending: A região de tendências permite que você escolha os vídeos
|
Region for Trending: A região de tendências permite que você escolha os vídeos
|
||||||
em alta do país que deseja exibir.
|
em alta do país que deseja exibir.
|
||||||
|
@ -423,7 +423,6 @@ Settings:
|
|||||||
por cima do reprodutor
|
por cima do reprodutor
|
||||||
Enter Fullscreen on Display Rotate: Ativar modo de ecrã completo ao rodar o ecrã
|
Enter Fullscreen on Display Rotate: Ativar modo de ecrã completo ao rodar o ecrã
|
||||||
Skip by Scrolling Over Video Player: Ignorar ao deslocar por cima do reprodutor
|
Skip by Scrolling Over Video Player: Ignorar ao deslocar por cima do reprodutor
|
||||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: Definições de privacidade
|
Privacy Settings: Definições de privacidade
|
||||||
Remember History: Memorizar histórico
|
Remember History: Memorizar histórico
|
||||||
@ -829,11 +828,6 @@ Video:
|
|||||||
Download Video: Descarregar vídeo
|
Download Video: Descarregar vídeo
|
||||||
video only: apenas vídeo
|
video only: apenas vídeo
|
||||||
audio only: apenas áudio
|
audio only: apenas áudio
|
||||||
Audio:
|
|
||||||
Low: Baixa
|
|
||||||
Medium: Média
|
|
||||||
High: Alta
|
|
||||||
Best: Melhor
|
|
||||||
Published:
|
Published:
|
||||||
Jan: jan
|
Jan: jan
|
||||||
Feb: fev
|
Feb: fev
|
||||||
@ -874,7 +868,6 @@ Video:
|
|||||||
Reverse Playlist: Inverter lista de reprodução
|
Reverse Playlist: Inverter lista de reprodução
|
||||||
Shuffle Playlist: Baralhar lista de reprodução
|
Shuffle Playlist: Baralhar lista de reprodução
|
||||||
Loop Playlist: Repetir lista de reprodução
|
Loop Playlist: Repetir lista de reprodução
|
||||||
translated from English: traduzido do inglês
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: repetir lista de reprodução
|
looping playlists: repetir lista de reprodução
|
||||||
@ -899,19 +892,6 @@ Video:
|
|||||||
sponsor: Patrocinador
|
sponsor: Patrocinador
|
||||||
recap: Recapitulação
|
recap: Recapitulação
|
||||||
filler: Preenchimento
|
filler: Preenchimento
|
||||||
Skipped segment: Secção ignorada
|
|
||||||
Stats:
|
|
||||||
Mimetype: Tipo mime
|
|
||||||
Video statistics are not available for legacy videos: As estatísticas de vídeo
|
|
||||||
não estão disponíveis para vídeos mais antigos
|
|
||||||
Resolution: Resolução
|
|
||||||
Video ID: ID do vídeo
|
|
||||||
Volume: Volume
|
|
||||||
Bandwidth: Largura de banda
|
|
||||||
Buffered: Em memória
|
|
||||||
Bitrate: Taxa de dados
|
|
||||||
Dropped / Total Frames: Fotogramas perdidos/total de fotogramas
|
|
||||||
Player Dimensions: Dimensões do reprodutor
|
|
||||||
Premieres on: Estreia a
|
Premieres on: Estreia a
|
||||||
Premieres: Estreias
|
Premieres: Estreias
|
||||||
Show Super Chat Comment: Mostrar comentário do Super Chat
|
Show Super Chat Comment: Mostrar comentário do Super Chat
|
||||||
@ -1050,10 +1030,6 @@ Tooltips:
|
|||||||
padrão (1 a não ser que tenha sido alterada nas definições).
|
padrão (1 a não ser que tenha sido alterada nas definições).
|
||||||
Skip by Scrolling Over Video Player: Utilizar roda do rato para ignorar vídeo,
|
Skip by Scrolling Over Video Player: Utilizar roda do rato para ignorar vídeo,
|
||||||
estilo MPV.
|
estilo MPV.
|
||||||
Allow DASH AV1 formats: Os formatos DASH AV1 podem parecer melhores do que os
|
|
||||||
formatos DASH H.264. Os formatos DASH AV1 requerem mais potência para reprodução!
|
|
||||||
Não estão disponíveis para todos os vídeos e, nesses casos, o reprodutor usará
|
|
||||||
os formatos DASH H.264.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: Se ativa, FreeTube irá obter as subscrições através de RSS
|
Fetch Feeds from RSS: Se ativa, FreeTube irá obter as subscrições através de RSS
|
||||||
em vez do método normal. O formato RSS é mais rápido e não é bloqueado pelo
|
em vez do método normal. O formato RSS é mais rápido e não é bloqueado pelo
|
||||||
@ -1147,7 +1123,7 @@ Screenshot Success: Captura de ecrã guardada como "{filePath}"
|
|||||||
Screenshot Error: Erro ao capturar o ecrã. {error}
|
Screenshot Error: Erro ao capturar o ecrã. {error}
|
||||||
Chapters:
|
Chapters:
|
||||||
'Chapters list hidden, current chapter: {chapterName}': 'Lista de capítulos oculta,
|
'Chapters list hidden, current chapter: {chapterName}': 'Lista de capítulos oculta,
|
||||||
capítulo atual: {capítuloNoto}'
|
capítulo atual: {chapterName}'
|
||||||
Chapters: Capítulos
|
Chapters: Capítulos
|
||||||
'Chapters list visible, current chapter: {chapterName}': 'Lista de capítulos visível,
|
'Chapters list visible, current chapter: {chapterName}': 'Lista de capítulos visível,
|
||||||
capítulo atual: {chapterName}'
|
capítulo atual: {chapterName}'
|
||||||
|
@ -431,7 +431,6 @@ Settings:
|
|||||||
Ask Path: Perguntar onde guardar
|
Ask Path: Perguntar onde guardar
|
||||||
Enter Fullscreen on Display Rotate: Ativar modo de ecrã completo ao rodar o ecrã
|
Enter Fullscreen on Display Rotate: Ativar modo de ecrã completo ao rodar o ecrã
|
||||||
Skip by Scrolling Over Video Player: Ignorar ao deslocar por cima do reprodutor
|
Skip by Scrolling Over Video Player: Ignorar ao deslocar por cima do reprodutor
|
||||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Definições de privacidade'
|
Privacy Settings: 'Definições de privacidade'
|
||||||
Remember History: 'Memorizar histórico'
|
Remember History: 'Memorizar histórico'
|
||||||
@ -943,8 +942,6 @@ Video:
|
|||||||
sponsor: Patrocinador
|
sponsor: Patrocinador
|
||||||
recap: Recapitulação
|
recap: Recapitulação
|
||||||
filler: Preenchimento
|
filler: Preenchimento
|
||||||
Skipped segment: Secção ignorada
|
|
||||||
translated from English: traduzido do inglês
|
|
||||||
Started streaming on: Transmissão iniciada em
|
Started streaming on: Transmissão iniciada em
|
||||||
Streamed on: Transmitido a
|
Streamed on: Transmitido a
|
||||||
Audio:
|
Audio:
|
||||||
@ -963,26 +960,6 @@ Video:
|
|||||||
Video has been saved: O vídeo foi guardado
|
Video has been saved: O vídeo foi guardado
|
||||||
Save Video: Guardar vídeo
|
Save Video: Guardar vídeo
|
||||||
Premieres on: Estreia a
|
Premieres on: Estreia a
|
||||||
Stats:
|
|
||||||
video id: Video ID (YouTube)
|
|
||||||
volume: Volume
|
|
||||||
fps: FPS
|
|
||||||
frame drop: Fotogramas ignorados
|
|
||||||
bandwidth: Velocidade da conexão
|
|
||||||
out of: de
|
|
||||||
player resolution: Janela de visualização
|
|
||||||
buffered: Buffered
|
|
||||||
Mimetype: Tipo mime
|
|
||||||
Video ID: ID do vídeo
|
|
||||||
Player Dimensions: Dimensões do reprodutor
|
|
||||||
Bitrate: Taxa de dados
|
|
||||||
Volume: Volume
|
|
||||||
Video statistics are not available for legacy videos: As estatísticas de vídeo
|
|
||||||
não estão disponíveis para vídeos mais antigos
|
|
||||||
Resolution: Resolução
|
|
||||||
Bandwidth: Largura de banda
|
|
||||||
Buffered: Em memória
|
|
||||||
Dropped / Total Frames: Fotogramas perdidos/total de fotogramas
|
|
||||||
Premieres in: Estreia em
|
Premieres in: Estreia em
|
||||||
Premieres: Estreias
|
Premieres: Estreias
|
||||||
Scroll to Bottom: Deslocar para baixo
|
Scroll to Bottom: Deslocar para baixo
|
||||||
@ -1160,10 +1137,6 @@ Tooltips:
|
|||||||
padrão (1 a não ser que tenha sido alterada nas definições).
|
padrão (1 a não ser que tenha sido alterada nas definições).
|
||||||
Skip by Scrolling Over Video Player: Utilizar roda do rato para ignorar vídeo,
|
Skip by Scrolling Over Video Player: Utilizar roda do rato para ignorar vídeo,
|
||||||
estilo MPV.
|
estilo MPV.
|
||||||
Allow DASH AV1 formats: Os formatos DASH AV1 podem parecer melhores do que os
|
|
||||||
formatos DASH H.264. Os formatos DASH AV1 requerem mais potência para reprodução!
|
|
||||||
Não estão disponíveis para todos os vídeos e, nesses casos, o reprodutor usará
|
|
||||||
os formatos DASH H.264.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Region for Trending: A região permite-lhe escolher de que país virão os vídeos
|
Region for Trending: A região permite-lhe escolher de que país virão os vídeos
|
||||||
na secção de tendências.
|
na secção de tendências.
|
||||||
@ -1216,7 +1189,7 @@ Channels:
|
|||||||
Unsubscribe Prompt: Tem a certeza de que pretende cancelar a subscrição em "{channelName}"?
|
Unsubscribe Prompt: Tem a certeza de que pretende cancelar a subscrição em "{channelName}"?
|
||||||
Chapters:
|
Chapters:
|
||||||
'Chapters list hidden, current chapter: {chapterName}': 'Lista de capítulos oculta,
|
'Chapters list hidden, current chapter: {chapterName}': 'Lista de capítulos oculta,
|
||||||
capítulo atual: {capítuloNoto}'
|
capítulo atual: {chapterName}'
|
||||||
Chapters: Capítulos
|
Chapters: Capítulos
|
||||||
'Chapters list visible, current chapter: {chapterName}': 'Lista de capítulos visível,
|
'Chapters list visible, current chapter: {chapterName}': 'Lista de capítulos visível,
|
||||||
capítulo atual: {chapterName}'
|
capítulo atual: {chapterName}'
|
||||||
|
@ -424,7 +424,6 @@ Settings:
|
|||||||
de scroll
|
de scroll
|
||||||
Enter Fullscreen on Display Rotate: Intrați pe ecran complet pe afișaj Rotire
|
Enter Fullscreen on Display Rotate: Intrați pe ecran complet pe afișaj Rotire
|
||||||
Skip by Scrolling Over Video Player: Omiteți derulând peste player-ul video
|
Skip by Scrolling Over Video Player: Omiteți derulând peste player-ul video
|
||||||
Allow DASH AV1 formats: Permiteți formatele DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Setări de confidențialitate'
|
Privacy Settings: 'Setări de confidențialitate'
|
||||||
Remember History: 'Reține istoric'
|
Remember History: 'Reține istoric'
|
||||||
@ -857,15 +856,8 @@ Video:
|
|||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
recap: Recapitulare
|
recap: Recapitulare
|
||||||
filler: Filler
|
filler: Filler
|
||||||
Skipped segment: Segment omis
|
|
||||||
translated from English: tradus din engleză
|
|
||||||
Started streaming on: A început să transmită pe
|
Started streaming on: A început să transmită pe
|
||||||
Streamed on: Difuzat pe
|
Streamed on: Difuzat pe
|
||||||
Audio:
|
|
||||||
Best: Cea mai bună
|
|
||||||
Medium: Medie
|
|
||||||
Low: Scăzută
|
|
||||||
High: Înaltă
|
|
||||||
audio only: numai audio
|
audio only: numai audio
|
||||||
video only: numai video
|
video only: numai video
|
||||||
Download Video: Descărcați video
|
Download Video: Descărcați video
|
||||||
@ -877,26 +869,6 @@ Video:
|
|||||||
ta de salvări
|
ta de salvări
|
||||||
Video has been saved: Videoclipul a fost salvat
|
Video has been saved: Videoclipul a fost salvat
|
||||||
Save Video: Salvați video
|
Save Video: Salvați video
|
||||||
Stats:
|
|
||||||
video id: Identificator videoclip (YouTube)
|
|
||||||
player resolution: Fereastră de vizualizare
|
|
||||||
volume: Sonor
|
|
||||||
fps: CPS
|
|
||||||
frame drop: Aruncare cadre
|
|
||||||
bandwidth: Viteză conexiune
|
|
||||||
out of: din
|
|
||||||
buffered: Preîncărcat
|
|
||||||
Video statistics are not available for legacy videos: Statisticile videoclipurilor
|
|
||||||
nu sunt disponibile pentru videoclipurile vechi
|
|
||||||
Video ID: Video ID
|
|
||||||
Resolution: Rezoluție
|
|
||||||
Player Dimensions: Dimensiunile player-ului
|
|
||||||
Bitrate: Rată de biți
|
|
||||||
Volume: Volum
|
|
||||||
Bandwidth: Lățime de bandă
|
|
||||||
Buffered: Încărcat
|
|
||||||
Dropped / Total Frames: Cadre pierdute / totale
|
|
||||||
Mimetype: Mimetype
|
|
||||||
Premieres on: Premieră pe
|
Premieres on: Premieră pe
|
||||||
Premieres in: Are premiera în
|
Premieres in: Are premiera în
|
||||||
Scroll to Bottom: Derulați până jos
|
Scroll to Bottom: Derulați până jos
|
||||||
@ -1066,10 +1038,6 @@ Tooltips:
|
|||||||
(tasta Command pe Mac) și faceți clic cu butonul stâng al mouse-ului pentru
|
(tasta Command pe Mac) și faceți clic cu butonul stâng al mouse-ului pentru
|
||||||
a reveni rapid la rata de redare implicită (1x, cu excepția cazului în care
|
a reveni rapid la rata de redare implicită (1x, cu excepția cazului în care
|
||||||
aceasta a fost modificată în setări).
|
aceasta a fost modificată în setări).
|
||||||
Allow DASH AV1 formats: Formatele DASH AV1 pot arăta mai bine decât formatele
|
|
||||||
DASH H.264. Formatele DASH AV1 necesită mai multă putere pentru redare! Nu sunt
|
|
||||||
disponibile pe toate videoclipurile, în acele cazuri playerul va folosi în schimb
|
|
||||||
formatele DASH H.264.
|
|
||||||
Skip by Scrolling Over Video Player: Utilizați rotița de derulare pentru a trece
|
Skip by Scrolling Over Video Player: Utilizați rotița de derulare pentru a trece
|
||||||
prin videoclip, stil MPV.
|
prin videoclip, stil MPV.
|
||||||
General Settings:
|
General Settings:
|
||||||
|
@ -429,7 +429,6 @@ Settings:
|
|||||||
Enter Fullscreen on Display Rotate: Входить в полноэкранный режим при повороте
|
Enter Fullscreen on Display Rotate: Входить в полноэкранный режим при повороте
|
||||||
дисплея
|
дисплея
|
||||||
Skip by Scrolling Over Video Player: Пропустить, прокручивая видеопроигрыватель
|
Skip by Scrolling Over Video Player: Пропустить, прокручивая видеопроигрыватель
|
||||||
Allow DASH AV1 formats: Разрешить форматы DASH AV1
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Подписки'
|
Subscription Settings: 'Подписки'
|
||||||
Hide Videos on Watch: 'Скрывать видео после просмотра'
|
Hide Videos on Watch: 'Скрывать видео после просмотра'
|
||||||
@ -868,11 +867,6 @@ Video:
|
|||||||
Loop Playlist: Повторять подборку
|
Loop Playlist: Повторять подборку
|
||||||
Starting soon, please refresh the page to check again: Скоро начнется, обновите
|
Starting soon, please refresh the page to check again: Скоро начнется, обновите
|
||||||
страницу, чтобы проверить ещё раз
|
страницу, чтобы проверить ещё раз
|
||||||
Audio:
|
|
||||||
Best: Лучшее
|
|
||||||
High: Высокое
|
|
||||||
Medium: Среднее
|
|
||||||
Low: Низкое
|
|
||||||
audio only: только звук
|
audio only: только звук
|
||||||
video only: только видео
|
video only: только видео
|
||||||
Download Video: Скачать видео
|
Download Video: Скачать видео
|
||||||
@ -885,7 +879,6 @@ Video:
|
|||||||
Video has been removed from your saved list: Видео было удалено из списка сохраненных
|
Video has been removed from your saved list: Видео было удалено из списка сохраненных
|
||||||
Video has been saved: Видео было добавлено в сохраненные
|
Video has been saved: Видео было добавлено в сохраненные
|
||||||
Save Video: Добавить видео в сохранённые
|
Save Video: Добавить видео в сохранённые
|
||||||
translated from English: переведён с английского
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Сегмент без музыки
|
music offtopic: Сегмент без музыки
|
||||||
interaction: Напоминание
|
interaction: Напоминание
|
||||||
@ -895,7 +888,6 @@ Video:
|
|||||||
sponsor: Спонсор
|
sponsor: Спонсор
|
||||||
recap: Краткое содержание
|
recap: Краткое содержание
|
||||||
filler: Отвлечение
|
filler: Отвлечение
|
||||||
Skipped segment: Пропущенный сегмент
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: повторение подборок
|
looping playlists: повторение подборок
|
||||||
@ -911,26 +903,6 @@ Video:
|
|||||||
playlist: подборка
|
playlist: подборка
|
||||||
video: видео
|
video: видео
|
||||||
OpenInTemplate: Открыть в {externalPlayer}
|
OpenInTemplate: Открыть в {externalPlayer}
|
||||||
Stats:
|
|
||||||
frame drop: Пропущенные кадры
|
|
||||||
video id: ID видео (YouTube)
|
|
||||||
player resolution: Область просмотра
|
|
||||||
volume: Громкость
|
|
||||||
bandwidth: Скорость соединения
|
|
||||||
buffered: Буферизовано
|
|
||||||
out of: из
|
|
||||||
fps: Кадровая частота
|
|
||||||
Video statistics are not available for legacy videos: Статистика видео недоступна
|
|
||||||
для устаревших видео
|
|
||||||
Video ID: Идентификатор видео
|
|
||||||
Resolution: Разрешение
|
|
||||||
Player Dimensions: Размеры проигрывателя
|
|
||||||
Bitrate: Битрейт
|
|
||||||
Volume: Громкость
|
|
||||||
Bandwidth: Пропускная способность
|
|
||||||
Dropped / Total Frames: Пропущено / Всего кадров
|
|
||||||
Mimetype: MIME-типы
|
|
||||||
Buffered: Буферизовано
|
|
||||||
Premieres on: Премьеры
|
Premieres on: Премьеры
|
||||||
Premieres in: Премьеры в
|
Premieres in: Премьеры в
|
||||||
Premieres: Премьеры
|
Premieres: Премьеры
|
||||||
@ -1153,10 +1125,6 @@ Tooltips:
|
|||||||
не была изменена в настройках).
|
не была изменена в настройках).
|
||||||
Skip by Scrolling Over Video Player: Используйте колесо прокрутки, чтобы пропустить
|
Skip by Scrolling Over Video Player: Используйте колесо прокрутки, чтобы пропустить
|
||||||
видео в стиле MPV.
|
видео в стиле MPV.
|
||||||
Allow DASH AV1 formats: Форматы DASH AV1 могут выглядеть лучше, чем форматы DASH
|
|
||||||
H.264. Форматы DASH AV1 требуют большей производительности для воспроизведения!
|
|
||||||
Они доступны не для всех видео. Если они будут недоступны, тогда проигрыватель
|
|
||||||
будет использовать форматы DASH H.264.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Любые пользовательские аргументы командной строки,
|
Custom External Player Arguments: Любые пользовательские аргументы командной строки,
|
||||||
разделенные точкой с запятой (';'), которые вы хотите передать внешнему проигрывателю.
|
разделенные точкой с запятой (';'), которые вы хотите передать внешнему проигрывателю.
|
||||||
|
@ -508,11 +508,6 @@ Video:
|
|||||||
a znova skontrolujte
|
a znova skontrolujte
|
||||||
Started streaming on: Vysielanie začaté o
|
Started streaming on: Vysielanie začaté o
|
||||||
Streamed on: Odvysielané dňa
|
Streamed on: Odvysielané dňa
|
||||||
Audio:
|
|
||||||
Medium: Stredná
|
|
||||||
Low: Nízka
|
|
||||||
High: Vysoká
|
|
||||||
Best: Najlepšia
|
|
||||||
audio only: len zvuk
|
audio only: len zvuk
|
||||||
video only: len video
|
video only: len video
|
||||||
Download Video: Stiahnuť video
|
Download Video: Stiahnuť video
|
||||||
@ -535,17 +530,6 @@ Video:
|
|||||||
outro: Záver
|
outro: Záver
|
||||||
intro: Úvod
|
intro: Úvod
|
||||||
sponsor: Sponzor
|
sponsor: Sponzor
|
||||||
Skipped segment: Preskočený segment
|
|
||||||
translated from English: preložené z angličtiny
|
|
||||||
Stats:
|
|
||||||
fps: Obrázky za sekundu
|
|
||||||
frame drop: Vyhodené obrázky
|
|
||||||
volume: Hlasitosť
|
|
||||||
player resolution: Výrez
|
|
||||||
out of: z
|
|
||||||
bandwidth: Rýchlosť pripojenia
|
|
||||||
video id: ID videa (YouTube)
|
|
||||||
buffered: Prednačítané
|
|
||||||
External Player:
|
External Player:
|
||||||
OpenInTemplate: Otvoriť v {externalPlayer}
|
OpenInTemplate: Otvoriť v {externalPlayer}
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
|
@ -273,7 +273,6 @@ Settings:
|
|||||||
File Name Label: Vzorec imena datoteke
|
File Name Label: Vzorec imena datoteke
|
||||||
Enter Fullscreen on Display Rotate: Pri vrtenju zaslona vstopite v celozaslonski
|
Enter Fullscreen on Display Rotate: Pri vrtenju zaslona vstopite v celozaslonski
|
||||||
način
|
način
|
||||||
Allow DASH AV1 formats: Dovoli oblike DASH AV1
|
|
||||||
Next Video Interval: Interval do naslednjega videa
|
Next Video Interval: Interval do naslednjega videa
|
||||||
Display Play Button In Video Player: Prikaz gumba za predvajanje v video predvajalniku
|
Display Play Button In Video Player: Prikaz gumba za predvajanje v video predvajalniku
|
||||||
Fast-Forward / Rewind Interval: Interval za hitro previjanje naprej/nazaj
|
Fast-Forward / Rewind Interval: Interval za hitro previjanje naprej/nazaj
|
||||||
@ -611,11 +610,6 @@ Video:
|
|||||||
Published on: 'Objavljeno dne'
|
Published on: 'Objavljeno dne'
|
||||||
Publicationtemplate: '{number} {unit} nazaj'
|
Publicationtemplate: '{number} {unit} nazaj'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
Best: Najvišja
|
|
||||||
High: Visoka
|
|
||||||
Medium: Srednja
|
|
||||||
Low: Nizka
|
|
||||||
audio only: Samo avdio
|
audio only: Samo avdio
|
||||||
video only: Samo video
|
video only: Samo video
|
||||||
Download Video: Prenesi videoposnetek
|
Download Video: Prenesi videoposnetek
|
||||||
@ -629,9 +623,6 @@ Video:
|
|||||||
seznama
|
seznama
|
||||||
Video has been saved: Videoposnetek je bil shranjen
|
Video has been saved: Videoposnetek je bil shranjen
|
||||||
Save Video: Shrani videoposnetek
|
Save Video: Shrani videoposnetek
|
||||||
Stats:
|
|
||||||
Bandwidth: Pasovna širina
|
|
||||||
translated from English: prevedeno iz angleščine
|
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
Sort By:
|
Sort By:
|
||||||
|
@ -278,7 +278,6 @@ Settings:
|
|||||||
1440p: ''
|
1440p: ''
|
||||||
4k: ''
|
4k: ''
|
||||||
8k: ''
|
8k: ''
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Screenshot:
|
Screenshot:
|
||||||
Enable: ''
|
Enable: ''
|
||||||
Format Label: ''
|
Format Label: ''
|
||||||
@ -613,11 +612,6 @@ Video:
|
|||||||
Download Video: ''
|
Download Video: ''
|
||||||
video only: ''
|
video only: ''
|
||||||
audio only: ''
|
audio only: ''
|
||||||
Audio:
|
|
||||||
Low: ''
|
|
||||||
Medium: ''
|
|
||||||
High: ''
|
|
||||||
Best: ''
|
|
||||||
Published:
|
Published:
|
||||||
Jan: ''
|
Jan: ''
|
||||||
Feb: ''
|
Feb: ''
|
||||||
@ -651,9 +645,7 @@ Video:
|
|||||||
Published on: ''
|
Published on: ''
|
||||||
Streamed on: ''
|
Streamed on: ''
|
||||||
Started streaming on: ''
|
Started streaming on: ''
|
||||||
translated from English: ''
|
|
||||||
Publicationtemplate: ''
|
Publicationtemplate: ''
|
||||||
Skipped segment: ''
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: ''
|
sponsor: ''
|
||||||
intro: ''
|
intro: ''
|
||||||
@ -677,17 +669,6 @@ Video:
|
|||||||
reversing playlists: ''
|
reversing playlists: ''
|
||||||
shuffling playlists: ''
|
shuffling playlists: ''
|
||||||
looping playlists: ''
|
looping playlists: ''
|
||||||
Stats:
|
|
||||||
Video statistics are not available for legacy videos: ''
|
|
||||||
Video ID: ''
|
|
||||||
Resolution: ''
|
|
||||||
Player Dimensions: ''
|
|
||||||
Bitrate: ''
|
|
||||||
Volume: ''
|
|
||||||
Bandwidth: ''
|
|
||||||
Buffered: ''
|
|
||||||
Dropped / Total Frames: ''
|
|
||||||
Mimetype: ''
|
|
||||||
#& Videos
|
#& Videos
|
||||||
Videos:
|
Videos:
|
||||||
#& Sort By
|
#& Sort By
|
||||||
@ -783,7 +764,6 @@ Tooltips:
|
|||||||
Force Local Backend for Legacy Formats: ''
|
Force Local Backend for Legacy Formats: ''
|
||||||
Proxy Videos Through Invidious: ''
|
Proxy Videos Through Invidious: ''
|
||||||
Default Video Format: ''
|
Default Video Format: ''
|
||||||
Allow DASH AV1 formats: ''
|
|
||||||
Scroll Playback Rate Over Video Player: ''
|
Scroll Playback Rate Over Video Player: ''
|
||||||
Skip by Scrolling Over Video Player: ''
|
Skip by Scrolling Over Video Player: ''
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
|
@ -438,7 +438,6 @@ Settings:
|
|||||||
Scroll Volume Over Video Player: Превуци за јачину звука преко плејера видео снимка
|
Scroll Volume Over Video Player: Превуци за јачину звука преко плејера видео снимка
|
||||||
Skip by Scrolling Over Video Player: Прескочи превлачењем преко плејера видео
|
Skip by Scrolling Over Video Player: Прескочи превлачењем преко плејера видео
|
||||||
снимка
|
снимка
|
||||||
Allow DASH AV1 formats: Дозволи DASH AV1 формате
|
|
||||||
Scroll Playback Rate Over Video Player: Превуци за брзину репродукције преко плејера
|
Scroll Playback Rate Over Video Player: Превуци за брзину репродукције преко плејера
|
||||||
видео снимка
|
видео снимка
|
||||||
Fast-Forward / Rewind Interval: Интервал брзог премотавања унапред/уназад
|
Fast-Forward / Rewind Interval: Интервал брзог премотавања унапред/уназад
|
||||||
@ -867,18 +866,6 @@ Video:
|
|||||||
Ago: Пре
|
Ago: Пре
|
||||||
Aug: Авг.
|
Aug: Авг.
|
||||||
Upcoming: Предстојеће
|
Upcoming: Предстојеће
|
||||||
Stats:
|
|
||||||
Video statistics are not available for legacy videos: Статистика видео снимака
|
|
||||||
није доступна за застареле видео снимке
|
|
||||||
Buffered: Баферовано
|
|
||||||
Bitrate: Брзина кадра
|
|
||||||
Volume: Волумен (партиција)
|
|
||||||
Mimetype: Mimetype
|
|
||||||
Resolution: Резолуција
|
|
||||||
Dropped / Total Frames: Испуштено / Укупно кадрова
|
|
||||||
Bandwidth: Проток
|
|
||||||
Player Dimensions: Димензије плејера
|
|
||||||
Video ID: ID видео снимка
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
interaction: Интеракција
|
interaction: Интеракција
|
||||||
filler: Попуњавање
|
filler: Попуњавање
|
||||||
@ -888,7 +875,6 @@ Video:
|
|||||||
sponsor: Спонзор
|
sponsor: Спонзор
|
||||||
recap: Рекапитулација
|
recap: Рекапитулација
|
||||||
intro: Уводна анимација
|
intro: Уводна анимација
|
||||||
translated from English: преведено са енглеског
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
opening playlists: отварање плејлиста
|
opening playlists: отварање плејлиста
|
||||||
@ -907,13 +893,7 @@ Video:
|
|||||||
Live chat is enabled. Chat messages will appear here once sent.: Ћаскање уживо је
|
Live chat is enabled. Chat messages will appear here once sent.: Ћаскање уживо је
|
||||||
омогућено. Поруке ћаскања ће се појавити овде када буду послате.
|
омогућено. Поруке ћаскања ће се појавити овде када буду послате.
|
||||||
Streamed on: Стримовано
|
Streamed on: Стримовано
|
||||||
Audio:
|
|
||||||
Medium: Средње
|
|
||||||
High: Високо
|
|
||||||
Best: Најбоље
|
|
||||||
Low: Ниско
|
|
||||||
video only: само видео снимак
|
video only: само видео снимак
|
||||||
Skipped segment: Прескочен сегмент
|
|
||||||
Pause on Current Video: Паузирај на тренутном видео снимку
|
Pause on Current Video: Паузирај на тренутном видео снимку
|
||||||
Premieres on: Премијера на
|
Premieres on: Премијера на
|
||||||
audio only: само аудио снимак (звук)
|
audio only: само аудио снимак (звук)
|
||||||
@ -985,10 +965,6 @@ Tooltips:
|
|||||||
чији их оригинални наслови садрже у целом FreeTube-у, искључујући само историју,
|
чији их оригинални наслови садрже у целом FreeTube-у, искључујући само историју,
|
||||||
ваше плејлисте и видео снимке унутар плејлиста.
|
ваше плејлисте и видео снимке унутар плејлиста.
|
||||||
Player Settings:
|
Player Settings:
|
||||||
Allow DASH AV1 formats: DASH AV1 формати могу изгледати боље од DASH H.264 формата.
|
|
||||||
DASH AV1 формати захтевају више снаге за репродукцију! Они нису доступни на
|
|
||||||
свим видео снимцима, у тим случајевима плејер ће уместо њих користити DASH H.264
|
|
||||||
формате.
|
|
||||||
Default Video Format: Подесите формате који се користе када се видео снимак пушта.
|
Default Video Format: Подесите формате који се користе када се видео снимак пушта.
|
||||||
DASH формати могу да пуштају виши квалитет. Застарели формати су ограничени
|
DASH формати могу да пуштају виши квалитет. Застарели формати су ограничени
|
||||||
на максимално 720p, али користе мање протока. Аудио формати су само звучни снимци.
|
на максимално 720p, али користе мање протока. Аудио формати су само звучни снимци.
|
||||||
|
@ -374,7 +374,6 @@ Settings:
|
|||||||
Skip by Scrolling Over Video Player: Hoppa över genom att skrolla över videospelaren
|
Skip by Scrolling Over Video Player: Hoppa över genom att skrolla över videospelaren
|
||||||
Max Video Playback Rate: Maximal uppspelningshastighet
|
Max Video Playback Rate: Maximal uppspelningshastighet
|
||||||
Video Playback Rate Interval: Uppspelningshastighetsintervall
|
Video Playback Rate Interval: Uppspelningshastighetsintervall
|
||||||
Allow DASH AV1 formats: Tillåt DASH AV1-format
|
|
||||||
Scroll Playback Rate Over Video Player: Skrolla uppspelningshastighet över videospelaren
|
Scroll Playback Rate Over Video Player: Skrolla uppspelningshastighet över videospelaren
|
||||||
Enter Fullscreen on Display Rotate: Fullskärm vid skärmrotation
|
Enter Fullscreen on Display Rotate: Fullskärm vid skärmrotation
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
@ -829,11 +828,6 @@ Video:
|
|||||||
Published on: 'Publicerad den'
|
Published on: 'Publicerad den'
|
||||||
Publicationtemplate: 'för {number} {unit} sedan'
|
Publicationtemplate: 'för {number} {unit} sedan'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
Best: Högsta
|
|
||||||
High: Hög
|
|
||||||
Medium: Medium
|
|
||||||
Low: Låg
|
|
||||||
audio only: endast ljud
|
audio only: endast ljud
|
||||||
video only: endast video
|
video only: endast video
|
||||||
Download Video: Ladda ner video
|
Download Video: Ladda ner video
|
||||||
@ -856,8 +850,6 @@ Video:
|
|||||||
sponsor: sponsor
|
sponsor: sponsor
|
||||||
recap: Sammanfattning
|
recap: Sammanfattning
|
||||||
filler: Utfyllnad
|
filler: Utfyllnad
|
||||||
Skipped segment: Skippat segment
|
|
||||||
translated from English: översatt från Engelska
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
shuffling playlists: blandar spellistor
|
shuffling playlists: blandar spellistor
|
||||||
@ -873,18 +865,6 @@ Video:
|
|||||||
playlist: spellista
|
playlist: spellista
|
||||||
video: video
|
video: video
|
||||||
OpenInTemplate: Öppna i {externalPlayer}
|
OpenInTemplate: Öppna i {externalPlayer}
|
||||||
Stats:
|
|
||||||
Video statistics are not available for legacy videos: Videostatstik är inte tillgänglig
|
|
||||||
för föråldrade videor
|
|
||||||
Dropped / Total Frames: Missade / Totalt antal bildrutor
|
|
||||||
Bitrate: Bithastighet
|
|
||||||
Volume: Volym
|
|
||||||
Resolution: Upplösning
|
|
||||||
Player Dimensions: Spelardimensioner
|
|
||||||
Video ID: Video-ID
|
|
||||||
Bandwidth: Bandbredd
|
|
||||||
Mimetype: Mimetyp
|
|
||||||
Buffered: Buffrad
|
|
||||||
Premieres on: Har premiär den
|
Premieres on: Har premiär den
|
||||||
Premieres: Premiärer
|
Premieres: Premiärer
|
||||||
Upcoming: Kommande
|
Upcoming: Kommande
|
||||||
@ -1014,9 +994,6 @@ Tooltips:
|
|||||||
landsbegränsningar.
|
landsbegränsningar.
|
||||||
Skip by Scrolling Over Video Player: Använd skrollhjulet för att snappspola igenom
|
Skip by Scrolling Over Video Player: Använd skrollhjulet för att snappspola igenom
|
||||||
videon, MPV-stil.
|
videon, MPV-stil.
|
||||||
Allow DASH AV1 formats: DASH AV1-format kan se bättre ut än DASH H.264-format.
|
|
||||||
DASH AV1-format kräver mer kraft för uppspelning! Det är inte tillgängligt för
|
|
||||||
alla videor, i de fall kommer spelaren använde DASh H.264-format istället.
|
|
||||||
Scroll Playback Rate Over Video Player: När muspekaren är över videon, håll nere
|
Scroll Playback Rate Over Video Player: När muspekaren är över videon, håll nere
|
||||||
CTRL (Kommandotangenten på Mac) och skrolla upp och ner för att ändra uppspelningshastigheten.
|
CTRL (Kommandotangenten på Mac) och skrolla upp och ner för att ändra uppspelningshastigheten.
|
||||||
Håll nere CTRL (Kommandotangenten på Mac) och vänsterklicka för att återställa
|
Håll nere CTRL (Kommandotangenten på Mac) och vänsterklicka för att återställa
|
||||||
|
@ -440,7 +440,6 @@ Settings:
|
|||||||
veya "/" kullanabilirsiniz.
|
veya "/" kullanabilirsiniz.
|
||||||
Enter Fullscreen on Display Rotate: Ekran Döndürüldüğünde Tam Ekrana Geç
|
Enter Fullscreen on Display Rotate: Ekran Döndürüldüğünde Tam Ekrana Geç
|
||||||
Skip by Scrolling Over Video Player: Video Oynatıcı Üzerinde Kaydırarak Atla
|
Skip by Scrolling Over Video Player: Video Oynatıcı Üzerinde Kaydırarak Atla
|
||||||
Allow DASH AV1 formats: DASH AV1 biçimlerine izin ver
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Gizlilik Ayarları'
|
Privacy Settings: 'Gizlilik Ayarları'
|
||||||
Remember History: 'Geçmişi Hatırla'
|
Remember History: 'Geçmişi Hatırla'
|
||||||
@ -932,11 +931,6 @@ Video:
|
|||||||
Published on: 'Yayımlanma tarihi'
|
Published on: 'Yayımlanma tarihi'
|
||||||
Publicationtemplate: '{number} {unit} önce'
|
Publicationtemplate: '{number} {unit} önce'
|
||||||
#& Videos
|
#& Videos
|
||||||
Audio:
|
|
||||||
Best: En iyi
|
|
||||||
High: Yüksek
|
|
||||||
Medium: Orta
|
|
||||||
Low: Düşük
|
|
||||||
audio only: yalnızca ses
|
audio only: yalnızca ses
|
||||||
video only: yalnızca video
|
video only: yalnızca video
|
||||||
Download Video: Video İndir
|
Download Video: Video İndir
|
||||||
@ -949,7 +943,6 @@ Video:
|
|||||||
Video has been removed from your saved list: Video, kaydedilen listenizden kaldırıldı
|
Video has been removed from your saved list: Video, kaydedilen listenizden kaldırıldı
|
||||||
Video has been saved: Video kaydedildi
|
Video has been saved: Video kaydedildi
|
||||||
Save Video: Videoyu Kaydet
|
Save Video: Videoyu Kaydet
|
||||||
translated from English: İngilizceden çevrildi
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Müzik Konu Dışı
|
music offtopic: Müzik Konu Dışı
|
||||||
interaction: Etkileşim
|
interaction: Etkileşim
|
||||||
@ -959,7 +952,6 @@ Video:
|
|||||||
sponsor: Sponsor
|
sponsor: Sponsor
|
||||||
recap: Özet
|
recap: Özet
|
||||||
filler: Dolgu
|
filler: Dolgu
|
||||||
Skipped segment: Atlanan bölüm
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: oynatma listelerini döngüye alma
|
looping playlists: oynatma listelerini döngüye alma
|
||||||
@ -976,26 +968,6 @@ Video:
|
|||||||
video: video
|
video: video
|
||||||
OpenInTemplate: '{externalPlayer} içinde aç'
|
OpenInTemplate: '{externalPlayer} içinde aç'
|
||||||
Premieres on: İlk gösterim tarihi
|
Premieres on: İlk gösterim tarihi
|
||||||
Stats:
|
|
||||||
volume: Ses Seviyesi
|
|
||||||
out of: /
|
|
||||||
player resolution: Görüntü Penceresi
|
|
||||||
fps: FPS
|
|
||||||
frame drop: Çerçeve Kaybı
|
|
||||||
video id: Video Kimliği (YouTube)
|
|
||||||
bandwidth: Bağlantı Hızı
|
|
||||||
buffered: Arabelleğe Alınan
|
|
||||||
Video ID: Video Kimliği
|
|
||||||
Resolution: Çözünürlük
|
|
||||||
Player Dimensions: Oynatıcı Boyutları
|
|
||||||
Bitrate: Bit Hızı
|
|
||||||
Volume: Ses Seviyesi
|
|
||||||
Bandwidth: Bant Genişliği
|
|
||||||
Buffered: Arabelleğe Alınan
|
|
||||||
Dropped / Total Frames: Düşürülen / Toplam Çerçeve Sayısı
|
|
||||||
Mimetype: MIME Türü
|
|
||||||
Video statistics are not available for legacy videos: Video istatistikleri eski
|
|
||||||
videolar için kullanılabilir değil
|
|
||||||
Premieres in: İlk gösterim
|
Premieres in: İlk gösterim
|
||||||
Premieres: İlk gösterim
|
Premieres: İlk gösterim
|
||||||
Scroll to Bottom: Aşağıya Kaydır
|
Scroll to Bottom: Aşağıya Kaydır
|
||||||
@ -1142,9 +1114,6 @@ Tooltips:
|
|||||||
için Ctrl tuşunu (Mac'te Komut tuşu) basılı tutun ve fareye sol tıklayın.
|
için Ctrl tuşunu (Mac'te Komut tuşu) basılı tutun ve fareye sol tıklayın.
|
||||||
Skip by Scrolling Over Video Player: MPV'deki gibi videoda atlamak için kaydırma
|
Skip by Scrolling Over Video Player: MPV'deki gibi videoda atlamak için kaydırma
|
||||||
tekerleğini kullanın.
|
tekerleğini kullanın.
|
||||||
Allow DASH AV1 formats: DASH AV1 biçimleri, DASH H.264 biçimlerinden daha iyi
|
|
||||||
görünebilir. DASH AV1 biçimleri oynatmak daha fazla güç gerektirir! Tüm videolarda
|
|
||||||
bulunmazlar, bu durumlarda oynatıcı bunun yerine DASH H.264 biçimlerini kullanacaktır.
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Invidious Instance: FreeTube'un API çağrıları için bağlanacağı Invidious örneği.
|
Invidious Instance: FreeTube'un API çağrıları için bağlanacağı Invidious örneği.
|
||||||
Thumbnail Preference: FreeTube'daki tüm önizleme görselleri, öntanımlı önizleme
|
Thumbnail Preference: FreeTube'daki tüm önizleme görselleri, öntanımlı önizleme
|
||||||
|
@ -322,7 +322,6 @@ Settings:
|
|||||||
Enter Fullscreen on Display Rotate: Переходити в повноекранний режим за обертання
|
Enter Fullscreen on Display Rotate: Переходити в повноекранний режим за обертання
|
||||||
екрана
|
екрана
|
||||||
Skip by Scrolling Over Video Player: Пропустити гортанням відеопрогравача
|
Skip by Scrolling Over Video Player: Пропустити гортанням відеопрогравача
|
||||||
Allow DASH AV1 formats: Дозволити формат DASH AV1
|
|
||||||
Privacy Settings:
|
Privacy Settings:
|
||||||
Privacy Settings: 'Налаштування приватності'
|
Privacy Settings: 'Налаштування приватності'
|
||||||
Remember History: 'Збрігати історію'
|
Remember History: 'Збрігати історію'
|
||||||
@ -687,11 +686,6 @@ Video:
|
|||||||
Download Video: 'Завантажити відео'
|
Download Video: 'Завантажити відео'
|
||||||
video only: 'лише відео'
|
video only: 'лише відео'
|
||||||
audio only: 'лише звук'
|
audio only: 'лише звук'
|
||||||
Audio:
|
|
||||||
Low: 'Низька'
|
|
||||||
Medium: 'Середня'
|
|
||||||
High: 'Висока'
|
|
||||||
Best: 'Найкраща'
|
|
||||||
Published:
|
Published:
|
||||||
Jan: 'Ян'
|
Jan: 'Ян'
|
||||||
Feb: 'Лют'
|
Feb: 'Лют'
|
||||||
@ -731,7 +725,6 @@ Video:
|
|||||||
Video has been removed from your saved list: Відео вилучено зі списку збережених
|
Video has been removed from your saved list: Відео вилучено зі списку збережених
|
||||||
Video has been saved: Відео збережено
|
Video has been saved: Відео збережено
|
||||||
Save Video: Зберегти відео
|
Save Video: Зберегти відео
|
||||||
translated from English: перекладено з англійської
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: Музика поза темою
|
music offtopic: Музика поза темою
|
||||||
interaction: Взаємодія
|
interaction: Взаємодія
|
||||||
@ -741,7 +734,6 @@ Video:
|
|||||||
sponsor: Спонсор
|
sponsor: Спонсор
|
||||||
recap: Підсумок
|
recap: Підсумок
|
||||||
filler: Заповнювач
|
filler: Заповнювач
|
||||||
Skipped segment: Пропущений відтинок
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: зациклювання добірок
|
looping playlists: зациклювання добірок
|
||||||
@ -758,26 +750,6 @@ Video:
|
|||||||
video: відео
|
video: відео
|
||||||
OpenInTemplate: Відкрити у {externalPlayer}
|
OpenInTemplate: Відкрити у {externalPlayer}
|
||||||
Premieres on: Прем'єри
|
Premieres on: Прем'єри
|
||||||
Stats:
|
|
||||||
player resolution: Вікно перегляду
|
|
||||||
fps: Кадрів/с
|
|
||||||
volume: Обсяг
|
|
||||||
bandwidth: Швидкість з'єднання
|
|
||||||
buffered: Буферизовано
|
|
||||||
out of: з
|
|
||||||
video id: ID відео (YouTube)
|
|
||||||
frame drop: Пропущені кадри
|
|
||||||
Resolution: Роздільність
|
|
||||||
Volume: Обсяг
|
|
||||||
Bandwidth: Пропускна здатність
|
|
||||||
Dropped / Total Frames: Пропущені / Усього кадрів
|
|
||||||
Mimetype: Тип MIME
|
|
||||||
Bitrate: Бітрейт
|
|
||||||
Video ID: ID відео
|
|
||||||
Player Dimensions: Розміри програвача
|
|
||||||
Buffered: Буферизовано
|
|
||||||
Video statistics are not available for legacy videos: Статистика відео недоступна
|
|
||||||
для застарілих відео
|
|
||||||
Premieres in: Прем'єри в
|
Premieres in: Прем'єри в
|
||||||
Premieres: Прем'єри
|
Premieres: Прем'єри
|
||||||
Scroll to Bottom: Прокрутити до кінця
|
Scroll to Bottom: Прокрутити до кінця
|
||||||
@ -904,10 +876,6 @@ Tooltips:
|
|||||||
в налаштуваннях).
|
в налаштуваннях).
|
||||||
Skip by Scrolling Over Video Player: Використовувати колесо прокрутки для прокручування
|
Skip by Scrolling Over Video Player: Використовувати колесо прокрутки для прокручування
|
||||||
відео в стилі MPV.
|
відео в стилі MPV.
|
||||||
Allow DASH AV1 formats: Формати DASH AV1 можуть виглядати краще, ніж формати DASH
|
|
||||||
H.264. Формати DASH AV1 вимагають більше енергії для відтворення! Вони доступні
|
|
||||||
не для всіх відео, у таких випадках програвач буде використовувати формати DASH
|
|
||||||
H.264.
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Fetch Feeds from RSS: 'Якщо ввімкнено, FreeTube використовуватиме RSS замість
|
Fetch Feeds from RSS: 'Якщо ввімкнено, FreeTube використовуватиме RSS замість
|
||||||
стандартного способу захоплення каналу підписки. RSS швидше і запобігає блокуванню
|
стандартного способу захоплення каналу підписки. RSS швидше і запобігає блокуванню
|
||||||
|
@ -382,7 +382,6 @@ Settings:
|
|||||||
Video Playback Rate Interval: Khoảng cách tốc độ phát
|
Video Playback Rate Interval: Khoảng cách tốc độ phát
|
||||||
Enter Fullscreen on Display Rotate: Bật toàn màn hình khi xoay
|
Enter Fullscreen on Display Rotate: Bật toàn màn hình khi xoay
|
||||||
Skip by Scrolling Over Video Player: Tua video bằng con lăn chuột
|
Skip by Scrolling Over Video Player: Tua video bằng con lăn chuột
|
||||||
Allow DASH AV1 formats: Cho phép định dạng DASH AV1
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: 'Cài đặt đăng ký'
|
Subscription Settings: 'Cài đặt đăng ký'
|
||||||
Hide Videos on Watch: 'Ẩn video khi đã xem'
|
Hide Videos on Watch: 'Ẩn video khi đã xem'
|
||||||
@ -804,11 +803,6 @@ Video:
|
|||||||
Video has been marked as watched: Video đánh dấu đã xem
|
Video has been marked as watched: Video đánh dấu đã xem
|
||||||
Remove From History: Xóa khỏi lịch sử
|
Remove From History: Xóa khỏi lịch sử
|
||||||
Mark As Watched: Đánh dấu đã xem
|
Mark As Watched: Đánh dấu đã xem
|
||||||
Audio:
|
|
||||||
Best: Tốt nhất
|
|
||||||
High: Cao
|
|
||||||
Medium: Trung bình
|
|
||||||
Low: Thấp
|
|
||||||
audio only: Chỉ âm thanh
|
audio only: Chỉ âm thanh
|
||||||
video only: Chỉ video
|
video only: Chỉ video
|
||||||
Download Video: Tải video
|
Download Video: Tải video
|
||||||
@ -822,7 +816,6 @@ Video:
|
|||||||
Loop Playlist: Lặp lại Playlist
|
Loop Playlist: Lặp lại Playlist
|
||||||
Open Channel in YouTube: Mở kênh này trên YouTube
|
Open Channel in YouTube: Mở kênh này trên YouTube
|
||||||
Copy YouTube Channel Link: Sao chép liên kết của kênh
|
Copy YouTube Channel Link: Sao chép liên kết của kênh
|
||||||
Skipped segment: Phân đoạn đã bỏ qua
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
sponsor: Nhà tài trợ
|
sponsor: Nhà tài trợ
|
||||||
intro: Giới thiệu
|
intro: Giới thiệu
|
||||||
@ -832,22 +825,9 @@ Video:
|
|||||||
outro: Kết thúc
|
outro: Kết thúc
|
||||||
recap: Tóm tắt
|
recap: Tóm tắt
|
||||||
filler: Bộ lọc
|
filler: Bộ lọc
|
||||||
Stats:
|
|
||||||
Resolution: Độ phân giải
|
|
||||||
Player Dimensions: Khối lượng phát
|
|
||||||
Bandwidth: Băng thông
|
|
||||||
Buffered: Đệm
|
|
||||||
Video ID: Video
|
|
||||||
Video statistics are not available for legacy videos: Số liệu thống kê video không
|
|
||||||
có sẵn cho các video tiếp nôi
|
|
||||||
Mimetype: Mimetype
|
|
||||||
Dropped / Total Frames: Bị drop / tống số khung hình
|
|
||||||
Bitrate: Tốc độ Bitrate
|
|
||||||
Volume: Volume
|
|
||||||
Premieres on: Công chiếu vào lúc
|
Premieres on: Công chiếu vào lúc
|
||||||
Streamed on: Phát trực tiếp vào lúc
|
Streamed on: Phát trực tiếp vào lúc
|
||||||
Started streaming on: Bắt đầu.phát trực tiếp vào lúc
|
Started streaming on: Bắt đầu.phát trực tiếp vào lúc
|
||||||
translated from English: Được dịch từ tiếng Anh
|
|
||||||
External Player:
|
External Player:
|
||||||
playlist: danh sách phát
|
playlist: danh sách phát
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
@ -1081,10 +1061,6 @@ Tooltips:
|
|||||||
được thay đổi trong cài đặt).
|
được thay đổi trong cài đặt).
|
||||||
Skip by Scrolling Over Video Player: Sử dụng con lăn chuột để bỏ qua video, kiểu
|
Skip by Scrolling Over Video Player: Sử dụng con lăn chuột để bỏ qua video, kiểu
|
||||||
MPV.
|
MPV.
|
||||||
Allow DASH AV1 formats: Định dạng DASH AV1 có thể trông đẹp hơn định dạng DASH
|
|
||||||
H.264. Định dạng DASH AV1 yêu cầu nhiều năng lượng hơn để phát lại! Chúng không
|
|
||||||
có sẵn trên tất cả các video, trong những trường hợp đó trình phát sẽ sử dụng
|
|
||||||
định dạng DASH H.264 thay thế.
|
|
||||||
External Player Settings:
|
External Player Settings:
|
||||||
Custom External Player Arguments: Bất kỳ tham số dòng lệnh tùy chỉnh nào, được
|
Custom External Player Arguments: Bất kỳ tham số dòng lệnh tùy chỉnh nào, được
|
||||||
phân tách bằng dấu chấm phẩy (';'), bạn muốn được chuyển đến trình phát bên
|
phân tách bằng dấu chấm phẩy (';'), bạn muốn được chuyển đến trình phát bên
|
||||||
|
@ -391,7 +391,6 @@ Settings:
|
|||||||
Folder Label: 截屏文件夹
|
Folder Label: 截屏文件夹
|
||||||
Enter Fullscreen on Display Rotate: 屏幕旋转时进入全屏
|
Enter Fullscreen on Display Rotate: 屏幕旋转时进入全屏
|
||||||
Skip by Scrolling Over Video Player: 从视频播放器一侧滚动到另一侧来跳过视频
|
Skip by Scrolling Over Video Player: 从视频播放器一侧滚动到另一侧来跳过视频
|
||||||
Allow DASH AV1 formats: 允许 DASH AV1 格式
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: '订阅设置'
|
Subscription Settings: '订阅设置'
|
||||||
Hide Videos on Watch: '观看时隐藏视频'
|
Hide Videos on Watch: '观看时隐藏视频'
|
||||||
@ -777,11 +776,6 @@ Video:
|
|||||||
Shuffle Playlist: 随机播放列表
|
Shuffle Playlist: 随机播放列表
|
||||||
Loop Playlist: 循环播放列表
|
Loop Playlist: 循环播放列表
|
||||||
Starting soon, please refresh the page to check again: 即将开始,请刷新页面再次检查
|
Starting soon, please refresh the page to check again: 即将开始,请刷新页面再次检查
|
||||||
Audio:
|
|
||||||
Best: 最佳
|
|
||||||
High: 高
|
|
||||||
Medium: 中
|
|
||||||
Low: 低
|
|
||||||
audio only: 仅音频
|
audio only: 仅音频
|
||||||
video only: 仅视频
|
video only: 仅视频
|
||||||
Download Video: 下载视频
|
Download Video: 下载视频
|
||||||
@ -794,25 +788,6 @@ Video:
|
|||||||
Video has been removed from your saved list: 视频已从你的播放列表移除
|
Video has been removed from your saved list: 视频已从你的播放列表移除
|
||||||
Video has been saved: 视频已保存
|
Video has been saved: 视频已保存
|
||||||
Save Video: 保存视频到播放列表
|
Save Video: 保存视频到播放列表
|
||||||
Stats:
|
|
||||||
video id: 视频 ID (YouTube)
|
|
||||||
player resolution: 视区
|
|
||||||
volume: 音量
|
|
||||||
fps: 每秒帧数
|
|
||||||
out of: 中的
|
|
||||||
frame drop: 掉帧
|
|
||||||
bandwidth: 连接速度
|
|
||||||
buffered: 缓冲
|
|
||||||
Video ID: 视频 ID
|
|
||||||
Resolution: 分辨率
|
|
||||||
Player Dimensions: 播放器尺寸
|
|
||||||
Bitrate: 比特率
|
|
||||||
Volume: 音量
|
|
||||||
Buffered: 已缓冲
|
|
||||||
Dropped / Total Frames: 丢弃帧/总帧数
|
|
||||||
Mimetype: 互联网媒体类型
|
|
||||||
Bandwidth: 带宽
|
|
||||||
Video statistics are not available for legacy videos: 视频统计数据对于 legacy 视频不可用
|
|
||||||
External Player:
|
External Player:
|
||||||
OpenInTemplate: 在 {externalPlayer} 中打开
|
OpenInTemplate: 在 {externalPlayer} 中打开
|
||||||
video: 视频
|
video: 视频
|
||||||
@ -838,8 +813,6 @@ Video:
|
|||||||
sponsor: 赞助者
|
sponsor: 赞助者
|
||||||
recap: 回顾
|
recap: 回顾
|
||||||
filler: 过滤器
|
filler: 过滤器
|
||||||
translated from English: 从英语翻译
|
|
||||||
Skipped segment: 跳过片段
|
|
||||||
Premieres in: 首映于
|
Premieres in: 首映于
|
||||||
Premieres: 首映
|
Premieres: 首映
|
||||||
Scroll to Bottom: 滚动到底部
|
Scroll to Bottom: 滚动到底部
|
||||||
@ -1011,8 +984,6 @@ Tooltips:
|
|||||||
Scroll Playback Rate Over Video Player: 当光标位于视频上方时,按住 Control 键(Mac 上的 Command
|
Scroll Playback Rate Over Video Player: 当光标位于视频上方时,按住 Control 键(Mac 上的 Command
|
||||||
键),前后滚动鼠标滚轮,控制播放速度。按住 Control 键(Mac 上的 Command 键),左键点击鼠标快速返回到默认播放速率(1x,除非在设置中改变了数值)。
|
键),前后滚动鼠标滚轮,控制播放速度。按住 Control 键(Mac 上的 Command 键),左键点击鼠标快速返回到默认播放速率(1x,除非在设置中改变了数值)。
|
||||||
Skip by Scrolling Over Video Player: 使用滚轮跳过视频,MPV 风格。
|
Skip by Scrolling Over Video Player: 使用滚轮跳过视频,MPV 风格。
|
||||||
Allow DASH AV1 formats: DASH AV1 格式画质也许比 DASH H.264 格式要好。 但请注意 DASH AV1 格式耗电更多!不是所有视频都有
|
|
||||||
DASH AV1 格式,如果没有的话,播放器会使用 DASH H.264 格式。
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Invidious Instance: FreeTube 要连接到哪个 Invidious 实例进行 API 调用。
|
Invidious Instance: FreeTube 要连接到哪个 Invidious 实例进行 API 调用。
|
||||||
Thumbnail Preference: FreeTube中所有缩略图都会被替换为影片画面而非默认缩略图。
|
Thumbnail Preference: FreeTube中所有缩略图都会被替换为影片画面而非默认缩略图。
|
||||||
|
@ -393,7 +393,6 @@ Settings:
|
|||||||
或 "/" 來建立子資料夾。
|
或 "/" 來建立子資料夾。
|
||||||
Enter Fullscreen on Display Rotate: 在顯示旋轉時進入全螢幕
|
Enter Fullscreen on Display Rotate: 在顯示旋轉時進入全螢幕
|
||||||
Skip by Scrolling Over Video Player: 捲動影片播放器跳過
|
Skip by Scrolling Over Video Player: 捲動影片播放器跳過
|
||||||
Allow DASH AV1 formats: 允許 DASH AV1 格式
|
|
||||||
Subscription Settings:
|
Subscription Settings:
|
||||||
Subscription Settings: '訂閱設定'
|
Subscription Settings: '訂閱設定'
|
||||||
Hide Videos on Watch: '觀看時隱藏影片'
|
Hide Videos on Watch: '觀看時隱藏影片'
|
||||||
@ -787,11 +786,6 @@ Video:
|
|||||||
Shuffle Playlist: 隨機播放清單
|
Shuffle Playlist: 隨機播放清單
|
||||||
Loop Playlist: 循環播放清單
|
Loop Playlist: 循環播放清單
|
||||||
Starting soon, please refresh the page to check again: 影片即將開始,請重新整理頁面以再次檢查是否有更新
|
Starting soon, please refresh the page to check again: 影片即將開始,請重新整理頁面以再次檢查是否有更新
|
||||||
Audio:
|
|
||||||
Best: 最佳
|
|
||||||
High: 高
|
|
||||||
Medium: 中
|
|
||||||
Low: 低
|
|
||||||
audio only: 僅音訊
|
audio only: 僅音訊
|
||||||
video only: 僅影片
|
video only: 僅影片
|
||||||
Download Video: 下載影片
|
Download Video: 下載影片
|
||||||
@ -804,7 +798,6 @@ Video:
|
|||||||
Video has been removed from your saved list: 影片已從您的播放清單移除
|
Video has been removed from your saved list: 影片已從您的播放清單移除
|
||||||
Video has been saved: 影片已儲存
|
Video has been saved: 影片已儲存
|
||||||
Save Video: 儲存影片至播放清單
|
Save Video: 儲存影片至播放清單
|
||||||
translated from English: 從英文翻譯
|
|
||||||
Sponsor Block category:
|
Sponsor Block category:
|
||||||
music offtopic: 音樂離題
|
music offtopic: 音樂離題
|
||||||
interaction: 互動
|
interaction: 互動
|
||||||
@ -814,7 +807,6 @@ Video:
|
|||||||
sponsor: 贊助商
|
sponsor: 贊助商
|
||||||
recap: 回顧
|
recap: 回顧
|
||||||
filler: 填充
|
filler: 填充
|
||||||
Skipped segment: 已跳過的片段
|
|
||||||
External Player:
|
External Player:
|
||||||
Unsupported Actions:
|
Unsupported Actions:
|
||||||
looping playlists: 循環播放清單
|
looping playlists: 循環播放清單
|
||||||
@ -830,25 +822,6 @@ Video:
|
|||||||
video: 視訊
|
video: 視訊
|
||||||
OpenInTemplate: 在 {externalPlayer} 中開啟
|
OpenInTemplate: 在 {externalPlayer} 中開啟
|
||||||
Premieres on: 首映日期
|
Premieres on: 首映日期
|
||||||
Stats:
|
|
||||||
buffered: 已緩衝
|
|
||||||
out of: 中的
|
|
||||||
video id: Video ID (YouTube)
|
|
||||||
volume: 音量
|
|
||||||
player resolution: 視野
|
|
||||||
fps: FPS
|
|
||||||
frame drop: 丟棄畫面
|
|
||||||
bandwidth: 連線速度
|
|
||||||
Resolution: 解析度
|
|
||||||
Player Dimensions: 播放器大小
|
|
||||||
Bitrate: 位元率
|
|
||||||
Volume: 音量
|
|
||||||
Bandwidth: 頻寬
|
|
||||||
Buffered: 已緩衝
|
|
||||||
Dropped / Total Frames: 丟棄/總畫面數
|
|
||||||
Video statistics are not available for legacy videos: 影片統計資料不適用於舊版影片
|
|
||||||
Video ID: 影片 ID
|
|
||||||
Mimetype: 多媒體類型
|
|
||||||
Premieres in: 首映於
|
Premieres in: 首映於
|
||||||
Premieres: 首映
|
Premieres: 首映
|
||||||
Show Super Chat Comment: 顯示超級聊天留言
|
Show Super Chat Comment: 顯示超級聊天留言
|
||||||
@ -1021,8 +994,6 @@ Tooltips:
|
|||||||
Scroll Playback Rate Over Video Player: 當游標停在影片上時,按住 Ctrl 鍵(Mac 的話則是 Command 鍵),然後向前或向後滾動滑鼠滾輪來控制播放速度。按住
|
Scroll Playback Rate Over Video Player: 當游標停在影片上時,按住 Ctrl 鍵(Mac 的話則是 Command 鍵),然後向前或向後滾動滑鼠滾輪來控制播放速度。按住
|
||||||
Ctrl 鍵(Mac 的話則是 Command 鍵)並點擊滑鼠左鍵以快速回到預設的播放速度(1x,除非在設定中更改)。
|
Ctrl 鍵(Mac 的話則是 Command 鍵)並點擊滑鼠左鍵以快速回到預設的播放速度(1x,除非在設定中更改)。
|
||||||
Skip by Scrolling Over Video Player: 使用滾輪跳過影片,MPV 風格。
|
Skip by Scrolling Over Video Player: 使用滾輪跳過影片,MPV 風格。
|
||||||
Allow DASH AV1 formats: DASH AV1 格式可能會看起來比 DASH H.264 格式更好。DASH AV1 格式需要更大的功率來播放!且並非所有影片都提供,在這種情況下,播放程式會使用
|
|
||||||
DASH H.264 格式代替。
|
|
||||||
General Settings:
|
General Settings:
|
||||||
Invidious Instance: FreeTube 將連線到 Invidious 站台進行 API 呼叫。
|
Invidious Instance: FreeTube 將連線到 Invidious 站台進行 API 呼叫。
|
||||||
Thumbnail Preference: FreeTube 中所有縮圖都會被替換為影片畫面而非預設縮圖。
|
Thumbnail Preference: FreeTube 中所有縮圖都會被替換為影片畫面而非預設縮圖。
|
||||||
|
490
yarn.lock
490
yarn.lock
@ -1032,13 +1032,6 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
|
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
|
||||||
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
|
integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==
|
||||||
|
|
||||||
"@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4":
|
|
||||||
version "7.17.9"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
|
|
||||||
integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
|
|
||||||
dependencies:
|
|
||||||
regenerator-runtime "^0.13.4"
|
|
||||||
|
|
||||||
"@babel/runtime@^7.14.0":
|
"@babel/runtime@^7.14.0":
|
||||||
version "7.24.0"
|
version "7.24.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e"
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e"
|
||||||
@ -1046,6 +1039,13 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
regenerator-runtime "^0.14.0"
|
regenerator-runtime "^0.14.0"
|
||||||
|
|
||||||
|
"@babel/runtime@^7.8.4":
|
||||||
|
version "7.17.9"
|
||||||
|
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.9.tgz#d19fbf802d01a8cb6cf053a64e472d42c434ba72"
|
||||||
|
integrity sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==
|
||||||
|
dependencies:
|
||||||
|
regenerator-runtime "^0.13.4"
|
||||||
|
|
||||||
"@babel/template@^7.24.7", "@babel/template@^7.25.0":
|
"@babel/template@^7.24.7", "@babel/template@^7.25.0":
|
||||||
version "7.25.0"
|
version "7.25.0"
|
||||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a"
|
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.0.tgz#e733dc3134b4fede528c15bc95e89cb98c52592a"
|
||||||
@ -1558,13 +1558,6 @@
|
|||||||
localforage "^1.9.0"
|
localforage "^1.9.0"
|
||||||
util "^0.12.4"
|
util "^0.12.4"
|
||||||
|
|
||||||
"@silvermine/videojs-quality-selector@^1.3.1":
|
|
||||||
version "1.3.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/@silvermine/videojs-quality-selector/-/videojs-quality-selector-1.3.1.tgz#23307dd3d5be442f7aa127c01820f16a3d9476a3"
|
|
||||||
integrity sha512-uo6gs2HVG2TD0bpZAl0AT6RkDXzk9PnAxtmmW5zXexa2uJvkdFT64QvJoMlEUd2FUUwqYqqAuWGFDJdBh5+KcQ==
|
|
||||||
dependencies:
|
|
||||||
underscore "1.13.1"
|
|
||||||
|
|
||||||
"@sinclair/typebox@^0.27.8":
|
"@sinclair/typebox@^0.27.8":
|
||||||
version "0.27.8"
|
version "0.27.8"
|
||||||
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
|
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
|
||||||
@ -1888,38 +1881,6 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
|
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
|
||||||
integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
|
integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==
|
||||||
|
|
||||||
"@videojs/http-streaming@2.16.2":
|
|
||||||
version "2.16.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/@videojs/http-streaming/-/http-streaming-2.16.2.tgz#a9be925b4e368a41dbd67d49c4f566715169b84b"
|
|
||||||
integrity sha512-etPTUdCFu7gUWc+1XcbiPr+lrhOcBu3rV5OL1M+3PDW89zskScAkkcdqYzP4pFodBPye/ydamQoTDScOnElw5A==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.12.5"
|
|
||||||
"@videojs/vhs-utils" "3.0.5"
|
|
||||||
aes-decrypter "3.1.3"
|
|
||||||
global "^4.4.0"
|
|
||||||
m3u8-parser "4.8.0"
|
|
||||||
mpd-parser "^0.22.1"
|
|
||||||
mux.js "6.0.1"
|
|
||||||
video.js "^6 || ^7"
|
|
||||||
|
|
||||||
"@videojs/vhs-utils@3.0.5", "@videojs/vhs-utils@^3.0.4", "@videojs/vhs-utils@^3.0.5":
|
|
||||||
version "3.0.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/@videojs/vhs-utils/-/vhs-utils-3.0.5.tgz#665ba70d78258ba1ab977364e2fe9f4d4799c46c"
|
|
||||||
integrity sha512-PKVgdo8/GReqdx512F+ombhS+Bzogiofy1LgAj4tN8PfdBx3HSS7V5WfJotKTqtOWGwVfSWsrYN/t09/DSryrw==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.12.5"
|
|
||||||
global "^4.4.0"
|
|
||||||
url-toolkit "^2.2.1"
|
|
||||||
|
|
||||||
"@videojs/xhr@2.6.0":
|
|
||||||
version "2.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@videojs/xhr/-/xhr-2.6.0.tgz#cd897e0ad54faf497961bcce3fa16dc15a26bb80"
|
|
||||||
integrity sha512-7J361GiN1tXpm+gd0xz2QWr3xNWBE+rytvo8J3KuggFaLg+U37gZQ2BuPLcnkfGffy2e+ozY70RHC8jt7zjA6Q==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.5.5"
|
|
||||||
global "~4.4.0"
|
|
||||||
is-function "^1.0.1"
|
|
||||||
|
|
||||||
"@vue/compiler-sfc@2.7.16":
|
"@vue/compiler-sfc@2.7.16":
|
||||||
version "2.7.16"
|
version "2.7.16"
|
||||||
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz#ff81711a0fac9c68683d8bb00b63f857de77dc83"
|
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz#ff81711a0fac9c68683d8bb00b63f857de77dc83"
|
||||||
@ -2083,11 +2044,6 @@
|
|||||||
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
|
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
|
||||||
integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
|
integrity sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==
|
||||||
|
|
||||||
"@xmldom/xmldom@^0.8.3":
|
|
||||||
version "0.8.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.6.tgz#8a1524eb5bd5e965c1e3735476f0262469f71440"
|
|
||||||
integrity sha512-uRjjusqpoqfmRkTaNuLJ2VohVr67Q5YwDATW3VU7PfzTj6IRaihGrYI7zckGZjxQPBIp63nfvJbM+Yu5ICh0Bg==
|
|
||||||
|
|
||||||
"@xmldom/xmldom@^0.8.8":
|
"@xmldom/xmldom@^0.8.8":
|
||||||
version "0.8.10"
|
version "0.8.10"
|
||||||
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
|
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
|
||||||
@ -2126,16 +2082,6 @@ acorn@^8.11.3, acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.
|
|||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
|
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
|
||||||
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
|
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
|
||||||
|
|
||||||
aes-decrypter@3.1.3:
|
|
||||||
version "3.1.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/aes-decrypter/-/aes-decrypter-3.1.3.tgz#65ff5f2175324d80c41083b0e135d1464b12ac35"
|
|
||||||
integrity sha512-VkG9g4BbhMBy+N5/XodDeV6F02chEk9IpgRTq/0bS80y4dzy79VH2Gtms02VXomf3HmyRe3yyJYkJ990ns+d6A==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.12.5"
|
|
||||||
"@videojs/vhs-utils" "^3.0.5"
|
|
||||||
global "^4.4.0"
|
|
||||||
pkcs7 "^1.0.4"
|
|
||||||
|
|
||||||
agent-base@6:
|
agent-base@6:
|
||||||
version "6.0.2"
|
version "6.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
||||||
@ -2162,7 +2108,7 @@ ajv-keywords@^5.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
fast-deep-equal "^3.1.3"
|
fast-deep-equal "^3.1.3"
|
||||||
|
|
||||||
ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5:
|
ajv@^6.10.0, ajv@^6.12.0, ajv@^6.12.4, ajv@^6.12.5:
|
||||||
version "6.12.6"
|
version "6.12.6"
|
||||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||||
@ -2347,14 +2293,7 @@ arraybuffer.prototype.slice@^1.0.2:
|
|||||||
is-array-buffer "^3.0.2"
|
is-array-buffer "^3.0.2"
|
||||||
is-shared-array-buffer "^1.0.2"
|
is-shared-array-buffer "^1.0.2"
|
||||||
|
|
||||||
asn1@~0.2.3:
|
assert-plus@^1.0.0:
|
||||||
version "0.2.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
|
|
||||||
integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
|
|
||||||
dependencies:
|
|
||||||
safer-buffer "~2.1.0"
|
|
||||||
|
|
||||||
assert-plus@1.0.0, assert-plus@^1.0.0:
|
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||||
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
||||||
@ -2396,16 +2335,6 @@ available-typed-arrays@^1.0.5:
|
|||||||
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
|
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
|
||||||
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
|
integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
|
||||||
|
|
||||||
aws-sign2@~0.7.0:
|
|
||||||
version "0.7.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
|
||||||
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
|
|
||||||
|
|
||||||
aws4@^1.8.0:
|
|
||||||
version "1.11.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
|
|
||||||
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
|
|
||||||
|
|
||||||
babel-loader@^9.1.3:
|
babel-loader@^9.1.3:
|
||||||
version "9.1.3"
|
version "9.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a"
|
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a"
|
||||||
@ -2458,13 +2387,6 @@ batch@0.6.1:
|
|||||||
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
|
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
|
||||||
integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
|
integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=
|
||||||
|
|
||||||
bcrypt-pbkdf@^1.0.0:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
|
|
||||||
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
|
|
||||||
dependencies:
|
|
||||||
tweetnacl "^0.14.3"
|
|
||||||
|
|
||||||
big.js@^5.2.2:
|
big.js@^5.2.2:
|
||||||
version "5.2.2"
|
version "5.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
|
resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328"
|
||||||
@ -2713,11 +2635,6 @@ caniuse-lite@^1.0.30001646:
|
|||||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz#b8af452f8f33b1c77f122780a4aecebea0caca56"
|
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz#b8af452f8f33b1c77f122780a4aecebea0caca56"
|
||||||
integrity sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==
|
integrity sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==
|
||||||
|
|
||||||
caseless@~0.12.0:
|
|
||||||
version "0.12.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
|
||||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
|
||||||
|
|
||||||
chalk@^2.4.2:
|
chalk@^2.4.2:
|
||||||
version "2.4.2"
|
version "2.4.2"
|
||||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||||
@ -2864,7 +2781,7 @@ colorette@^2.0.10, colorette@^2.0.14:
|
|||||||
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
|
resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da"
|
||||||
integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
|
integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==
|
||||||
|
|
||||||
combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6:
|
combined-stream@^1.0.8:
|
||||||
version "1.0.8"
|
version "1.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||||
@ -3183,13 +3100,6 @@ csstype@^3.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
|
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
|
||||||
integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
|
integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
|
||||||
|
|
||||||
dashdash@^1.12.0:
|
|
||||||
version "1.14.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
|
||||||
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
|
|
||||||
debug@2.6.9:
|
debug@2.6.9:
|
||||||
version "2.6.9"
|
version "2.6.9"
|
||||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||||
@ -3397,11 +3307,6 @@ dom-serializer@^2.0.0:
|
|||||||
domhandler "^5.0.2"
|
domhandler "^5.0.2"
|
||||||
entities "^4.2.0"
|
entities "^4.2.0"
|
||||||
|
|
||||||
dom-walk@^0.1.0:
|
|
||||||
version "0.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84"
|
|
||||||
integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==
|
|
||||||
|
|
||||||
domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
|
domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0:
|
||||||
version "2.3.0"
|
version "2.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
|
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
|
||||||
@ -3462,14 +3367,6 @@ eastasianwidth@^0.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
||||||
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
|
integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
|
||||||
|
|
||||||
ecc-jsbn@~0.1.1:
|
|
||||||
version "0.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
|
|
||||||
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
|
|
||||||
dependencies:
|
|
||||||
jsbn "~0.1.0"
|
|
||||||
safer-buffer "^2.1.0"
|
|
||||||
|
|
||||||
ee-first@1.1.1:
|
ee-first@1.1.1:
|
||||||
version "1.1.1"
|
version "1.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||||
@ -3554,6 +3451,11 @@ electron@^32.0.1:
|
|||||||
"@types/node" "^20.9.0"
|
"@types/node" "^20.9.0"
|
||||||
extract-zip "^2.0.1"
|
extract-zip "^2.0.1"
|
||||||
|
|
||||||
|
eme-encryption-scheme-polyfill@^2.1.5:
|
||||||
|
version "2.1.5"
|
||||||
|
resolved "https://registry.yarnpkg.com/eme-encryption-scheme-polyfill/-/eme-encryption-scheme-polyfill-2.1.5.tgz#86338bdd3b13f04ba02fa36758501c7c6c122efe"
|
||||||
|
integrity sha512-z9BKXV4TCYjmar0wiZLObZ0J8HE13VIg7Zq/iyPWdbEfROtxVXEJalknWKtBR5XNezzy15/zWS964TGbcAWlPg==
|
||||||
|
|
||||||
emoji-regex@^10.0.0, emoji-regex@^10.3.0:
|
emoji-regex@^10.0.0, emoji-regex@^10.3.0:
|
||||||
version "10.3.0"
|
version "10.3.0"
|
||||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23"
|
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.3.0.tgz#76998b9268409eb3dae3de989254d456e70cfe23"
|
||||||
@ -4175,11 +4077,6 @@ ext-name@^5.0.0:
|
|||||||
ext-list "^2.0.0"
|
ext-list "^2.0.0"
|
||||||
sort-keys-length "^1.0.0"
|
sort-keys-length "^1.0.0"
|
||||||
|
|
||||||
extend@~3.0.2:
|
|
||||||
version "3.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
|
||||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
|
||||||
|
|
||||||
extract-zip@^2.0.1:
|
extract-zip@^2.0.1:
|
||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
|
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
|
||||||
@ -4191,11 +4088,6 @@ extract-zip@^2.0.1:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
"@types/yauzl" "^2.9.1"
|
"@types/yauzl" "^2.9.1"
|
||||||
|
|
||||||
extsprintf@1.3.0:
|
|
||||||
version "1.3.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
|
|
||||||
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
|
|
||||||
|
|
||||||
extsprintf@^1.2.0:
|
extsprintf@^1.2.0:
|
||||||
version "1.4.1"
|
version "1.4.1"
|
||||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
|
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
|
||||||
@ -4377,11 +4269,6 @@ foreground-child@^3.1.0:
|
|||||||
cross-spawn "^7.0.0"
|
cross-spawn "^7.0.0"
|
||||||
signal-exit "^4.0.1"
|
signal-exit "^4.0.1"
|
||||||
|
|
||||||
forever-agent@~0.6.1:
|
|
||||||
version "0.6.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
|
||||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
|
||||||
|
|
||||||
form-data@^4.0.0:
|
form-data@^4.0.0:
|
||||||
version "4.0.0"
|
version "4.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||||
@ -4391,15 +4278,6 @@ form-data@^4.0.0:
|
|||||||
combined-stream "^1.0.8"
|
combined-stream "^1.0.8"
|
||||||
mime-types "^2.1.12"
|
mime-types "^2.1.12"
|
||||||
|
|
||||||
form-data@~2.3.2:
|
|
||||||
version "2.3.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
|
||||||
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
|
|
||||||
dependencies:
|
|
||||||
asynckit "^0.4.0"
|
|
||||||
combined-stream "^1.0.6"
|
|
||||||
mime-types "^2.1.12"
|
|
||||||
|
|
||||||
forwarded@0.2.0:
|
forwarded@0.2.0:
|
||||||
version "0.2.0"
|
version "0.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
||||||
@ -4570,13 +4448,6 @@ get-tsconfig@^4.7.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
resolve-pkg-maps "^1.0.0"
|
resolve-pkg-maps "^1.0.0"
|
||||||
|
|
||||||
getpass@^0.1.1:
|
|
||||||
version "0.1.7"
|
|
||||||
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
|
||||||
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
|
|
||||||
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
glob-parent@^5.1.2, glob-parent@~5.1.2:
|
||||||
version "5.1.2"
|
version "5.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||||
@ -4659,14 +4530,6 @@ global-prefix@^3.0.0:
|
|||||||
kind-of "^6.0.2"
|
kind-of "^6.0.2"
|
||||||
which "^1.3.1"
|
which "^1.3.1"
|
||||||
|
|
||||||
global@^4.3.1, global@^4.3.2, global@^4.4.0, global@~4.4.0:
|
|
||||||
version "4.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406"
|
|
||||||
integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==
|
|
||||||
dependencies:
|
|
||||||
min-document "^2.19.0"
|
|
||||||
process "^0.11.10"
|
|
||||||
|
|
||||||
globals@^11.1.0:
|
globals@^11.1.0:
|
||||||
version "11.12.0"
|
version "11.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||||
@ -4764,19 +4627,6 @@ handle-thing@^2.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
|
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
|
||||||
integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
|
integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==
|
||||||
|
|
||||||
har-schema@^2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
|
||||||
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
|
|
||||||
|
|
||||||
har-validator@~5.1.3:
|
|
||||||
version "5.1.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
|
|
||||||
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
|
|
||||||
dependencies:
|
|
||||||
ajv "^6.12.3"
|
|
||||||
har-schema "^2.0.0"
|
|
||||||
|
|
||||||
has-bigints@^1.0.1, has-bigints@^1.0.2:
|
has-bigints@^1.0.1, has-bigints@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
|
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
|
||||||
@ -4971,15 +4821,6 @@ http-proxy@^1.18.1:
|
|||||||
follow-redirects "^1.0.0"
|
follow-redirects "^1.0.0"
|
||||||
requires-port "^1.0.0"
|
requires-port "^1.0.0"
|
||||||
|
|
||||||
http-signature@~1.2.0:
|
|
||||||
version "1.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
|
||||||
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
jsprim "^1.2.2"
|
|
||||||
sshpk "^1.7.0"
|
|
||||||
|
|
||||||
http2-wrapper@^1.0.0-beta.5.2:
|
http2-wrapper@^1.0.0-beta.5.2:
|
||||||
version "1.0.3"
|
version "1.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
|
resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
|
||||||
@ -5074,11 +4915,6 @@ indent-string@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
||||||
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
|
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
|
||||||
|
|
||||||
individual@^2.0.0:
|
|
||||||
version "2.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/individual/-/individual-2.0.0.tgz#833b097dad23294e76117a98fb38e0d9ad61bb97"
|
|
||||||
integrity sha1-gzsJfa0jKU52EXqY+zjg2a1hu5c=
|
|
||||||
|
|
||||||
inflight@^1.0.4:
|
inflight@^1.0.4:
|
||||||
version "1.0.6"
|
version "1.0.6"
|
||||||
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||||
@ -5246,11 +5082,6 @@ is-fullwidth-code-point@^4.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
|
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88"
|
||||||
integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
|
integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==
|
||||||
|
|
||||||
is-function@^1.0.1:
|
|
||||||
version "1.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08"
|
|
||||||
integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==
|
|
||||||
|
|
||||||
is-generator-function@^1.0.7:
|
is-generator-function@^1.0.7:
|
||||||
version "1.0.10"
|
version "1.0.10"
|
||||||
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
|
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
|
||||||
@ -5391,11 +5222,6 @@ is-typed-array@^1.1.3, is-typed-array@^1.1.9:
|
|||||||
for-each "^0.3.3"
|
for-each "^0.3.3"
|
||||||
has-tostringtag "^1.0.0"
|
has-tostringtag "^1.0.0"
|
||||||
|
|
||||||
is-typedarray@~1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
|
||||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
|
||||||
|
|
||||||
is-weakref@^1.0.2:
|
is-weakref@^1.0.2:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
|
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
|
||||||
@ -5440,11 +5266,6 @@ isobject@^3.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||||
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
|
||||||
|
|
||||||
isstream@~0.1.2:
|
|
||||||
version "0.1.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
|
||||||
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
|
||||||
|
|
||||||
jackspeak@^3.1.2:
|
jackspeak@^3.1.2:
|
||||||
version "3.4.0"
|
version "3.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a"
|
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.0.tgz#a75763ff36ad778ede6a156d8ee8b124de445b4a"
|
||||||
@ -5523,11 +5344,6 @@ js-yaml@^4.1.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
argparse "^2.0.1"
|
argparse "^2.0.1"
|
||||||
|
|
||||||
jsbn@~0.1.0:
|
|
||||||
version "0.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
|
||||||
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
|
|
||||||
|
|
||||||
jsesc@^2.5.1:
|
jsesc@^2.5.1:
|
||||||
version "2.5.2"
|
version "2.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
|
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
|
||||||
@ -5575,17 +5391,12 @@ json-schema-traverse@^1.0.0:
|
|||||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
|
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
|
||||||
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
|
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
|
||||||
|
|
||||||
json-schema@0.4.0:
|
|
||||||
version "0.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5"
|
|
||||||
integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==
|
|
||||||
|
|
||||||
json-stable-stringify-without-jsonify@^1.0.1:
|
json-stable-stringify-without-jsonify@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||||
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
|
||||||
|
|
||||||
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
|
json-stringify-safe@^5.0.1:
|
||||||
version "5.0.1"
|
version "5.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||||
@ -5628,21 +5439,6 @@ jsonfile@^6.0.1:
|
|||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
graceful-fs "^4.1.6"
|
graceful-fs "^4.1.6"
|
||||||
|
|
||||||
jsprim@^1.2.2:
|
|
||||||
version "1.4.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb"
|
|
||||||
integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==
|
|
||||||
dependencies:
|
|
||||||
assert-plus "1.0.0"
|
|
||||||
extsprintf "1.3.0"
|
|
||||||
json-schema "0.4.0"
|
|
||||||
verror "1.10.0"
|
|
||||||
|
|
||||||
keycode@^2.2.0:
|
|
||||||
version "2.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.2.1.tgz#09c23b2be0611d26117ea2501c2c391a01f39eff"
|
|
||||||
integrity sha512-Rdgz9Hl9Iv4QKi8b0OlCRQEzp4AgVxyCtz5S/+VIHezDmrDhkp2N2TqBWOLz0/gbeREXOOiI9/4b8BY9uw2vFg==
|
|
||||||
|
|
||||||
keyv@^4.0.0:
|
keyv@^4.0.0:
|
||||||
version "4.5.2"
|
version "4.5.2"
|
||||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56"
|
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56"
|
||||||
@ -5892,15 +5688,6 @@ lru-cache@^6.0.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
yallist "^4.0.0"
|
yallist "^4.0.0"
|
||||||
|
|
||||||
m3u8-parser@4.8.0:
|
|
||||||
version "4.8.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/m3u8-parser/-/m3u8-parser-4.8.0.tgz#4a2d591fdf6f2579d12a327081198df8af83083d"
|
|
||||||
integrity sha512-UqA2a/Pw3liR6Df3gwxrqghCP17OpPlQj6RBPLYygf/ZSQ4MoSgvdvhvt35qV+3NaaA0FSZx93Ix+2brT1U7cA==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.12.5"
|
|
||||||
"@videojs/vhs-utils" "^3.0.5"
|
|
||||||
global "^4.4.0"
|
|
||||||
|
|
||||||
marked@^14.1.0:
|
marked@^14.1.0:
|
||||||
version "14.1.0"
|
version "14.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/marked/-/marked-14.1.0.tgz#736ae774ff06ddf03e55a071f9322fe240cb89cb"
|
resolved "https://registry.yarnpkg.com/marked/-/marked-14.1.0.tgz#736ae774ff06ddf03e55a071f9322fe240cb89cb"
|
||||||
@ -5990,7 +5777,7 @@ mime-db@1.52.0, "mime-db@>= 1.43.0 < 2", mime-db@^1.28.0:
|
|||||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
|
||||||
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
|
||||||
|
|
||||||
mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34:
|
mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34:
|
||||||
version "2.1.35"
|
version "2.1.35"
|
||||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||||
@ -6022,13 +5809,6 @@ mimic-response@^3.1.0:
|
|||||||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
|
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
|
||||||
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
|
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
|
||||||
|
|
||||||
min-document@^2.19.0:
|
|
||||||
version "2.19.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685"
|
|
||||||
integrity sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=
|
|
||||||
dependencies:
|
|
||||||
dom-walk "^0.1.0"
|
|
||||||
|
|
||||||
min-indent@^1.0.0:
|
min-indent@^1.0.0:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
|
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
|
||||||
@ -6115,16 +5895,6 @@ mkdirp@^1.0.3:
|
|||||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||||
|
|
||||||
mpd-parser@0.22.1, mpd-parser@^0.22.1:
|
|
||||||
version "0.22.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/mpd-parser/-/mpd-parser-0.22.1.tgz#bc2bf7d3e56368e4b0121035b055675401871521"
|
|
||||||
integrity sha512-fwBebvpyPUU8bOzvhX0VQZgSohncbgYwUyJJoTSNpmy7ccD2ryiCvM7oRkn/xQH5cv73/xU7rJSNCLjdGFor0Q==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.12.5"
|
|
||||||
"@videojs/vhs-utils" "^3.0.5"
|
|
||||||
"@xmldom/xmldom" "^0.8.3"
|
|
||||||
global "^4.4.0"
|
|
||||||
|
|
||||||
ms@2.0.0:
|
ms@2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||||
@ -6148,14 +5918,6 @@ multicast-dns@^7.2.5:
|
|||||||
dns-packet "^5.2.2"
|
dns-packet "^5.2.2"
|
||||||
thunky "^1.0.2"
|
thunky "^1.0.2"
|
||||||
|
|
||||||
mux.js@6.0.1:
|
|
||||||
version "6.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/mux.js/-/mux.js-6.0.1.tgz#65ce0f7a961d56c006829d024d772902d28c7755"
|
|
||||||
integrity sha512-22CHb59rH8pWGcPGW5Og7JngJ9s+z4XuSlYvnxhLuc58cA1WqGDQPzuG8I+sPm1/p0CdgpzVTaKW408k5DNn8w==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.11.2"
|
|
||||||
global "^4.4.0"
|
|
||||||
|
|
||||||
nanoid@^3.3.7:
|
nanoid@^3.3.7:
|
||||||
version "3.3.7"
|
version "3.3.7"
|
||||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
|
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
|
||||||
@ -6256,11 +6018,6 @@ nth-check@^2.0.1, nth-check@^2.1.1:
|
|||||||
dependencies:
|
dependencies:
|
||||||
boolbase "^1.0.0"
|
boolbase "^1.0.0"
|
||||||
|
|
||||||
oauth-sign@~0.9.0:
|
|
||||||
version "0.9.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
|
||||||
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
|
||||||
|
|
||||||
object-inspect@^1.12.0, object-inspect@^1.9.0:
|
object-inspect@^1.12.0, object-inspect@^1.9.0:
|
||||||
version "1.12.0"
|
version "1.12.0"
|
||||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
|
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
|
||||||
@ -6559,11 +6316,6 @@ pend@~1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||||
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
|
||||||
|
|
||||||
performance-now@^2.1.0:
|
|
||||||
version "2.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
|
||||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
|
||||||
|
|
||||||
picocolors@^0.2.1:
|
picocolors@^0.2.1:
|
||||||
version "0.2.1"
|
version "0.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
|
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
|
||||||
@ -6584,13 +6336,6 @@ pidtree@^0.6.0:
|
|||||||
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
|
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.6.0.tgz#90ad7b6d42d5841e69e0a2419ef38f8883aa057c"
|
||||||
integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
|
integrity sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==
|
||||||
|
|
||||||
pkcs7@^1.0.4:
|
|
||||||
version "1.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/pkcs7/-/pkcs7-1.0.4.tgz#6090b9e71160dabf69209d719cbafa538b00a1cb"
|
|
||||||
integrity sha512-afRERtHn54AlwaF2/+LFszyAANTCggGilmcmILUzEjvs3XgFZT+xE6+QWQcAGmu4xajy+Xtj7acLOPdx5/eXWQ==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.5.5"
|
|
||||||
|
|
||||||
pkg-dir@^4.2.0:
|
pkg-dir@^4.2.0:
|
||||||
version "4.2.0"
|
version "4.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
|
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
|
||||||
@ -6967,11 +6712,6 @@ pseudomap@^1.0.2:
|
|||||||
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||||
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
|
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
|
||||||
|
|
||||||
psl@^1.1.28:
|
|
||||||
version "1.8.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
|
||||||
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
|
|
||||||
|
|
||||||
pump@^3.0.0:
|
pump@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||||
@ -6980,7 +6720,7 @@ pump@^3.0.0:
|
|||||||
end-of-stream "^1.1.0"
|
end-of-stream "^1.1.0"
|
||||||
once "^1.3.1"
|
once "^1.3.1"
|
||||||
|
|
||||||
punycode@^2.1.0, punycode@^2.1.1:
|
punycode@^2.1.0:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||||
@ -6999,11 +6739,6 @@ qs@6.11.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
side-channel "^1.0.4"
|
side-channel "^1.0.4"
|
||||||
|
|
||||||
qs@~6.5.2:
|
|
||||||
version "6.5.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad"
|
|
||||||
integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==
|
|
||||||
|
|
||||||
queue-microtask@^1.2.2:
|
queue-microtask@^1.2.2:
|
||||||
version "1.2.3"
|
version "1.2.3"
|
||||||
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||||
@ -7236,32 +6971,6 @@ renderkid@^3.0.0:
|
|||||||
lodash "^4.17.21"
|
lodash "^4.17.21"
|
||||||
strip-ansi "^6.0.1"
|
strip-ansi "^6.0.1"
|
||||||
|
|
||||||
request@^2.88.2:
|
|
||||||
version "2.88.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
|
|
||||||
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
|
|
||||||
dependencies:
|
|
||||||
aws-sign2 "~0.7.0"
|
|
||||||
aws4 "^1.8.0"
|
|
||||||
caseless "~0.12.0"
|
|
||||||
combined-stream "~1.0.6"
|
|
||||||
extend "~3.0.2"
|
|
||||||
forever-agent "~0.6.1"
|
|
||||||
form-data "~2.3.2"
|
|
||||||
har-validator "~5.1.3"
|
|
||||||
http-signature "~1.2.0"
|
|
||||||
is-typedarray "~1.0.0"
|
|
||||||
isstream "~0.1.2"
|
|
||||||
json-stringify-safe "~5.0.1"
|
|
||||||
mime-types "~2.1.19"
|
|
||||||
oauth-sign "~0.9.0"
|
|
||||||
performance-now "^2.1.0"
|
|
||||||
qs "~6.5.2"
|
|
||||||
safe-buffer "^5.1.2"
|
|
||||||
tough-cookie "~2.5.0"
|
|
||||||
tunnel-agent "^0.6.0"
|
|
||||||
uuid "^3.3.2"
|
|
||||||
|
|
||||||
require-directory@^2.1.1:
|
require-directory@^2.1.1:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||||
@ -7381,13 +7090,6 @@ run-parallel@^1.1.9:
|
|||||||
dependencies:
|
dependencies:
|
||||||
queue-microtask "^1.2.2"
|
queue-microtask "^1.2.2"
|
||||||
|
|
||||||
rust-result@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/rust-result/-/rust-result-1.0.0.tgz#34c75b2e6dc39fe5875e5bdec85b5e0f91536f72"
|
|
||||||
integrity sha1-NMdbLm3Dn+WHXlveyFteD5FTb3I=
|
|
||||||
dependencies:
|
|
||||||
individual "^2.0.0"
|
|
||||||
|
|
||||||
safe-array-concat@^1.0.1:
|
safe-array-concat@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
|
resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
|
||||||
@ -7403,18 +7105,11 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
|||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||||
|
|
||||||
safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
|
safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0:
|
||||||
version "5.2.1"
|
version "5.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||||
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
||||||
|
|
||||||
safe-json-parse@4.0.0:
|
|
||||||
version "4.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-4.0.0.tgz#7c0f578cfccd12d33a71c0e05413e2eca171eaac"
|
|
||||||
integrity sha1-fA9XjPzNEtM6ccDgVBPi7KFx6qw=
|
|
||||||
dependencies:
|
|
||||||
rust-result "^1.0.0"
|
|
||||||
|
|
||||||
safe-regex-test@^1.0.0:
|
safe-regex-test@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
|
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
|
||||||
@ -7424,7 +7119,7 @@ safe-regex-test@^1.0.0:
|
|||||||
get-intrinsic "^1.1.3"
|
get-intrinsic "^1.1.3"
|
||||||
is-regex "^1.1.4"
|
is-regex "^1.1.4"
|
||||||
|
|
||||||
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
|
||||||
version "2.1.2"
|
version "2.1.2"
|
||||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
@ -7594,6 +7289,13 @@ setprototypeof@1.2.0:
|
|||||||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
||||||
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
||||||
|
|
||||||
|
shaka-player@^4.10.12:
|
||||||
|
version "4.10.12"
|
||||||
|
resolved "https://registry.yarnpkg.com/shaka-player/-/shaka-player-4.10.12.tgz#29f9ffb0f7f3a67e5ccddbb48ba5601c911079de"
|
||||||
|
integrity sha512-Gn8MmSsWU/yrJyJLwEGZYQwz/09y6hMW+HaPnkC/+s3fgXbVYPgrpra45T0aCLV4LgfjXRf+uHDjVydUW5rTZA==
|
||||||
|
dependencies:
|
||||||
|
eme-encryption-scheme-polyfill "^2.1.5"
|
||||||
|
|
||||||
shallow-clone@^3.0.0:
|
shallow-clone@^3.0.0:
|
||||||
version "3.0.1"
|
version "3.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
|
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
|
||||||
@ -7780,21 +7482,6 @@ sprintf-js@^1.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
|
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
|
||||||
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
|
integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==
|
||||||
|
|
||||||
sshpk@^1.7.0:
|
|
||||||
version "1.17.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5"
|
|
||||||
integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==
|
|
||||||
dependencies:
|
|
||||||
asn1 "~0.2.3"
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
bcrypt-pbkdf "^1.0.0"
|
|
||||||
dashdash "^1.12.0"
|
|
||||||
ecc-jsbn "~0.1.1"
|
|
||||||
getpass "^0.1.1"
|
|
||||||
jsbn "~0.1.0"
|
|
||||||
safer-buffer "^2.0.2"
|
|
||||||
tweetnacl "~0.14.0"
|
|
||||||
|
|
||||||
stat-mode@^1.0.0:
|
stat-mode@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
|
resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
|
||||||
@ -8237,14 +7924,6 @@ toidentifier@1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||||
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
|
||||||
|
|
||||||
tough-cookie@~2.5.0:
|
|
||||||
version "2.5.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
|
||||||
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
|
|
||||||
dependencies:
|
|
||||||
psl "^1.1.28"
|
|
||||||
punycode "^2.1.1"
|
|
||||||
|
|
||||||
tree-kill@1.2.2:
|
tree-kill@1.2.2:
|
||||||
version "1.2.2"
|
version "1.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
|
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
|
||||||
@ -8272,18 +7951,6 @@ tslib@^2.0.0, tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.5.0, tslib@^2.6
|
|||||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
|
||||||
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
|
integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
|
||||||
|
|
||||||
tunnel-agent@^0.6.0:
|
|
||||||
version "0.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
|
||||||
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
|
|
||||||
dependencies:
|
|
||||||
safe-buffer "^5.0.1"
|
|
||||||
|
|
||||||
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
|
||||||
version "0.14.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
|
||||||
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
|
|
||||||
|
|
||||||
type-check@^0.4.0, type-check@~0.4.0:
|
type-check@^0.4.0, type-check@~0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
|
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
|
||||||
@ -8373,11 +8040,6 @@ unbox-primitive@^1.0.2:
|
|||||||
has-symbols "^1.0.3"
|
has-symbols "^1.0.3"
|
||||||
which-boxed-primitive "^1.0.2"
|
which-boxed-primitive "^1.0.2"
|
||||||
|
|
||||||
underscore@1.13.1:
|
|
||||||
version "1.13.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1"
|
|
||||||
integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==
|
|
||||||
|
|
||||||
undici-types@~5.26.4:
|
undici-types@~5.26.4:
|
||||||
version "5.26.5"
|
version "5.26.5"
|
||||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
|
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
|
||||||
@ -8461,11 +8123,6 @@ uri-js@^4.2.2:
|
|||||||
dependencies:
|
dependencies:
|
||||||
punycode "^2.1.0"
|
punycode "^2.1.0"
|
||||||
|
|
||||||
url-toolkit@^2.2.1:
|
|
||||||
version "2.2.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/url-toolkit/-/url-toolkit-2.2.5.tgz#58406b18e12c58803e14624df5e374f638b0f607"
|
|
||||||
integrity sha512-mtN6xk+Nac+oyJ/PrI7tzfmomRVNFIWKUbG8jdYFt52hxbiReFAXIjYskvu64/dvuW71IcB7lV8l0HvZMac6Jg==
|
|
||||||
|
|
||||||
utf8-byte-length@^1.0.1:
|
utf8-byte-length@^1.0.1:
|
||||||
version "1.0.4"
|
version "1.0.4"
|
||||||
resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
|
resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
|
||||||
@ -8498,11 +8155,6 @@ utils-merge@1.0.1:
|
|||||||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||||
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
|
integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
|
||||||
|
|
||||||
uuid@^3.3.2:
|
|
||||||
version "3.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
|
||||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
|
||||||
|
|
||||||
uuid@^8.3.2:
|
uuid@^8.3.2:
|
||||||
version "8.3.2"
|
version "8.3.2"
|
||||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||||
@ -8521,15 +8173,6 @@ vary@~1.1.2:
|
|||||||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||||
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
|
integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
|
||||||
|
|
||||||
verror@1.10.0:
|
|
||||||
version "1.10.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
|
|
||||||
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
|
|
||||||
dependencies:
|
|
||||||
assert-plus "^1.0.0"
|
|
||||||
core-util-is "1.0.2"
|
|
||||||
extsprintf "^1.2.0"
|
|
||||||
|
|
||||||
verror@^1.10.0:
|
verror@^1.10.0:
|
||||||
version "1.10.1"
|
version "1.10.1"
|
||||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
|
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
|
||||||
@ -8539,85 +8182,6 @@ verror@^1.10.0:
|
|||||||
core-util-is "1.0.2"
|
core-util-is "1.0.2"
|
||||||
extsprintf "^1.2.0"
|
extsprintf "^1.2.0"
|
||||||
|
|
||||||
video.js@7.21.5, "video.js@^6 || ^7", "video.js@^6 || ^7 || ^8", video.js@^7.0.0, "video.js@^7.2.0 || ^6.6.0":
|
|
||||||
version "7.21.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/video.js/-/video.js-7.21.5.tgz#36fcbbdeded757089a10bbb78f49c360a2d0c9d4"
|
|
||||||
integrity sha512-WRq86tXZKrThA9mK+IR+v4tIQVVvnb5LhvL71fD2AX7TxVOPdaeK1X/wyuUruBqWaOG3w2sZXoMY6HF2Jlo9qA==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.12.5"
|
|
||||||
"@videojs/http-streaming" "2.16.2"
|
|
||||||
"@videojs/vhs-utils" "^3.0.4"
|
|
||||||
"@videojs/xhr" "2.6.0"
|
|
||||||
aes-decrypter "3.1.3"
|
|
||||||
global "^4.4.0"
|
|
||||||
keycode "^2.2.0"
|
|
||||||
m3u8-parser "4.8.0"
|
|
||||||
mpd-parser "0.22.1"
|
|
||||||
mux.js "6.0.1"
|
|
||||||
safe-json-parse "4.0.0"
|
|
||||||
videojs-font "3.2.0"
|
|
||||||
videojs-vtt.js "^0.15.5"
|
|
||||||
|
|
||||||
videojs-contrib-quality-levels@^2.0.4:
|
|
||||||
version "2.2.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-2.2.1.tgz#46bd7e1db25e6e45824dadf933b08f0c6ec724a1"
|
|
||||||
integrity sha512-cnF6OGGgoC/2nUrbdz54nzPm3BpEZQzMTpyekiX6AXs8imATX2sHbrUz97xXVSHITldk/+d7ZAUrdQYJJTyuug==
|
|
||||||
dependencies:
|
|
||||||
global "^4.3.2"
|
|
||||||
video.js "^6 || ^7 || ^8"
|
|
||||||
|
|
||||||
videojs-contrib-quality-levels@^3.0.0:
|
|
||||||
version "3.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/videojs-contrib-quality-levels/-/videojs-contrib-quality-levels-3.0.0.tgz#bc66f1333b763754b4425455bee4ef6e5ba53984"
|
|
||||||
integrity sha512-sNx38EYUx+Q+gmup1gVTv9P9/sPs28rM7gZOx1sedaHoKxEdYB+ysOGfHj6MSELBMNGMj6ZspdrpSiWguGvGxA==
|
|
||||||
dependencies:
|
|
||||||
global "^4.4.0"
|
|
||||||
|
|
||||||
videojs-font@3.2.0:
|
|
||||||
version "3.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/videojs-font/-/videojs-font-3.2.0.tgz#212c9d3f4e4ec3fa7345167d64316add35e92232"
|
|
||||||
integrity sha512-g8vHMKK2/JGorSfqAZQUmYYNnXmfec4MLhwtEFS+mMs2IDY398GLysy6BH6K+aS1KMNu/xWZ8Sue/X/mdQPliA==
|
|
||||||
|
|
||||||
videojs-http-source-selector@^1.1.6:
|
|
||||||
version "1.1.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/videojs-http-source-selector/-/videojs-http-source-selector-1.1.6.tgz#073aadbea0106ba6c98d6b611094dbf8554ffa1f"
|
|
||||||
integrity sha512-6b5MmKTT2cVnrjtdNj4z1VO91udbXkZkTYA6LlD8WN2aHlG2rqFTmtMab4NK4nlkkkbRnm3c2q2IddL3jffLmg==
|
|
||||||
dependencies:
|
|
||||||
global "^4.3.2"
|
|
||||||
video.js "^7.0.0"
|
|
||||||
videojs-contrib-quality-levels "^2.0.4"
|
|
||||||
|
|
||||||
videojs-mobile-ui@^0.8.0:
|
|
||||||
version "0.8.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/videojs-mobile-ui/-/videojs-mobile-ui-0.8.0.tgz#40a1c6f9302071b9bbe95937c934114600916ac5"
|
|
||||||
integrity sha512-Jd+u/ctjUkbZlT1cAA0umTu0LQwSZSFG+02cJxShuwq27B6rfrRALETK/gsuTc7U27lB9fbwcF7HBMaNxW62nA==
|
|
||||||
dependencies:
|
|
||||||
global "^4.4.0"
|
|
||||||
|
|
||||||
videojs-overlay@^3.1.0:
|
|
||||||
version "3.1.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/videojs-overlay/-/videojs-overlay-3.1.0.tgz#d57505d375eca952feeb36e5b33e0a130e3dc9e0"
|
|
||||||
integrity sha512-P863Z4ghWgf7Z4A4uzmHlqIixRb8v5220JuQ4pfb/uorbWSBCt5D+czrp/eTxXXLtSmrSUKn596QswVYZuMzPg==
|
|
||||||
dependencies:
|
|
||||||
global "^4.3.2"
|
|
||||||
video.js "^6 || ^7 || ^8"
|
|
||||||
|
|
||||||
videojs-vtt-thumbnails-freetube@0.0.15:
|
|
||||||
version "0.0.15"
|
|
||||||
resolved "https://registry.yarnpkg.com/videojs-vtt-thumbnails-freetube/-/videojs-vtt-thumbnails-freetube-0.0.15.tgz#5bbc1f98c4d4cffd5b3538e8caab36aca94c86cf"
|
|
||||||
integrity sha512-aRjG6fvsuWCpcFcdhqRbI5HUWw1l7boHRJZoQki+z74uDbys/u8OVo6S/oJgpmog//iToQEKqHjSEisFdVDQlA==
|
|
||||||
dependencies:
|
|
||||||
global "^4.4.0"
|
|
||||||
request "^2.88.2"
|
|
||||||
video.js "^7.2.0 || ^6.6.0"
|
|
||||||
|
|
||||||
videojs-vtt.js@^0.15.5:
|
|
||||||
version "0.15.5"
|
|
||||||
resolved "https://registry.yarnpkg.com/videojs-vtt.js/-/videojs-vtt.js-0.15.5.tgz#567776eaf2a7a928d88b148a8b401ade2406f2ca"
|
|
||||||
integrity sha512-yZbBxvA7QMYn15Lr/ZfhhLPrNpI/RmCSCqgIff57GC2gIrV5YfyzLfLyZMj0NnZSAz8syB4N0nHXpZg9MyrMOQ==
|
|
||||||
dependencies:
|
|
||||||
global "^4.3.1"
|
|
||||||
|
|
||||||
vue-devtools@^5.1.4:
|
vue-devtools@^5.1.4:
|
||||||
version "5.1.4"
|
version "5.1.4"
|
||||||
resolved "https://registry.yarnpkg.com/vue-devtools/-/vue-devtools-5.1.4.tgz#265a7458ade2affb291739176964256b597fa302"
|
resolved "https://registry.yarnpkg.com/vue-devtools/-/vue-devtools-5.1.4.tgz#265a7458ade2affb291739176964256b597fa302"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user