mirror of https://github.com/FreeTubeApp/FreeTube
Merge cecb33f29b
into 1e955ee545
This commit is contained in:
commit
a33c66e5b3
|
@ -26,7 +26,7 @@
|
|||
"selector-pseudo-class-no-unknown": [
|
||||
true,
|
||||
{
|
||||
"ignorePseudoClasses": ["deep"]
|
||||
"ignorePseudoClasses": ["deep", "global"]
|
||||
}
|
||||
],
|
||||
"a11y/no-outline-none": true,
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
const DOMParser = window.DOMParser
|
||||
|
||||
export {
|
||||
DOMParser
|
||||
}
|
|
@ -17,10 +17,14 @@ const web = process.argv.indexOf('--web') !== -1
|
|||
let mainConfig
|
||||
let rendererConfig
|
||||
let webConfig
|
||||
let SHAKA_LOCALES_TO_BE_BUNDLED
|
||||
|
||||
if (!web) {
|
||||
mainConfig = require('./webpack.main.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 {
|
||||
webConfig = require('./webpack.web.config')
|
||||
}
|
||||
|
@ -110,16 +114,26 @@ function startRenderer(callback) {
|
|||
})
|
||||
|
||||
const server = new WebpackDevServer({
|
||||
static: {
|
||||
directory: path.resolve(__dirname, '..', 'static'),
|
||||
watch: {
|
||||
ignored: [
|
||||
/(dashFiles|storyboards)\/*/,
|
||||
'/**/.DS_Store',
|
||||
]
|
||||
static: [
|
||||
{
|
||||
directory: path.resolve(__dirname, '..', 'static'),
|
||||
watch: {
|
||||
ignored: [
|
||||
/(dashFiles|storyboards)\/*/,
|
||||
'/**/.DS_Store',
|
||||
]
|
||||
},
|
||||
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
|
||||
}, compiler)
|
||||
|
||||
|
|
|
@ -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 Hewbrew, 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()
|
|
@ -0,0 +1,105 @@
|
|||
// 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 donwloading 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 fixRemoteFonts() {
|
||||
let cssFileHandle
|
||||
try {
|
||||
cssFileHandle = openSync(`${SHAKA_DIST_DIR}/controls.css`, 'r+')
|
||||
|
||||
let cssContents = readFileSync(cssFileHandle, 'utf-8')
|
||||
|
||||
const beforeRobotoReplacement = cssContents.length
|
||||
cssContents = cssContents.replace(/@font-face\{font-family:Roboto;[^}]+\}/, '')
|
||||
|
||||
if (cssContents.length !== beforeRobotoReplacement) {
|
||||
console.log('Removed shaka-player Roboto font, so it uses ours')
|
||||
}
|
||||
|
||||
const remoteFontsRegex = /https:\/\/fonts\.gstatic\.com\/s\/(?<name>[^\/]+)\/(?<version>[^\/]+)\/[^.]+\.(?<extension>[a-z]+)/g
|
||||
/** @type {RegExpMatchArray[]} */
|
||||
const remoteFontMatches = [...cssContents.matchAll(remoteFontsRegex)]
|
||||
|
||||
if (remoteFontMatches.length > 0) {
|
||||
console.log('Downloading shaka-player remote fonts...')
|
||||
|
||||
for (const match of remoteFontMatches) {
|
||||
const url = match[0]
|
||||
const { name, version, extension } = match.groups
|
||||
|
||||
const response = await fetch(url)
|
||||
const fontContent = new Uint8Array(await response.arrayBuffer())
|
||||
|
||||
const filename = `shaka-${name}-${version}.${extension}`
|
||||
writeFileSync(`${SHAKA_DIST_DIR}/${filename}`, fontContent)
|
||||
|
||||
cssContents = cssContents.replace(url, `./${filename}`)
|
||||
}
|
||||
|
||||
ftruncateSync(cssFileHandle)
|
||||
writeSync(cssFileHandle, cssContents, 0, 'utf-8')
|
||||
|
||||
console.log('Localised shaka-player fonts')
|
||||
}
|
||||
} finally {
|
||||
if (typeof cssFileHandle !== 'undefined') {
|
||||
closeSync(cssFileHandle)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fixTypes()
|
||||
await fixRemoteFonts()
|
|
@ -8,6 +8,11 @@ const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
|
|||
const ProcessLocalesPlugin = require('./ProcessLocalesPlugin')
|
||||
const WatchExternalFilesPlugin = require('webpack-watch-external-files-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'
|
||||
|
||||
|
@ -122,7 +127,9 @@ const config = {
|
|||
'process.env.SUPPORTS_LOCAL_API': true,
|
||||
'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.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({
|
||||
excludeChunks: ['processTaskWorker'],
|
||||
|
@ -143,7 +150,21 @@ const config = {
|
|||
transformAll: (assets) => {
|
||||
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')))
|
||||
}
|
||||
}
|
||||
}
|
||||
])
|
||||
]
|
||||
})
|
||||
],
|
||||
|
@ -155,10 +176,8 @@ const config = {
|
|||
|
||||
'youtubei.js$': 'youtubei.js/web',
|
||||
|
||||
// video.js's mpd-parser uses @xmldom/xmldom so that it can support both node and web browsers
|
||||
// as FreeTube only runs in electron and web browsers we can use the native DOMParser class, instead of the "polyfill"
|
||||
// https://caniuse.com/mdn-api_domparser
|
||||
'@xmldom/xmldom$': path.resolve(__dirname, '_domParser.js')
|
||||
// change to "shaka-player.ui.debug.js" to get debug logs (update jsconfig to get updated types)
|
||||
'shaka-player$': 'shaka-player/dist/shaka-player.ui.js',
|
||||
},
|
||||
extensions: ['.js', '.vue']
|
||||
},
|
||||
|
@ -175,6 +194,10 @@ 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
|
||||
|
|
|
@ -8,6 +8,11 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin')
|
|||
const JsonMinimizerPlugin = require('json-minimizer-webpack-plugin')
|
||||
const CssMinimizerPlugin = require('css-minimizer-webpack-plugin')
|
||||
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'
|
||||
|
||||
|
@ -116,19 +121,7 @@ const config = {
|
|||
'process.env.IS_ELECTRON': false,
|
||||
'process.env.IS_ELECTRON_MAIN': false,
|
||||
'process.env.SUPPORTS_LOCAL_API': false,
|
||||
'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
|
||||
'process.env.SWIPER_VERSION': `'${swiperVersion}'`
|
||||
}),
|
||||
new webpack.ProvidePlugin({
|
||||
process: 'process/browser'
|
||||
|
@ -162,10 +155,8 @@ const config = {
|
|||
|
||||
'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
|
||||
// As FreeTube only runs in electron and web browsers, we can use the native DOMParser class, instead of the "polyfill"
|
||||
// https://caniuse.com/mdn-api_domparser
|
||||
'@xmldom/xmldom$': path.resolve(__dirname, '_domParser.js')
|
||||
// change to "shaka-player.ui.debug.js" to get debug logs (update jsconfig to get updated types)
|
||||
'shaka-player$': 'shaka-player/dist/shaka-player.ui.js',
|
||||
},
|
||||
fallback: {
|
||||
'fs/promises': path.resolve(__dirname, '_empty.js'),
|
||||
|
@ -186,7 +177,9 @@ config.plugins.push(
|
|||
processLocalesPlugin,
|
||||
new webpack.DefinePlugin({
|
||||
'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({
|
||||
patterns: [
|
||||
|
@ -201,7 +194,12 @@ config.plugins.push(
|
|||
dot: true,
|
||||
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": [
|
||||
"src/datastores/handlers/electron",
|
||||
"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"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "run-s rebuild:electron pack build-release",
|
||||
"build:arm64": "run-s rebuild:electron pack build-release:arm64",
|
||||
"build:arm32": "run-s rebuild:electron pack build-release:arm32",
|
||||
"build": "run-s rebuild:electron patch-shaka pack build-release",
|
||||
"build:arm64": "run-s rebuild:electron patch-shaka pack build-release:arm64",
|
||||
"build:arm32": "run-s rebuild:electron patch-shaka pack build-release:arm32",
|
||||
"build-release": "node _scripts/build.js",
|
||||
"build-release:arm64": "node _scripts/build.js arm64",
|
||||
"build-release:arm32": "node _scripts/build.js arm32",
|
||||
"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",
|
||||
"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-runner": "node _scripts/dev-runner.js",
|
||||
"get-instances": "node _scripts/getInstances.js",
|
||||
"patch-shaka": "node _scripts/patchShaka.mjs",
|
||||
"get-regions": "node _scripts/getRegions.mjs",
|
||||
"lint-all": "run-p lint lint-json",
|
||||
"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: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",
|
||||
"postinstall": "yarn run --silent rebuild:electron",
|
||||
"postinstall": "run-s --silent rebuild:electron patch-shaka",
|
||||
"prettier": "prettier --write \"{src,_scripts}/**/*.{js,vue}\"",
|
||||
"rebuild:electron": "electron-builder install-app-deps",
|
||||
"release": "run-s test build",
|
||||
|
@ -58,20 +59,14 @@
|
|||
"@fortawesome/free-solid-svg-icons": "^6.5.2",
|
||||
"@fortawesome/vue-fontawesome": "^2.0.10",
|
||||
"@seald-io/nedb": "^4.0.4",
|
||||
"@silvermine/videojs-quality-selector": "^1.3.1",
|
||||
"autolinker": "^4.0.0",
|
||||
"electron-context-menu": "^3.6.1",
|
||||
"lodash.debounce": "^4.0.8",
|
||||
"marked": "^12.0.1",
|
||||
"path-browserify": "^1.0.1",
|
||||
"process": "^0.11.10",
|
||||
"shaka-player": "^4.7.13",
|
||||
"swiper": "^11.1.1",
|
||||
"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-i18n": "^8.28.2",
|
||||
"vue-observe-visibility": "^1.0.0",
|
||||
|
|
|
@ -28,13 +28,6 @@ function runApp() {
|
|||
showSelectAll: false,
|
||||
showCopyLink: false,
|
||||
prepend: (defaultActions, parameters, browserWindow) => [
|
||||
{
|
||||
label: 'Show / Hide Video Statistics',
|
||||
visible: parameters.mediaType === 'video',
|
||||
click: () => {
|
||||
browserWindow.webContents.send('showVideoStatistics')
|
||||
}
|
||||
},
|
||||
{
|
||||
label: 'Open in a New Window',
|
||||
// Only show the option for in-app URLs and not external ones
|
||||
|
@ -302,7 +295,7 @@ function runApp() {
|
|||
// InnerTube rejects requests if the referer isn't YouTube or empty
|
||||
const innertubeAndMediaRequestFilter = { urls: ['https://www.youtube.com/youtubei/*', 'https://*.googlevideo.com/videoplayback?*'] }
|
||||
|
||||
session.defaultSession.webRequest.onBeforeSendHeaders(innertubeAndMediaRequestFilter, ({ requestHeaders, url, resourceType }, callback) => {
|
||||
session.defaultSession.webRequest.onBeforeSendHeaders(innertubeAndMediaRequestFilter, ({ requestHeaders, url }, callback) => {
|
||||
requestHeaders.Referer = 'https://www.youtube.com/'
|
||||
requestHeaders.Origin = 'https://www.youtube.com'
|
||||
|
||||
|
@ -312,39 +305,6 @@ function runApp() {
|
|||
// YouTube doesn't send the Content-Type header for the media requests, so we shouldn't either
|
||||
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' && url.includes('&mime=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}`
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// eslint-disable-next-line n/no-callback-literal
|
||||
callback({ requestHeaders })
|
||||
})
|
||||
|
|
|
@ -91,5 +91,4 @@
|
|||
<script src="./App.js" />
|
||||
|
||||
<style src="./themes.css" />
|
||||
<style src="./videoJS.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,186 @@
|
|||
/* 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%;
|
||||
}
|
||||
|
||||
: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 */
|
||||
}
|
||||
|
||||
:deep(.shaka-volume-bar-container) {
|
||||
flex-shrink: initial;
|
||||
}
|
||||
|
||||
.skippedSegmentsWrapper {
|
||||
position: absolute;
|
||||
right: 2%;
|
||||
top: 20%;
|
||||
z-index: 2;
|
||||
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(.sponsorBlockMarkerContainer) {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
:deep(.sponsorBlockMarker) {
|
||||
position: absolute;
|
||||
opacity: 0.6;
|
||||
height: 100%;
|
||||
background-color: var(--primary-color);
|
||||
}
|
||||
|
||||
:deep(.playerFullscreenTitleOverlay) {
|
||||
display: none;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
margin: 0;
|
||||
top: 5px;
|
||||
left: 5px;
|
||||
font-size: xx-large;
|
||||
color: #fff;
|
||||
font-weight: normal;
|
||||
background-color: rgb(0 0 0 / 50%);
|
||||
border-radius: 5px;
|
||||
user-select: none;
|
||||
|
||||
/* copied from .shaka-scrim-container */
|
||||
transition: opacity cubic-bezier(.4, 0, .6, 1) .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;
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
||||
:deep(.player-icon) {
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
:deep(.shaka-overflow-menu .player-icon) {
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
:deep(.screenshot-button-icon) {
|
||||
font-size: 20px;
|
||||
}
|
||||
|
||||
.ftVideoPlayer:fullscreen :deep(.theatre-button),
|
||||
.ftVideoPlayer:fullscreen :deep(.full-window-button),
|
||||
.fullWindow :deep(.theatre-button) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@media only screen and (width <= 1350px) {
|
||||
: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;
|
||||
}
|
||||
|
||||
/* stylelint-enable liberty/use-logical-spec */
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,84 @@
|
|||
<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"
|
||||
/>
|
||||
<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>
|
||||
<template
|
||||
v-if="typeof stats.bitrate !== 'undefined'"
|
||||
>
|
||||
<span>{{ $t('Video.Player.Stats.Bitrate', { bitrate: stats.bitrate }) }}</span>
|
||||
<br>
|
||||
</template>
|
||||
<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
|
||||
>{{ $t('Video.Player.Stats.CodecsVideoAudio', 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="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 scoped src="./ft-shaka-video-player.css" />
|
|
@ -0,0 +1,84 @@
|
|||
import shaka from 'shaka-player'
|
||||
import { icon as faIcon } from '@fortawesome/fontawesome-svg-core'
|
||||
|
||||
import i18n from '../../../i18n'
|
||||
|
||||
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.enableIcon_ = faIcon({ prefix: 'fas', iconName: 'up-right-and-down-left-from-center' }).node[0]
|
||||
this.enableIcon_.classList.add('player-icon')
|
||||
|
||||
/** @private */
|
||||
this.disableIcon_ = faIcon({ prefix: 'fas', iconName: 'down-left-and-up-right-to-center' }).node[0]
|
||||
this.disableIcon_.classList.add('player-icon')
|
||||
|
||||
this.button_.appendChild(this.enableIcon_)
|
||||
|
||||
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: {
|
||||
enabled: !this.fullWindowEnabled_
|
||||
}
|
||||
}))
|
||||
})
|
||||
|
||||
this.eventManager.listen(events, 'setFullWindow', (/** @type {CustomEvent} */ event) => {
|
||||
this.fullWindowEnabled_ = event.detail.enabled
|
||||
|
||||
this.updateLocalisedStrings_()
|
||||
})
|
||||
|
||||
this.eventManager.listen(events, 'localeChanged', () => {
|
||||
this.updateLocalisedStrings_()
|
||||
})
|
||||
|
||||
this.updateLocalisedStrings_()
|
||||
}
|
||||
|
||||
/** @private */
|
||||
updateLocalisedStrings_() {
|
||||
this.nameSpan_.textContent = i18n.t('Video.Player.Full Window')
|
||||
|
||||
this.button_.firstChild.replaceWith(this.fullWindowEnabled_ ? this.disableIcon_ : this.enableIcon_)
|
||||
|
||||
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,150 @@
|
|||
import shaka from 'shaka-player'
|
||||
import { qualityLabelToDimension } from '../../../helpers/player/utils'
|
||||
|
||||
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, width or bitrate for the legacy formats, so we have to parse the qualityLabel instead
|
||||
// while it doesn't reflect the actual width or height of the format, it is still usuable for sorting
|
||||
if (typeof legacyFormats[0].width === 'undefined' || typeof legacyFormats[0].height === 'undefined') {
|
||||
sortedLegacyFormats.sort((a, b) => {
|
||||
return qualityLabelToDimension(b.qualityLabel) - qualityLabelToDimension(a.qualityLabel)
|
||||
})
|
||||
} 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,57 @@
|
|||
import shaka from 'shaka-player'
|
||||
import { icon as faIcon } from '@fortawesome/fontawesome-svg-core'
|
||||
|
||||
import i18n from '../../../i18n'
|
||||
|
||||
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 = faIcon({ prefix: 'fas', iconName: 'camera' }).node[0]
|
||||
icon.classList.add('player-icon')
|
||||
icon.classList.add('screenshot-button-icon')
|
||||
|
||||
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,80 @@
|
|||
import shaka from 'shaka-player'
|
||||
import { icon as faIcon } from '@fortawesome/fontawesome-svg-core'
|
||||
|
||||
import i18n from '../../../i18n'
|
||||
|
||||
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.enableIcon_ = faIcon({ prefix: 'fas', iconName: 'list' }).node[0]
|
||||
this.enableIcon_.classList.add('player-icon')
|
||||
|
||||
/** @private */
|
||||
this.disableIcon_ = faIcon({ prefix: 'fas', iconName: 'rectangle-list' }).node[0]
|
||||
this.disableIcon_.classList.add('player-icon')
|
||||
|
||||
this.button_.appendChild(this.enableIcon_)
|
||||
|
||||
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.button_.firstChild.replaceWith(this.showStats_ ? this.disableIcon_ : this.enableIcon_)
|
||||
|
||||
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,84 @@
|
|||
import shaka from 'shaka-player'
|
||||
import { icon as faIcon } from '@fortawesome/fontawesome-svg-core'
|
||||
|
||||
import i18n from '../../../i18n'
|
||||
|
||||
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.enableIcon_ = faIcon({ prefix: 'fas', iconName: 'tv' }).node[0]
|
||||
this.enableIcon_.classList.add('player-icon')
|
||||
|
||||
/** @private */
|
||||
this.disableIcon_ = faIcon({ prefix: 'fas', iconName: 'display' }).node[0]
|
||||
this.disableIcon_.classList.add('player-icon')
|
||||
|
||||
this.button_.appendChild(this.enableIcon_)
|
||||
|
||||
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: {
|
||||
enabled: !this.theatreModeEnabled_
|
||||
}
|
||||
}))
|
||||
})
|
||||
|
||||
this.eventManager.listen(events, 'toggleTheatreMode', (/** @type {CustomEvent} */event) => {
|
||||
this.theatreModeEnabled_ = event.detail.enabled
|
||||
|
||||
this.updateLocalisedStrings_()
|
||||
})
|
||||
|
||||
this.eventManager.listen(events, 'localeChanged', () => {
|
||||
this.updateLocalisedStrings_()
|
||||
})
|
||||
|
||||
this.updateLocalisedStrings_()
|
||||
}
|
||||
|
||||
/** @private */
|
||||
updateLocalisedStrings_() {
|
||||
this.nameSpan_.textContent = i18n.t('Video.Player.Theatre Mode')
|
||||
|
||||
this.button_.firstChild.replaceWith(this.theatreModeEnabled_ ? this.disableIcon_ : this.enableIcon_)
|
||||
|
||||
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,37 +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" />
|
|
@ -39,7 +39,9 @@ export default defineComponent({
|
|||
360,
|
||||
480,
|
||||
720,
|
||||
1080
|
||||
1080,
|
||||
1440,
|
||||
2160
|
||||
],
|
||||
playbackRateIntervalValues: [
|
||||
0.1,
|
||||
|
@ -113,10 +115,6 @@ export default defineComponent({
|
|||
return this.$store.getters.getDefaultQuality
|
||||
},
|
||||
|
||||
allowDashAv1Formats: function () {
|
||||
return this.$store.getters.getAllowDashAv1Formats
|
||||
},
|
||||
|
||||
defaultTheatreMode: function () {
|
||||
return this.$store.getters.getDefaultTheatreMode
|
||||
},
|
||||
|
@ -169,7 +167,9 @@ export default defineComponent({
|
|||
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.1080p')
|
||||
this.$t('Settings.Player Settings.Default Quality.1080p'),
|
||||
this.$t('Settings.Player Settings.Default Quality.1440p'),
|
||||
this.$t('Settings.Player Settings.Default Quality.4k')
|
||||
]
|
||||
},
|
||||
|
||||
|
@ -293,7 +293,6 @@ export default defineComponent({
|
|||
'updateDefaultPlayback',
|
||||
'updateDefaultVideoFormat',
|
||||
'updateDefaultQuality',
|
||||
'updateAllowDashAv1Formats',
|
||||
'updateVideoVolumeMouseScroll',
|
||||
'updateVideoPlaybackRateMouseScroll',
|
||||
'updateVideoSkipMouseScroll',
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
.av1Switch {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
.screenshotFolderContainer {
|
||||
align-items: center;
|
||||
column-gap: 1rem;
|
||||
|
|
|
@ -158,14 +158,6 @@
|
|||
:select-values="qualityValues"
|
||||
@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>
|
||||
<br>
|
||||
<ft-flex-box
|
||||
|
|
|
@ -295,40 +295,19 @@ function parseInvidiousCommunityAttachments(data) {
|
|||
}
|
||||
|
||||
/**
|
||||
* video.js only supports MP4 DASH not WebM DASH
|
||||
* so we filter out the WebM DASH formats
|
||||
* 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.
|
||||
* 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 {boolean} allowAv1 Use the AV1 formats if they are available
|
||||
*/
|
||||
export function filterInvidiousFormats(formats, allowAv1 = false) {
|
||||
const audioFormats = []
|
||||
const h264Formats = []
|
||||
const av1Formats = []
|
||||
|
||||
formats.forEach(format => {
|
||||
export function filterInvidiousFormats(formats) {
|
||||
return formats.filter(format => {
|
||||
const mimeType = format.type
|
||||
|
||||
if (mimeType.startsWith('audio/mp4')) {
|
||||
audioFormats.push(format)
|
||||
} else if (allowAv1 && mimeType.startsWith('video/mp4; codecs="av01')) {
|
||||
av1Formats.push(format)
|
||||
} else if (mimeType.startsWith('video/mp4; codecs="avc')) {
|
||||
h264Formats.push(format)
|
||||
}
|
||||
return mimeType.startsWith('audio/') ||
|
||||
mimeType.startsWith('video/mp4; codecs="avc') ||
|
||||
mimeType.startsWith('video/mp4; codecs="av01')
|
||||
})
|
||||
|
||||
// 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) {
|
||||
|
@ -412,9 +391,22 @@ export function convertInvidiousToLocalFormat(format) {
|
|||
})
|
||||
})
|
||||
|
||||
// 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
|
||||
}
|
||||
|
||||
export function mapInvidiousLegacyFormat(format) {
|
||||
return {
|
||||
itag: format.itag,
|
||||
qualityLabel: format.qualityLabel,
|
||||
fps: format.fps,
|
||||
bitrate: undefined, // Invidious doesn't provide it for legacy formats :(
|
||||
mimeType: format.type,
|
||||
|
||||
// Invidious' size parameter can't be trusted as it is hardcoded based on itag,
|
||||
// this is especially problematic for shorts, where it returns landscape dimenions,
|
||||
// even though the video is portrait
|
||||
height: undefined,
|
||||
width: undefined,
|
||||
url: format.url
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1053,7 +1053,7 @@ export function parseLocalTextRuns(runs, emojiSize = 16, options = { looseChanne
|
|||
/**
|
||||
* @param {LocalFormat} format
|
||||
*/
|
||||
export function mapLocalFormat(format) {
|
||||
export function mapLocalLegacyFormat(format) {
|
||||
return {
|
||||
itag: format.itag,
|
||||
qualityLabel: format.quality_label,
|
||||
|
|
|
@ -0,0 +1,292 @@
|
|||
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
|
||||
*/
|
||||
export function shakaCueFromVTTCue(vttCue) {
|
||||
// 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)
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
*/
|
||||
function copyFromVttCueToShakaCue(vttCue, shakaCue) {
|
||||
shakaCue.lineAlign = vttCue.lineAlign ?? ShakaCue.lineAlign.START
|
||||
shakaCue.positionAlign = vttCue.positionAlign ?? ShakaCue.positionAlign.AUTO
|
||||
shakaCue.size = vttCue.size
|
||||
shakaCue.textAlign = vttCue.align
|
||||
|
||||
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
|
||||
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'
|
||||
}
|
||||
}
|
|
@ -0,0 +1,190 @@
|
|||
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 {object} details
|
||||
*/
|
||||
export function logShakaError(error, context, 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' +
|
||||
`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.forEach(Object.freeze)
|
||||
|
||||
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]
|
||||
|
||||
return captions.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 aName.localeCompare(bName, currentLocale)
|
||||
})
|
||||
}
|
|
@ -10,6 +10,27 @@ async function getVideoHash(videoId) {
|
|||
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) {
|
||||
const videoIdHashPrefix = await getVideoHash(videoId)
|
||||
const requestUrl = `${store.getters.getSponsorBlockUrl}/api/skipSegments/${videoIdHashPrefix}?categories=${JSON.stringify(categories)}`
|
||||
|
|
|
@ -219,41 +219,6 @@ export function buildVTTFileLocally(storyboard, videoLengthSeconds) {
|
|||
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) {
|
||||
FtToastEvents.dispatchEvent(new CustomEvent('toast-open', {
|
||||
detail: {
|
||||
|
|
|
@ -19,6 +19,7 @@ import {
|
|||
faArrowUp,
|
||||
faBars,
|
||||
faBookmark,
|
||||
faCamera,
|
||||
faCheck,
|
||||
faChevronRight,
|
||||
faCircleUser,
|
||||
|
@ -26,6 +27,8 @@ import {
|
|||
faComment,
|
||||
faCommentDots,
|
||||
faCopy,
|
||||
faDisplay,
|
||||
faDownLeftAndUpRightToCenter,
|
||||
faDownload,
|
||||
faEdit,
|
||||
faEllipsisH,
|
||||
|
@ -55,6 +58,7 @@ import {
|
|||
faPlus,
|
||||
faQuestionCircle,
|
||||
faRandom,
|
||||
faRectangleList,
|
||||
faRetweet,
|
||||
faRss,
|
||||
faSatelliteDish,
|
||||
|
@ -72,6 +76,8 @@ import {
|
|||
faTimes,
|
||||
faTimesCircle,
|
||||
faTrash,
|
||||
faTv,
|
||||
faUpRightAndDownLeftFromCenter,
|
||||
faUsers,
|
||||
} from '@fortawesome/free-solid-svg-icons'
|
||||
import {
|
||||
|
@ -98,6 +104,7 @@ library.add(
|
|||
faArrowUp,
|
||||
faBars,
|
||||
faBookmark,
|
||||
faCamera,
|
||||
faCheck,
|
||||
faChevronRight,
|
||||
faCircleUser,
|
||||
|
@ -105,6 +112,8 @@ library.add(
|
|||
faComment,
|
||||
faCommentDots,
|
||||
faCopy,
|
||||
faDisplay,
|
||||
faDownLeftAndUpRightToCenter,
|
||||
faDownload,
|
||||
faEdit,
|
||||
faEllipsisH,
|
||||
|
@ -134,6 +143,7 @@ library.add(
|
|||
faPlus,
|
||||
faQuestionCircle,
|
||||
faRandom,
|
||||
faRectangleList,
|
||||
faRetweet,
|
||||
faRss,
|
||||
faSatelliteDish,
|
||||
|
@ -151,6 +161,8 @@ library.add(
|
|||
faTimes,
|
||||
faTimesCircle,
|
||||
faTrash,
|
||||
faTv,
|
||||
faUpRightAndDownLeftFromCenter,
|
||||
faUsers,
|
||||
|
||||
// brand icons
|
||||
|
|
|
@ -10,6 +10,7 @@ import profiles from './profiles'
|
|||
import settings from './settings'
|
||||
import subscriptions from './subscriptions'
|
||||
import utils from './utils'
|
||||
import player from './player'
|
||||
|
||||
export default {
|
||||
history,
|
||||
|
@ -18,5 +19,6 @@ export default {
|
|||
profiles,
|
||||
settings,
|
||||
subscriptions,
|
||||
utils
|
||||
utils,
|
||||
player
|
||||
}
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
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 = {
|
||||
getCachedPlayerLocales(state) {
|
||||
return state.cachedPlayerLocales
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
}
|
|
@ -298,7 +298,6 @@ const state = {
|
|||
screenshotFilenamePattern: '%Y%M%D-%H%N%S',
|
||||
fetchSubscriptionsAutomatically: true,
|
||||
settingsPassword: '',
|
||||
allowDashAv1Formats: false,
|
||||
useDeArrowTitles: false,
|
||||
useDeArrowThumbnails: false,
|
||||
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);
|
||||
position: relative;
|
||||
|
||||
.upcomingThumbnail {
|
||||
.videoThumbnail {
|
||||
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,40 @@
|
|||
class="videoArea"
|
||||
>
|
||||
<div class="videoAreaMargin">
|
||||
<ft-video-player
|
||||
v-if="!isLoading && !hidePlayer && !isUpcoming"
|
||||
ref="videoPlayer"
|
||||
:dash-src="dashSrc"
|
||||
:source-list="activeSourceList"
|
||||
:audio-tracks="audioTracks"
|
||||
:adaptive-formats="adaptiveFormats"
|
||||
:caption-hybrid-list="captionHybridList"
|
||||
<ft-shaka-video-player
|
||||
v-if="!isLoading && !isUpcoming && !errorMessage"
|
||||
ref="player"
|
||||
:manifest-src="manifestSrc"
|
||||
:manifest-mime-type="manifestMimeType"
|
||||
:legacy-formats="legacyFormats"
|
||||
:start-time="startTimeSeconds"
|
||||
:captions="captions"
|
||||
:storyboard-src="videoStoryboardSrc"
|
||||
:format="activeFormat"
|
||||
:thumbnail="thumbnail"
|
||||
:video-id="videoId"
|
||||
:length-seconds="videoLengthSeconds"
|
||||
:chapters="videoChapters"
|
||||
:current-chapter-index="videoCurrentChapterIndex"
|
||||
:title="videoTitle"
|
||||
:theatre-possible="theatrePossible"
|
||||
:use-theatre-mode="useTheatreMode"
|
||||
class="videoPlayer"
|
||||
:class="{ theatrePlayer: useTheatreMode }"
|
||||
@ready="handleVideoReady"
|
||||
@ended="handleVideoEnded"
|
||||
@error="handleVideoError"
|
||||
@store-caption-list="captionHybridList = $event"
|
||||
@error="handlePlayerError"
|
||||
@loaded="handleVideoLoaded"
|
||||
@timeupdate="!hideChapters && videoChapters.length > 0 ? updateCurrentChapter : null"
|
||||
@toggle-theatre-mode="useTheatreMode = !useTheatreMode"
|
||||
v-on="!hideChapters && videoChapters.length > 0 ? { timeupdate: updateCurrentChapter } : {}"
|
||||
/>
|
||||
<div
|
||||
v-if="!isLoading && isUpcoming"
|
||||
v-if="!isLoading && (isUpcoming || errorMessage)"
|
||||
class="videoPlayer"
|
||||
>
|
||||
<img
|
||||
:src="thumbnail"
|
||||
class="upcomingThumbnail"
|
||||
class="videoThumbnail"
|
||||
alt=""
|
||||
>
|
||||
<div
|
||||
v-if="isUpcoming"
|
||||
class="premiereDate"
|
||||
>
|
||||
<font-awesome-icon
|
||||
|
@ -81,6 +79,25 @@
|
|||
{{ $t("Video.Starting soon, please refresh the page to check again") }}
|
||||
</p>
|
||||
</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>
|
||||
|
@ -149,7 +166,7 @@
|
|||
:class="{ theatreWatchVideo: useTheatreMode }"
|
||||
:channel-thumbnail="channelThumbnail"
|
||||
:channel-name="channelName"
|
||||
:video-player-ready="videoPlayerReady"
|
||||
:video-player-ready="videoPlayerLoaded"
|
||||
:force-state="commentsEnabled ? null : 'noComment'"
|
||||
@timestamp-event="changeTimestamp"
|
||||
/>
|
||||
|
|
|
@ -382,7 +382,6 @@ Settings:
|
|||
أرقام. %i معرف الفيديو. يمكنك أيضا استخدام "\" أو "/" لإنشاء مجلدات فرعية.
|
||||
Enter Fullscreen on Display Rotate: وضع ملء الشاشة عند تدوير الشاشة
|
||||
Skip by Scrolling Over Video Player: تخطي بالتمرير فوق مشغل الفيديو
|
||||
Allow DASH AV1 formats: السماح بتنسيقات DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'إعدادات الخصوصية'
|
||||
Remember History: 'تذّكر سجلّ المشاهدة'
|
||||
|
@ -859,11 +858,6 @@ Video:
|
|||
Loop Playlist: تكرار قائمة التشغيل
|
||||
Starting soon, please refresh the page to check again: سيبدأ قريباً ، يرجى تحديث
|
||||
الصفحة للتحقق مرة أخرى
|
||||
Audio:
|
||||
Best: الأفضل
|
||||
High: عال
|
||||
Medium: متوسط
|
||||
Low: منخفض
|
||||
audio only: الصوت فقط
|
||||
video only: الفيديو فقط
|
||||
Download Video: تحميل الفيديو
|
||||
|
@ -876,7 +870,6 @@ Video:
|
|||
Video has been saved: تم حفظ الفيديو
|
||||
Save Video: احفظ الفيديو
|
||||
Video has been removed from your saved list: تمت إزالة الفيديو من قائمتك المحفوظة
|
||||
translated from English: مترجمة من الإنجليزية
|
||||
Sponsor Block category:
|
||||
music offtopic: موسيقى خارجة عن المألوف
|
||||
interaction: تفاعل
|
||||
|
@ -886,7 +879,6 @@ Video:
|
|||
sponsor: الرعاة
|
||||
filler: حشو
|
||||
recap: الخلاصة
|
||||
Skipped segment: تم تخطي المقطع
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: تكرار قوائم التشغيل
|
||||
|
@ -903,26 +895,6 @@ Video:
|
|||
video: فيديو
|
||||
OpenInTemplate: فتح في {externalPlayer}
|
||||
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: العرض الأولي
|
||||
Scroll to Bottom: انتقل إلى الأسفل
|
||||
|
@ -1073,9 +1045,6 @@ Tooltips:
|
|||
على Mac) ثم انقر فوق الماوس للعودة بسرعة إلى معدل التشغيل الافتراضي (1x ما لم
|
||||
يتم تغييره في الإعدادات).
|
||||
Skip by Scrolling Over Video Player: استخدم عجلة التمرير لتخطي الفيديو بنمط MPV.
|
||||
Allow DASH AV1 formats: قد تبدو تنسيقات DASH AV1 أفضل من تنسيقات DASH H.264. تتطلب
|
||||
تنسيقات DASH AV1 مزيدا من الطاقة للتشغيل! وهي غير متوفرة في جميع مقاطع الفيديو
|
||||
، وفي هذه الحالات سيستخدم المشغل تنسيقات DASH H.264 بدلا من ذلك.
|
||||
Subscription Settings:
|
||||
Fetch Feeds from RSS: عند تفعيلها، سوف يستخدم فريتيوب طريقة RSS بدلًا من طريقته
|
||||
المعتادة لجلب صفحة اشتراكاتك. طريقة RSS أسرع وتتخطى حجب الآي بي IP، لكنها لا
|
||||
|
|
|
@ -277,7 +277,6 @@ Settings:
|
|||
1440p: ''
|
||||
4k: ''
|
||||
8k: ''
|
||||
Allow DASH AV1 formats: ''
|
||||
Screenshot:
|
||||
Enable: ''
|
||||
Format Label: ''
|
||||
|
@ -613,11 +612,6 @@ Video:
|
|||
Download Video: ''
|
||||
video only: ''
|
||||
audio only: ''
|
||||
Audio:
|
||||
Low: ''
|
||||
Medium: ''
|
||||
High: ''
|
||||
Best: ''
|
||||
Published:
|
||||
Jan: ''
|
||||
Feb: ''
|
||||
|
@ -651,9 +645,7 @@ Video:
|
|||
Published on: ''
|
||||
Streamed on: ''
|
||||
Started streaming on: ''
|
||||
translated from English: ''
|
||||
Publicationtemplate: ''
|
||||
Skipped segment: ''
|
||||
Sponsor Block category:
|
||||
sponsor: ''
|
||||
intro: ''
|
||||
|
@ -677,17 +669,6 @@ Video:
|
|||
reversing playlists: ''
|
||||
shuffling 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:
|
||||
#& Sort By
|
||||
|
@ -783,7 +764,6 @@ Tooltips:
|
|||
Force Local Backend for Legacy Formats: ''
|
||||
Proxy Videos Through Invidious: ''
|
||||
Default Video Format: ''
|
||||
Allow DASH AV1 formats: ''
|
||||
Scroll Playback Rate Over Video Player: ''
|
||||
Skip by Scrolling Over Video Player: ''
|
||||
External Player Settings:
|
||||
|
|
|
@ -395,7 +395,6 @@ Settings:
|
|||
Folder Button: Избор на папка
|
||||
Enter Fullscreen on Display Rotate: Режим на цял екран при завъртане на дисплея
|
||||
Skip by Scrolling Over Video Player: Превъртане над видео плейъра
|
||||
Allow DASH AV1 formats: Разрешаване на форматите DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Настройки за поверителност'
|
||||
Remember History: 'Запазване на историята'
|
||||
|
@ -876,11 +875,6 @@ Video:
|
|||
Published on: 'Публикувано на'
|
||||
Publicationtemplate: 'Преди {number} {unit}'
|
||||
#& Videos
|
||||
Audio:
|
||||
Best: Най-добро
|
||||
High: Високо
|
||||
Medium: Средно
|
||||
Low: Ниско
|
||||
audio only: само аудио
|
||||
video only: само видео
|
||||
Download Video: Сваляне на видео
|
||||
|
@ -894,7 +888,6 @@ Video:
|
|||
със запазени
|
||||
Video has been saved: Видеото е запазено
|
||||
Save Video: Запазване на видео
|
||||
translated from English: преведено от английски
|
||||
Sponsor Block category:
|
||||
interaction: Взаимодействие
|
||||
self-promotion: Самореклама
|
||||
|
@ -904,7 +897,6 @@ Video:
|
|||
music offtopic: Музика извън темата
|
||||
recap: Резюме
|
||||
filler: Запълване
|
||||
Skipped segment: Пропуснат сегмент
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: повтаряне на плейлисти
|
||||
|
@ -920,26 +912,6 @@ Video:
|
|||
playlist: плейлист
|
||||
video: видео
|
||||
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 in: Премиери в
|
||||
Premieres: Премиерa
|
||||
|
@ -1076,10 +1048,6 @@ Tooltips:
|
|||
(1x, освен ако не е променена в настройките).
|
||||
Skip by Scrolling Over Video Player: Използване колелцето на мишката за превъртане
|
||||
на видео в стил MPV.
|
||||
Allow DASH AV1 formats: Форматите DASH AV1 може да изглеждат по-добре от DASH
|
||||
H.264. DASH AV1 форматите изискват повече енергия за възпроизвеждане! Те не
|
||||
са налични за всички видеа, като в тези случаи плейърът ще използва DASH H.264
|
||||
вместо тях.
|
||||
General Settings:
|
||||
Region for Trending: Регионът на набиращите популярност дава възможност да се
|
||||
избере страната, за която това се отнася.
|
||||
|
|
|
@ -536,11 +536,6 @@ Video:
|
|||
Published on: 'Publicat el'
|
||||
Publicationtemplate: '{number} {unit} fa'
|
||||
#& Videos
|
||||
Audio:
|
||||
High: Alta
|
||||
Best: Millor
|
||||
Low: Baixa
|
||||
Medium: Mitjana
|
||||
Started streaming on: Retransmissió iniciada el
|
||||
Sponsor Block category:
|
||||
interaction: interacció
|
||||
|
@ -549,7 +544,6 @@ Video:
|
|||
intro: introducció
|
||||
outro: conclusió
|
||||
self-promotion: autopromoció
|
||||
Skipped segment: Segment saltat
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
starting video at offset: començant el vídeo al punt donat
|
||||
|
@ -574,7 +568,6 @@ Video:
|
|||
Download Video: Descàrrega El Vídeo
|
||||
video only: només vídeo
|
||||
Streamed on: Retransmès en directe el
|
||||
translated from English: traduït de l'anglès
|
||||
Videos:
|
||||
#& Sort By
|
||||
Sort By:
|
||||
|
|
|
@ -281,7 +281,6 @@ Settings:
|
|||
1440p: '١٤٤٠p'
|
||||
4k: '٤k'
|
||||
8k: '٨k'
|
||||
Allow DASH AV1 formats: ''
|
||||
Screenshot:
|
||||
Enable: ''
|
||||
Format Label: ''
|
||||
|
@ -627,11 +626,6 @@ Video:
|
|||
Download Video: 'داگرتنی ڤیدیۆ'
|
||||
video only: 'تەنیا ڤیدیۆ'
|
||||
audio only: 'تەنیا دەنگ'
|
||||
Audio:
|
||||
Low: 'نزم'
|
||||
Medium: 'مامناوەند'
|
||||
High: 'بەرز'
|
||||
Best: 'باشترین'
|
||||
Published:
|
||||
Jan: ''
|
||||
Feb: ''
|
||||
|
@ -665,9 +659,7 @@ Video:
|
|||
Published on: 'بڵاوکرایەوە لە'
|
||||
Streamed on: ''
|
||||
Started streaming on: ''
|
||||
translated from English: ''
|
||||
Publicationtemplate: ''
|
||||
Skipped segment: ''
|
||||
Sponsor Block category:
|
||||
sponsor: ''
|
||||
intro: ''
|
||||
|
@ -691,17 +683,6 @@ Video:
|
|||
reversing playlists: ''
|
||||
shuffling 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
|
||||
Unhide Channel: پیشاندانی کەناڵ
|
||||
Hide Channel: شاردنەوەی کەناڵ
|
||||
|
@ -799,7 +780,6 @@ Tooltips:
|
|||
Force Local Backend for Legacy Formats: ''
|
||||
Proxy Videos Through Invidious: ''
|
||||
Default Video Format: ''
|
||||
Allow DASH AV1 formats: ''
|
||||
Scroll Playback Rate Over Video Player: ''
|
||||
Skip by Scrolling Over Video Player: ''
|
||||
External Player Settings:
|
||||
|
|
|
@ -395,7 +395,6 @@ Settings:
|
|||
Folder Button: Vybrat složku
|
||||
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
|
||||
Allow DASH AV1 formats: Povolit formáty DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Nastavení soukromí'
|
||||
Remember History: 'Zapamatovat historii'
|
||||
|
@ -834,11 +833,6 @@ Video:
|
|||
Download Video: 'Stáhnout Video'
|
||||
video only: 'pouze video'
|
||||
audio only: 'pouze zvuk'
|
||||
Audio:
|
||||
Low: 'Nízká'
|
||||
Medium: 'Střední'
|
||||
High: 'Vysoká'
|
||||
Best: 'Nejlepší'
|
||||
Published:
|
||||
Jan: 'Leden'
|
||||
Feb: 'Únor'
|
||||
|
@ -879,7 +873,6 @@ Video:
|
|||
Save Video: Uložit video
|
||||
Video has been removed from your saved list: Video bylo odstraněno z vašeho uloženého
|
||||
seznamu
|
||||
translated from English: přeloženo z angličtiny
|
||||
Sponsor Block category:
|
||||
music offtopic: Není hudba
|
||||
interaction: Interakce
|
||||
|
@ -889,7 +882,6 @@ Video:
|
|||
sponsor: Sponzor
|
||||
recap: Shrnutí
|
||||
filler: Výplň
|
||||
Skipped segment: Přeskočen segment
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
opening specific video in a playlist (falling back to opening the video): Otevření
|
||||
|
@ -906,18 +898,6 @@ Video:
|
|||
video: video
|
||||
OpenInTemplate: Otevřít v {externalPlayer}
|
||||
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: Premiéra
|
||||
Show Super Chat Comment: Zobrazit komentář Super Chat
|
||||
|
@ -1054,9 +1034,6 @@ Tooltips:
|
|||
není změněná v nastavení).
|
||||
Skip by Scrolling Over Video Player: Pomocí rolovacího kolečka můžete video přeskakovat
|
||||
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:
|
||||
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
|
||||
|
|
|
@ -284,7 +284,6 @@ Settings:
|
|||
1440p: '1440p'
|
||||
4k: '4k'
|
||||
8k: '8k'
|
||||
Allow DASH AV1 formats: ''
|
||||
Screenshot:
|
||||
Enable: 'Galluogi Sgrinlun'
|
||||
Format Label: 'Fformat Sgrinluniau'
|
||||
|
@ -631,11 +630,6 @@ Video:
|
|||
Download Video: 'Lawrlwytho Fideo'
|
||||
video only: 'fideo yn unig'
|
||||
audio only: 'sain yn unig'
|
||||
Audio:
|
||||
Low: 'Isel'
|
||||
Medium: 'Canolig'
|
||||
High: 'Uwch'
|
||||
Best: 'Gorau'
|
||||
Published:
|
||||
Jan: 'Ion'
|
||||
Feb: 'Chw'
|
||||
|
@ -669,9 +663,7 @@ Video:
|
|||
Published on: ''
|
||||
Streamed on: ''
|
||||
Started streaming on: ''
|
||||
translated from English: ''
|
||||
Publicationtemplate: ''
|
||||
Skipped segment: ''
|
||||
Sponsor Block category:
|
||||
sponsor: 'Noddwr'
|
||||
intro: 'Cyflwyniad'
|
||||
|
@ -695,17 +687,6 @@ Video:
|
|||
reversing playlists: ''
|
||||
shuffling 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:
|
||||
#& Sort By
|
||||
|
@ -801,7 +782,6 @@ Tooltips:
|
|||
Force Local Backend for Legacy Formats: ''
|
||||
Proxy Videos Through Invidious: ''
|
||||
Default Video Format: ''
|
||||
Allow DASH AV1 formats: ''
|
||||
Scroll Playback Rate Over Video Player: ''
|
||||
Skip by Scrolling Over Video Player: ''
|
||||
External Player Settings:
|
||||
|
|
|
@ -363,7 +363,6 @@ Settings:
|
|||
Scroll Playback Rate Over Video Player: Scroll Afspilningshastighed i Videoafspiller
|
||||
Scroll Volume Over Video Player: Scroll Lydstyrke i Videoafspiller
|
||||
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: 'Privatlivsindstillinger'
|
||||
Remember History: 'Husk Historik'
|
||||
|
@ -803,28 +802,10 @@ Video:
|
|||
Save Video: Gem Video
|
||||
Started streaming on: Begyndte at sende
|
||||
Streamed on: Sendt
|
||||
Audio:
|
||||
Best: Bedst
|
||||
High: Høj
|
||||
Medium: Middel
|
||||
Low: Lav
|
||||
audio only: kun lyd
|
||||
video only: kun video
|
||||
Download Video: Hent Video
|
||||
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:
|
||||
intro: Intro
|
||||
sponsor: Sponsor
|
||||
|
@ -849,7 +830,6 @@ Video:
|
|||
video: video
|
||||
playlist: playliste
|
||||
UnsupportedActionTemplate: '{externalPlayer} understøtter ikke: {action}'
|
||||
Skipped segment: Sprunget over segment
|
||||
Hide Channel: Skjul Kanal
|
||||
Unhide Channel: Vis Kanal
|
||||
'Live Chat is unavailable for this stream. It may have been disabled by the uploader.': Live
|
||||
|
|
|
@ -398,7 +398,6 @@ Settings:
|
|||
Unterordner zu erstellen.
|
||||
Enter Fullscreen on Display Rotate: Beim Drehen des Bildschirms zu Vollbild wechseln
|
||||
Skip by Scrolling Over Video Player: Überspringen durch Scrollen über den Videoabspieler
|
||||
Allow DASH AV1 formats: DASH AV1-Formate zulassen
|
||||
Subscription Settings:
|
||||
Subscription Settings: Abo-Einstellungen
|
||||
Hide Videos on Watch: Videos bei Wiedergabe ausblenden
|
||||
|
@ -854,11 +853,6 @@ Video:
|
|||
Loop Playlist: Wiedergabeliste wiederholen
|
||||
Starting soon, please refresh the page to check again: Es beginnt bald, bitte aktualisiere
|
||||
die Seite, um es erneut zu überprüfen
|
||||
Audio:
|
||||
Best: Am besten
|
||||
High: Hoch
|
||||
Medium: Mittel
|
||||
Low: Niedrig
|
||||
audio only: nur Audio
|
||||
video only: nur Video
|
||||
Download Video: Video herunterladen
|
||||
|
@ -872,7 +866,6 @@ Video:
|
|||
Videos entfernt
|
||||
Video has been saved: Video wurde gespeichert
|
||||
Save Video: Video speichern
|
||||
translated from English: aus dem Englischen übersetzt
|
||||
Sponsor Block category:
|
||||
music offtopic: Musik Offtopic
|
||||
interaction: Interaktion
|
||||
|
@ -882,7 +875,6 @@ Video:
|
|||
sponsor: Sponsor
|
||||
recap: Rekapitulation
|
||||
filler: Füller
|
||||
Skipped segment: Segment übersprungen
|
||||
External Player:
|
||||
OpenInTemplate: In {externalPlayer} öffnen
|
||||
Unsupported Actions:
|
||||
|
@ -899,26 +891,6 @@ Video:
|
|||
playlist: Wiedergabeliste
|
||||
video: Video
|
||||
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: Premiere
|
||||
Show Super Chat Comment: Super-Chat-Kommentar anzeigen
|
||||
|
@ -1132,10 +1104,6 @@ Tooltips:
|
|||
(1x, sofern sie nicht in den Einstellungen geändert wurde).
|
||||
Skip by Scrolling Over Video Player: Verwende das Scrollrad, um durch das Video
|
||||
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:
|
||||
Custom External Player Arguments: Alle benutzerdefinierten Befehlszeilenargumente,
|
||||
getrennt durch Semikolon (';'), die an den externen Abspieler übergeben werden
|
||||
|
|
|
@ -303,7 +303,6 @@ Settings:
|
|||
Βίντεο
|
||||
Enter Fullscreen on Display Rotate: Μετάβαση στην Πλήρη Οθόνη κατά την Περιστροφή
|
||||
Οθόνης
|
||||
Allow DASH AV1 formats: Να επιτρέπονται οι μορφές DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Ρυθμίσεις απορρήτου'
|
||||
Remember History: 'Διατήρηση ιστορικού'
|
||||
|
@ -778,11 +777,6 @@ Video:
|
|||
Published on: 'Δημοσιεύθηκε στις'
|
||||
Publicationtemplate: 'δημοσιεύθηκε πριν από {number} {unit}'
|
||||
#& Videos
|
||||
Audio:
|
||||
Best: Καλύτερο
|
||||
High: Υψηλή
|
||||
Medium: Μεσαία
|
||||
Low: Χαμηλή
|
||||
Starting soon, please refresh the page to check again: Έναρξη σύντομα, παρακαλούμε
|
||||
κάντε ανανέωση της σελίδας για επανέλεγχο
|
||||
audio only: μόνο ήχος
|
||||
|
@ -798,7 +792,6 @@ Video:
|
|||
λίστα σας
|
||||
Video has been saved: Το βίντεο έχει αποθηκευτεί
|
||||
Save Video: Αποθήκευση βίντεο
|
||||
translated from English: μεταφράστηκε από τα Αγγλικά
|
||||
Sponsor Block category:
|
||||
intro: Εισαγωγή
|
||||
interaction: Αλληλεπίδραση
|
||||
|
@ -825,26 +818,6 @@ Video:
|
|||
OpeningTemplate: Άνοιγμα {videoOrPlaylist} σε {externalPlayer}...
|
||||
UnsupportedActionTemplate: 'Το {externalPlayer} δεν υποστηρίζει: {action}'
|
||||
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
|
||||
Scroll to Bottom: Κύλιση προς τα Κάτω
|
||||
Premieres: Πρεμιέρες
|
||||
|
@ -994,10 +967,6 @@ Tooltips:
|
|||
ρυθμό αναπαραγωγής (1x εκτός αν έχει αλλάξει στις ρυθμίσεις).
|
||||
Skip by Scrolling Over Video Player: Χρησιμοποιήστε τον τροχό κύλισης για να παρακάμψετε
|
||||
το βίντεο, στυλ MPV.
|
||||
Allow DASH AV1 formats: Οι μορφές DASH AV1 μπορεί να φαίνονται καλύτερες από τις
|
||||
μορφές DASH H.264. Οι μορφές DASH AV1 απαιτούν περισσότερη ισχύ για την αναπαραγωγή!
|
||||
Δεν είναι διαθέσιμα σε όλα τα βίντεο, σε αυτές τις περιπτώσεις το πρόγραμμα
|
||||
αναπαραγωγής θα χρησιμοποιήσει τις μορφές DASH H.264.
|
||||
General Settings:
|
||||
Region for Trending: Η περιοχή των τάσεων σας επιτρέπει να επιλέξετε τα δημοφιλή
|
||||
βίντεο της χώρας που θέλετε να εμφανίζονται.
|
||||
|
|
|
@ -384,7 +384,6 @@ Settings:
|
|||
1440p: 1440p
|
||||
4k: 4k
|
||||
8k: 8k
|
||||
Allow DASH AV1 formats: Allow DASH AV1 formats
|
||||
Screenshot:
|
||||
Enable: Enable Screenshot
|
||||
Format Label: Screenshot Format
|
||||
|
@ -782,11 +781,6 @@ Video:
|
|||
Download Video: Download Video
|
||||
video only: video only
|
||||
audio only: audio only
|
||||
Audio:
|
||||
Low: Low
|
||||
Medium: Medium
|
||||
High: High
|
||||
Best: Best
|
||||
Published:
|
||||
Jan: Jan
|
||||
Feb: Feb
|
||||
|
@ -820,9 +814,7 @@ Video:
|
|||
Published on: Published on
|
||||
Streamed on: Streamed on
|
||||
Started streaming on: Started streaming on
|
||||
translated from English: translated from English
|
||||
Publicationtemplate: '{number} {unit} ago'
|
||||
Skipped segment: Skipped segment
|
||||
Sponsor Block category:
|
||||
sponsor: Sponsor
|
||||
intro: Intro
|
||||
|
@ -846,17 +838,29 @@ Video:
|
|||
reversing playlists: reversing playlists
|
||||
shuffling playlists: shuffling playlists
|
||||
looping playlists: looping playlists
|
||||
Stats:
|
||||
Video statistics are not available for legacy videos: Video statistics are not available for legacy videos
|
||||
Video ID: Video ID
|
||||
Resolution: Resolution
|
||||
Player Dimensions: Player Dimensions
|
||||
Bitrate: Bitrate
|
||||
Volume: Volume
|
||||
Bandwidth: Bandwidth
|
||||
Buffered: Buffered
|
||||
Dropped / Total Frames: Dropped / Total Frames
|
||||
Mimetype: Mimetype
|
||||
Player:
|
||||
TranslatedCaptionTemplate: '{language} (translated from "{originalLanguage}")'
|
||||
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})'
|
||||
Skipped segment: 'Skipped {segmentCategory} segment'
|
||||
#& Videos
|
||||
Videos:
|
||||
#& Sort By
|
||||
|
@ -896,6 +900,8 @@ Change Format:
|
|||
this video
|
||||
Audio formats are not available for this video: Audio formats are not available
|
||||
for this video
|
||||
Legacy formats are not available for this video: Legacy formats are not available
|
||||
for this video
|
||||
Share:
|
||||
Share Video: Share Video
|
||||
Share Channel: Share Channel
|
||||
|
@ -979,9 +985,6 @@ Tooltips:
|
|||
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
|
||||
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
|
||||
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
|
||||
|
|
|
@ -387,7 +387,6 @@ Settings:
|
|||
Ask Path: Ask for Save Folder
|
||||
File Name Label: Filename pattern
|
||||
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: External Player
|
||||
|
@ -850,11 +849,6 @@ Video:
|
|||
#& Videos
|
||||
Started streaming on: Started streaming on
|
||||
Streamed on: Streamed on
|
||||
Audio:
|
||||
Best: Best
|
||||
High: High
|
||||
Medium: Medium
|
||||
Low: Low
|
||||
audio only: audio only
|
||||
video only: video only
|
||||
Download Video: Download Video
|
||||
|
@ -866,7 +860,6 @@ Video:
|
|||
list
|
||||
Video has been saved: Video has been saved
|
||||
Save Video: Save Video
|
||||
translated from English: translated from English
|
||||
Sponsor Block category:
|
||||
music offtopic: Music offtopic
|
||||
interaction: Interaction
|
||||
|
@ -876,7 +869,6 @@ Video:
|
|||
sponsor: Sponsor
|
||||
recap: Recap
|
||||
filler: Filler
|
||||
Skipped segment: Skipped segment
|
||||
External Player:
|
||||
OpenInTemplate: Open in {externalPlayer}
|
||||
video: video
|
||||
|
@ -893,26 +885,6 @@ Video:
|
|||
shuffling playlists: shuffling playlists
|
||||
looping playlists: looping playlists
|
||||
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: Premieres
|
||||
Show Super Chat Comment: Show Super Chat comment
|
||||
|
@ -924,6 +896,29 @@ Video:
|
|||
Hide Channel: Hide channel
|
||||
Unhide Channel: Show channel
|
||||
More Options: More options
|
||||
Player:
|
||||
TranslatedCaptionTemplate: '{language} (translated from ‘{originalLanguage}’)'
|
||||
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})'
|
||||
Skipped segment: 'Skipped {segmentCategory} segment'
|
||||
Videos:
|
||||
#& Sort By
|
||||
Sort By:
|
||||
|
@ -1046,9 +1041,6 @@ Tooltips:
|
|||
rate (1x unless it has been changed in the settings).
|
||||
Skip by Scrolling Over Video Player: Use the scroll wheel to skip through the
|
||||
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:
|
||||
Region for Trending: The region of trends allows you to pick which country’s trending
|
||||
videos you want to have displayed.
|
||||
|
|
|
@ -540,29 +540,11 @@ Video:
|
|||
Reverse Playlist: Lista de reproducción invertida
|
||||
Shuffle Playlist: Lista de reproducción aleatoria
|
||||
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
|
||||
de guardado
|
||||
Video has been saved: Video guardado
|
||||
Starting soon, please refresh the page to check again: Empezará pronto, por favor
|
||||
actualice la página para volver a revisar
|
||||
Audio:
|
||||
Best: Máxima
|
||||
Low: Baja
|
||||
Medium: Media
|
||||
High: Alta
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
reversing playlists: revirtiendo listas
|
||||
|
@ -595,7 +577,6 @@ Video:
|
|||
Copy Invidious Channel Link: Copiar link del canal en Invidious
|
||||
Copy YouTube Channel Link: Copiar link del canal en YouTube
|
||||
Premieres on: En estreno
|
||||
Skipped segment: Omitida esta parte
|
||||
Download Video: Descargar video
|
||||
Videos:
|
||||
#& Sort By
|
||||
|
|
|
@ -397,7 +397,6 @@ Settings:
|
|||
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
|
||||
de vídeo
|
||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Ajustes de Privacidad'
|
||||
Remember History: 'Recordar historial'
|
||||
|
@ -880,11 +879,6 @@ Video:
|
|||
Loop Playlist: Reproducción en bucle
|
||||
Starting soon, please refresh the page to check again: Comenzará en breve. Por favor,
|
||||
recarga la página para comprobarlo
|
||||
Audio:
|
||||
Best: Máxima
|
||||
High: Alta
|
||||
Medium: Media
|
||||
Low: Baja
|
||||
audio only: audio únicamente
|
||||
video only: vídeo únicamente
|
||||
Download Video: Descargar vídeo
|
||||
|
@ -898,7 +892,6 @@ Video:
|
|||
de guardados
|
||||
Video has been saved: El vídeo ha sido guardado
|
||||
Save Video: Guardar el vídeo
|
||||
translated from English: traducido del inglés
|
||||
Sponsor Block category:
|
||||
music offtopic: No relacionado con la música
|
||||
interaction: Interacción
|
||||
|
@ -908,7 +901,6 @@ Video:
|
|||
sponsor: Patrocinador
|
||||
recap: Recapitulación
|
||||
filler: Relleno
|
||||
Skipped segment: Segmento saltado
|
||||
External Player:
|
||||
playlist: lista de reproducción
|
||||
video: vídeo
|
||||
|
@ -925,26 +917,6 @@ Video:
|
|||
UnsupportedActionTemplate: '{externalPlayer} no soporta: {action}'
|
||||
OpeningTemplate: Abriendo {videoOrPlaylist} en {externalPlayer}...
|
||||
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: Estrenos
|
||||
Show Super Chat Comment: Mostrar los comentarios del Super Chat
|
||||
|
@ -1101,10 +1073,6 @@ Tooltips:
|
|||
ajustes).
|
||||
Skip by Scrolling Over Video Player: Use la rueda de desplazamiento para saltar
|
||||
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:
|
||||
Region for Trending: La región de las tendencias permite ver los vídeos más populares
|
||||
en un país determinado.
|
||||
|
|
|
@ -274,7 +274,6 @@ Settings:
|
|||
Scroll Volume Over Video Player: Barra de volumen en el reproductor
|
||||
Skip by Scrolling Over Video Player: Saltar Deslizando sobre el Reproductor de
|
||||
Video
|
||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
||||
Scroll Playback Rate Over Video Player: Acelerar video con la rueda del mouse
|
||||
Fast-Forward / Rewind Interval: Período de Avance Rápido / Retroceso
|
||||
Video Playback Rate Interval: Intervalo entre velocidades del video
|
||||
|
@ -448,10 +447,6 @@ Channel:
|
|||
Tags:
|
||||
Search for: Buscar por «{tag}»
|
||||
Details: Detalles
|
||||
Video:
|
||||
translated from English: traducido del inglés
|
||||
Stats:
|
||||
Mimetype: Tipo de medio
|
||||
Yes: 'Sí'
|
||||
No: 'No'
|
||||
A new blog is now available, {blogTitle}. Click to view more: 'Un nuevo blog está
|
||||
|
|
|
@ -388,7 +388,6 @@ Settings:
|
|||
%s 2-numbriline videosekund. %t 3-numbriline video millisekund. %i video tunnus.
|
||||
Alamkaustade loomiseks võid kasutada ka „\“ või „/“.
|
||||
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
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Privaatsuse seadistused'
|
||||
|
@ -817,14 +816,8 @@ Video:
|
|||
videote loendist
|
||||
Video has been saved: Video on salvestatud
|
||||
Save Video: Salvesta video
|
||||
translated from English: tõlgitud inglise keelest
|
||||
Started streaming on: Voogedastus algas
|
||||
Streamed on: Voogedastatud
|
||||
Audio:
|
||||
High: Kõrge kvaliteet
|
||||
Medium: Keskmine kvaliteet
|
||||
Low: Madal kvaliteet
|
||||
Best: Parim kvaliteet
|
||||
audio only: vaid helivoog
|
||||
video only: vaid videovoog
|
||||
Download Video: Laadi video alla
|
||||
|
@ -837,7 +830,6 @@ Video:
|
|||
sponsor: Sponsor
|
||||
filler: Täitevideo
|
||||
recap: Kokkuvõte
|
||||
Skipped segment: Vahelejäetud lõik
|
||||
External Player:
|
||||
UnsupportedActionTemplate: 'Rakenduses {externalPlayer} puudub tugi: {action}'
|
||||
OpeningTemplate: Avan {videoOrPlaylist} {externalPlayer} rakendusega...
|
||||
|
@ -854,26 +846,6 @@ Video:
|
|||
setting a playback rate: taasesituskiiruse määramine
|
||||
starting video at offset: video esitamine ajanihkega
|
||||
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
|
||||
Show Super Chat Comment: Näita Super Chat'i kommentaare
|
||||
Scroll to Bottom: Keri alla
|
||||
|
@ -1039,10 +1011,6 @@ Tooltips:
|
|||
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
|
||||
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
|
||||
hiire ratast.
|
||||
Distraction Free Settings:
|
||||
|
|
|
@ -393,7 +393,6 @@ Settings:
|
|||
Video Playback Rate Interval: Bideo Erreprodukzio-tasa tartea
|
||||
Skip by Scrolling Over Video Player: Saltatu bideo-erreproduzitzailean korrituz
|
||||
Enter Fullscreen on Display Rotate: Sartu pantaila osoko pantaila biratu pantailan
|
||||
Allow DASH AV1 formats: Baimendu DASH AV1 formatuak
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Pribatutasunari buruzko ezarpenak'
|
||||
Remember History: 'Historikoa oroitu'
|
||||
|
@ -796,11 +795,6 @@ Video:
|
|||
Download Video: 'Bideoa deskargatu'
|
||||
video only: 'Bideoa soilik'
|
||||
audio only: 'Audioa soilik'
|
||||
Audio:
|
||||
Low: 'Eskasa'
|
||||
Medium: 'Erdi-mailakoa'
|
||||
High: 'Altua'
|
||||
Best: 'Onena'
|
||||
Published:
|
||||
Jan: 'Urtarrila'
|
||||
Feb: 'Otsaila'
|
||||
|
@ -834,7 +828,6 @@ Video:
|
|||
Published on: 'Noiz argitaratua'
|
||||
Streamed on: 'Noiz zuzenean emana'
|
||||
Started streaming on: 'Noiz hasi zen zuzenekoa'
|
||||
translated from English: 'Ingelesetik itzulia'
|
||||
Publicationtemplate: 'Duela {number} {unit}'
|
||||
#& Videos
|
||||
External Player:
|
||||
|
@ -852,18 +845,6 @@ Video:
|
|||
OpeningTemplate: '{videoOrPlaylist} irekitzen {externalPlayer}-an...'
|
||||
UnsupportedActionTemplate: '{externalPlayer}-k ez du onartzen: {action}'
|
||||
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:
|
||||
music offtopic: Gaiaz kanpoko musika
|
||||
interaction: Elkarrekintza
|
||||
|
@ -873,7 +854,6 @@ Video:
|
|||
recap: Laburpen
|
||||
filler: Betegarria
|
||||
intro: Sarrera
|
||||
Skipped segment: Saltatu egin da segmentua
|
||||
Premieres on: Estreinaldiak
|
||||
Hide Channel: Kanala ezkutatu
|
||||
Unhide Channel: Kanala erakutsi
|
||||
|
@ -1005,10 +985,6 @@ Tooltips:
|
|||
aldaketarik egin ez bada).
|
||||
Skip by Scrolling Over Video Player: Erabili korritze-gurpila bideoa saltatzeko,
|
||||
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:
|
||||
Fetch Feeds from RSS: 'Posible denean, Freetube-k bere lehenetsitako metodoa erabili
|
||||
beharrean RSS-ak baliatuko ditu zure harpidetzen jariora konektatzeko. RSS arinagoa
|
||||
|
|
|
@ -273,7 +273,6 @@ Settings:
|
|||
Folder Label: پوشه اسکرین شات
|
||||
Folder Button: پوشه را انتخاب کنید
|
||||
Skip by Scrolling Over Video Player: با پیمایش روی پخشکننده ویدیو از آن بگذرید
|
||||
Allow DASH AV1 formats: فرمتهای DASH AV1 را مجاز کنید
|
||||
External Player Settings:
|
||||
External Player Settings: 'تنظیمات پخش کننده خارجی'
|
||||
External Player: 'پخش کننده خارجی'
|
||||
|
@ -564,12 +563,10 @@ Video:
|
|||
Ago: پیش
|
||||
Upcoming: اولین نمایش در
|
||||
In less than a minute: در کمتر از یک دقیقه
|
||||
translated from English: ترجمه شده از انگلیسی
|
||||
Copy Invidious Link: لینک Invidious را کپی کنید
|
||||
Play Previous Video: پخش ویدیوی قبلی
|
||||
Autoplay: پخش خودکار
|
||||
Started streaming on: پخش جریانی را شروع کرد
|
||||
Skipped segment: بخش رد شد
|
||||
'Chat is disabled or the Live Stream has ended.': چت غیرفعال است یا پخش زنده به
|
||||
پایان رسیده است.
|
||||
Copy YouTube Channel Link: لینک کانال یوتیوب را کپی کنید
|
||||
|
@ -590,11 +587,6 @@ Video:
|
|||
Live Now: زنده هم اکنون
|
||||
Save Video: ذخیره ویدیو
|
||||
Open in Invidious: در Invidious باز کنید
|
||||
Audio:
|
||||
Medium: متوسط
|
||||
Best: بهترین
|
||||
High: عالی
|
||||
Low: کم
|
||||
Video has been removed from your saved list: ویدیو از لیست ذخیره شده شما حذف شده
|
||||
است
|
||||
Download Video: دانلود ویدیو
|
||||
|
@ -618,18 +610,6 @@ Video:
|
|||
audio only: فقط صدا
|
||||
Publicationtemplate: '{number} {unit} پیش'
|
||||
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.': گفتگوی
|
||||
زنده در حال حاضر با Invidious API پشتیبانی نمی شود. اتصال مستقیم به YouTube مورد
|
||||
نیاز است.
|
||||
|
@ -670,10 +650,6 @@ Tooltips:
|
|||
Player Settings:
|
||||
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: در حالی که مکان نما روی ویدیو است، کلید
|
||||
کنترل (کلید فرمان در مک) را فشار داده و نگه دارید و چرخ ماوس را به جلو یا عقب
|
||||
ببرید تا سرعت پخش را کنترل کنید. کلید کنترل (کلید فرمان در مک) را فشار داده
|
||||
|
|
|
@ -349,7 +349,6 @@ Settings:
|
|||
"\" tai "/" luodaksesi alikansioita.
|
||||
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
|
||||
Allow DASH AV1 formats: Salli DASH AV1 -formaatit
|
||||
Subscription Settings:
|
||||
Subscription Settings: 'Tilausasetukset'
|
||||
Hide Videos on Watch: 'Piilota katsotut videot'
|
||||
|
@ -758,11 +757,6 @@ Video:
|
|||
Loop Playlist: Kierrätä soittolistaa
|
||||
Starting soon, please refresh the page to check again: Hetki pieni, päivitä sivu
|
||||
uudelleen
|
||||
Audio:
|
||||
Best: Paras
|
||||
High: Korkea
|
||||
Medium: Keskitaso
|
||||
Low: Alhainen
|
||||
audio only: vain ääni
|
||||
video only: vain video
|
||||
Download Video: Lataa video
|
||||
|
@ -796,31 +790,10 @@ Video:
|
|||
sponsor: Sponsori
|
||||
recap: Kertaus
|
||||
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
|
||||
luettelostasi
|
||||
Video has been saved: Video on tallennettu
|
||||
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: Ensilähetykset
|
||||
Show Super Chat Comment: Näytä Super Chat -kommentti
|
||||
|
@ -1013,10 +986,6 @@ Tooltips:
|
|||
painettuna ja paina hiiren vasenta näppäintä.
|
||||
Skip by Scrolling Over Video Player: Käytä vieritysrullaa videon selaamiseen,
|
||||
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:
|
||||
Custom External Player Arguments: Kaikki ne omavalintaiset komentorivin määreet,
|
||||
puolipisteillä eroteltuina (';'), jotka haluat siirtää eteenpäin ulkoiselle
|
||||
|
|
|
@ -411,7 +411,6 @@ Settings:
|
|||
Folder Label: Dossier de capture d'écran
|
||||
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
|
||||
Allow DASH AV1 formats: Autoriser les formats DASH AV1
|
||||
Subscription Settings:
|
||||
Subscription Settings: 'Paramètres des abonnements'
|
||||
Hide Videos on Watch: 'Masquer les vidéos visionnées'
|
||||
|
@ -870,11 +869,6 @@ Video:
|
|||
Loop Playlist: Liste de lecture en boucle
|
||||
Starting soon, please refresh the page to check again: Débute prochainement, veuillez
|
||||
actualiser la page pour vérifier à nouveau
|
||||
Audio:
|
||||
Best: Meilleure
|
||||
Medium: Normale
|
||||
Low: Basse
|
||||
High: Haute
|
||||
audio only: audio uniquement
|
||||
video only: vidéo uniquement
|
||||
Download Video: Télécharger la vidéo
|
||||
|
@ -888,7 +882,6 @@ Video:
|
|||
enregistrée
|
||||
Video has been saved: La vidéo a été enregistrée
|
||||
Save Video: Enregistrer la vidéo
|
||||
translated from English: traduit de l'anglais
|
||||
Sponsor Block category:
|
||||
music offtopic: Musique hors sujet
|
||||
interaction: Interaction
|
||||
|
@ -898,7 +891,6 @@ Video:
|
|||
intro: Intro
|
||||
filler: Bouche-trou
|
||||
recap: Récap
|
||||
Skipped segment: Segment ignoré
|
||||
External Player:
|
||||
playlist: liste de lecture
|
||||
video: vidéo
|
||||
|
@ -915,26 +907,6 @@ Video:
|
|||
UnsupportedActionTemplate: '{externalPlayer} non pris en charge : {action}'
|
||||
OpeningTemplate: Ouverture de {videoOrPlaylist} en {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 in: Première dans
|
||||
Premieres: Avant-première
|
||||
|
@ -1146,10 +1118,6 @@ Tooltips:
|
|||
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
|
||||
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:
|
||||
Invidious Instance: L'instance Invidious à laquelle FreeTube se connectera pour
|
||||
les appels API.
|
||||
|
|
|
@ -288,7 +288,6 @@ Settings:
|
|||
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
|
||||
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: 'Axustes de privacidade'
|
||||
Remember History: 'Lembrar histórico'
|
||||
|
@ -665,11 +664,6 @@ Video:
|
|||
Download Video: 'Descargar vídeo'
|
||||
video only: 'Só vídeo'
|
||||
audio only: 'Só audio'
|
||||
Audio:
|
||||
Low: 'Baixa'
|
||||
Medium: 'Media'
|
||||
High: 'Alta'
|
||||
Best: 'Máxima'
|
||||
Published:
|
||||
Jan: 'Xan'
|
||||
Feb: 'Feb'
|
||||
|
@ -729,23 +723,9 @@ Video:
|
|||
sponsor: Patrocinador
|
||||
recap: Recapitulación
|
||||
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 saved: Gardouse o 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: Estreos
|
||||
Show Super Chat Comment: Mostralos comentarios do Super Chat
|
||||
|
@ -867,10 +847,6 @@ Tooltips:
|
|||
que o modificase na configuración).
|
||||
Skip by Scrolling Over Video Player: Usala roda de desprazamento para saltalo
|
||||
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:
|
||||
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
|
||||
|
|
|
@ -289,7 +289,6 @@ Settings:
|
|||
ב־3 ספרות. %i מזהה הסרטון. אפשר להשתמש גם ב־„/” או ב־„\” כדי ליצור תת־תיקיות.
|
||||
Enter Fullscreen on Display Rotate: מעבר למסך מלא עם סיבוב התצוגה
|
||||
Skip by Scrolling Over Video Player: אפשר לדלג על ידי גלילה על נגן הווידאו
|
||||
Allow DASH AV1 formats: לאפשר תצורות DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'הגדרות פרטיות'
|
||||
Remember History: 'לזכור את היסטוריית הצפייה'
|
||||
|
@ -723,11 +722,6 @@ Video:
|
|||
Published on: 'פורסם'
|
||||
Publicationtemplate: 'לפני {number} {unit}'
|
||||
#& Videos
|
||||
Audio:
|
||||
Best: איכות הכי טובה
|
||||
High: איכות גבוהה
|
||||
Medium: איכות בינונית
|
||||
Low: איכות נמוכה
|
||||
audio only: שמע בלבד
|
||||
video only: סרטון בלבד
|
||||
Download Video: להוריד סרטון
|
||||
|
@ -740,7 +734,6 @@ Video:
|
|||
Video has been removed from your saved list: הסרטון הוסר מרשימת השמורים שלך
|
||||
Video has been saved: סרטון נשמר
|
||||
Save Video: שמירת סרטון
|
||||
translated from English: תורגם מאנגלית
|
||||
Premieres on: שידור הבכורה ב־
|
||||
Sponsor Block category:
|
||||
outro: סיום
|
||||
|
@ -766,26 +759,6 @@ Video:
|
|||
looping playlists: לולאה על רשימות נגינה
|
||||
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: בכורות
|
||||
Scroll to Bottom: גלילה לתחתית
|
||||
|
@ -919,9 +892,6 @@ Tooltips:
|
|||
בהגדרות).
|
||||
Skip by Scrolling Over Video Player: ניתן להשתמש בגלגלת כדי לדלג בתוך הסרטון,
|
||||
כמו ב־MPV.
|
||||
Allow DASH AV1 formats: תסדירי DASH AV1 עשויים להיראות טוב יותר מתסדירי DASH H.264.
|
||||
תסדירי DASH AV1 דורשים יותר חשמל כדי לנגן! הם אינם זמינים בכל הסרטונים, במקרים
|
||||
האלה הנגן ישתמש בתסדירי DASH H.264 במקום.
|
||||
Subscription Settings:
|
||||
Fetch Feeds from RSS: כאשר אפשרות זו פעילה. FreeTube ישתמש ב־RSS במקום בשיטת ברירת
|
||||
המחדל לאיסוף הזנת המינויים שלך. RSS היא שיטה מהירה יותר ומונעת חסימת IP אבל
|
||||
|
|
|
@ -385,7 +385,6 @@ Settings:
|
|||
Enter Fullscreen on Display Rotate: Koristi cjeloekranski prikaz pri okretanju
|
||||
ekrana
|
||||
Skip by Scrolling Over Video Player: Preskoči pomicanjem preko video playera
|
||||
Allow DASH AV1 formats: Dozvoli DASH AV1 formate
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Postavke privatnosti'
|
||||
Remember History: 'Zapamti povijest'
|
||||
|
@ -869,11 +868,6 @@ Video:
|
|||
Loop Playlist: Ponavljaj zbirku
|
||||
Starting soon, please refresh the page to check again: Uskoro počinje. Aktualiziraj
|
||||
stranicu za ponovnu provjeru
|
||||
Audio:
|
||||
Best: Najbolja
|
||||
High: Visoka
|
||||
Medium: Srednja
|
||||
Low: Niska
|
||||
audio only: samo audiosnimku
|
||||
video only: samo video
|
||||
Download Video: Preuzmi video
|
||||
|
@ -887,7 +881,6 @@ Video:
|
|||
spremljenih
|
||||
Video has been saved: Video je spremljen
|
||||
Save Video: Spremi video
|
||||
translated from English: prevedeno iz engleskog
|
||||
Sponsor Block category:
|
||||
music offtopic: Druga vrsta glazbe
|
||||
interaction: Interakcija
|
||||
|
@ -897,7 +890,6 @@ Video:
|
|||
sponsor: Sponzor
|
||||
recap: Rekapitulacija
|
||||
filler: Dodatni materijal
|
||||
Skipped segment: Preskočeni segment
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
starting video at offset: pokretanje videa pri odmaku
|
||||
|
@ -914,26 +906,6 @@ Video:
|
|||
video: video
|
||||
OpenInTemplate: Otvori u {externalPlayer}
|
||||
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: Premijere
|
||||
Show Super Chat Comment: Prikaži Super Chat komentar
|
||||
|
@ -1075,10 +1047,6 @@ Tooltips:
|
|||
brzinu reprodukcije (jednostruka brzina, ukoliko nije promijenjena u postavkama).
|
||||
Skip by Scrolling Over Video Player: Koristi kotačić za pregledavanje videa, MPV
|
||||
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:
|
||||
Invidious Instance: Invidious primjerak na koji će se FreeTube povezati za pozive
|
||||
API-a.
|
||||
|
|
|
@ -406,7 +406,6 @@ Settings:
|
|||
Video Playback Rate Interval: Videó lejátszási sebesség időköze
|
||||
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
|
||||
Allow DASH AV1 formats: DASH AV1 formátumok engedélyezése
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Adatvédelmi beállítások'
|
||||
Remember History: 'Előzmények megjegyzése'
|
||||
|
@ -888,11 +887,6 @@ Video:
|
|||
Published on: 'Megjelent'
|
||||
Publicationtemplate: '{number} {unit} ezelőtt'
|
||||
#& Videos
|
||||
Audio:
|
||||
Best: Legjobb
|
||||
High: Magas
|
||||
Medium: Közepes
|
||||
Low: Alacsony
|
||||
audio only: csak hang
|
||||
video only: csak videó
|
||||
Download Video: Videó letöltése
|
||||
|
@ -905,7 +899,6 @@ Video:
|
|||
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
|
||||
Save Video: Videó mentése
|
||||
translated from English: angolról fordítva
|
||||
Sponsor Block category:
|
||||
music offtopic: Témán kívüli zene
|
||||
interaction: Kölcsönhatás
|
||||
|
@ -915,7 +908,6 @@ Video:
|
|||
sponsor: Szponzor
|
||||
filler: Kitöltő
|
||||
recap: Összegzés
|
||||
Skipped segment: Szegmens kihagyva
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: lejátszási lista folyamatos lejátszása
|
||||
|
@ -934,18 +926,6 @@ Video:
|
|||
video: videó
|
||||
OpenInTemplate: '{externalPlayer} megnyításaban'
|
||||
Premieres on: 'Első előadás dátuma'
|
||||
Stats:
|
||||
Player Dimensions: Lejátszó méretei
|
||||
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: Elvetve/Összes képkocka
|
||||
Bitrate: Átviteli sebesség
|
||||
Premieres: Első előadások
|
||||
Show Super Chat Comment: Haladó csevegési megjegyzés megjelenítése
|
||||
Scroll to Bottom: Görgetés legalulra
|
||||
|
@ -1113,10 +1093,6 @@ Tooltips:
|
|||
(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
|
||||
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:
|
||||
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
|
||||
|
|
|
@ -260,7 +260,6 @@ Settings:
|
|||
Ask Path: Tanya Lokasi Penyimpanan
|
||||
Quality Label: Kualitas Tangkapan Layar
|
||||
File Name Label: Pola Nama Berkas
|
||||
Allow DASH AV1 formats: Izinkan format DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Pengaturan Privasi'
|
||||
Remember History: 'Ingat Riwayat'
|
||||
|
@ -609,11 +608,6 @@ Video:
|
|||
Published on: 'Dipublikasi pada'
|
||||
Publicationtemplate: '{number} {unit} yang lalu'
|
||||
#& Videos
|
||||
Audio:
|
||||
Best: Terbaik
|
||||
High: Tinggi
|
||||
Medium: Sedang
|
||||
Low: Rendah
|
||||
audio only: hanya audio
|
||||
video only: hanya video
|
||||
Download Video: Unduh Video
|
||||
|
@ -629,7 +623,6 @@ Video:
|
|||
Anda
|
||||
Video has been saved: Video telah disimpan
|
||||
Save Video: Simpan Video
|
||||
translated from English: diterjemahkan dari Bahasa Inggris
|
||||
Sponsor Block category:
|
||||
interaction: Interaksi
|
||||
music offtopic: Musik Non-Topik
|
||||
|
@ -637,7 +630,6 @@ Video:
|
|||
outro: Outro
|
||||
intro: Intro
|
||||
sponsor: Sponsor
|
||||
Skipped segment: Segmen yang dilewati
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
starting video at offset: memulai video pada offset
|
||||
|
@ -655,24 +647,6 @@ Video:
|
|||
video: video
|
||||
OpenInTemplate: Buka di {externalPlayer}
|
||||
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 legacy
|
||||
Video ID: ID Video
|
||||
Resolution: Resolusi
|
||||
Volume: Volume
|
||||
Mimetype: Tipe Mime
|
||||
Player Dimensions: Ukuran Pemutar
|
||||
Bitrate: Laju Bit
|
||||
Videos:
|
||||
#& Sort By
|
||||
Sort By:
|
||||
|
|
|
@ -396,7 +396,6 @@ Settings:
|
|||
File Name Label: Mynstur skráaheita
|
||||
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
|
||||
Allow DASH AV1 formats: Leyfa DASH AV1 snið
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Stillingar gagnaleyndar'
|
||||
Remember History: 'Muna áhorfsferil'
|
||||
|
@ -796,11 +795,6 @@ Video:
|
|||
Download Video: 'Sækja myndskeið'
|
||||
video only: 'einungis myndmerki'
|
||||
audio only: 'einungis hljóð'
|
||||
Audio:
|
||||
Low: 'Lág'
|
||||
Medium: 'Miðlungs'
|
||||
High: 'Há'
|
||||
Best: 'Besta'
|
||||
Published:
|
||||
Jan: 'Jan'
|
||||
Feb: 'Feb'
|
||||
|
@ -837,7 +831,6 @@ Video:
|
|||
Started streaming on: 'Byrjaði streymi'
|
||||
Publicationtemplate: 'Fyrir {number} {unit} síðan'
|
||||
#& Videos
|
||||
translated from English: þýtt úr ensku
|
||||
Sponsor Block category:
|
||||
music offtopic: Tónlist óskyld efni
|
||||
interaction: Gagnvirkni
|
||||
|
@ -847,7 +840,6 @@ Video:
|
|||
outro: Afkynning
|
||||
recap: Upprifjun
|
||||
filler: Uppfylling
|
||||
Skipped segment: Búti sleppt
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: endurtaka spilunarlista
|
||||
|
@ -864,26 +856,6 @@ Video:
|
|||
video: myndskeið
|
||||
OpenInTemplate: Opna í {externalPlayer}
|
||||
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: Frumsýnt
|
||||
Show Super Chat Comment: Birta athugasemd Super Chat
|
||||
|
@ -1011,9 +983,6 @@ Tooltips:
|
|||
breytt í stillingunum).
|
||||
Skip by Scrolling Over Video Player: Nota skrunhjólið til að fletta í gegnum myndskeið,
|
||||
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:
|
||||
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
|
||||
|
|
|
@ -395,7 +395,6 @@ Settings:
|
|||
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
|
||||
Skip by Scrolling Over Video Player: Salta tramite scorrimento sul lettore video
|
||||
Allow DASH AV1 formats: Consenti formati DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Impostazioni della privacy'
|
||||
Remember History: 'Salva la cronologia'
|
||||
|
@ -839,11 +838,6 @@ Video:
|
|||
Autoplay: Riproduzione automatica
|
||||
Starting soon, please refresh the page to check again: La riproduzione partirà tra
|
||||
breve, aggiorna la pagina per ricontrollare
|
||||
Audio:
|
||||
Best: Migliore
|
||||
High: Alto
|
||||
Medium: Medio
|
||||
Low: Basso
|
||||
audio only: solo audio
|
||||
video only: solo video
|
||||
Download Video: Download video
|
||||
|
@ -881,29 +875,7 @@ Video:
|
|||
sponsor: Sponsor
|
||||
recap: Ricapitolazione
|
||||
filler: Riempitivo
|
||||
Skipped segment: Segmento saltato
|
||||
translated from English: tradotto dall'inglese
|
||||
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: Première
|
||||
Scroll to Bottom: Scorri fino in fondo
|
||||
|
@ -1101,10 +1073,6 @@ Tooltips:
|
|||
nelle Impostazioni).
|
||||
Skip by Scrolling Over Video Player: Usa la rotella di scorrimento per saltare
|
||||
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:
|
||||
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,
|
||||
|
|
|
@ -279,7 +279,6 @@ Settings:
|
|||
Folder Button: フォルダーの選択
|
||||
Enter Fullscreen on Display Rotate: 横画面時にフルスクリーンにする
|
||||
Skip by Scrolling Over Video Player: 動画プレーヤーでスクロールしてスキップ可能にする
|
||||
Allow DASH AV1 formats: DASH AV1形式を許可
|
||||
Subscription Settings:
|
||||
Subscription Settings: '登録チャンネルの設定'
|
||||
Hide Videos on Watch: '視聴済み動画の非表示'
|
||||
|
@ -648,11 +647,6 @@ Video:
|
|||
Shuffle Playlist: 再生リストのシャッフル
|
||||
Loop Playlist: 再生リストのループ
|
||||
Starting soon, please refresh the page to check again: すぐに再生されます、ページを再読み込みしてお待ちください
|
||||
Audio:
|
||||
Best: 最適
|
||||
High: 高
|
||||
Medium: 中
|
||||
Low: 低
|
||||
audio only: '音声のみ'
|
||||
video only: '映像のみ'
|
||||
Download Video: '動画のダウンロード'
|
||||
|
@ -665,7 +659,6 @@ Video:
|
|||
Video has been removed from your saved list: 動画を保存一覧から削除しました
|
||||
Video has been saved: 動画を保存しました
|
||||
Save Video: 動画の保存
|
||||
translated from English: 英語から翻訳
|
||||
Sponsor Block category:
|
||||
sponsor: スポンサー
|
||||
music offtopic: 音楽以外
|
||||
|
@ -675,7 +668,6 @@ Video:
|
|||
intro: イントロ(冒頭)
|
||||
recap: 要約
|
||||
filler: フィラー(穴埋め)
|
||||
Skipped segment: スキップされたセグメント
|
||||
External Player:
|
||||
OpeningTemplate: '{externalPlayer} で {videoOrPlaylist} を開く...'
|
||||
Unsupported Actions:
|
||||
|
@ -692,25 +684,6 @@ Video:
|
|||
video: 動画
|
||||
OpenInTemplate: '{externalPlayer} で開く'
|
||||
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: プレミア
|
||||
Show Super Chat Comment: Super Chat のコメント表示
|
||||
|
@ -866,8 +839,6 @@ Tooltips:
|
|||
Scroll Playback Rate Over Video Player: カーソルが動画上にあるとき、Ctrl キー(Mac では Command キー)を押したまま、マウスホイールを前後にスクロールして再生速度を調整します。Control
|
||||
キー(Mac では Command キー)を押したままマウスを左クリックすると、すぐにデフォルトの再生速度(設定を変更していない場合は 1 x)に戻ります。
|
||||
Skip by Scrolling Over Video Player: スクロール ホイールを使用して、ビデオ、MPV スタイルをスキップします。
|
||||
Allow DASH AV1 formats: DASH H.264形式よりもDASH AV1形式の方がきれいに見える可能性がありますが、再生にはより多くの処理能力が必要となります。DASH
|
||||
AV1形式を使用できない場合、プレイヤーはDASH H.264形式を自動で使用します。
|
||||
General Settings:
|
||||
Invidious Instance: FreeTube が使用する Invidious API の接続先サーバーです。
|
||||
Preferred API Backend: FreeTube が youtube からデータを取得する方法を選択します。「内部 API」とはアプリから取得する方法です。「Invidious
|
||||
|
|
|
@ -269,7 +269,6 @@ Settings:
|
|||
File Name Tooltip: 아래 변수를 사용할 수 있습니다. %Y 년 4자리. %M 월 2자리. %D 일 2자리. %H 시간 2자리.
|
||||
%N 분 2자리. %S 초 2자리. %T 밀리초 3자리. %s 비디오초. %t 비디오 밀리초 3자리. %i 비디오 ID. "\" 또는
|
||||
"/" 를 사용하여 하위 폴더를 만들 수도 있습니다.
|
||||
Allow DASH AV1 formats: DASH AV1 포맷 허용
|
||||
Skip by Scrolling Over Video Player: 비디오 플레이어를 스크롤하여 건너뛰기
|
||||
Enter Fullscreen on Display Rotate: 화면 회전 시 전체화면 활성화하기
|
||||
Privacy Settings:
|
||||
|
@ -552,11 +551,6 @@ Video:
|
|||
Download Video: '동영상 다운로드'
|
||||
video only: '비디오만'
|
||||
audio only: '오디오만'
|
||||
Audio:
|
||||
Low: '낮음'
|
||||
Medium: '중간'
|
||||
High: '높음'
|
||||
Best: '최고'
|
||||
Published:
|
||||
Jan: '1월'
|
||||
Feb: '2월'
|
||||
|
@ -595,18 +589,6 @@ Video:
|
|||
Video has been saved: 동영상이 저장되었습니다
|
||||
Video has been removed from your saved list: 저장된 목록에서 동영상이 제거되었습니다
|
||||
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: 개봉일
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
|
@ -632,8 +614,6 @@ Video:
|
|||
outro: 결말부
|
||||
self-promotion: 자기 홍보
|
||||
interaction: 상호 작용
|
||||
translated from English: 영어에서 번역됨
|
||||
Skipped segment: 건너뛴 세그먼트
|
||||
Premieres: 프리미어
|
||||
Upcoming: 공개 예정
|
||||
Show Super Chat Comment: 슈퍼채팅 댓글 보이기
|
||||
|
@ -733,8 +713,6 @@ Tooltips:
|
|||
Scroll Playback Rate Over Video Player: 커서가 비디오 위에 있는 동안 Control 키( Mac의 경우 Command
|
||||
키)를 길게 누르고 마우스 휠을 앞뒤로 스크롤하여 재생 속도를 제어합니다. Control 키 (Mac의 경우 Command 키)를 길게
|
||||
누르고 마우스 왼쪽 버튼을 클릭하여 기본 재생 속도(설정에서 변경되지 않은 경우 1배)로 빠르게 돌아갑니다.
|
||||
Allow DASH AV1 formats: DASH AV1 포맷은 DASH H.264 포맷보다 화질이 좋을 수 있으나, 영상 재생을 위해 더
|
||||
높은 성능을 요구합니다. 모든 영상에서 사용 가능한 것은 아니며, 사용이 불가능할 경우 DASH H.264 포맷을 사용합니다.
|
||||
Skip by Scrolling Over Video Player: MPV 방식으로 마우스 스크롤을 이용해 영상을 스킵합니다.
|
||||
Subscription Settings:
|
||||
Fetch Feeds from RSS: '활성화되면 FreeTube는 구독 피드를 가져오는 기본 방법 대신 RSS를 사용합니다. RSS는 더
|
||||
|
|
|
@ -294,7 +294,6 @@ Settings:
|
|||
Max Video Playback Rate: Maksimalus vaizdo įrašų atkūrimo dažnis
|
||||
Enter Fullscreen on Display Rotate: Viso ekrano režimas pasukus ekraną
|
||||
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: 'Išorinio grotuvo nustatymai'
|
||||
External Player: 'Išorinis grotuvas'
|
||||
|
@ -608,11 +607,6 @@ Video:
|
|||
Download Video: 'Atsisiųsti vaizdo įrašą'
|
||||
video only: 'tik video'
|
||||
audio only: 'tik audio'
|
||||
Audio:
|
||||
Low: 'Žemiausia'
|
||||
Medium: 'Vidutinė'
|
||||
High: 'Aukščiausia'
|
||||
Best: 'Pati geriausia'
|
||||
Published:
|
||||
Jan: 'Sau'
|
||||
Feb: 'Vas'
|
||||
|
@ -646,9 +640,7 @@ Video:
|
|||
Published on: 'Publikuota'
|
||||
Streamed on: 'Transliuota'
|
||||
Started streaming on: 'Transliaciją pradėjo'
|
||||
translated from English: 'išversta iš anglų kalbos'
|
||||
Publicationtemplate: 'prieš {number} {unit}'
|
||||
Skipped segment: 'Praleistas segmentas'
|
||||
Sponsor Block category:
|
||||
sponsor: 'Rėmėjas'
|
||||
intro: 'Įžanga'
|
||||
|
@ -675,26 +667,6 @@ Video:
|
|||
looping playlists: 'ciklu sukami grojaraščiai'
|
||||
#& Videos
|
||||
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
|
||||
Videos:
|
||||
#& Sort By
|
||||
|
|
|
@ -279,7 +279,6 @@ Settings:
|
|||
1440p: '1440p'
|
||||
4k: '4k'
|
||||
8k: '8k'
|
||||
Allow DASH AV1 formats: 'Atļaut DASH AV1 formātus'
|
||||
Screenshot:
|
||||
Enable: 'Iespējot ekrānšāviņu'
|
||||
Format Label: 'Ekrānšāviņa formāti'
|
||||
|
@ -628,11 +627,6 @@ Video:
|
|||
Download Video: ''
|
||||
video only: ''
|
||||
audio only: ''
|
||||
Audio:
|
||||
Low: ''
|
||||
Medium: ''
|
||||
High: ''
|
||||
Best: ''
|
||||
Published:
|
||||
Jan: ''
|
||||
Feb: ''
|
||||
|
@ -666,9 +660,7 @@ Video:
|
|||
Published on: ''
|
||||
Streamed on: ''
|
||||
Started streaming on: ''
|
||||
translated from English: ''
|
||||
Publicationtemplate: ''
|
||||
Skipped segment: ''
|
||||
Sponsor Block category:
|
||||
sponsor: ''
|
||||
intro: ''
|
||||
|
@ -692,17 +684,6 @@ Video:
|
|||
reversing playlists: ''
|
||||
shuffling 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:
|
||||
#& Sort By
|
||||
|
@ -798,7 +779,6 @@ Tooltips:
|
|||
Force Local Backend for Legacy Formats: ''
|
||||
Proxy Videos Through Invidious: ''
|
||||
Default Video Format: ''
|
||||
Allow DASH AV1 formats: ''
|
||||
Scroll Playback Rate Over Video Player: ''
|
||||
Skip by Scrolling Over Video Player: ''
|
||||
External Player Settings:
|
||||
|
|
|
@ -276,7 +276,6 @@ Settings:
|
|||
Video Playback Rate Interval: Intervall for videoavspillingshastighet
|
||||
Enter Fullscreen on Display Rotate: Fullskjermsvisning når skjermen roteres
|
||||
Skip by Scrolling Over Video Player: Hopp over ved å rulle over videoavspiller
|
||||
Allow DASH AV1 formats: Tillat DASH AV1-formater
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Personvernsinnstillinger'
|
||||
Remember History: 'Husk historikk'
|
||||
|
@ -628,11 +627,6 @@ Video:
|
|||
Published on: 'Publisert'
|
||||
Publicationtemplate: '{number} {unit} siden'
|
||||
#& Videos
|
||||
Audio:
|
||||
High: Høy
|
||||
Medium: Middels
|
||||
Low: Lav
|
||||
Best: Beste
|
||||
audio only: Bare lyd
|
||||
video only: Bare video
|
||||
Download Video: Last ned video
|
||||
|
@ -654,7 +648,6 @@ Video:
|
|||
Open Channel in YouTube: Åpne kanal i YouTube
|
||||
Play Previous Video: Spill av forrige video
|
||||
Play Next Video: Spill av neste video
|
||||
translated from English: oversatt fra engelsk
|
||||
Sponsor Block category:
|
||||
interaction: samhandling
|
||||
outro: utgang
|
||||
|
@ -664,7 +657,6 @@ Video:
|
|||
self-promotion: egenpromotering
|
||||
recap: Oppsummering
|
||||
filler: Fyllstoff
|
||||
Skipped segment: Overhoppet del
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
shuffling playlists: omstokking av spillelister
|
||||
|
@ -680,18 +672,6 @@ Video:
|
|||
playlist: spilleliste
|
||||
video: video
|
||||
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
|
||||
Scroll to Bottom: Rull til bunnen
|
||||
Premieres on: Har première
|
||||
|
@ -881,9 +861,6 @@ Tooltips:
|
|||
å kontrollere avspillingshastigheten. Trykk og hold Ctrl-tasten (⌘ på Mac) og
|
||||
venstreklikk på musen for å gå tilbake til fovalgt avspillingshastighet (1x
|
||||
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:
|
||||
Custom External Player Arguments: Alle egendefinerte kommandolinjeargumenter,
|
||||
semikoloninndelt («;») du ønsker å sende til den eksterne avspilleren.
|
||||
|
|
|
@ -388,7 +388,6 @@ Settings:
|
|||
video; %i ID van de video. U kunt ook "\" of "/" gebruiken om deelmappen aan
|
||||
te maken.'
|
||||
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
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Privacy-instellingen'
|
||||
|
@ -825,11 +824,6 @@ Video:
|
|||
Loop Playlist: Playlist herhalen
|
||||
Starting soon, please refresh the page to check again: Start binnenkort, vernieuw
|
||||
de pagina om opnieuw te controleren
|
||||
Audio:
|
||||
Best: Beste
|
||||
High: Hoog
|
||||
Medium: Gemiddeld
|
||||
Low: Laag
|
||||
audio only: alleen audio
|
||||
video only: alleen video
|
||||
Download Video: Video downloaden
|
||||
|
@ -843,7 +837,6 @@ Video:
|
|||
opgeslagen video's
|
||||
Video has been saved: Video is opgeslagen
|
||||
Save Video: Video opslaan
|
||||
translated from English: vertaald uit het Engels
|
||||
Sponsor Block category:
|
||||
music offtopic: Niet-muziek
|
||||
interaction: Interactie
|
||||
|
@ -853,7 +846,6 @@ Video:
|
|||
sponsor: Sponsor
|
||||
recap: Samenvatting
|
||||
filler: Opvulling
|
||||
Skipped segment: Segment overgeslagen
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
shuffling playlists: afspeellijsten shufflen
|
||||
|
@ -869,26 +861,6 @@ Video:
|
|||
playlist: afspeellijst
|
||||
video: video
|
||||
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: Premières
|
||||
Scroll to Bottom: Helemaal naar onderen scrollen
|
||||
|
@ -1074,10 +1046,6 @@ Tooltips:
|
|||
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
|
||||
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
|
||||
te spoelen, zoals bij MPV.
|
||||
Subscription Settings:
|
||||
|
|
|
@ -592,11 +592,6 @@ Video:
|
|||
Download Video: 'Last ned video'
|
||||
video only: 'berre video'
|
||||
audio only: 'berre lyd'
|
||||
Audio:
|
||||
Low: 'Låg'
|
||||
Medium: 'Middels'
|
||||
High: 'Høg'
|
||||
Best: 'Beste'
|
||||
Published:
|
||||
Jan: 'Jan'
|
||||
Feb: 'Feb'
|
||||
|
@ -632,7 +627,6 @@ Video:
|
|||
Started streaming on: 'Begynte å straume på'
|
||||
Publicationtemplate: '{number} {unit} sidan'
|
||||
#& Videos
|
||||
translated from English: omsett frå engelsk
|
||||
Sponsor Block category:
|
||||
outro: Avslutting
|
||||
interaction: Samhandling
|
||||
|
@ -642,7 +636,6 @@ Video:
|
|||
self-promotion: Eigenpromotering
|
||||
recap: Oppsummering
|
||||
filler: Fyllstoff
|
||||
Skipped segment: Overhoppa del
|
||||
External Player:
|
||||
video: video
|
||||
playlist: speleliste
|
||||
|
@ -659,18 +652,6 @@ Video:
|
|||
opening specific video in a playlist (falling back to opening the video): opner
|
||||
valt video i ei speleliste (faller tilbake til å opne videoen)
|
||||
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
|
||||
Premieres: Premiere
|
||||
Scroll to Bottom: Rull til botn
|
||||
|
|
|
@ -88,7 +88,6 @@ Settings:
|
|||
1440p: '୧୪୪୦p'
|
||||
4k: '୪k'
|
||||
8k: '୮k'
|
||||
Allow DASH AV1 formats: DASH AV1 ଫର୍ମାଟ୍କୁ ଅନୁମତି ଦେବା
|
||||
External Player Settings:
|
||||
External Player Settings: 'ବାହ୍ୟ ଚାଳକ ସେଟିଂ'
|
||||
External Player: 'ବାହ୍ୟ ଚାଳକ'
|
||||
|
|
|
@ -394,7 +394,6 @@ Settings:
|
|||
orientacji ekranu
|
||||
Skip by Scrolling Over Video Player: Przewijaj film kółkiem myszy na obszarze
|
||||
odtwarzacza
|
||||
Allow DASH AV1 formats: Zezwól na format AV1 DASH
|
||||
Subscription Settings:
|
||||
Subscription Settings: 'Ustawienia subskrypcji'
|
||||
Hide Videos on Watch: 'Ukrywaj filmy po obejrzeniu'
|
||||
|
@ -843,11 +842,6 @@ Video:
|
|||
Loop Playlist: Zapętl playlistę
|
||||
Starting soon, please refresh the page to check again: Wkrótce się zacznie. Proszę
|
||||
odświeżyć stronę, aby ponownie sprawdzić
|
||||
Audio:
|
||||
Best: Najlepsza
|
||||
High: Wysoka
|
||||
Medium: Średnia
|
||||
Low: Niska
|
||||
audio only: tylko audio
|
||||
video only: tylko wideo
|
||||
Download Video: Pobierz film
|
||||
|
@ -861,7 +855,6 @@ Video:
|
|||
zapisanych
|
||||
Video has been saved: Film został zapisany
|
||||
Save Video: Zapisz film
|
||||
translated from English: przetłumaczone z angielskiego
|
||||
Sponsor Block category:
|
||||
music offtopic: niemuzyczny
|
||||
interaction: o interakcji
|
||||
|
@ -871,7 +864,6 @@ Video:
|
|||
sponsor: sponsorowany
|
||||
filler: z wypełniaczem
|
||||
recap: z podsumowaniem
|
||||
Skipped segment: Pominięto segment
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
reversing playlists: odwracania playlist
|
||||
|
@ -888,26 +880,6 @@ Video:
|
|||
video: filmu
|
||||
OpenInTemplate: Otwórz w {externalPlayer}
|
||||
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: Premiery
|
||||
Show Super Chat Comment: Pokazuj komentarze z „Superczatu”
|
||||
|
@ -1125,10 +1097,6 @@ Tooltips:
|
|||
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
|
||||
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:
|
||||
Ignore Warnings: Nie pokazuj ostrzeżeń o nieobsługiwanych akcjach przez zewnętrzny
|
||||
odtwarzacz (n.p. odwracanie playlist, itp.).
|
||||
|
|
|
@ -391,7 +391,6 @@ Settings:
|
|||
Enter Fullscreen on Display Rotate: Entrar em tela cheia ao girar a tela para
|
||||
o modo paisagem
|
||||
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: 'Configurações de inscrições'
|
||||
Hide Videos on Watch: 'Ocultar vídeos após assisti-los'
|
||||
|
@ -826,11 +825,6 @@ Video:
|
|||
#& Videos
|
||||
Started streaming on: Transmissão iniciada em
|
||||
Streamed on: Transmitido em
|
||||
Audio:
|
||||
Best: Máxima
|
||||
Medium: Média
|
||||
Low: Baixa
|
||||
High: Alta
|
||||
audio only: somente áudio
|
||||
video only: somente vídeo
|
||||
Download Video: Baixar vídeo
|
||||
|
@ -850,7 +844,6 @@ Video:
|
|||
vídeos salvos
|
||||
Video has been saved: O vídeo foi salvo
|
||||
Save Video: Salvar vídeo
|
||||
translated from English: traduzido do Inglês
|
||||
Sponsor Block category:
|
||||
music offtopic: Música fora do contexto
|
||||
interaction: Interação
|
||||
|
@ -860,7 +853,6 @@ Video:
|
|||
sponsor: Patrocinador
|
||||
filler: Preenchimento
|
||||
recap: Recapitulação
|
||||
Skipped segment: Segmentos pulados
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
shuffling playlists: Playlists aleatórias
|
||||
|
@ -877,26 +869,6 @@ Video:
|
|||
OpenInTemplate: Abrir em {externalPlayer}
|
||||
video: vídeo
|
||||
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: Estreia
|
||||
Scroll to Bottom: Ir para o final
|
||||
|
@ -1102,10 +1074,6 @@ Tooltips:
|
|||
sido alterada nas configurações).
|
||||
Skip by Scrolling Over Video Player: Use a roda de rolagem para pular o vídeo,
|
||||
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:
|
||||
Region for Trending: A região de tendências permite que você escolha os vídeos
|
||||
em alta do país que deseja exibir.
|
||||
|
|
|
@ -381,7 +381,6 @@ Settings:
|
|||
por cima do reprodutor
|
||||
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
|
||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: Configurações de privacidade
|
||||
Remember History: Memorizar histórico
|
||||
|
@ -776,11 +775,6 @@ Video:
|
|||
Download Video: Descarregar vídeo
|
||||
video only: apenas vídeo
|
||||
audio only: apenas áudio
|
||||
Audio:
|
||||
Low: Baixa
|
||||
Medium: Média
|
||||
High: Alta
|
||||
Best: Melhor
|
||||
Published:
|
||||
Jan: jan
|
||||
Feb: fev
|
||||
|
@ -821,7 +815,6 @@ Video:
|
|||
Reverse Playlist: Inverter lista de reprodução
|
||||
Shuffle Playlist: Baralhar lista de reprodução
|
||||
Loop Playlist: Repetir lista de reprodução
|
||||
translated from English: traduzido do inglês
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: repetir lista de reprodução
|
||||
|
@ -846,19 +839,6 @@ Video:
|
|||
sponsor: Patrocinador
|
||||
recap: Recapitular
|
||||
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: Estreias
|
||||
Show Super Chat Comment: Mostrar comentário do Super Chat
|
||||
|
@ -986,10 +966,6 @@ Tooltips:
|
|||
padrão (1 a não ser que tenha sido alterada nas configurações).
|
||||
Skip by Scrolling Over Video Player: Utilizar roda do rato para ignorar vídeo,
|
||||
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!
|
||||
Eles não estão disponíveis em todos os vídeos e, nesses casos, o reprodutor
|
||||
usará os formatos DASH H.264.
|
||||
Subscription Settings:
|
||||
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
|
||||
|
|
|
@ -391,7 +391,6 @@ Settings:
|
|||
Ask Path: Perguntar onde guardar
|
||||
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
|
||||
Allow DASH AV1 formats: Permitir formatos DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Configurações de privacidade'
|
||||
Remember History: 'Memorizar histórico'
|
||||
|
@ -901,15 +900,8 @@ Video:
|
|||
sponsor: Patrocinador
|
||||
recap: Recapitular
|
||||
filler: Preenchimento
|
||||
Skipped segment: Secção ignorada
|
||||
translated from English: traduzido do inglês
|
||||
Started streaming on: Emissão iniciada em
|
||||
Streamed on: Emitida a
|
||||
Audio:
|
||||
Best: Melhor
|
||||
High: Alta
|
||||
Medium: Média
|
||||
Low: Baixa
|
||||
audio only: apenas áudio
|
||||
video only: apenas vídeo
|
||||
Download Video: Descarregar vídeo
|
||||
|
@ -921,26 +913,6 @@ Video:
|
|||
Video has been saved: O vídeo foi guardado
|
||||
Save Video: Guardar vídeo
|
||||
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: Estreias
|
||||
Scroll to Bottom: Deslocamento para baixo
|
||||
|
@ -1108,10 +1080,6 @@ Tooltips:
|
|||
padrão (1 a não ser que tenha sido alterada nas configurações).
|
||||
Skip by Scrolling Over Video Player: Utilizar roda do rato para ignorar vídeo,
|
||||
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!
|
||||
Eles não estão disponíveis em todos os vídeos e, nesses casos, o reprodutor
|
||||
usará os formatos DASH H.264.
|
||||
General Settings:
|
||||
Region for Trending: A região permite-lhe escolher de que país virão os vídeos
|
||||
na secção de tendências.
|
||||
|
|
|
@ -350,7 +350,6 @@ Settings:
|
|||
de scroll
|
||||
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
|
||||
Allow DASH AV1 formats: Permiteți formatele DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Setări de confidențialitate'
|
||||
Remember History: 'Reține istoric'
|
||||
|
@ -774,15 +773,8 @@ Video:
|
|||
sponsor: Sponsor
|
||||
recap: Recapitulare
|
||||
filler: Filler
|
||||
Skipped segment: Segment omis
|
||||
translated from English: tradus din engleză
|
||||
Started streaming on: A început să transmită pe
|
||||
Streamed on: Difuzat pe
|
||||
Audio:
|
||||
Best: Cea mai bună
|
||||
Medium: Medie
|
||||
Low: Scăzută
|
||||
High: Înaltă
|
||||
audio only: numai audio
|
||||
video only: numai video
|
||||
Download Video: Descărcați video
|
||||
|
@ -794,26 +786,6 @@ Video:
|
|||
ta de salvări
|
||||
Video has been saved: Videoclipul a fost salvat
|
||||
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 in: Are premiera în
|
||||
Scroll to Bottom: Derulați până jos
|
||||
|
@ -983,10 +955,6 @@ Tooltips:
|
|||
(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
|
||||
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
|
||||
prin videoclip, stil MPV.
|
||||
General Settings:
|
||||
|
|
|
@ -366,7 +366,6 @@ Settings:
|
|||
Enter Fullscreen on Display Rotate: Входить в полноэкранный режим при повороте
|
||||
дисплея
|
||||
Skip by Scrolling Over Video Player: Пропустить, прокручивая видеопроигрыватель
|
||||
Allow DASH AV1 formats: Разрешить форматы DASH AV1
|
||||
Subscription Settings:
|
||||
Subscription Settings: 'Подписки'
|
||||
Hide Videos on Watch: 'Скрывать видео после просмотра'
|
||||
|
@ -803,11 +802,6 @@ Video:
|
|||
Loop Playlist: Повторять подборку
|
||||
Starting soon, please refresh the page to check again: Скоро начнется, обновите
|
||||
страницу, чтобы проверить ещё раз
|
||||
Audio:
|
||||
Best: Лучшее
|
||||
High: Высокое
|
||||
Medium: Среднее
|
||||
Low: Низкое
|
||||
audio only: только звук
|
||||
video only: только видео
|
||||
Download Video: Скачать видео
|
||||
|
@ -820,7 +814,6 @@ Video:
|
|||
Video has been removed from your saved list: Видео было удалено из списка сохраненных
|
||||
Video has been saved: Видео было добавлено в сохраненные
|
||||
Save Video: Добавить видео в сохранённые
|
||||
translated from English: переведён с английского
|
||||
Sponsor Block category:
|
||||
music offtopic: Сегмент без музыки
|
||||
interaction: Напоминание
|
||||
|
@ -830,7 +823,6 @@ Video:
|
|||
sponsor: Спонсор
|
||||
recap: Краткое содержание
|
||||
filler: Отвлечение
|
||||
Skipped segment: Пропущенный сегмент
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: повторение подборок
|
||||
|
@ -846,26 +838,6 @@ Video:
|
|||
playlist: подборка
|
||||
video: видео
|
||||
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 in: Премьеры в
|
||||
Premieres: Премьеры
|
||||
|
@ -1077,10 +1049,6 @@ Tooltips:
|
|||
не была изменена в настройках).
|
||||
Skip by Scrolling Over Video Player: Используйте колесо прокрутки, чтобы пропустить
|
||||
видео в стиле MPV.
|
||||
Allow DASH AV1 formats: Форматы DASH AV1 могут выглядеть лучше, чем форматы DASH
|
||||
H.264. Форматы DASH AV1 требуют большей производительности для воспроизведения!
|
||||
Они доступны не для всех видео. Если они будут недоступны, тогда проигрыватель
|
||||
будет использовать форматы DASH H.264.
|
||||
External Player Settings:
|
||||
Custom External Player Arguments: Любые пользовательские аргументы командной строки,
|
||||
разделенные точкой с запятой (';'), которые вы хотите передать внешнему проигрывателю.
|
||||
|
|
|
@ -511,11 +511,6 @@ Video:
|
|||
a znova skontrolujte
|
||||
Started streaming on: Vysielanie začaté o
|
||||
Streamed on: Odvysielané dňa
|
||||
Audio:
|
||||
Medium: Stredná
|
||||
Low: Nízka
|
||||
High: Vysoká
|
||||
Best: Najlepšia
|
||||
audio only: len zvuk
|
||||
video only: len video
|
||||
Download Video: Stiahnuť video
|
||||
|
@ -538,17 +533,6 @@ Video:
|
|||
outro: Záver
|
||||
intro: Úvod
|
||||
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:
|
||||
OpenInTemplate: Otvoriť v {externalPlayer}
|
||||
Unsupported Actions:
|
||||
|
|
|
@ -273,7 +273,6 @@ Settings:
|
|||
File Name Label: Vzorec imena datoteke
|
||||
Enter Fullscreen on Display Rotate: Pri vrtenju zaslona vstopite v celozaslonski
|
||||
način
|
||||
Allow DASH AV1 formats: Dovoli oblike DASH AV1
|
||||
Next Video Interval: Interval do naslednjega videa
|
||||
Display Play Button In Video Player: Prikaz gumba za predvajanje v video predvajalniku
|
||||
Fast-Forward / Rewind Interval: Interval za hitro previjanje naprej/nazaj
|
||||
|
@ -613,11 +612,6 @@ Video:
|
|||
Published on: 'Objavljeno dne'
|
||||
Publicationtemplate: '{number} {unit} nazaj'
|
||||
#& Videos
|
||||
Audio:
|
||||
Best: Najvišja
|
||||
High: Visoka
|
||||
Medium: Srednja
|
||||
Low: Nizka
|
||||
audio only: Samo avdio
|
||||
video only: Samo video
|
||||
Download Video: Prenesi videoposnetek
|
||||
|
@ -631,9 +625,6 @@ Video:
|
|||
seznama
|
||||
Video has been saved: Videoposnetek je bil shranjen
|
||||
Save Video: Shrani videoposnetek
|
||||
Stats:
|
||||
Bandwidth: Pasovna širina
|
||||
translated from English: prevedeno iz angleščine
|
||||
Videos:
|
||||
#& Sort By
|
||||
Sort By:
|
||||
|
|
|
@ -278,7 +278,6 @@ Settings:
|
|||
1440p: ''
|
||||
4k: ''
|
||||
8k: ''
|
||||
Allow DASH AV1 formats: ''
|
||||
Screenshot:
|
||||
Enable: ''
|
||||
Format Label: ''
|
||||
|
@ -614,11 +613,6 @@ Video:
|
|||
Download Video: ''
|
||||
video only: ''
|
||||
audio only: ''
|
||||
Audio:
|
||||
Low: ''
|
||||
Medium: ''
|
||||
High: ''
|
||||
Best: ''
|
||||
Published:
|
||||
Jan: ''
|
||||
Feb: ''
|
||||
|
@ -652,9 +646,7 @@ Video:
|
|||
Published on: ''
|
||||
Streamed on: ''
|
||||
Started streaming on: ''
|
||||
translated from English: ''
|
||||
Publicationtemplate: ''
|
||||
Skipped segment: ''
|
||||
Sponsor Block category:
|
||||
sponsor: ''
|
||||
intro: ''
|
||||
|
@ -678,17 +670,6 @@ Video:
|
|||
reversing playlists: ''
|
||||
shuffling 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:
|
||||
#& Sort By
|
||||
|
@ -784,7 +765,6 @@ Tooltips:
|
|||
Force Local Backend for Legacy Formats: ''
|
||||
Proxy Videos Through Invidious: ''
|
||||
Default Video Format: ''
|
||||
Allow DASH AV1 formats: ''
|
||||
Scroll Playback Rate Over Video Player: ''
|
||||
Skip by Scrolling Over Video Player: ''
|
||||
External Player Settings:
|
||||
|
|
|
@ -394,7 +394,6 @@ Settings:
|
|||
Scroll Volume Over Video Player: Превуци за јачину звука преко плејера видео снимка
|
||||
Skip by Scrolling Over Video Player: Прескочи превлачењем преко плејера видео
|
||||
снимка
|
||||
Allow DASH AV1 formats: Дозволи DASH AV1 формате
|
||||
Scroll Playback Rate Over Video Player: Превуци за брзину репродукције преко плејера
|
||||
видео снимка
|
||||
Fast-Forward / Rewind Interval: Интервал брзог премотавања унапред/уназад
|
||||
|
@ -821,18 +820,6 @@ Video:
|
|||
Ago: Пре
|
||||
Aug: Авг.
|
||||
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:
|
||||
interaction: Интеракција
|
||||
filler: Попуњавање
|
||||
|
@ -842,7 +829,6 @@ Video:
|
|||
sponsor: Спонзор
|
||||
recap: Рекапитулација
|
||||
intro: Уводна анимација
|
||||
translated from English: преведено са енглеског
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
opening playlists: отварање плејлиста
|
||||
|
@ -861,13 +847,7 @@ Video:
|
|||
Live chat is enabled. Chat messages will appear here once sent.: Ћаскање уживо је
|
||||
омогућено. Поруке ћаскања ће се појавити овде када буду послате.
|
||||
Streamed on: Стримовано
|
||||
Audio:
|
||||
Medium: Средње
|
||||
High: Високо
|
||||
Best: Најбоље
|
||||
Low: Ниско
|
||||
video only: само видео снимак
|
||||
Skipped segment: Прескочен сегмент
|
||||
Pause on Current Video: Паузирај на тренутном видео снимку
|
||||
Premieres on: Премијера на
|
||||
audio only: само аудио снимак (звук)
|
||||
|
@ -939,10 +919,6 @@ Tooltips:
|
|||
чији их оригинални наслови садрже у целом FreeTube-у, искључујући само историју,
|
||||
ваше плејлисте и видео снимке унутар плејлиста.
|
||||
Player Settings:
|
||||
Allow DASH AV1 formats: DASH AV1 формати могу изгледати боље од DASH H.264 формата.
|
||||
DASH AV1 формати захтевају више снаге за репродукцију! Они нису доступни на
|
||||
свим видео снимцима, у тим случајевима плејер ће уместо њих користити DASH H.264
|
||||
формате.
|
||||
Default Video Format: Подесите формате који се користе када се видео снимак пушта.
|
||||
DASH формати могу да пуштају виши квалитет. Застарели формати су ограничени
|
||||
на максимално 720p, али користе мање протока. Аудио формати су само звучни снимци.
|
||||
|
|
|
@ -310,7 +310,6 @@ Settings:
|
|||
Skip by Scrolling Over Video Player: Hoppa över genom att skrolla över videospelaren
|
||||
Max Video Playback Rate: Maximal uppspelningshastighet
|
||||
Video Playback Rate Interval: Uppspelningshastighetsintervall
|
||||
Allow DASH AV1 formats: Tillåt DASH AV1-format
|
||||
Scroll Playback Rate Over Video Player: Skrolla uppspelningshastighet över videospelaren
|
||||
Enter Fullscreen on Display Rotate: Fullskärm vid skärmrotation
|
||||
Privacy Settings:
|
||||
|
@ -766,11 +765,6 @@ Video:
|
|||
Published on: 'Publicerad den'
|
||||
Publicationtemplate: 'för {number} {unit} sedan'
|
||||
#& Videos
|
||||
Audio:
|
||||
Best: Högsta
|
||||
High: Hög
|
||||
Medium: Medium
|
||||
Low: Låg
|
||||
audio only: endast ljud
|
||||
video only: endast video
|
||||
Download Video: Ladda ner video
|
||||
|
@ -793,8 +787,6 @@ Video:
|
|||
sponsor: sponsor
|
||||
recap: Sammanfattning
|
||||
filler: Utfyllnad
|
||||
Skipped segment: Skippat segment
|
||||
translated from English: översatt från Engelska
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
shuffling playlists: blandar spellistor
|
||||
|
@ -810,18 +802,6 @@ Video:
|
|||
playlist: spellista
|
||||
video: video
|
||||
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: Premiärer
|
||||
Upcoming: Kommande
|
||||
|
@ -951,9 +931,6 @@ Tooltips:
|
|||
landsbegränsningar.
|
||||
Skip by Scrolling Over Video Player: Använd skrollhjulet för att snappspola igenom
|
||||
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
|
||||
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
|
||||
|
|
|
@ -396,7 +396,6 @@ Settings:
|
|||
veya "/" kullanabilirsiniz.
|
||||
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
|
||||
Allow DASH AV1 formats: DASH AV1 biçimlerine izin ver
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Gizlilik Ayarları'
|
||||
Remember History: 'Geçmişi Hatırla'
|
||||
|
@ -886,11 +885,6 @@ Video:
|
|||
Published on: 'Yayımlanma tarihi'
|
||||
Publicationtemplate: '{number} {unit} önce'
|
||||
#& Videos
|
||||
Audio:
|
||||
Best: En iyi
|
||||
High: Yüksek
|
||||
Medium: Orta
|
||||
Low: Düşük
|
||||
audio only: yalnızca ses
|
||||
video only: yalnızca video
|
||||
Download Video: Video İndir
|
||||
|
@ -903,7 +897,6 @@ Video:
|
|||
Video has been removed from your saved list: Video, kaydedilen listenizden kaldırıldı
|
||||
Video has been saved: Video kaydedildi
|
||||
Save Video: Videoyu Kaydet
|
||||
translated from English: İngilizceden çevrildi
|
||||
Sponsor Block category:
|
||||
music offtopic: Müzik Konu Dışı
|
||||
interaction: Etkileşim
|
||||
|
@ -913,7 +906,6 @@ Video:
|
|||
sponsor: Sponsor
|
||||
recap: Özet
|
||||
filler: Dolgu
|
||||
Skipped segment: Atlanan bölüm
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: oynatma listelerini döngüye alma
|
||||
|
@ -930,26 +922,6 @@ Video:
|
|||
video: video
|
||||
OpenInTemplate: '{externalPlayer} içinde aç'
|
||||
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: İlk gösterim
|
||||
Scroll to Bottom: Aşağıya Kaydır
|
||||
|
@ -1096,9 +1068,6 @@ Tooltips:
|
|||
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
|
||||
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:
|
||||
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
|
||||
|
|
|
@ -322,7 +322,6 @@ Settings:
|
|||
Enter Fullscreen on Display Rotate: Переходити в повноекранний режим за обертання
|
||||
екрана
|
||||
Skip by Scrolling Over Video Player: Пропустити гортанням відеопрогравача
|
||||
Allow DASH AV1 formats: Дозволити формат DASH AV1
|
||||
Privacy Settings:
|
||||
Privacy Settings: 'Налаштування приватності'
|
||||
Remember History: 'Збрігати історію'
|
||||
|
@ -689,11 +688,6 @@ Video:
|
|||
Download Video: 'Завантажити відео'
|
||||
video only: 'лише відео'
|
||||
audio only: 'лише звук'
|
||||
Audio:
|
||||
Low: 'Низька'
|
||||
Medium: 'Середня'
|
||||
High: 'Висока'
|
||||
Best: 'Найкраща'
|
||||
Published:
|
||||
Jan: 'Ян'
|
||||
Feb: 'Лют'
|
||||
|
@ -733,7 +727,6 @@ Video:
|
|||
Video has been removed from your saved list: Відео вилучено зі списку збережених
|
||||
Video has been saved: Відео збережено
|
||||
Save Video: Зберегти відео
|
||||
translated from English: перекладено з англійської
|
||||
Sponsor Block category:
|
||||
music offtopic: Музика поза темою
|
||||
interaction: Взаємодія
|
||||
|
@ -743,7 +736,6 @@ Video:
|
|||
sponsor: Спонсор
|
||||
recap: Підсумок
|
||||
filler: Заповнювач
|
||||
Skipped segment: Пропущений відтинок
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: зациклювання добірок
|
||||
|
@ -760,26 +752,6 @@ Video:
|
|||
video: відео
|
||||
OpenInTemplate: Відкрити у {externalPlayer}
|
||||
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: Прем'єри
|
||||
Scroll to Bottom: Прокрутити до кінця
|
||||
|
@ -906,10 +878,6 @@ Tooltips:
|
|||
в налаштуваннях).
|
||||
Skip by Scrolling Over Video Player: Використовувати колесо прокрутки для прокручування
|
||||
відео в стилі MPV.
|
||||
Allow DASH AV1 formats: Формати DASH AV1 можуть виглядати краще, ніж формати DASH
|
||||
H.264. Формати DASH AV1 вимагають більше енергії для відтворення! Вони доступні
|
||||
не для всіх відео, у таких випадках програвач буде використовувати формати DASH
|
||||
H.264.
|
||||
Subscription Settings:
|
||||
Fetch Feeds from RSS: 'Якщо ввімкнено, FreeTube використовуватиме RSS замість
|
||||
стандартного способу захоплення каналу підписки. RSS швидше і запобігає блокуванню
|
||||
|
|
|
@ -382,7 +382,6 @@ Settings:
|
|||
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
|
||||
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: 'Cài đặt đăng ký'
|
||||
Hide Videos on Watch: 'Ẩn video khi đã xem'
|
||||
|
@ -806,11 +805,6 @@ Video:
|
|||
Video has been marked as watched: Video đánh dấu đã xem
|
||||
Remove From History: Xóa khỏi lịch sử
|
||||
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
|
||||
video only: Chỉ video
|
||||
Download Video: Tải video
|
||||
|
@ -824,7 +818,6 @@ Video:
|
|||
Loop Playlist: Lặp lại Playlist
|
||||
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
|
||||
Skipped segment: Phân đoạn đã bỏ qua
|
||||
Sponsor Block category:
|
||||
sponsor: Nhà tài trợ
|
||||
intro: Giới thiệu
|
||||
|
@ -834,22 +827,9 @@ Video:
|
|||
outro: Kết thúc
|
||||
recap: Tóm tắt
|
||||
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
|
||||
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
|
||||
translated from English: Được dịch từ tiếng Anh
|
||||
External Player:
|
||||
playlist: danh sách phát
|
||||
Unsupported Actions:
|
||||
|
@ -1083,10 +1063,6 @@ Tooltips:
|
|||
đượ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
|
||||
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:
|
||||
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
|
||||
|
|
|
@ -353,7 +353,6 @@ Settings:
|
|||
Folder Label: 截屏文件夹
|
||||
Enter Fullscreen on Display Rotate: 屏幕旋转时进入全屏
|
||||
Skip by Scrolling Over Video Player: 从视频播放器一侧滚动到另一侧来跳过视频
|
||||
Allow DASH AV1 formats: 允许 DASH AV1 格式
|
||||
Subscription Settings:
|
||||
Subscription Settings: '订阅设置'
|
||||
Hide Videos on Watch: '观看时隐藏视频'
|
||||
|
@ -736,11 +735,6 @@ Video:
|
|||
Shuffle Playlist: 随机播放列表
|
||||
Loop Playlist: 循环播放列表
|
||||
Starting soon, please refresh the page to check again: 即将开始,请刷新页面再次检查
|
||||
Audio:
|
||||
Best: 最佳
|
||||
High: 高
|
||||
Medium: 中
|
||||
Low: 低
|
||||
audio only: 仅音频
|
||||
video only: 仅视频
|
||||
Download Video: 下载视频
|
||||
|
@ -753,25 +747,6 @@ Video:
|
|||
Video has been removed from your saved list: 视频已从你的播放列表移除
|
||||
Video has been saved: 视频已保存
|
||||
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:
|
||||
OpenInTemplate: 在 {externalPlayer} 中打开
|
||||
video: 视频
|
||||
|
@ -797,8 +772,6 @@ Video:
|
|||
sponsor: 赞助者
|
||||
recap: 回顾
|
||||
filler: 过滤器
|
||||
translated from English: 从英语翻译而来
|
||||
Skipped segment: 跳过片段
|
||||
Premieres in: 首映于
|
||||
Premieres: 首映
|
||||
Scroll to Bottom: 滚动到底部
|
||||
|
@ -970,8 +943,6 @@ Tooltips:
|
|||
Scroll Playback Rate Over Video Player: 当光标位于视频上方时,按住 Control 键(Mac 上的 Command
|
||||
键),前后滚动鼠标滚轮,控制播放速度。按住 Control 键(Mac 上的 Command 键),左键点击鼠标快速返回到默认播放速率(1x,除非在设置中改变了数值)。
|
||||
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:
|
||||
Invidious Instance: FreeTube 要连接到哪个 Invidious 实例进行 API 调用。
|
||||
Thumbnail Preference: FreeTube中所有缩略图都会被替换为影片画面而非默认缩略图。
|
||||
|
|
|
@ -355,7 +355,6 @@ Settings:
|
|||
或 "/" 來建立子資料夾。
|
||||
Enter Fullscreen on Display Rotate: 在顯示旋轉時進入全螢幕
|
||||
Skip by Scrolling Over Video Player: 捲動影片播放器跳過
|
||||
Allow DASH AV1 formats: 允許 DASH AV1 格式
|
||||
Subscription Settings:
|
||||
Subscription Settings: '訂閱設定'
|
||||
Hide Videos on Watch: '觀看時隱藏影片'
|
||||
|
@ -746,11 +745,6 @@ Video:
|
|||
Shuffle Playlist: 隨機播放清單
|
||||
Loop Playlist: 循環播放清單
|
||||
Starting soon, please refresh the page to check again: 影片即將開始,請重新整理頁面以再次檢查是否有更新
|
||||
Audio:
|
||||
Best: 最佳
|
||||
High: 高
|
||||
Medium: 中
|
||||
Low: 低
|
||||
audio only: 僅音訊
|
||||
video only: 僅影片
|
||||
Download Video: 下載影片
|
||||
|
@ -763,7 +757,6 @@ Video:
|
|||
Video has been removed from your saved list: 影片已從您的播放清單移除
|
||||
Video has been saved: 影片已儲存
|
||||
Save Video: 儲存影片至播放清單
|
||||
translated from English: 從英文翻譯
|
||||
Sponsor Block category:
|
||||
music offtopic: 音樂離題
|
||||
interaction: 互動
|
||||
|
@ -773,7 +766,6 @@ Video:
|
|||
sponsor: 贊助商
|
||||
recap: 回顧
|
||||
filler: 填充
|
||||
Skipped segment: 已跳過的片段
|
||||
External Player:
|
||||
Unsupported Actions:
|
||||
looping playlists: 循環播放清單
|
||||
|
@ -789,25 +781,6 @@ Video:
|
|||
video: 視訊
|
||||
OpenInTemplate: 在 {externalPlayer} 中開啟
|
||||
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: 首映
|
||||
Show Super Chat Comment: 顯示超級聊天留言
|
||||
|
@ -980,8 +953,6 @@ Tooltips:
|
|||
Scroll Playback Rate Over Video Player: 當游標停在影片上時,按住 Ctrl 鍵(Mac 的話則是 Command 鍵),然後向前或向後滾動滑鼠滾輪來控制播放速度。按住
|
||||
Ctrl 鍵(Mac 的話則是 Command 鍵)並點擊滑鼠左鍵以快速回到預設的播放速度(1x,除非在設定中更改)。
|
||||
Skip by Scrolling Over Video Player: 使用滾輪跳過影片,MPV 風格。
|
||||
Allow DASH AV1 formats: DASH AV1 格式可能會看起來比 DASH H.264 格式更好。DASH AV1 格式需要更大的功率來播放!且並非所有影片都提供,在這種情況下,播放程式會使用
|
||||
DASH H.264 格式代替。
|
||||
General Settings:
|
||||
Invidious Instance: FreeTube 將連線到 Invidious 站台進行 API 呼叫。
|
||||
Thumbnail Preference: FreeTube 中所有縮圖都會被替換為影片畫面而非預設縮圖。
|
||||
|
|
521
yarn.lock
521
yarn.lock
|
@ -1049,13 +1049,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310"
|
||||
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":
|
||||
version "7.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e"
|
||||
|
@ -1063,6 +1056,13 @@
|
|||
dependencies:
|
||||
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.18.6", "@babel/template@^7.22.15", "@babel/template@^7.22.5", "@babel/template@^7.24.0":
|
||||
version "7.24.0"
|
||||
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.0.tgz#c6a524aa93a4a05d66aaf31654258fae69d87d50"
|
||||
|
@ -1545,13 +1545,6 @@
|
|||
localforage "^1.9.0"
|
||||
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":
|
||||
version "0.27.8"
|
||||
resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
|
||||
|
@ -1877,38 +1870,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406"
|
||||
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":
|
||||
version "2.7.16"
|
||||
resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz#ff81711a0fac9c68683d8bb00b63f857de77dc83"
|
||||
|
@ -2072,11 +2033,6 @@
|
|||
resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-2.0.5.tgz#325db42395cd49fe6c14057f9a900e427df8810e"
|
||||
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":
|
||||
version "0.8.10"
|
||||
resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.10.tgz#a1337ca426aa61cef9fe15b5b28e340a72f6fa99"
|
||||
|
@ -2115,16 +2071,6 @@ acorn@^8.5.0, acorn@^8.7.1, acorn@^8.8.0, acorn@^8.8.2, acorn@^8.9.0:
|
|||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
|
||||
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:
|
||||
version "6.0.2"
|
||||
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
|
||||
|
@ -2151,7 +2097,7 @@ ajv-keywords@^5.1.0:
|
|||
dependencies:
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
|
||||
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
|
||||
|
@ -2336,14 +2282,7 @@ arraybuffer.prototype.slice@^1.0.2:
|
|||
is-array-buffer "^3.0.2"
|
||||
is-shared-array-buffer "^1.0.2"
|
||||
|
||||
asn1@~0.2.3:
|
||||
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:
|
||||
assert-plus@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
||||
|
@ -2385,16 +2324,6 @@ available-typed-arrays@^1.0.5:
|
|||
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
|
||||
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:
|
||||
version "9.1.3"
|
||||
resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a"
|
||||
|
@ -2447,13 +2376,6 @@ batch@0.6.1:
|
|||
resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16"
|
||||
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-integer@^1.6.44:
|
||||
version "1.6.51"
|
||||
resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.51.tgz#0df92a5d9880560d3ff2d5fd20245c889d130686"
|
||||
|
@ -2721,11 +2643,6 @@ caniuse-lite@^1.0.30001587:
|
|||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz#93a3ee17a35aa6a9f0c6ef1b2ab49507d1ab9079"
|
||||
integrity sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==
|
||||
|
||||
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.1, chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||
|
@ -3193,13 +3110,6 @@ csstype@^3.1.0:
|
|||
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
|
||||
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:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
|
@ -3425,11 +3335,6 @@ dom-serializer@^2.0.0:
|
|||
domhandler "^5.0.2"
|
||||
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:
|
||||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
|
||||
|
@ -3490,14 +3395,6 @@ eastasianwidth@^0.2.0:
|
|||
resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
|
||||
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:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
|
@ -3582,6 +3479,11 @@ electron@^29.3.0:
|
|||
"@types/node" "^20.9.0"
|
||||
extract-zip "^2.0.1"
|
||||
|
||||
eme-encryption-scheme-polyfill@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/eme-encryption-scheme-polyfill/-/eme-encryption-scheme-polyfill-2.1.1.tgz#91c823ed584e8ec5a9f03a6a676def8f80c57a4c"
|
||||
integrity sha512-njD17wcUrbqCj0ArpLu5zWXtaiupHb/2fIUQGdInf83GlI+Q6mmqaPGLdrke4savKAu15J/z1Tg/ivDgl14g0g==
|
||||
|
||||
emoji-regex@^10.0.0:
|
||||
version "10.2.1"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.2.1.tgz#a41c330d957191efd3d9dfe6e1e8e1e9ab048b3f"
|
||||
|
@ -4194,11 +4096,6 @@ ext-name@^5.0.0:
|
|||
ext-list "^2.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:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
|
||||
|
@ -4210,11 +4107,6 @@ extract-zip@^2.0.1:
|
|||
optionalDependencies:
|
||||
"@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:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07"
|
||||
|
@ -4397,11 +4289,6 @@ foreground-child@^3.1.0:
|
|||
cross-spawn "^7.0.0"
|
||||
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:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
|
||||
|
@ -4411,15 +4298,6 @@ form-data@^4.0.0:
|
|||
combined-stream "^1.0.8"
|
||||
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:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
|
||||
|
@ -4585,13 +4463,6 @@ get-tsconfig@^4.7.0:
|
|||
dependencies:
|
||||
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:
|
||||
version "5.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
|
||||
|
@ -4673,14 +4544,6 @@ global-prefix@^3.0.0:
|
|||
kind-of "^6.0.2"
|
||||
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:
|
||||
version "11.12.0"
|
||||
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
|
||||
|
@ -4773,19 +4636,6 @@ handle-thing@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e"
|
||||
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:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
|
||||
|
@ -4980,15 +4830,6 @@ http-proxy@^1.18.1:
|
|||
follow-redirects "^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:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d"
|
||||
|
@ -5088,11 +4929,6 @@ indent-string@^4.0.0:
|
|||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
||||
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:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
||||
|
@ -5260,11 +5096,6 @@ is-fullwidth-code-point@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||
|
||||
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:
|
||||
version "1.0.10"
|
||||
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72"
|
||||
|
@ -5410,11 +5241,6 @@ is-typed-array@^1.1.3, is-typed-array@^1.1.9:
|
|||
for-each "^0.3.3"
|
||||
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:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
|
||||
|
@ -5466,11 +5292,6 @@ isobject@^3.0.1:
|
|||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||
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@^2.3.5:
|
||||
version "2.3.6"
|
||||
resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8"
|
||||
|
@ -5540,11 +5361,6 @@ js-yaml@^4.0.0, js-yaml@^4.1.0:
|
|||
dependencies:
|
||||
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:
|
||||
version "2.5.2"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
|
||||
|
@ -5592,17 +5408,12 @@ json-schema-traverse@^1.0.0:
|
|||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
|
||||
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:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||
|
@ -5645,21 +5456,6 @@ jsonfile@^6.0.1:
|
|||
optionalDependencies:
|
||||
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:
|
||||
version "4.5.2"
|
||||
resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.2.tgz#0e310ce73bf7851ec702f2eaf46ec4e3805cce56"
|
||||
|
@ -5902,15 +5698,6 @@ lru-cache@^6.0.0:
|
|||
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a"
|
||||
integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==
|
||||
|
||||
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@^12.0.1:
|
||||
version "12.0.1"
|
||||
resolved "https://registry.yarnpkg.com/marked/-/marked-12.0.1.tgz#8ab1eb15560c7cbe3b011074845d7ca6c4d392b0"
|
||||
|
@ -6000,7 +5787,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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
|
||||
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
|
||||
|
@ -6037,13 +5824,6 @@ mimic-response@^3.1.0:
|
|||
resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
|
||||
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:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
|
||||
|
@ -6123,16 +5903,6 @@ modify-filename@^1.1.0:
|
|||
resolved "https://registry.yarnpkg.com/modify-filename/-/modify-filename-1.1.0.tgz#9a2dec83806fbb2d975f22beec859ca26b393aa1"
|
||||
integrity sha1-mi3sg4Bvuy2XXyK+7IWcoms5OqE=
|
||||
|
||||
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:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
||||
|
@ -6156,14 +5926,6 @@ multicast-dns@^7.2.5:
|
|||
dns-packet "^5.2.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:
|
||||
version "3.3.7"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
|
||||
|
@ -6268,11 +6030,6 @@ nth-check@^2.0.1, nth-check@^2.1.1:
|
|||
dependencies:
|
||||
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:
|
||||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0"
|
||||
|
@ -6608,11 +6365,6 @@ pend@~1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
|
||||
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:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f"
|
||||
|
@ -6638,13 +6390,6 @@ pify@^3.0.0:
|
|||
resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176"
|
||||
integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=
|
||||
|
||||
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:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
|
||||
|
@ -7016,11 +6761,6 @@ pseudomap@^1.0.2:
|
|||
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||
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:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
|
||||
|
@ -7029,7 +6769,7 @@ pump@^3.0.0:
|
|||
end-of-stream "^1.1.0"
|
||||
once "^1.3.1"
|
||||
|
||||
punycode@^2.1.0, punycode@^2.1.1:
|
||||
punycode@^2.1.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||
|
@ -7048,11 +6788,6 @@ qs@6.11.0:
|
|||
dependencies:
|
||||
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:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
|
||||
|
@ -7286,32 +7021,6 @@ renderkid@^3.0.0:
|
|||
lodash "^4.17.21"
|
||||
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:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||
|
@ -7430,13 +7139,6 @@ run-parallel@^1.1.9:
|
|||
dependencies:
|
||||
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:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c"
|
||||
|
@ -7452,18 +7154,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"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
||||
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:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
|
||||
|
@ -7473,7 +7168,7 @@ safe-regex-test@^1.0.0:
|
|||
get-intrinsic "^1.1.3"
|
||||
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"
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
@ -7645,6 +7340,13 @@ setprototypeof@1.2.0:
|
|||
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
|
||||
integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
|
||||
|
||||
shaka-player@^4.7.13:
|
||||
version "4.7.13"
|
||||
resolved "https://registry.yarnpkg.com/shaka-player/-/shaka-player-4.7.13.tgz#bdfb5b7a1b439d3163f11666a99fb6c2396258d0"
|
||||
integrity sha512-PTU0lTEx1C8LdyNdZSSTea3Wf1/WT4KJzp6o07CofZqq8fzrGDiWElbir+LQIH1CTZpicO1otJQ24xjPgXz9kg==
|
||||
dependencies:
|
||||
eme-encryption-scheme-polyfill "^2.1.1"
|
||||
|
||||
shallow-clone@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3"
|
||||
|
@ -7840,21 +7542,6 @@ sprintf-js@^1.1.2:
|
|||
resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673"
|
||||
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:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-1.0.0.tgz#68b55cb61ea639ff57136f36b216a291800d1465"
|
||||
|
@ -7870,7 +7557,16 @@ statuses@2.0.1:
|
|||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
|
||||
integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
|
||||
|
||||
"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
"string-width-cjs@npm:string-width@^4.2.0":
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^6.0.1"
|
||||
|
||||
string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
|
||||
integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
|
||||
|
@ -7956,7 +7652,14 @@ string_decoder@~1.1.1:
|
|||
dependencies:
|
||||
safe-buffer "~5.1.0"
|
||||
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
"strip-ansi-cjs@npm:strip-ansi@^6.0.1":
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
dependencies:
|
||||
ansi-regex "^5.0.1"
|
||||
|
||||
strip-ansi@^6.0.0, strip-ansi@^6.0.1:
|
||||
version "6.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
|
||||
integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
|
||||
|
@ -8285,14 +7988,6 @@ toidentifier@1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
|
||||
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:
|
||||
version "1.2.2"
|
||||
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
|
||||
|
@ -8320,18 +8015,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"
|
||||
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:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
|
||||
|
@ -8421,11 +8104,6 @@ unbox-primitive@^1.0.2:
|
|||
has-symbols "^1.0.3"
|
||||
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:
|
||||
version "5.26.5"
|
||||
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
|
||||
|
@ -8514,11 +8192,6 @@ uri-js@^4.2.2:
|
|||
dependencies:
|
||||
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:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61"
|
||||
|
@ -8558,11 +8231,6 @@ utils-merge@1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
|
||||
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:
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
|
||||
|
@ -8581,15 +8249,6 @@ vary@~1.1.2:
|
|||
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
|
||||
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:
|
||||
version "1.10.1"
|
||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.1.tgz#4bf09eeccf4563b109ed4b3d458380c972b0cdeb"
|
||||
|
@ -8599,85 +8258,6 @@ verror@^1.10.0:
|
|||
core-util-is "1.0.2"
|
||||
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:
|
||||
version "5.1.4"
|
||||
resolved "https://registry.yarnpkg.com/vue-devtools/-/vue-devtools-5.1.4.tgz#265a7458ade2affb291739176964256b597fa302"
|
||||
|
@ -8953,7 +8533,16 @@ wildcard@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec"
|
||||
integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==
|
||||
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0:
|
||||
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
dependencies:
|
||||
ansi-styles "^4.0.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^6.0.0"
|
||||
|
||||
wrap-ansi@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||
|
|
Loading…
Reference in New Issue