diff --git a/.github/workflows/build_restreamer-ui.yaml b/.github/workflows/build_restreamer-ui.yaml index 710439b..a1844d0 100644 --- a/.github/workflows/build_restreamer-ui.yaml +++ b/.github/workflows/build_restreamer-ui.yaml @@ -51,7 +51,8 @@ jobs: context: . file: ./Dockerfile build-args: | - PUBLIC_URL=/ui + PUBLIC_URL=./ + NODE_IMAGE=${{ env.NODE_IMAGE }} platforms: linux/amd64,linux/arm64,linux/arm/v7 push: true tags: | diff --git a/.github_build/Build.restreamer-ui.env b/.github_build/Build.restreamer-ui.env index 9deef86..348b6f2 100644 --- a/.github_build/Build.restreamer-ui.env +++ b/.github_build/Build.restreamer-ui.env @@ -1,2 +1,3 @@ # RESTREAMER UI -RELEASE=1.1.0 +RELEASE=1.2.0 +NODE_IMAGE=node:18.6.0-alpine3.15 diff --git a/.linguirc b/.linguirc index 69ba787..af356f2 100644 --- a/.linguirc +++ b/.linguirc @@ -17,6 +17,7 @@ "de", "fr", "it", + "pl", "pt", "es", "ru" diff --git a/CHANGELOG.md b/CHANGELOG.md index 764591e..3fdb24b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,36 @@ # Restreamer-UI +#### v1.1.0 > v1.2.0 + +- Add allow writing HLS to disk +- Add audio pan filter +- Add video rotation filter ([#347](https://github.com/datarhei/restreamer/discussions/347)) +- Add video h/v flip filter +- Add audio volume filter ([#313](https://github.com/datarhei/restreamer/issues/313)) +- Add audio loudness normalization filter +- Add audio resample filter, that was before part of the encoders +- Add HLS Master playlist (requires FFmpeg hlsbitrate.patch) (thx Dwaynarang, Electra Player compatibility) +- Add LinkedIn & Azure Media Services to publication services (thx kalashnikov) +- Add AirPlay support with silvermine videojs plugin +- Add Chromecast support (thx badincite, [#10](https://github.com/datarhei/restreamer-ui/pull/10)) +- Add stream distribution across multiple internal servers +- Add SRT settings +- Add HLS version selection (thx Dwaynarang, Electra Player compatibility) +- Add Owncast to publication services ([#369](https://github.com/datarhei/restreamer/issues/369)) +- Add Telegram to publication services (thx Martin Held) +- Add Polish translations (thx Robert Rykała) +- Mod extends the datarhei Core publication service with srt streaming +- Mod allow decoders and encoders to set global options +- Mod allow trailing slash on Core address +- Fix player problem with different stream formats (9:16) +- Fix process report naming +- Fix publication service icon styles +- Fix VAAPI encoder + +Dependency: + +- datarhei Core v16.9.0+ + #### v1.0.0 > v1.1.0 - Add compatibility list for encoders @@ -9,8 +40,9 @@ - Add missed VAAPI encoder - Add missed V4L2_M2M encoder - Add missed Raspberry Pi 64bit Docker image -- Mod updates VideoJS - Add option to disable playersites share-button (thx Anders Mellgren) +- Add security pr +- Mod updates VideoJS - Fix hides unset content license on playersite (thx Anders Mellgren) - Fix updates V4L2 device-list on select - Fix snapshot interval ([#341](https://github.com/datarhei/restreamer/issues/340)) @@ -21,7 +53,6 @@ - Fix datarhei Core publication service - Fix dependabot alerts - Fix code scanning alerts -- Merge security pr Preparation for FFmpeg v5.0 (migration will not work) diff --git a/Dockerfile b/Dockerfile index f378979..9bcb7d8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,11 @@ -FROM node:17.9.0-alpine3.15 +ARG NODE_IMAGE=node:18.6.0-alpine3.15 + +FROM $NODE_IMAGE ARG NODE_SPACE_SIZE=10240 ENV NODE_OPTIONS="--openssl-legacy-provider --max-old-space-size=$NODE_SPACE_SIZE" -ARG PUBLIC_URL "/" +ENV PUBLIC_URL "./" COPY . /ui diff --git a/README.md b/README.md index 76f6893..2e01374 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Restreamer-UI -The user interface of the Restreamer for the connection to the Core application. +The user interface of the Restreamer for the connection to the [datarhei Core](https://github.com/datarhei/core)application. - React - Material-UI (MUI) @@ -17,7 +17,7 @@ $ npm run start ``` Connect the UI with a [datarhei Core](https://github.com/datarhei/core): -http://localhost:3000?address=http://core-ip:core-port/ +http://localhost:3000?address=http://core-ip:core-port ### To add/fix translations: Locales are located in `src/locals` @@ -26,5 +26,23 @@ $ npm run i18n-extract:clean $ npm run i18n-compile ``` +### Known outdated dependencies +Requires MUI 5.2+ & React 18 compatibility. Clappr-Player upgrade (or removal). + +```sh +@mui/material 5.1.1 → 5.9.0 +@mui/styles ^5.1.1 → ^5.9.0 +@testing-library/dom ^8.13.0 → ^8.16.0 +@testing-library/jest-dom ^4.2.4 → ^5.16.4 +@testing-library/react ^12.1.5 → ^13.3.0 +@testing-library/user-event ^13.5.0 → ^14.2.5 +eslint ^7.32.0 → ^8.19.0 +hls.js ^0.14.17 → ^1.1.5 +react ^17.0.2 → ^18.2.0 +react-dom ^17.0.2 → ^18.2.0 +react-scripts ^4.0.3 → ^5.0.1 +typescript ^3.9.7 → ^4.7.4 +``` + ## License See the [LICENSE](./LICENSE) file for licensing information. diff --git a/package.json b/package.json index 3c27df3..2d89acb 100644 --- a/package.json +++ b/package.json @@ -1,28 +1,28 @@ { "name": "restreamer-ui", - "version": "1.1.0", - "bundle": "restreamer-v2.1.0", + "version": "1.2.0", + "bundle": "restreamer-v2.2.0", "private": false, "license": "Apache-2.0", "dependencies": { - "@auth0/auth0-spa-js": "^1.22.0", + "@auth0/auth0-spa-js": "^1.22.1", "@clappr/core": "^0.4.21", "@clappr/hlsjs-playback": "^0.6.0", "@clappr/plugins": "^0.4.16", "@clappr/stats-plugin": "^0.2.0", - "@emotion/react": "^11.9.0", - "@emotion/styled": "^11.8.1", + "@emotion/react": "^11.9.3", + "@emotion/styled": "^11.9.3", "@fontsource/dosis": "^4.5.8", "@fontsource/roboto": "^4.5.7", "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/free-brands-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^6.1.1", - "@fortawesome/react-fontawesome": "^0.1.18", - "@lingui/core": "^3.13.3", - "@lingui/macro": "^3.13.3", - "@lingui/react": "^3.13.3", - "@mui/icons-material": "^5.8.2", - "@mui/lab": "^5.0.0-alpha.84", + "@fortawesome/react-fontawesome": "^0.2.0", + "@lingui/core": "^3.14.0", + "@lingui/macro": "^3.14.0", + "@lingui/react": "^3.14.0", + "@mui/icons-material": "^5.8.4", + "@mui/lab": "^5.0.0-alpha.90", "@mui/material": "5.1.1", "@mui/styles": "^5.1.1", "@testing-library/dom": "^8.13.0", @@ -82,10 +82,10 @@ ] }, "devDependencies": { - "@babel/core": "^7.18.2", - "@lingui/cli": "^3.13.3", + "@babel/core": "^7.18.6", + "@lingui/cli": "^3.14.0", "babel-core": "^7.0.0-bridge.0", - "prettier": "^2.6.2", + "prettier": "^2.7.1", "react-error-overlay": "^6.0.11" }, "resolutions": { diff --git a/public/_player/videojs/dist/ic_airplay_white_24px.svg b/public/_player/videojs/dist/ic_airplay_white_24px.svg new file mode 100644 index 0000000..aa50dc5 --- /dev/null +++ b/public/_player/videojs/dist/ic_airplay_white_24px.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/public/_player/videojs/dist/ic_cast_connected_white_24dp.png b/public/_player/videojs/dist/ic_cast_connected_white_24dp.png new file mode 100644 index 0000000..dcba78d Binary files /dev/null and b/public/_player/videojs/dist/ic_cast_connected_white_24dp.png differ diff --git a/public/_player/videojs/dist/ic_cast_white_24dp.png b/public/_player/videojs/dist/ic_cast_white_24dp.png new file mode 100644 index 0000000..62c086f Binary files /dev/null and b/public/_player/videojs/dist/ic_cast_white_24dp.png differ diff --git a/public/_player/videojs/dist/videojs-airplay.min.css b/public/_player/videojs/dist/videojs-airplay.min.css new file mode 100644 index 0000000..abb4591 --- /dev/null +++ b/public/_player/videojs/dist/videojs-airplay.min.css @@ -0,0 +1 @@ +.vjs-airplay-button .vjs-icon-placeholder{background:url("ic_airplay_white_24px.svg") center center no-repeat;background-size:contain;display:inline-block;width:20px;height:20px}.vjs-airplay-button:hover{cursor:pointer}.vjs-airplay-button:hover .vjs-icon-placeholder{background-image:url("ic_airplay_white_24px.svg")} diff --git a/public/_player/videojs/dist/videojs-airplay.min.js b/public/_player/videojs/dist/videojs-airplay.min.js new file mode 100644 index 0000000..4ec1cd4 --- /dev/null +++ b/public/_player/videojs/dist/videojs-airplay.min.js @@ -0,0 +1,1315 @@ +/*! @silvermine/videojs-airplay 2022-07-12 v1.1.0-7-g2c81dfd-dirty */ + +(function() { + function r(e, n, t) { + function o(i, f) { + if (!n[i]) { + if (!e[i]) { + var c = "function" == typeof require && require; + if (!f && c) return c(i, !0); + if (u) return u(i, !0); + var a = new Error("Cannot find module '" + i + "'"); + throw a.code = "MODULE_NOT_FOUND", a; + } + var p = n[i] = { + exports: {} + }; + e[i][0].call(p.exports, function(r) { + var n = e[i][1][r]; + return o(n || r); + }, p, p.exports, r, e, n, t); + } + return n[i].exports; + } + for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) o(t[i]); + return o; + } + return r; +})()({ + 1: [ function(require, module, exports) { + var isCallable = require("../internals/is-callable"); + var tryToString = require("../internals/try-to-string"); + var $TypeError = TypeError; + module.exports = function(argument) { + if (isCallable(argument)) return argument; + throw $TypeError(tryToString(argument) + " is not a function"); + }; + }, { + "../internals/is-callable": 32, + "../internals/try-to-string": 64 + } ], + 2: [ function(require, module, exports) { + var isObject = require("../internals/is-object"); + var $String = String; + var $TypeError = TypeError; + module.exports = function(argument) { + if (isObject(argument)) return argument; + throw $TypeError($String(argument) + " is not an object"); + }; + }, { + "../internals/is-object": 34 + } ], + 3: [ function(require, module, exports) { + var toIndexedObject = require("../internals/to-indexed-object"); + var toAbsoluteIndex = require("../internals/to-absolute-index"); + var lengthOfArrayLike = require("../internals/length-of-array-like"); + var createMethod = function(IS_INCLUDES) { + return function($this, el, fromIndex) { + var O = toIndexedObject($this); + var length = lengthOfArrayLike(O); + var index = toAbsoluteIndex(fromIndex, length); + var value; + if (IS_INCLUDES && el != el) while (length > index) { + value = O[index++]; + if (value != value) return true; + } else for (;length > index; index++) { + if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; + } + return !IS_INCLUDES && -1; + }; + }; + module.exports = { + includes: createMethod(true), + indexOf: createMethod(false) + }; + }, { + "../internals/length-of-array-like": 37, + "../internals/to-absolute-index": 57, + "../internals/to-indexed-object": 58 + } ], + 4: [ function(require, module, exports) { + var uncurryThis = require("../internals/function-uncurry-this"); + module.exports = uncurryThis([].slice); + }, { + "../internals/function-uncurry-this": 22 + } ], + 5: [ function(require, module, exports) { + var uncurryThis = require("../internals/function-uncurry-this"); + var toString = uncurryThis({}.toString); + var stringSlice = uncurryThis("".slice); + module.exports = function(it) { + return stringSlice(toString(it), 8, -1); + }; + }, { + "../internals/function-uncurry-this": 22 + } ], + 6: [ function(require, module, exports) { + var hasOwn = require("../internals/has-own-property"); + var ownKeys = require("../internals/own-keys"); + var getOwnPropertyDescriptorModule = require("../internals/object-get-own-property-descriptor"); + var definePropertyModule = require("../internals/object-define-property"); + module.exports = function(target, source, exceptions) { + var keys = ownKeys(source); + var defineProperty = definePropertyModule.f; + var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + if (!hasOwn(target, key) && !(exceptions && hasOwn(exceptions, key))) { + defineProperty(target, key, getOwnPropertyDescriptor(source, key)); + } + } + }; + }, { + "../internals/has-own-property": 26, + "../internals/object-define-property": 43, + "../internals/object-get-own-property-descriptor": 44, + "../internals/own-keys": 52 + } ], + 7: [ function(require, module, exports) { + var DESCRIPTORS = require("../internals/descriptors"); + var definePropertyModule = require("../internals/object-define-property"); + var createPropertyDescriptor = require("../internals/create-property-descriptor"); + module.exports = DESCRIPTORS ? function(object, key, value) { + return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); + } : function(object, key, value) { + object[key] = value; + return object; + }; + }, { + "../internals/create-property-descriptor": 8, + "../internals/descriptors": 11, + "../internals/object-define-property": 43 + } ], + 8: [ function(require, module, exports) { + module.exports = function(bitmap, value) { + return { + enumerable: !(bitmap & 1), + configurable: !(bitmap & 2), + writable: !(bitmap & 4), + value: value + }; + }; + }, {} ], + 9: [ function(require, module, exports) { + var isCallable = require("../internals/is-callable"); + var definePropertyModule = require("../internals/object-define-property"); + var makeBuiltIn = require("../internals/make-built-in"); + var defineGlobalProperty = require("../internals/define-global-property"); + module.exports = function(O, key, value, options) { + if (!options) options = {}; + var simple = options.enumerable; + var name = options.name !== undefined ? options.name : key; + if (isCallable(value)) makeBuiltIn(value, name, options); + if (options.global) { + if (simple) O[key] = value; else defineGlobalProperty(key, value); + } else { + try { + if (!options.unsafe) delete O[key]; else if (O[key]) simple = true; + } catch (error) {} + if (simple) O[key] = value; else definePropertyModule.f(O, key, { + value: value, + enumerable: false, + configurable: !options.nonConfigurable, + writable: !options.nonWritable + }); + } + return O; + }; + }, { + "../internals/define-global-property": 10, + "../internals/is-callable": 32, + "../internals/make-built-in": 38, + "../internals/object-define-property": 43 + } ], + 10: [ function(require, module, exports) { + var global = require("../internals/global"); + var defineProperty = Object.defineProperty; + module.exports = function(key, value) { + try { + defineProperty(global, key, { + value: value, + configurable: true, + writable: true + }); + } catch (error) { + global[key] = value; + } + return value; + }; + }, { + "../internals/global": 25 + } ], + 11: [ function(require, module, exports) { + var fails = require("../internals/fails"); + module.exports = !fails(function() { + return Object.defineProperty({}, 1, { + get: function() { + return 7; + } + })[1] != 7; + }); + }, { + "../internals/fails": 17 + } ], + 12: [ function(require, module, exports) { + var global = require("../internals/global"); + var isObject = require("../internals/is-object"); + var document = global.document; + var EXISTS = isObject(document) && isObject(document.createElement); + module.exports = function(it) { + return EXISTS ? document.createElement(it) : {}; + }; + }, { + "../internals/global": 25, + "../internals/is-object": 34 + } ], + 13: [ function(require, module, exports) { + var getBuiltIn = require("../internals/get-built-in"); + module.exports = getBuiltIn("navigator", "userAgent") || ""; + }, { + "../internals/get-built-in": 23 + } ], + 14: [ function(require, module, exports) { + var global = require("../internals/global"); + var userAgent = require("../internals/engine-user-agent"); + var process = global.process; + var Deno = global.Deno; + var versions = process && process.versions || Deno && Deno.version; + var v8 = versions && versions.v8; + var match, version; + if (v8) { + match = v8.split("."); + version = match[0] > 0 && match[0] < 4 ? 1 : +(match[0] + match[1]); + } + if (!version && userAgent) { + match = userAgent.match(/Edge\/(\d+)/); + if (!match || match[1] >= 74) { + match = userAgent.match(/Chrome\/(\d+)/); + if (match) version = +match[1]; + } + } + module.exports = version; + }, { + "../internals/engine-user-agent": 13, + "../internals/global": 25 + } ], + 15: [ function(require, module, exports) { + module.exports = [ "constructor", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "toLocaleString", "toString", "valueOf" ]; + }, {} ], + 16: [ function(require, module, exports) { + var global = require("../internals/global"); + var getOwnPropertyDescriptor = require("../internals/object-get-own-property-descriptor").f; + var createNonEnumerableProperty = require("../internals/create-non-enumerable-property"); + var defineBuiltIn = require("../internals/define-built-in"); + var defineGlobalProperty = require("../internals/define-global-property"); + var copyConstructorProperties = require("../internals/copy-constructor-properties"); + var isForced = require("../internals/is-forced"); + module.exports = function(options, source) { + var TARGET = options.target; + var GLOBAL = options.global; + var STATIC = options.stat; + var FORCED, target, key, targetProperty, sourceProperty, descriptor; + if (GLOBAL) { + target = global; + } else if (STATIC) { + target = global[TARGET] || defineGlobalProperty(TARGET, {}); + } else { + target = (global[TARGET] || {}).prototype; + } + if (target) for (key in source) { + sourceProperty = source[key]; + if (options.dontCallGetSet) { + descriptor = getOwnPropertyDescriptor(target, key); + targetProperty = descriptor && descriptor.value; + } else targetProperty = target[key]; + FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? "." : "#") + key, options.forced); + if (!FORCED && targetProperty !== undefined) { + if (typeof sourceProperty == typeof targetProperty) continue; + copyConstructorProperties(sourceProperty, targetProperty); + } + if (options.sham || targetProperty && targetProperty.sham) { + createNonEnumerableProperty(sourceProperty, "sham", true); + } + defineBuiltIn(target, key, sourceProperty, options); + } + }; + }, { + "../internals/copy-constructor-properties": 6, + "../internals/create-non-enumerable-property": 7, + "../internals/define-built-in": 9, + "../internals/define-global-property": 10, + "../internals/global": 25, + "../internals/is-forced": 33, + "../internals/object-get-own-property-descriptor": 44 + } ], + 17: [ function(require, module, exports) { + module.exports = function(exec) { + try { + return !!exec(); + } catch (error) { + return true; + } + }; + }, {} ], + 18: [ function(require, module, exports) { + var fails = require("../internals/fails"); + module.exports = !fails(function() { + var test = function() {}.bind(); + return typeof test != "function" || test.hasOwnProperty("prototype"); + }); + }, { + "../internals/fails": 17 + } ], + 19: [ function(require, module, exports) { + "use strict"; + var uncurryThis = require("../internals/function-uncurry-this"); + var aCallable = require("../internals/a-callable"); + var isObject = require("../internals/is-object"); + var hasOwn = require("../internals/has-own-property"); + var arraySlice = require("../internals/array-slice"); + var NATIVE_BIND = require("../internals/function-bind-native"); + var $Function = Function; + var concat = uncurryThis([].concat); + var join = uncurryThis([].join); + var factories = {}; + var construct = function(C, argsLength, args) { + if (!hasOwn(factories, argsLength)) { + for (var list = [], i = 0; i < argsLength; i++) list[i] = "a[" + i + "]"; + factories[argsLength] = $Function("C,a", "return new C(" + join(list, ",") + ")"); + } + return factories[argsLength](C, args); + }; + module.exports = NATIVE_BIND ? $Function.bind : function bind(that) { + var F = aCallable(this); + var Prototype = F.prototype; + var partArgs = arraySlice(arguments, 1); + var boundFunction = function bound() { + var args = concat(partArgs, arraySlice(arguments)); + return this instanceof boundFunction ? construct(F, args.length, args) : F.apply(that, args); + }; + if (isObject(Prototype)) boundFunction.prototype = Prototype; + return boundFunction; + }; + }, { + "../internals/a-callable": 1, + "../internals/array-slice": 4, + "../internals/function-bind-native": 18, + "../internals/function-uncurry-this": 22, + "../internals/has-own-property": 26, + "../internals/is-object": 34 + } ], + 20: [ function(require, module, exports) { + var NATIVE_BIND = require("../internals/function-bind-native"); + var call = Function.prototype.call; + module.exports = NATIVE_BIND ? call.bind(call) : function() { + return call.apply(call, arguments); + }; + }, { + "../internals/function-bind-native": 18 + } ], + 21: [ function(require, module, exports) { + var DESCRIPTORS = require("../internals/descriptors"); + var hasOwn = require("../internals/has-own-property"); + var FunctionPrototype = Function.prototype; + var getDescriptor = DESCRIPTORS && Object.getOwnPropertyDescriptor; + var EXISTS = hasOwn(FunctionPrototype, "name"); + var PROPER = EXISTS && function something() {}.name === "something"; + var CONFIGURABLE = EXISTS && (!DESCRIPTORS || DESCRIPTORS && getDescriptor(FunctionPrototype, "name").configurable); + module.exports = { + EXISTS: EXISTS, + PROPER: PROPER, + CONFIGURABLE: CONFIGURABLE + }; + }, { + "../internals/descriptors": 11, + "../internals/has-own-property": 26 + } ], + 22: [ function(require, module, exports) { + var NATIVE_BIND = require("../internals/function-bind-native"); + var FunctionPrototype = Function.prototype; + var bind = FunctionPrototype.bind; + var call = FunctionPrototype.call; + var uncurryThis = NATIVE_BIND && bind.bind(call, call); + module.exports = NATIVE_BIND ? function(fn) { + return fn && uncurryThis(fn); + } : function(fn) { + return fn && function() { + return call.apply(fn, arguments); + }; + }; + }, { + "../internals/function-bind-native": 18 + } ], + 23: [ function(require, module, exports) { + var global = require("../internals/global"); + var isCallable = require("../internals/is-callable"); + var aFunction = function(argument) { + return isCallable(argument) ? argument : undefined; + }; + module.exports = function(namespace, method) { + return arguments.length < 2 ? aFunction(global[namespace]) : global[namespace] && global[namespace][method]; + }; + }, { + "../internals/global": 25, + "../internals/is-callable": 32 + } ], + 24: [ function(require, module, exports) { + var aCallable = require("../internals/a-callable"); + module.exports = function(V, P) { + var func = V[P]; + return func == null ? undefined : aCallable(func); + }; + }, { + "../internals/a-callable": 1 + } ], + 25: [ function(require, module, exports) { + (function(global) { + (function() { + var check = function(it) { + return it && it.Math == Math && it; + }; + module.exports = check(typeof globalThis == "object" && globalThis) || check(typeof window == "object" && window) || check(typeof self == "object" && self) || check(typeof global == "object" && global) || function() { + return this; + }() || Function("return this")(); + }).call(this); + }).call(this, typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}); + }, {} ], + 26: [ function(require, module, exports) { + var uncurryThis = require("../internals/function-uncurry-this"); + var toObject = require("../internals/to-object"); + var hasOwnProperty = uncurryThis({}.hasOwnProperty); + module.exports = Object.hasOwn || function hasOwn(it, key) { + return hasOwnProperty(toObject(it), key); + }; + }, { + "../internals/function-uncurry-this": 22, + "../internals/to-object": 61 + } ], + 27: [ function(require, module, exports) { + module.exports = {}; + }, {} ], + 28: [ function(require, module, exports) { + var DESCRIPTORS = require("../internals/descriptors"); + var fails = require("../internals/fails"); + var createElement = require("../internals/document-create-element"); + module.exports = !DESCRIPTORS && !fails(function() { + return Object.defineProperty(createElement("div"), "a", { + get: function() { + return 7; + } + }).a != 7; + }); + }, { + "../internals/descriptors": 11, + "../internals/document-create-element": 12, + "../internals/fails": 17 + } ], + 29: [ function(require, module, exports) { + var uncurryThis = require("../internals/function-uncurry-this"); + var fails = require("../internals/fails"); + var classof = require("../internals/classof-raw"); + var $Object = Object; + var split = uncurryThis("".split); + module.exports = fails(function() { + return !$Object("z").propertyIsEnumerable(0); + }) ? function(it) { + return classof(it) == "String" ? split(it, "") : $Object(it); + } : $Object; + }, { + "../internals/classof-raw": 5, + "../internals/fails": 17, + "../internals/function-uncurry-this": 22 + } ], + 30: [ function(require, module, exports) { + var uncurryThis = require("../internals/function-uncurry-this"); + var isCallable = require("../internals/is-callable"); + var store = require("../internals/shared-store"); + var functionToString = uncurryThis(Function.toString); + if (!isCallable(store.inspectSource)) { + store.inspectSource = function(it) { + return functionToString(it); + }; + } + module.exports = store.inspectSource; + }, { + "../internals/function-uncurry-this": 22, + "../internals/is-callable": 32, + "../internals/shared-store": 55 + } ], + 31: [ function(require, module, exports) { + var NATIVE_WEAK_MAP = require("../internals/native-weak-map"); + var global = require("../internals/global"); + var uncurryThis = require("../internals/function-uncurry-this"); + var isObject = require("../internals/is-object"); + var createNonEnumerableProperty = require("../internals/create-non-enumerable-property"); + var hasOwn = require("../internals/has-own-property"); + var shared = require("../internals/shared-store"); + var sharedKey = require("../internals/shared-key"); + var hiddenKeys = require("../internals/hidden-keys"); + var OBJECT_ALREADY_INITIALIZED = "Object already initialized"; + var TypeError = global.TypeError; + var WeakMap = global.WeakMap; + var set, get, has; + var enforce = function(it) { + return has(it) ? get(it) : set(it, {}); + }; + var getterFor = function(TYPE) { + return function(it) { + var state; + if (!isObject(it) || (state = get(it)).type !== TYPE) { + throw TypeError("Incompatible receiver, " + TYPE + " required"); + } + return state; + }; + }; + if (NATIVE_WEAK_MAP || shared.state) { + var store = shared.state || (shared.state = new WeakMap()); + var wmget = uncurryThis(store.get); + var wmhas = uncurryThis(store.has); + var wmset = uncurryThis(store.set); + set = function(it, metadata) { + if (wmhas(store, it)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + wmset(store, it, metadata); + return metadata; + }; + get = function(it) { + return wmget(store, it) || {}; + }; + has = function(it) { + return wmhas(store, it); + }; + } else { + var STATE = sharedKey("state"); + hiddenKeys[STATE] = true; + set = function(it, metadata) { + if (hasOwn(it, STATE)) throw new TypeError(OBJECT_ALREADY_INITIALIZED); + metadata.facade = it; + createNonEnumerableProperty(it, STATE, metadata); + return metadata; + }; + get = function(it) { + return hasOwn(it, STATE) ? it[STATE] : {}; + }; + has = function(it) { + return hasOwn(it, STATE); + }; + } + module.exports = { + set: set, + get: get, + has: has, + enforce: enforce, + getterFor: getterFor + }; + }, { + "../internals/create-non-enumerable-property": 7, + "../internals/function-uncurry-this": 22, + "../internals/global": 25, + "../internals/has-own-property": 26, + "../internals/hidden-keys": 27, + "../internals/is-object": 34, + "../internals/native-weak-map": 41, + "../internals/shared-key": 54, + "../internals/shared-store": 55 + } ], + 32: [ function(require, module, exports) { + module.exports = function(argument) { + return typeof argument == "function"; + }; + }, {} ], + 33: [ function(require, module, exports) { + var fails = require("../internals/fails"); + var isCallable = require("../internals/is-callable"); + var replacement = /#|\.prototype\./; + var isForced = function(feature, detection) { + var value = data[normalize(feature)]; + return value == POLYFILL ? true : value == NATIVE ? false : isCallable(detection) ? fails(detection) : !!detection; + }; + var normalize = isForced.normalize = function(string) { + return String(string).replace(replacement, ".").toLowerCase(); + }; + var data = isForced.data = {}; + var NATIVE = isForced.NATIVE = "N"; + var POLYFILL = isForced.POLYFILL = "P"; + module.exports = isForced; + }, { + "../internals/fails": 17, + "../internals/is-callable": 32 + } ], + 34: [ function(require, module, exports) { + var isCallable = require("../internals/is-callable"); + module.exports = function(it) { + return typeof it == "object" ? it !== null : isCallable(it); + }; + }, { + "../internals/is-callable": 32 + } ], + 35: [ function(require, module, exports) { + module.exports = false; + }, {} ], + 36: [ function(require, module, exports) { + var getBuiltIn = require("../internals/get-built-in"); + var isCallable = require("../internals/is-callable"); + var isPrototypeOf = require("../internals/object-is-prototype-of"); + var USE_SYMBOL_AS_UID = require("../internals/use-symbol-as-uid"); + var $Object = Object; + module.exports = USE_SYMBOL_AS_UID ? function(it) { + return typeof it == "symbol"; + } : function(it) { + var $Symbol = getBuiltIn("Symbol"); + return isCallable($Symbol) && isPrototypeOf($Symbol.prototype, $Object(it)); + }; + }, { + "../internals/get-built-in": 23, + "../internals/is-callable": 32, + "../internals/object-is-prototype-of": 47, + "../internals/use-symbol-as-uid": 66 + } ], + 37: [ function(require, module, exports) { + var toLength = require("../internals/to-length"); + module.exports = function(obj) { + return toLength(obj.length); + }; + }, { + "../internals/to-length": 60 + } ], + 38: [ function(require, module, exports) { + var fails = require("../internals/fails"); + var isCallable = require("../internals/is-callable"); + var hasOwn = require("../internals/has-own-property"); + var DESCRIPTORS = require("../internals/descriptors"); + var CONFIGURABLE_FUNCTION_NAME = require("../internals/function-name").CONFIGURABLE; + var inspectSource = require("../internals/inspect-source"); + var InternalStateModule = require("../internals/internal-state"); + var enforceInternalState = InternalStateModule.enforce; + var getInternalState = InternalStateModule.get; + var defineProperty = Object.defineProperty; + var CONFIGURABLE_LENGTH = DESCRIPTORS && !fails(function() { + return defineProperty(function() {}, "length", { + value: 8 + }).length !== 8; + }); + var TEMPLATE = String(String).split("String"); + var makeBuiltIn = module.exports = function(value, name, options) { + if (String(name).slice(0, 7) === "Symbol(") { + name = "[" + String(name).replace(/^Symbol\(([^)]*)\)/, "$1") + "]"; + } + if (options && options.getter) name = "get " + name; + if (options && options.setter) name = "set " + name; + if (!hasOwn(value, "name") || CONFIGURABLE_FUNCTION_NAME && value.name !== name) { + if (DESCRIPTORS) defineProperty(value, "name", { + value: name, + configurable: true + }); else value.name = name; + } + if (CONFIGURABLE_LENGTH && options && hasOwn(options, "arity") && value.length !== options.arity) { + defineProperty(value, "length", { + value: options.arity + }); + } + try { + if (options && hasOwn(options, "constructor") && options.constructor) { + if (DESCRIPTORS) defineProperty(value, "prototype", { + writable: false + }); + } else if (value.prototype) value.prototype = undefined; + } catch (error) {} + var state = enforceInternalState(value); + if (!hasOwn(state, "source")) { + state.source = TEMPLATE.join(typeof name == "string" ? name : ""); + } + return value; + }; + Function.prototype.toString = makeBuiltIn(function toString() { + return isCallable(this) && getInternalState(this).source || inspectSource(this); + }, "toString"); + }, { + "../internals/descriptors": 11, + "../internals/fails": 17, + "../internals/function-name": 21, + "../internals/has-own-property": 26, + "../internals/inspect-source": 30, + "../internals/internal-state": 31, + "../internals/is-callable": 32 + } ], + 39: [ function(require, module, exports) { + var ceil = Math.ceil; + var floor = Math.floor; + module.exports = Math.trunc || function trunc(x) { + var n = +x; + return (n > 0 ? floor : ceil)(n); + }; + }, {} ], + 40: [ function(require, module, exports) { + var V8_VERSION = require("../internals/engine-v8-version"); + var fails = require("../internals/fails"); + module.exports = !!Object.getOwnPropertySymbols && !fails(function() { + var symbol = Symbol(); + return !String(symbol) || !(Object(symbol) instanceof Symbol) || !Symbol.sham && V8_VERSION && V8_VERSION < 41; + }); + }, { + "../internals/engine-v8-version": 14, + "../internals/fails": 17 + } ], + 41: [ function(require, module, exports) { + var global = require("../internals/global"); + var isCallable = require("../internals/is-callable"); + var inspectSource = require("../internals/inspect-source"); + var WeakMap = global.WeakMap; + module.exports = isCallable(WeakMap) && /native code/.test(inspectSource(WeakMap)); + }, { + "../internals/global": 25, + "../internals/inspect-source": 30, + "../internals/is-callable": 32 + } ], + 42: [ function(require, module, exports) { + "use strict"; + var DESCRIPTORS = require("../internals/descriptors"); + var uncurryThis = require("../internals/function-uncurry-this"); + var call = require("../internals/function-call"); + var fails = require("../internals/fails"); + var objectKeys = require("../internals/object-keys"); + var getOwnPropertySymbolsModule = require("../internals/object-get-own-property-symbols"); + var propertyIsEnumerableModule = require("../internals/object-property-is-enumerable"); + var toObject = require("../internals/to-object"); + var IndexedObject = require("../internals/indexed-object"); + var $assign = Object.assign; + var defineProperty = Object.defineProperty; + var concat = uncurryThis([].concat); + module.exports = !$assign || fails(function() { + if (DESCRIPTORS && $assign({ + b: 1 + }, $assign(defineProperty({}, "a", { + enumerable: true, + get: function() { + defineProperty(this, "b", { + value: 3, + enumerable: false + }); + } + }), { + b: 2 + })).b !== 1) return true; + var A = {}; + var B = {}; + var symbol = Symbol(); + var alphabet = "abcdefghijklmnopqrst"; + A[symbol] = 7; + alphabet.split("").forEach(function(chr) { + B[chr] = chr; + }); + return $assign({}, A)[symbol] != 7 || objectKeys($assign({}, B)).join("") != alphabet; + }) ? function assign(target, source) { + var T = toObject(target); + var argumentsLength = arguments.length; + var index = 1; + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + var propertyIsEnumerable = propertyIsEnumerableModule.f; + while (argumentsLength > index) { + var S = IndexedObject(arguments[index++]); + var keys = getOwnPropertySymbols ? concat(objectKeys(S), getOwnPropertySymbols(S)) : objectKeys(S); + var length = keys.length; + var j = 0; + var key; + while (length > j) { + key = keys[j++]; + if (!DESCRIPTORS || call(propertyIsEnumerable, S, key)) T[key] = S[key]; + } + } + return T; + } : $assign; + }, { + "../internals/descriptors": 11, + "../internals/fails": 17, + "../internals/function-call": 20, + "../internals/function-uncurry-this": 22, + "../internals/indexed-object": 29, + "../internals/object-get-own-property-symbols": 46, + "../internals/object-keys": 49, + "../internals/object-property-is-enumerable": 50, + "../internals/to-object": 61 + } ], + 43: [ function(require, module, exports) { + var DESCRIPTORS = require("../internals/descriptors"); + var IE8_DOM_DEFINE = require("../internals/ie8-dom-define"); + var V8_PROTOTYPE_DEFINE_BUG = require("../internals/v8-prototype-define-bug"); + var anObject = require("../internals/an-object"); + var toPropertyKey = require("../internals/to-property-key"); + var $TypeError = TypeError; + var $defineProperty = Object.defineProperty; + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var ENUMERABLE = "enumerable"; + var CONFIGURABLE = "configurable"; + var WRITABLE = "writable"; + exports.f = DESCRIPTORS ? V8_PROTOTYPE_DEFINE_BUG ? function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (typeof O === "function" && P === "prototype" && "value" in Attributes && WRITABLE in Attributes && !Attributes[WRITABLE]) { + var current = $getOwnPropertyDescriptor(O, P); + if (current && current[WRITABLE]) { + O[P] = Attributes.value; + Attributes = { + configurable: CONFIGURABLE in Attributes ? Attributes[CONFIGURABLE] : current[CONFIGURABLE], + enumerable: ENUMERABLE in Attributes ? Attributes[ENUMERABLE] : current[ENUMERABLE], + writable: false + }; + } + } + return $defineProperty(O, P, Attributes); + } : $defineProperty : function defineProperty(O, P, Attributes) { + anObject(O); + P = toPropertyKey(P); + anObject(Attributes); + if (IE8_DOM_DEFINE) try { + return $defineProperty(O, P, Attributes); + } catch (error) {} + if ("get" in Attributes || "set" in Attributes) throw $TypeError("Accessors not supported"); + if ("value" in Attributes) O[P] = Attributes.value; + return O; + }; + }, { + "../internals/an-object": 2, + "../internals/descriptors": 11, + "../internals/ie8-dom-define": 28, + "../internals/to-property-key": 63, + "../internals/v8-prototype-define-bug": 67 + } ], + 44: [ function(require, module, exports) { + var DESCRIPTORS = require("../internals/descriptors"); + var call = require("../internals/function-call"); + var propertyIsEnumerableModule = require("../internals/object-property-is-enumerable"); + var createPropertyDescriptor = require("../internals/create-property-descriptor"); + var toIndexedObject = require("../internals/to-indexed-object"); + var toPropertyKey = require("../internals/to-property-key"); + var hasOwn = require("../internals/has-own-property"); + var IE8_DOM_DEFINE = require("../internals/ie8-dom-define"); + var $getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + exports.f = DESCRIPTORS ? $getOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { + O = toIndexedObject(O); + P = toPropertyKey(P); + if (IE8_DOM_DEFINE) try { + return $getOwnPropertyDescriptor(O, P); + } catch (error) {} + if (hasOwn(O, P)) return createPropertyDescriptor(!call(propertyIsEnumerableModule.f, O, P), O[P]); + }; + }, { + "../internals/create-property-descriptor": 8, + "../internals/descriptors": 11, + "../internals/function-call": 20, + "../internals/has-own-property": 26, + "../internals/ie8-dom-define": 28, + "../internals/object-property-is-enumerable": 50, + "../internals/to-indexed-object": 58, + "../internals/to-property-key": 63 + } ], + 45: [ function(require, module, exports) { + var internalObjectKeys = require("../internals/object-keys-internal"); + var enumBugKeys = require("../internals/enum-bug-keys"); + var hiddenKeys = enumBugKeys.concat("length", "prototype"); + exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { + return internalObjectKeys(O, hiddenKeys); + }; + }, { + "../internals/enum-bug-keys": 15, + "../internals/object-keys-internal": 48 + } ], + 46: [ function(require, module, exports) { + exports.f = Object.getOwnPropertySymbols; + }, {} ], + 47: [ function(require, module, exports) { + var uncurryThis = require("../internals/function-uncurry-this"); + module.exports = uncurryThis({}.isPrototypeOf); + }, { + "../internals/function-uncurry-this": 22 + } ], + 48: [ function(require, module, exports) { + var uncurryThis = require("../internals/function-uncurry-this"); + var hasOwn = require("../internals/has-own-property"); + var toIndexedObject = require("../internals/to-indexed-object"); + var indexOf = require("../internals/array-includes").indexOf; + var hiddenKeys = require("../internals/hidden-keys"); + var push = uncurryThis([].push); + module.exports = function(object, names) { + var O = toIndexedObject(object); + var i = 0; + var result = []; + var key; + for (key in O) !hasOwn(hiddenKeys, key) && hasOwn(O, key) && push(result, key); + while (names.length > i) if (hasOwn(O, key = names[i++])) { + ~indexOf(result, key) || push(result, key); + } + return result; + }; + }, { + "../internals/array-includes": 3, + "../internals/function-uncurry-this": 22, + "../internals/has-own-property": 26, + "../internals/hidden-keys": 27, + "../internals/to-indexed-object": 58 + } ], + 49: [ function(require, module, exports) { + var internalObjectKeys = require("../internals/object-keys-internal"); + var enumBugKeys = require("../internals/enum-bug-keys"); + module.exports = Object.keys || function keys(O) { + return internalObjectKeys(O, enumBugKeys); + }; + }, { + "../internals/enum-bug-keys": 15, + "../internals/object-keys-internal": 48 + } ], + 50: [ function(require, module, exports) { + "use strict"; + var $propertyIsEnumerable = {}.propertyIsEnumerable; + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + var NASHORN_BUG = getOwnPropertyDescriptor && !$propertyIsEnumerable.call({ + 1: 2 + }, 1); + exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { + var descriptor = getOwnPropertyDescriptor(this, V); + return !!descriptor && descriptor.enumerable; + } : $propertyIsEnumerable; + }, {} ], + 51: [ function(require, module, exports) { + var call = require("../internals/function-call"); + var isCallable = require("../internals/is-callable"); + var isObject = require("../internals/is-object"); + var $TypeError = TypeError; + module.exports = function(input, pref) { + var fn, val; + if (pref === "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + if (isCallable(fn = input.valueOf) && !isObject(val = call(fn, input))) return val; + if (pref !== "string" && isCallable(fn = input.toString) && !isObject(val = call(fn, input))) return val; + throw $TypeError("Can't convert object to primitive value"); + }; + }, { + "../internals/function-call": 20, + "../internals/is-callable": 32, + "../internals/is-object": 34 + } ], + 52: [ function(require, module, exports) { + var getBuiltIn = require("../internals/get-built-in"); + var uncurryThis = require("../internals/function-uncurry-this"); + var getOwnPropertyNamesModule = require("../internals/object-get-own-property-names"); + var getOwnPropertySymbolsModule = require("../internals/object-get-own-property-symbols"); + var anObject = require("../internals/an-object"); + var concat = uncurryThis([].concat); + module.exports = getBuiltIn("Reflect", "ownKeys") || function ownKeys(it) { + var keys = getOwnPropertyNamesModule.f(anObject(it)); + var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; + return getOwnPropertySymbols ? concat(keys, getOwnPropertySymbols(it)) : keys; + }; + }, { + "../internals/an-object": 2, + "../internals/function-uncurry-this": 22, + "../internals/get-built-in": 23, + "../internals/object-get-own-property-names": 45, + "../internals/object-get-own-property-symbols": 46 + } ], + 53: [ function(require, module, exports) { + var $TypeError = TypeError; + module.exports = function(it) { + if (it == undefined) throw $TypeError("Can't call method on " + it); + return it; + }; + }, {} ], + 54: [ function(require, module, exports) { + var shared = require("../internals/shared"); + var uid = require("../internals/uid"); + var keys = shared("keys"); + module.exports = function(key) { + return keys[key] || (keys[key] = uid(key)); + }; + }, { + "../internals/shared": 56, + "../internals/uid": 65 + } ], + 55: [ function(require, module, exports) { + var global = require("../internals/global"); + var defineGlobalProperty = require("../internals/define-global-property"); + var SHARED = "__core-js_shared__"; + var store = global[SHARED] || defineGlobalProperty(SHARED, {}); + module.exports = store; + }, { + "../internals/define-global-property": 10, + "../internals/global": 25 + } ], + 56: [ function(require, module, exports) { + var IS_PURE = require("../internals/is-pure"); + var store = require("../internals/shared-store"); + (module.exports = function(key, value) { + return store[key] || (store[key] = value !== undefined ? value : {}); + })("versions", []).push({ + version: "3.23.4", + mode: IS_PURE ? "pure" : "global", + copyright: "© 2014-2022 Denis Pushkarev (zloirock.ru)", + license: "https://github.com/zloirock/core-js/blob/v3.23.4/LICENSE", + source: "https://github.com/zloirock/core-js" + }); + }, { + "../internals/is-pure": 35, + "../internals/shared-store": 55 + } ], + 57: [ function(require, module, exports) { + var toIntegerOrInfinity = require("../internals/to-integer-or-infinity"); + var max = Math.max; + var min = Math.min; + module.exports = function(index, length) { + var integer = toIntegerOrInfinity(index); + return integer < 0 ? max(integer + length, 0) : min(integer, length); + }; + }, { + "../internals/to-integer-or-infinity": 59 + } ], + 58: [ function(require, module, exports) { + var IndexedObject = require("../internals/indexed-object"); + var requireObjectCoercible = require("../internals/require-object-coercible"); + module.exports = function(it) { + return IndexedObject(requireObjectCoercible(it)); + }; + }, { + "../internals/indexed-object": 29, + "../internals/require-object-coercible": 53 + } ], + 59: [ function(require, module, exports) { + var trunc = require("../internals/math-trunc"); + module.exports = function(argument) { + var number = +argument; + return number !== number || number === 0 ? 0 : trunc(number); + }; + }, { + "../internals/math-trunc": 39 + } ], + 60: [ function(require, module, exports) { + var toIntegerOrInfinity = require("../internals/to-integer-or-infinity"); + var min = Math.min; + module.exports = function(argument) { + return argument > 0 ? min(toIntegerOrInfinity(argument), 9007199254740991) : 0; + }; + }, { + "../internals/to-integer-or-infinity": 59 + } ], + 61: [ function(require, module, exports) { + var requireObjectCoercible = require("../internals/require-object-coercible"); + var $Object = Object; + module.exports = function(argument) { + return $Object(requireObjectCoercible(argument)); + }; + }, { + "../internals/require-object-coercible": 53 + } ], + 62: [ function(require, module, exports) { + var call = require("../internals/function-call"); + var isObject = require("../internals/is-object"); + var isSymbol = require("../internals/is-symbol"); + var getMethod = require("../internals/get-method"); + var ordinaryToPrimitive = require("../internals/ordinary-to-primitive"); + var wellKnownSymbol = require("../internals/well-known-symbol"); + var $TypeError = TypeError; + var TO_PRIMITIVE = wellKnownSymbol("toPrimitive"); + module.exports = function(input, pref) { + if (!isObject(input) || isSymbol(input)) return input; + var exoticToPrim = getMethod(input, TO_PRIMITIVE); + var result; + if (exoticToPrim) { + if (pref === undefined) pref = "default"; + result = call(exoticToPrim, input, pref); + if (!isObject(result) || isSymbol(result)) return result; + throw $TypeError("Can't convert object to primitive value"); + } + if (pref === undefined) pref = "number"; + return ordinaryToPrimitive(input, pref); + }; + }, { + "../internals/function-call": 20, + "../internals/get-method": 24, + "../internals/is-object": 34, + "../internals/is-symbol": 36, + "../internals/ordinary-to-primitive": 51, + "../internals/well-known-symbol": 68 + } ], + 63: [ function(require, module, exports) { + var toPrimitive = require("../internals/to-primitive"); + var isSymbol = require("../internals/is-symbol"); + module.exports = function(argument) { + var key = toPrimitive(argument, "string"); + return isSymbol(key) ? key : key + ""; + }; + }, { + "../internals/is-symbol": 36, + "../internals/to-primitive": 62 + } ], + 64: [ function(require, module, exports) { + var $String = String; + module.exports = function(argument) { + try { + return $String(argument); + } catch (error) { + return "Object"; + } + }; + }, {} ], + 65: [ function(require, module, exports) { + var uncurryThis = require("../internals/function-uncurry-this"); + var id = 0; + var postfix = Math.random(); + var toString = uncurryThis(1..toString); + module.exports = function(key) { + return "Symbol(" + (key === undefined ? "" : key) + ")_" + toString(++id + postfix, 36); + }; + }, { + "../internals/function-uncurry-this": 22 + } ], + 66: [ function(require, module, exports) { + var NATIVE_SYMBOL = require("../internals/native-symbol"); + module.exports = NATIVE_SYMBOL && !Symbol.sham && typeof Symbol.iterator == "symbol"; + }, { + "../internals/native-symbol": 40 + } ], + 67: [ function(require, module, exports) { + var DESCRIPTORS = require("../internals/descriptors"); + var fails = require("../internals/fails"); + module.exports = DESCRIPTORS && fails(function() { + return Object.defineProperty(function() {}, "prototype", { + value: 42, + writable: false + }).prototype != 42; + }); + }, { + "../internals/descriptors": 11, + "../internals/fails": 17 + } ], + 68: [ function(require, module, exports) { + var global = require("../internals/global"); + var shared = require("../internals/shared"); + var hasOwn = require("../internals/has-own-property"); + var uid = require("../internals/uid"); + var NATIVE_SYMBOL = require("../internals/native-symbol"); + var USE_SYMBOL_AS_UID = require("../internals/use-symbol-as-uid"); + var WellKnownSymbolsStore = shared("wks"); + var Symbol = global.Symbol; + var symbolFor = Symbol && Symbol["for"]; + var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; + module.exports = function(name) { + if (!hasOwn(WellKnownSymbolsStore, name) || !(NATIVE_SYMBOL || typeof WellKnownSymbolsStore[name] == "string")) { + var description = "Symbol." + name; + if (NATIVE_SYMBOL && hasOwn(Symbol, name)) { + WellKnownSymbolsStore[name] = Symbol[name]; + } else if (USE_SYMBOL_AS_UID && symbolFor) { + WellKnownSymbolsStore[name] = symbolFor(description); + } else { + WellKnownSymbolsStore[name] = createWellKnownSymbol(description); + } + } + return WellKnownSymbolsStore[name]; + }; + }, { + "../internals/global": 25, + "../internals/has-own-property": 26, + "../internals/native-symbol": 40, + "../internals/shared": 56, + "../internals/uid": 65, + "../internals/use-symbol-as-uid": 66 + } ], + 69: [ function(require, module, exports) { + var $ = require("../internals/export"); + var bind = require("../internals/function-bind"); + $({ + target: "Function", + proto: true, + forced: Function.bind !== bind + }, { + bind: bind + }); + }, { + "../internals/export": 16, + "../internals/function-bind": 19 + } ], + 70: [ function(require, module, exports) { + var $ = require("../internals/export"); + var assign = require("../internals/object-assign"); + $({ + target: "Object", + stat: true, + arity: 2, + forced: Object.assign !== assign + }, { + assign: assign + }); + }, { + "../internals/export": 16, + "../internals/object-assign": 42 + } ], + 71: [ function(require, module, exports) { + "use strict"; + var hasAirPlayAPISupport = require("../lib/hasAirPlayAPISupport"), AirPlayButton; + AirPlayButton = { + constructor: function constructor() { + this.constructor.super_.apply(this, arguments); + if (!hasAirPlayAPISupport()) { + this.hide(); + } + this.controlText("Start AirPlay"); + this._reactToAirPlayAvailableEvents(); + }, + buildCSSClass: function buildCSSClass() { + return "vjs-airplay-button " + this.constructor.super_.prototype.buildCSSClass(); + }, + handleClick: function handleClick() { + this.player().trigger("airPlayRequested"); + }, + _getMediaEl: function _getMediaEl() { + var playerEl = this.player().el(); + return playerEl.querySelector("video, audio"); + }, + _reactToAirPlayAvailableEvents: function _reactToAirPlayAvailableEvents() { + var mediaEl = this._getMediaEl(), self = this; + if (!mediaEl || !hasAirPlayAPISupport()) { + return; + } + function onTargetAvailabilityChanged(event) { + if (event.availability === "available") { + self.show(); + } else { + self.hide(); + } + } + mediaEl.addEventListener("webkitplaybacktargetavailabilitychanged", onTargetAvailabilityChanged); + this.on("dispose", function() { + mediaEl.removeEventListener("webkitplaybacktargetavailabilitychanged", onTargetAvailabilityChanged); + }); + } + }; + module.exports = function(videojs) { + var AirPlayButtonImpl; + AirPlayButtonImpl = videojs.extend(videojs.getComponent("Button"), AirPlayButton); + videojs.registerComponent("airPlayButton", AirPlayButtonImpl); + }; + }, { + "../lib/hasAirPlayAPISupport": 74 + } ], + 72: [ function(require, module, exports) { + "use strict"; + require("core-js/modules/es.function.bind.js"); + require("core-js/modules/es.object.assign.js"); + var hasAirPlayAPISupport = require("./lib/hasAirPlayAPISupport"); + function getExistingAirPlayButton(player) { + return player.controlBar.getChild("airPlayButton"); + } + function ensureAirPlayButtonExists(player, options) { + var existingAirPlayButton = getExistingAirPlayButton(player), indexOpt; + if (options.addButtonToControlBar && !existingAirPlayButton) { + indexOpt = player.controlBar.children().length; + if (typeof options.buttonPositionIndex !== "undefined") { + indexOpt = options.buttonPositionIndex >= 0 ? options.buttonPositionIndex : player.controlBar.children().length + options.buttonPositionIndex; + } + player.controlBar.addChild("airPlayButton", options, indexOpt); + } + } + function onAirPlayRequested(player) { + var mediaEl = player.el().querySelector("video, audio"); + if (mediaEl && mediaEl.webkitShowPlaybackTargetPicker) { + mediaEl.webkitShowPlaybackTargetPicker(); + } + } + function listenForAirPlayEvents(player) { + player.on("airPlayRequested", onAirPlayRequested.bind(null, player)); + } + function enableAirPlay(player, options) { + if (!player.controlBar) { + return; + } + if (hasAirPlayAPISupport()) { + listenForAirPlayEvents(player); + ensureAirPlayButtonExists(player, options); + } + } + module.exports = function(videojs) { + videojs.registerPlugin("airPlay", function(options) { + var pluginOptions = Object.assign({ + addButtonToControlBar: true + }, options || {}); + this.ready(enableAirPlay.bind(this, this, pluginOptions)); + }); + }; + }, { + "./lib/hasAirPlayAPISupport": 74, + "core-js/modules/es.function.bind.js": 69, + "core-js/modules/es.object.assign.js": 70 + } ], + 73: [ function(require, module, exports) { + "use strict"; + var createAirPlayButton = require("./components/AirPlayButton"), createAirPlayPlugin = require("./enableAirPlay"); + module.exports = function(videojs) { + videojs = videojs || window.videojs; + createAirPlayButton(videojs); + createAirPlayPlugin(videojs); + }; + }, { + "./components/AirPlayButton": 71, + "./enableAirPlay": 72 + } ], + 74: [ function(require, module, exports) { + "use strict"; + module.exports = function() { + return !!window.WebKitPlaybackTargetAvailabilityEvent; + }; + }, {} ], + 75: [ function(require, module, exports) { + "use strict"; + require("./index")(); + }, { + "./index": 73 + } ] +}, {}, [ 75 ]); \ No newline at end of file diff --git a/public/_player/videojs/dist/videojs-chromecast.css b/public/_player/videojs/dist/videojs-chromecast.css new file mode 100644 index 0000000..50338a8 --- /dev/null +++ b/public/_player/videojs/dist/videojs-chromecast.css @@ -0,0 +1,65 @@ +/** Silvermine Chromecast **/ +.vjs-chromecast-button .vjs-icon-placeholder { + background: url('ic_cast_white_24dp.png') center center no-repeat; + background-size: contain; + display: inline-block; + width: 20px; + height: 20px; +} +.vjs-chromecast-button:hover { + cursor: pointer; +} +.vjs-chromecast-button:hover .vjs-icon-placeholder { + background-image: url('ic_cast_white_24dp.png'); +} +.vjs-chromecast-button.vjs-chromecast-casting-state .vjs-icon-placeholder { + background-image: url('ic_cast_connected_white_24dp.png'); +} +.vjs-chromecast-button.vjs-chromecast-casting-state:hover .vjs-icon-placeholder { + background-image: url('ic_cast_connected_white_24dp.png'); +} +.vjs-tech-chromecast { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + overflow: hidden; +} +.vjs-tech-chromecast .vjs-tech-chromecast-poster::after { + content: ' '; + display: block; + height: 2px; + width: 100px; + background-color: #cccccc; + position: absolute; + left: calc(50% - 50px); +} +.vjs-tech-chromecast .vjs-tech-chromecast-poster-img { + max-height: 180px; + width: auto; + border: 2px solid #cccccc; +} +.vjs-tech-chromecast .vjs-tech-chromecast-poster-img.vjs-tech-chromecast-poster-img-empty { + width: 160px; + height: 90px; +} +.vjs-tech-chromecast .vjs-tech-chromecast-title-container { + position: absolute; + bottom: 50%; + margin-bottom: 100px; + color: #cccccc; + text-align: center; +} +.vjs-tech-chromecast .vjs-tech-chromecast-title { + font-size: 22px; +} +.vjs-tech-chromecast .vjs-tech-chromecast-title.vjs-tech-chromecast-title-empty { + display: none; +} +.vjs-tech-chromecast .vjs-tech-chromecast-subtitle { + font-size: 18px; + padding-top: 0.5em; +} +.vjs-tech-chromecast .vjs-tech-chromecast-subtitle.vjs-tech-chromecast-subtitle-empty { + display: none; +} \ No newline at end of file diff --git a/public/_player/videojs/dist/videojs-chromecast.min.css b/public/_player/videojs/dist/videojs-chromecast.min.css new file mode 100644 index 0000000..8ee1b06 --- /dev/null +++ b/public/_player/videojs/dist/videojs-chromecast.min.css @@ -0,0 +1 @@ +.vjs-chromecast-button .vjs-icon-placeholder{background:url(ic_cast_white_24dp.png) center center no-repeat;background-size:contain;display:inline-block;width:20px;height:20px}.vjs-chromecast-button:hover{cursor:pointer}.vjs-chromecast-button:hover .vjs-icon-placeholder{background-image:url(ic_cast_white_24dp.png)}.vjs-chromecast-button.vjs-chromecast-casting-state .vjs-icon-placeholder{background-image:url(ic_cast_connected_white_24dp.png)}.vjs-chromecast-button.vjs-chromecast-casting-state:hover .vjs-icon-placeholder{background-image:url(ic_cast_connected_white_24dp.png)}.vjs-tech-chromecast{display:flex;flex-direction:column;justify-content:center;align-items:center;overflow:hidden}.vjs-tech-chromecast .vjs-tech-chromecast-poster::after{content:' ';display:block;height:2px;width:100px;background-color:#ccc;position:absolute;left:calc(50% - 50px)}.vjs-tech-chromecast .vjs-tech-chromecast-poster-img{max-height:180px;width:auto;border:2px solid #ccc}.vjs-tech-chromecast .vjs-tech-chromecast-poster-img.vjs-tech-chromecast-poster-img-empty{width:160px;height:90px}.vjs-tech-chromecast .vjs-tech-chromecast-title-container{position:absolute;bottom:50%;margin-bottom:100px;color:#ccc;text-align:center}.vjs-tech-chromecast .vjs-tech-chromecast-title{font-size:22px}.vjs-tech-chromecast .vjs-tech-chromecast-title.vjs-tech-chromecast-title-empty{display:none}.vjs-tech-chromecast .vjs-tech-chromecast-subtitle{font-size:18px;padding-top:.5em}.vjs-tech-chromecast .vjs-tech-chromecast-subtitle.vjs-tech-chromecast-subtitle-empty{display:none} \ No newline at end of file diff --git a/public/_player/videojs/dist/videojs-chromecast.min.js b/public/_player/videojs/dist/videojs-chromecast.min.js new file mode 100644 index 0000000..7c6abdb --- /dev/null +++ b/public/_player/videojs/dist/videojs-chromecast.min.js @@ -0,0 +1,3147 @@ +/*! @silvermine/videojs-chromecast 2021-12-03 v1.3.3 */ + +(function() { + function r(e, n, t) { + function o(i, f) { + if (!n[i]) { + if (!e[i]) { + var c = "function" == typeof require && require; + if (!f && c) return c(i, !0); + if (u) return u(i, !0); + var a = new Error("Cannot find module '" + i + "'"); + throw a.code = "MODULE_NOT_FOUND", a; + } + var p = n[i] = { + exports: {} + }; + e[i][0].call(p.exports, function(r) { + var n = e[i][1][r]; + return o(n || r); + }, p, p.exports, r, e, n, t); + } + return n[i].exports; + } + for (var u = "function" == typeof require && require, i = 0; i < t.length; i++) o(t[i]); + return o; + } + return r; +})()({ + 1: [ function(require, module, exports) { + (function() { + var initializing = false, fnTest = /xyz/.test(function() { + xyz; + }) ? /\b_super\b/ : /.*/; + this.Class = function() {}; + Class.extend = function(prop) { + var _super = this.prototype; + initializing = true; + var prototype = new this(); + initializing = false; + for (var name in prop) { + prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? function(name, fn) { + return function() { + var tmp = this._super; + this._super = _super[name]; + var ret = fn.apply(this, arguments); + this._super = tmp; + return ret; + }; + }(name, prop[name]) : prop[name]; + } + function Class() { + if (!initializing && this.init) this.init.apply(this, arguments); + } + Class.prototype = prototype; + Class.prototype.constructor = Class; + Class.extend = arguments.callee; + return Class; + }; + module.exports = Class; + })(); + }, {} ], + 2: [ function(require, module, exports) { + (function() { + window.WebComponents = window.WebComponents || { + flags: {} + }; + var file = "webcomponents-lite.js"; + var script = document.querySelector('script[src*="' + file + '"]'); + var flags = {}; + if (!flags.noOpts) { + location.search.slice(1).split("&").forEach(function(option) { + var parts = option.split("="); + var match; + if (parts[0] && (match = parts[0].match(/wc-(.+)/))) { + flags[match[1]] = parts[1] || true; + } + }); + if (script) { + for (var i = 0, a; a = script.attributes[i]; i++) { + if (a.name !== "src") { + flags[a.name] = a.value || true; + } + } + } + if (flags.log && flags.log.split) { + var parts = flags.log.split(","); + flags.log = {}; + parts.forEach(function(f) { + flags.log[f] = true; + }); + } else { + flags.log = {}; + } + } + if (flags.register) { + window.CustomElements = window.CustomElements || { + flags: {} + }; + window.CustomElements.flags.register = flags.register; + } + WebComponents.flags = flags; + })(); + (function(scope) { + "use strict"; + var hasWorkingUrl = false; + if (!scope.forceJURL) { + try { + var u = new URL("b", "http://a"); + u.pathname = "c%20d"; + hasWorkingUrl = u.href === "http://a/c%20d"; + } catch (e) {} + } + if (hasWorkingUrl) return; + var relative = Object.create(null); + relative["ftp"] = 21; + relative["file"] = 0; + relative["gopher"] = 70; + relative["http"] = 80; + relative["https"] = 443; + relative["ws"] = 80; + relative["wss"] = 443; + var relativePathDotMapping = Object.create(null); + relativePathDotMapping["%2e"] = "."; + relativePathDotMapping[".%2e"] = ".."; + relativePathDotMapping["%2e."] = ".."; + relativePathDotMapping["%2e%2e"] = ".."; + function isRelativeScheme(scheme) { + return relative[scheme] !== undefined; + } + function invalid() { + clear.call(this); + this._isInvalid = true; + } + function IDNAToASCII(h) { + if ("" == h) { + invalid.call(this); + } + return h.toLowerCase(); + } + function percentEscape(c) { + var unicode = c.charCodeAt(0); + if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 63, 96 ].indexOf(unicode) == -1) { + return c; + } + return encodeURIComponent(c); + } + function percentEscapeQuery(c) { + var unicode = c.charCodeAt(0); + if (unicode > 32 && unicode < 127 && [ 34, 35, 60, 62, 96 ].indexOf(unicode) == -1) { + return c; + } + return encodeURIComponent(c); + } + var EOF = undefined, ALPHA = /[a-zA-Z]/, ALPHANUMERIC = /[a-zA-Z0-9\+\-\.]/; + function parse(input, stateOverride, base) { + function err(message) { + errors.push(message); + } + var state = stateOverride || "scheme start", cursor = 0, buffer = "", seenAt = false, seenBracket = false, errors = []; + loop: while ((input[cursor - 1] != EOF || cursor == 0) && !this._isInvalid) { + var c = input[cursor]; + switch (state) { + case "scheme start": + if (c && ALPHA.test(c)) { + buffer += c.toLowerCase(); + state = "scheme"; + } else if (!stateOverride) { + buffer = ""; + state = "no scheme"; + continue; + } else { + err("Invalid scheme."); + break loop; + } + break; + + case "scheme": + if (c && ALPHANUMERIC.test(c)) { + buffer += c.toLowerCase(); + } else if (":" == c) { + this._scheme = buffer; + buffer = ""; + if (stateOverride) { + break loop; + } + if (isRelativeScheme(this._scheme)) { + this._isRelative = true; + } + if ("file" == this._scheme) { + state = "relative"; + } else if (this._isRelative && base && base._scheme == this._scheme) { + state = "relative or authority"; + } else if (this._isRelative) { + state = "authority first slash"; + } else { + state = "scheme data"; + } + } else if (!stateOverride) { + buffer = ""; + cursor = 0; + state = "no scheme"; + continue; + } else if (EOF == c) { + break loop; + } else { + err("Code point not allowed in scheme: " + c); + break loop; + } + break; + + case "scheme data": + if ("?" == c) { + this._query = "?"; + state = "query"; + } else if ("#" == c) { + this._fragment = "#"; + state = "fragment"; + } else { + if (EOF != c && "\t" != c && "\n" != c && "\r" != c) { + this._schemeData += percentEscape(c); + } + } + break; + + case "no scheme": + if (!base || !isRelativeScheme(base._scheme)) { + err("Missing scheme."); + invalid.call(this); + } else { + state = "relative"; + continue; + } + break; + + case "relative or authority": + if ("/" == c && "/" == input[cursor + 1]) { + state = "authority ignore slashes"; + } else { + err("Expected /, got: " + c); + state = "relative"; + continue; + } + break; + + case "relative": + this._isRelative = true; + if ("file" != this._scheme) this._scheme = base._scheme; + if (EOF == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._username = base._username; + this._password = base._password; + break loop; + } else if ("/" == c || "\\" == c) { + if ("\\" == c) err("\\ is an invalid code point."); + state = "relative slash"; + } else if ("?" == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = "?"; + this._username = base._username; + this._password = base._password; + state = "query"; + } else if ("#" == c) { + this._host = base._host; + this._port = base._port; + this._path = base._path.slice(); + this._query = base._query; + this._fragment = "#"; + this._username = base._username; + this._password = base._password; + state = "fragment"; + } else { + var nextC = input[cursor + 1]; + var nextNextC = input[cursor + 2]; + if ("file" != this._scheme || !ALPHA.test(c) || nextC != ":" && nextC != "|" || EOF != nextNextC && "/" != nextNextC && "\\" != nextNextC && "?" != nextNextC && "#" != nextNextC) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + this._path = base._path.slice(); + this._path.pop(); + } + state = "relative path"; + continue; + } + break; + + case "relative slash": + if ("/" == c || "\\" == c) { + if ("\\" == c) { + err("\\ is an invalid code point."); + } + if ("file" == this._scheme) { + state = "file host"; + } else { + state = "authority ignore slashes"; + } + } else { + if ("file" != this._scheme) { + this._host = base._host; + this._port = base._port; + this._username = base._username; + this._password = base._password; + } + state = "relative path"; + continue; + } + break; + + case "authority first slash": + if ("/" == c) { + state = "authority second slash"; + } else { + err("Expected '/', got: " + c); + state = "authority ignore slashes"; + continue; + } + break; + + case "authority second slash": + state = "authority ignore slashes"; + if ("/" != c) { + err("Expected '/', got: " + c); + continue; + } + break; + + case "authority ignore slashes": + if ("/" != c && "\\" != c) { + state = "authority"; + continue; + } else { + err("Expected authority, got: " + c); + } + break; + + case "authority": + if ("@" == c) { + if (seenAt) { + err("@ already seen."); + buffer += "%40"; + } + seenAt = true; + for (var i = 0; i < buffer.length; i++) { + var cp = buffer[i]; + if ("\t" == cp || "\n" == cp || "\r" == cp) { + err("Invalid whitespace in authority."); + continue; + } + if (":" == cp && null === this._password) { + this._password = ""; + continue; + } + var tempC = percentEscape(cp); + null !== this._password ? this._password += tempC : this._username += tempC; + } + buffer = ""; + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + cursor -= buffer.length; + buffer = ""; + state = "host"; + continue; + } else { + buffer += c; + } + break; + + case "file host": + if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + if (buffer.length == 2 && ALPHA.test(buffer[0]) && (buffer[1] == ":" || buffer[1] == "|")) { + state = "relative path"; + } else if (buffer.length == 0) { + state = "relative path start"; + } else { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "relative path start"; + } + continue; + } else if ("\t" == c || "\n" == c || "\r" == c) { + err("Invalid whitespace in file host."); + } else { + buffer += c; + } + break; + + case "host": + case "hostname": + if (":" == c && !seenBracket) { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "port"; + if ("hostname" == stateOverride) { + break loop; + } + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c) { + this._host = IDNAToASCII.call(this, buffer); + buffer = ""; + state = "relative path start"; + if (stateOverride) { + break loop; + } + continue; + } else if ("\t" != c && "\n" != c && "\r" != c) { + if ("[" == c) { + seenBracket = true; + } else if ("]" == c) { + seenBracket = false; + } + buffer += c; + } else { + err("Invalid code point in host/hostname: " + c); + } + break; + + case "port": + if (/[0-9]/.test(c)) { + buffer += c; + } else if (EOF == c || "/" == c || "\\" == c || "?" == c || "#" == c || stateOverride) { + if ("" != buffer) { + var temp = parseInt(buffer, 10); + if (temp != relative[this._scheme]) { + this._port = temp + ""; + } + buffer = ""; + } + if (stateOverride) { + break loop; + } + state = "relative path start"; + continue; + } else if ("\t" == c || "\n" == c || "\r" == c) { + err("Invalid code point in port: " + c); + } else { + invalid.call(this); + } + break; + + case "relative path start": + if ("\\" == c) err("'\\' not allowed in path."); + state = "relative path"; + if ("/" != c && "\\" != c) { + continue; + } + break; + + case "relative path": + if (EOF == c || "/" == c || "\\" == c || !stateOverride && ("?" == c || "#" == c)) { + if ("\\" == c) { + err("\\ not allowed in relative path."); + } + var tmp; + if (tmp = relativePathDotMapping[buffer.toLowerCase()]) { + buffer = tmp; + } + if (".." == buffer) { + this._path.pop(); + if ("/" != c && "\\" != c) { + this._path.push(""); + } + } else if ("." == buffer && "/" != c && "\\" != c) { + this._path.push(""); + } else if ("." != buffer) { + if ("file" == this._scheme && this._path.length == 0 && buffer.length == 2 && ALPHA.test(buffer[0]) && buffer[1] == "|") { + buffer = buffer[0] + ":"; + } + this._path.push(buffer); + } + buffer = ""; + if ("?" == c) { + this._query = "?"; + state = "query"; + } else if ("#" == c) { + this._fragment = "#"; + state = "fragment"; + } + } else if ("\t" != c && "\n" != c && "\r" != c) { + buffer += percentEscape(c); + } + break; + + case "query": + if (!stateOverride && "#" == c) { + this._fragment = "#"; + state = "fragment"; + } else if (EOF != c && "\t" != c && "\n" != c && "\r" != c) { + this._query += percentEscapeQuery(c); + } + break; + + case "fragment": + if (EOF != c && "\t" != c && "\n" != c && "\r" != c) { + this._fragment += c; + } + break; + } + cursor++; + } + } + function clear() { + this._scheme = ""; + this._schemeData = ""; + this._username = ""; + this._password = null; + this._host = ""; + this._port = ""; + this._path = []; + this._query = ""; + this._fragment = ""; + this._isInvalid = false; + this._isRelative = false; + } + function jURL(url, base) { + if (base !== undefined && !(base instanceof jURL)) base = new jURL(String(base)); + this._url = url; + clear.call(this); + var input = url.replace(/^[ \t\r\n\f]+|[ \t\r\n\f]+$/g, ""); + parse.call(this, input, null, base); + } + jURL.prototype = { + toString: function() { + return this.href; + }, + get href() { + if (this._isInvalid) return this._url; + var authority = ""; + if ("" != this._username || null != this._password) { + authority = this._username + (null != this._password ? ":" + this._password : "") + "@"; + } + return this.protocol + (this._isRelative ? "//" + authority + this.host : "") + this.pathname + this._query + this._fragment; + }, + set href(href) { + clear.call(this); + parse.call(this, href); + }, + get protocol() { + return this._scheme + ":"; + }, + set protocol(protocol) { + if (this._isInvalid) return; + parse.call(this, protocol + ":", "scheme start"); + }, + get host() { + return this._isInvalid ? "" : this._port ? this._host + ":" + this._port : this._host; + }, + set host(host) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, host, "host"); + }, + get hostname() { + return this._host; + }, + set hostname(hostname) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, hostname, "hostname"); + }, + get port() { + return this._port; + }, + set port(port) { + if (this._isInvalid || !this._isRelative) return; + parse.call(this, port, "port"); + }, + get pathname() { + return this._isInvalid ? "" : this._isRelative ? "/" + this._path.join("/") : this._schemeData; + }, + set pathname(pathname) { + if (this._isInvalid || !this._isRelative) return; + this._path = []; + parse.call(this, pathname, "relative path start"); + }, + get search() { + return this._isInvalid || !this._query || "?" == this._query ? "" : this._query; + }, + set search(search) { + if (this._isInvalid || !this._isRelative) return; + this._query = "?"; + if ("?" == search[0]) search = search.slice(1); + parse.call(this, search, "query"); + }, + get hash() { + return this._isInvalid || !this._fragment || "#" == this._fragment ? "" : this._fragment; + }, + set hash(hash) { + if (this._isInvalid) return; + this._fragment = "#"; + if ("#" == hash[0]) hash = hash.slice(1); + parse.call(this, hash, "fragment"); + }, + get origin() { + var host; + if (this._isInvalid || !this._scheme) { + return ""; + } + switch (this._scheme) { + case "data": + case "file": + case "javascript": + case "mailto": + return "null"; + } + host = this.host; + if (!host) { + return ""; + } + return this._scheme + "://" + host; + } + }; + var OriginalURL = scope.URL; + if (OriginalURL) { + jURL.createObjectURL = function(blob) { + return OriginalURL.createObjectURL.apply(OriginalURL, arguments); + }; + jURL.revokeObjectURL = function(url) { + OriginalURL.revokeObjectURL(url); + }; + } + scope.URL = jURL; + })(self); + if (typeof WeakMap === "undefined") { + (function() { + var defineProperty = Object.defineProperty; + var counter = Date.now() % 1e9; + var WeakMap = function() { + this.name = "__st" + (Math.random() * 1e9 >>> 0) + (counter++ + "__"); + }; + WeakMap.prototype = { + set: function(key, value) { + var entry = key[this.name]; + if (entry && entry[0] === key) entry[1] = value; else defineProperty(key, this.name, { + value: [ key, value ], + writable: true + }); + return this; + }, + get: function(key) { + var entry; + return (entry = key[this.name]) && entry[0] === key ? entry[1] : undefined; + }, + delete: function(key) { + var entry = key[this.name]; + if (!entry || entry[0] !== key) return false; + entry[0] = entry[1] = undefined; + return true; + }, + has: function(key) { + var entry = key[this.name]; + if (!entry) return false; + return entry[0] === key; + } + }; + window.WeakMap = WeakMap; + })(); + } + (function(global) { + if (global.JsMutationObserver) { + return; + } + var registrationsTable = new WeakMap(); + var setImmediate; + if (/Trident|Edge/.test(navigator.userAgent)) { + setImmediate = setTimeout; + } else if (window.setImmediate) { + setImmediate = window.setImmediate; + } else { + var setImmediateQueue = []; + var sentinel = String(Math.random()); + window.addEventListener("message", function(e) { + if (e.data === sentinel) { + var queue = setImmediateQueue; + setImmediateQueue = []; + queue.forEach(function(func) { + func(); + }); + } + }); + setImmediate = function(func) { + setImmediateQueue.push(func); + window.postMessage(sentinel, "*"); + }; + } + var isScheduled = false; + var scheduledObservers = []; + function scheduleCallback(observer) { + scheduledObservers.push(observer); + if (!isScheduled) { + isScheduled = true; + setImmediate(dispatchCallbacks); + } + } + function wrapIfNeeded(node) { + return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(node) || node; + } + function dispatchCallbacks() { + isScheduled = false; + var observers = scheduledObservers; + scheduledObservers = []; + observers.sort(function(o1, o2) { + return o1.uid_ - o2.uid_; + }); + var anyNonEmpty = false; + observers.forEach(function(observer) { + var queue = observer.takeRecords(); + removeTransientObserversFor(observer); + if (queue.length) { + observer.callback_(queue, observer); + anyNonEmpty = true; + } + }); + if (anyNonEmpty) dispatchCallbacks(); + } + function removeTransientObserversFor(observer) { + observer.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + if (!registrations) return; + registrations.forEach(function(registration) { + if (registration.observer === observer) registration.removeTransientObservers(); + }); + }); + } + function forEachAncestorAndObserverEnqueueRecord(target, callback) { + for (var node = target; node; node = node.parentNode) { + var registrations = registrationsTable.get(node); + if (registrations) { + for (var j = 0; j < registrations.length; j++) { + var registration = registrations[j]; + var options = registration.options; + if (node !== target && !options.subtree) continue; + var record = callback(options); + if (record) registration.enqueue(record); + } + } + } + } + var uidCounter = 0; + function JsMutationObserver(callback) { + this.callback_ = callback; + this.nodes_ = []; + this.records_ = []; + this.uid_ = ++uidCounter; + } + JsMutationObserver.prototype = { + observe: function(target, options) { + target = wrapIfNeeded(target); + if (!options.childList && !options.attributes && !options.characterData || options.attributeOldValue && !options.attributes || options.attributeFilter && options.attributeFilter.length && !options.attributes || options.characterDataOldValue && !options.characterData) { + throw new SyntaxError(); + } + var registrations = registrationsTable.get(target); + if (!registrations) registrationsTable.set(target, registrations = []); + var registration; + for (var i = 0; i < registrations.length; i++) { + if (registrations[i].observer === this) { + registration = registrations[i]; + registration.removeListeners(); + registration.options = options; + break; + } + } + if (!registration) { + registration = new Registration(this, target, options); + registrations.push(registration); + this.nodes_.push(target); + } + registration.addListeners(); + }, + disconnect: function() { + this.nodes_.forEach(function(node) { + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + var registration = registrations[i]; + if (registration.observer === this) { + registration.removeListeners(); + registrations.splice(i, 1); + break; + } + } + }, this); + this.records_ = []; + }, + takeRecords: function() { + var copyOfRecords = this.records_; + this.records_ = []; + return copyOfRecords; + } + }; + function MutationRecord(type, target) { + this.type = type; + this.target = target; + this.addedNodes = []; + this.removedNodes = []; + this.previousSibling = null; + this.nextSibling = null; + this.attributeName = null; + this.attributeNamespace = null; + this.oldValue = null; + } + function copyMutationRecord(original) { + var record = new MutationRecord(original.type, original.target); + record.addedNodes = original.addedNodes.slice(); + record.removedNodes = original.removedNodes.slice(); + record.previousSibling = original.previousSibling; + record.nextSibling = original.nextSibling; + record.attributeName = original.attributeName; + record.attributeNamespace = original.attributeNamespace; + record.oldValue = original.oldValue; + return record; + } + var currentRecord, recordWithOldValue; + function getRecord(type, target) { + return currentRecord = new MutationRecord(type, target); + } + function getRecordWithOldValue(oldValue) { + if (recordWithOldValue) return recordWithOldValue; + recordWithOldValue = copyMutationRecord(currentRecord); + recordWithOldValue.oldValue = oldValue; + return recordWithOldValue; + } + function clearRecords() { + currentRecord = recordWithOldValue = undefined; + } + function recordRepresentsCurrentMutation(record) { + return record === recordWithOldValue || record === currentRecord; + } + function selectRecord(lastRecord, newRecord) { + if (lastRecord === newRecord) return lastRecord; + if (recordWithOldValue && recordRepresentsCurrentMutation(lastRecord)) return recordWithOldValue; + return null; + } + function Registration(observer, target, options) { + this.observer = observer; + this.target = target; + this.options = options; + this.transientObservedNodes = []; + } + Registration.prototype = { + enqueue: function(record) { + var records = this.observer.records_; + var length = records.length; + if (records.length > 0) { + var lastRecord = records[length - 1]; + var recordToReplaceLast = selectRecord(lastRecord, record); + if (recordToReplaceLast) { + records[length - 1] = recordToReplaceLast; + return; + } + } else { + scheduleCallback(this.observer); + } + records[length] = record; + }, + addListeners: function() { + this.addListeners_(this.target); + }, + addListeners_: function(node) { + var options = this.options; + if (options.attributes) node.addEventListener("DOMAttrModified", this, true); + if (options.characterData) node.addEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.addEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.addEventListener("DOMNodeRemoved", this, true); + }, + removeListeners: function() { + this.removeListeners_(this.target); + }, + removeListeners_: function(node) { + var options = this.options; + if (options.attributes) node.removeEventListener("DOMAttrModified", this, true); + if (options.characterData) node.removeEventListener("DOMCharacterDataModified", this, true); + if (options.childList) node.removeEventListener("DOMNodeInserted", this, true); + if (options.childList || options.subtree) node.removeEventListener("DOMNodeRemoved", this, true); + }, + addTransientObserver: function(node) { + if (node === this.target) return; + this.addListeners_(node); + this.transientObservedNodes.push(node); + var registrations = registrationsTable.get(node); + if (!registrations) registrationsTable.set(node, registrations = []); + registrations.push(this); + }, + removeTransientObservers: function() { + var transientObservedNodes = this.transientObservedNodes; + this.transientObservedNodes = []; + transientObservedNodes.forEach(function(node) { + this.removeListeners_(node); + var registrations = registrationsTable.get(node); + for (var i = 0; i < registrations.length; i++) { + if (registrations[i] === this) { + registrations.splice(i, 1); + break; + } + } + }, this); + }, + handleEvent: function(e) { + e.stopImmediatePropagation(); + switch (e.type) { + case "DOMAttrModified": + var name = e.attrName; + var namespace = e.relatedNode.namespaceURI; + var target = e.target; + var record = new getRecord("attributes", target); + record.attributeName = name; + record.attributeNamespace = namespace; + var oldValue = e.attrChange === MutationEvent.ADDITION ? null : e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.attributes) return; + if (options.attributeFilter && options.attributeFilter.length && options.attributeFilter.indexOf(name) === -1 && options.attributeFilter.indexOf(namespace) === -1) { + return; + } + if (options.attributeOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMCharacterDataModified": + var target = e.target; + var record = getRecord("characterData", target); + var oldValue = e.prevValue; + forEachAncestorAndObserverEnqueueRecord(target, function(options) { + if (!options.characterData) return; + if (options.characterDataOldValue) return getRecordWithOldValue(oldValue); + return record; + }); + break; + + case "DOMNodeRemoved": + this.addTransientObserver(e.target); + + case "DOMNodeInserted": + var changedNode = e.target; + var addedNodes, removedNodes; + if (e.type === "DOMNodeInserted") { + addedNodes = [ changedNode ]; + removedNodes = []; + } else { + addedNodes = []; + removedNodes = [ changedNode ]; + } + var previousSibling = changedNode.previousSibling; + var nextSibling = changedNode.nextSibling; + var record = getRecord("childList", e.target.parentNode); + record.addedNodes = addedNodes; + record.removedNodes = removedNodes; + record.previousSibling = previousSibling; + record.nextSibling = nextSibling; + forEachAncestorAndObserverEnqueueRecord(e.relatedNode, function(options) { + if (!options.childList) return; + return record; + }); + } + clearRecords(); + } + }; + global.JsMutationObserver = JsMutationObserver; + if (!global.MutationObserver) { + global.MutationObserver = JsMutationObserver; + JsMutationObserver._isPolyfilled = true; + } + })(self); + (function() { + var needsTemplate = typeof HTMLTemplateElement === "undefined"; + if (/Trident/.test(navigator.userAgent)) { + (function() { + var importNode = document.importNode; + document.importNode = function() { + var n = importNode.apply(document, arguments); + if (n.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + var f = document.createDocumentFragment(); + f.appendChild(n); + return f; + } else { + return n; + } + }; + })(); + } + var needsCloning = function() { + if (!needsTemplate) { + var t = document.createElement("template"); + var t2 = document.createElement("template"); + t2.content.appendChild(document.createElement("div")); + t.content.appendChild(t2); + var clone = t.cloneNode(true); + return clone.content.childNodes.length === 0 || clone.content.firstChild.content.childNodes.length === 0; + } + }(); + var TEMPLATE_TAG = "template"; + var TemplateImpl = function() {}; + if (needsTemplate) { + var contentDoc = document.implementation.createHTMLDocument("template"); + var canDecorate = true; + var templateStyle = document.createElement("style"); + templateStyle.textContent = TEMPLATE_TAG + "{display:none;}"; + var head = document.head; + head.insertBefore(templateStyle, head.firstElementChild); + TemplateImpl.prototype = Object.create(HTMLElement.prototype); + TemplateImpl.decorate = function(template) { + if (template.content) { + return; + } + template.content = contentDoc.createDocumentFragment(); + var child; + while (child = template.firstChild) { + template.content.appendChild(child); + } + template.cloneNode = function(deep) { + return TemplateImpl.cloneNode(this, deep); + }; + if (canDecorate) { + try { + Object.defineProperty(template, "innerHTML", { + get: function() { + var o = ""; + for (var e = this.content.firstChild; e; e = e.nextSibling) { + o += e.outerHTML || escapeData(e.data); + } + return o; + }, + set: function(text) { + contentDoc.body.innerHTML = text; + TemplateImpl.bootstrap(contentDoc); + while (this.content.firstChild) { + this.content.removeChild(this.content.firstChild); + } + while (contentDoc.body.firstChild) { + this.content.appendChild(contentDoc.body.firstChild); + } + }, + configurable: true + }); + } catch (err) { + canDecorate = false; + } + } + TemplateImpl.bootstrap(template.content); + }; + TemplateImpl.bootstrap = function(doc) { + var templates = doc.querySelectorAll(TEMPLATE_TAG); + for (var i = 0, l = templates.length, t; i < l && (t = templates[i]); i++) { + TemplateImpl.decorate(t); + } + }; + document.addEventListener("DOMContentLoaded", function() { + TemplateImpl.bootstrap(document); + }); + var createElement = document.createElement; + document.createElement = function() { + "use strict"; + var el = createElement.apply(document, arguments); + if (el.localName === "template") { + TemplateImpl.decorate(el); + } + return el; + }; + var escapeDataRegExp = /[&\u00A0<>]/g; + function escapeReplace(c) { + switch (c) { + case "&": + return "&"; + + case "<": + return "<"; + + case ">": + return ">"; + + case " ": + return " "; + } + } + function escapeData(s) { + return s.replace(escapeDataRegExp, escapeReplace); + } + } + if (needsTemplate || needsCloning) { + var nativeCloneNode = Node.prototype.cloneNode; + TemplateImpl.cloneNode = function(template, deep) { + var clone = nativeCloneNode.call(template, false); + if (this.decorate) { + this.decorate(clone); + } + if (deep) { + clone.content.appendChild(nativeCloneNode.call(template.content, true)); + this.fixClonedDom(clone.content, template.content); + } + return clone; + }; + TemplateImpl.fixClonedDom = function(clone, source) { + if (!source.querySelectorAll) return; + var s$ = source.querySelectorAll(TEMPLATE_TAG); + var t$ = clone.querySelectorAll(TEMPLATE_TAG); + for (var i = 0, l = t$.length, t, s; i < l; i++) { + s = s$[i]; + t = t$[i]; + if (this.decorate) { + this.decorate(s); + } + t.parentNode.replaceChild(s.cloneNode(true), t); + } + }; + var originalImportNode = document.importNode; + Node.prototype.cloneNode = function(deep) { + var dom = nativeCloneNode.call(this, deep); + if (deep) { + TemplateImpl.fixClonedDom(dom, this); + } + return dom; + }; + document.importNode = function(element, deep) { + if (element.localName === TEMPLATE_TAG) { + return TemplateImpl.cloneNode(element, deep); + } else { + var dom = originalImportNode.call(document, element, deep); + if (deep) { + TemplateImpl.fixClonedDom(dom, element); + } + return dom; + } + }; + if (needsCloning) { + HTMLTemplateElement.prototype.cloneNode = function(deep) { + return TemplateImpl.cloneNode(this, deep); + }; + } + } + if (needsTemplate) { + window.HTMLTemplateElement = TemplateImpl; + } + })(); + (function(scope) { + "use strict"; + if (!(window.performance && window.performance.now)) { + var start = Date.now(); + window.performance = { + now: function() { + return Date.now() - start; + } + }; + } + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = function() { + var nativeRaf = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame; + return nativeRaf ? function(callback) { + return nativeRaf(function() { + callback(performance.now()); + }); + } : function(callback) { + return window.setTimeout(callback, 1e3 / 60); + }; + }(); + } + if (!window.cancelAnimationFrame) { + window.cancelAnimationFrame = function() { + return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function(id) { + clearTimeout(id); + }; + }(); + } + var workingDefaultPrevented = function() { + var e = document.createEvent("Event"); + e.initEvent("foo", true, true); + e.preventDefault(); + return e.defaultPrevented; + }(); + if (!workingDefaultPrevented) { + var origPreventDefault = Event.prototype.preventDefault; + Event.prototype.preventDefault = function() { + if (!this.cancelable) { + return; + } + origPreventDefault.call(this); + Object.defineProperty(this, "defaultPrevented", { + get: function() { + return true; + }, + configurable: true + }); + }; + } + var isIE = /Trident/.test(navigator.userAgent); + if (!window.CustomEvent || isIE && typeof window.CustomEvent !== "function") { + window.CustomEvent = function(inType, params) { + params = params || {}; + var e = document.createEvent("CustomEvent"); + e.initCustomEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable), params.detail); + return e; + }; + window.CustomEvent.prototype = window.Event.prototype; + } + if (!window.Event || isIE && typeof window.Event !== "function") { + var origEvent = window.Event; + window.Event = function(inType, params) { + params = params || {}; + var e = document.createEvent("Event"); + e.initEvent(inType, Boolean(params.bubbles), Boolean(params.cancelable)); + return e; + }; + window.Event.prototype = origEvent.prototype; + } + })(window.WebComponents); + window.HTMLImports = window.HTMLImports || { + flags: {} + }; + (function(scope) { + var IMPORT_LINK_TYPE = "import"; + var useNative = Boolean(IMPORT_LINK_TYPE in document.createElement("link")); + var hasShadowDOMPolyfill = Boolean(window.ShadowDOMPolyfill); + var wrap = function(node) { + return hasShadowDOMPolyfill ? window.ShadowDOMPolyfill.wrapIfNeeded(node) : node; + }; + var rootDocument = wrap(document); + var currentScriptDescriptor = { + get: function() { + var script = window.HTMLImports.currentScript || document.currentScript || (document.readyState !== "complete" ? document.scripts[document.scripts.length - 1] : null); + return wrap(script); + }, + configurable: true + }; + Object.defineProperty(document, "_currentScript", currentScriptDescriptor); + Object.defineProperty(rootDocument, "_currentScript", currentScriptDescriptor); + var isIE = /Trident/.test(navigator.userAgent); + function whenReady(callback, doc) { + doc = doc || rootDocument; + whenDocumentReady(function() { + watchImportsLoad(callback, doc); + }, doc); + } + var requiredReadyState = isIE ? "complete" : "interactive"; + var READY_EVENT = "readystatechange"; + function isDocumentReady(doc) { + return doc.readyState === "complete" || doc.readyState === requiredReadyState; + } + function whenDocumentReady(callback, doc) { + if (!isDocumentReady(doc)) { + var checkReady = function() { + if (doc.readyState === "complete" || doc.readyState === requiredReadyState) { + doc.removeEventListener(READY_EVENT, checkReady); + whenDocumentReady(callback, doc); + } + }; + doc.addEventListener(READY_EVENT, checkReady); + } else if (callback) { + callback(); + } + } + function markTargetLoaded(event) { + event.target.__loaded = true; + } + function watchImportsLoad(callback, doc) { + var imports = doc.querySelectorAll("link[rel=import]"); + var parsedCount = 0, importCount = imports.length, newImports = [], errorImports = []; + function checkDone() { + if (parsedCount == importCount && callback) { + callback({ + allImports: imports, + loadedImports: newImports, + errorImports: errorImports + }); + } + } + function loadedImport(e) { + markTargetLoaded(e); + newImports.push(this); + parsedCount++; + checkDone(); + } + function errorLoadingImport(e) { + errorImports.push(this); + parsedCount++; + checkDone(); + } + if (importCount) { + for (var i = 0, imp; i < importCount && (imp = imports[i]); i++) { + if (isImportLoaded(imp)) { + newImports.push(this); + parsedCount++; + checkDone(); + } else { + imp.addEventListener("load", loadedImport); + imp.addEventListener("error", errorLoadingImport); + } + } + } else { + checkDone(); + } + } + function isImportLoaded(link) { + return useNative ? link.__loaded || link.import && link.import.readyState !== "loading" : link.__importParsed; + } + if (useNative) { + new MutationObserver(function(mxns) { + for (var i = 0, l = mxns.length, m; i < l && (m = mxns[i]); i++) { + if (m.addedNodes) { + handleImports(m.addedNodes); + } + } + }).observe(document.head, { + childList: true + }); + function handleImports(nodes) { + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (isImport(n)) { + handleImport(n); + } + } + } + function isImport(element) { + return element.localName === "link" && element.rel === "import"; + } + function handleImport(element) { + var loaded = element.import; + if (loaded) { + markTargetLoaded({ + target: element + }); + } else { + element.addEventListener("load", markTargetLoaded); + element.addEventListener("error", markTargetLoaded); + } + } + (function() { + if (document.readyState === "loading") { + var imports = document.querySelectorAll("link[rel=import]"); + for (var i = 0, l = imports.length, imp; i < l && (imp = imports[i]); i++) { + handleImport(imp); + } + } + })(); + } + whenReady(function(detail) { + window.HTMLImports.ready = true; + window.HTMLImports.readyTime = new Date().getTime(); + var evt = rootDocument.createEvent("CustomEvent"); + evt.initCustomEvent("HTMLImportsLoaded", true, true, detail); + rootDocument.dispatchEvent(evt); + }); + scope.IMPORT_LINK_TYPE = IMPORT_LINK_TYPE; + scope.useNative = useNative; + scope.rootDocument = rootDocument; + scope.whenReady = whenReady; + scope.isIE = isIE; + })(window.HTMLImports); + (function(scope) { + var modules = []; + var addModule = function(module) { + modules.push(module); + }; + var initializeModules = function() { + modules.forEach(function(module) { + module(scope); + }); + }; + scope.addModule = addModule; + scope.initializeModules = initializeModules; + })(window.HTMLImports); + window.HTMLImports.addModule(function(scope) { + var CSS_URL_REGEXP = /(url\()([^)]*)(\))/g; + var CSS_IMPORT_REGEXP = /(@import[\s]+(?!url\())([^;]*)(;)/g; + var path = { + resolveUrlsInStyle: function(style, linkUrl) { + var doc = style.ownerDocument; + var resolver = doc.createElement("a"); + style.textContent = this.resolveUrlsInCssText(style.textContent, linkUrl, resolver); + return style; + }, + resolveUrlsInCssText: function(cssText, linkUrl, urlObj) { + var r = this.replaceUrls(cssText, urlObj, linkUrl, CSS_URL_REGEXP); + r = this.replaceUrls(r, urlObj, linkUrl, CSS_IMPORT_REGEXP); + return r; + }, + replaceUrls: function(text, urlObj, linkUrl, regexp) { + return text.replace(regexp, function(m, pre, url, post) { + var urlPath = url.replace(/["']/g, ""); + if (linkUrl) { + urlPath = new URL(urlPath, linkUrl).href; + } + urlObj.href = urlPath; + urlPath = urlObj.href; + return pre + "'" + urlPath + "'" + post; + }); + } + }; + scope.path = path; + }); + window.HTMLImports.addModule(function(scope) { + var xhr = { + async: true, + ok: function(request) { + return request.status >= 200 && request.status < 300 || request.status === 304 || request.status === 0; + }, + load: function(url, next, nextContext) { + var request = new XMLHttpRequest(); + if (scope.flags.debug || scope.flags.bust) { + url += "?" + Math.random(); + } + request.open("GET", url, xhr.async); + request.addEventListener("readystatechange", function(e) { + if (request.readyState === 4) { + var redirectedUrl = null; + try { + var locationHeader = request.getResponseHeader("Location"); + if (locationHeader) { + redirectedUrl = locationHeader.substr(0, 1) === "/" ? location.origin + locationHeader : locationHeader; + } + } catch (e) { + console.error(e.message); + } + next.call(nextContext, !xhr.ok(request) && request, request.response || request.responseText, redirectedUrl); + } + }); + request.send(); + return request; + }, + loadDocument: function(url, next, nextContext) { + this.load(url, next, nextContext).responseType = "document"; + } + }; + scope.xhr = xhr; + }); + window.HTMLImports.addModule(function(scope) { + var xhr = scope.xhr; + var flags = scope.flags; + var Loader = function(onLoad, onComplete) { + this.cache = {}; + this.onload = onLoad; + this.oncomplete = onComplete; + this.inflight = 0; + this.pending = {}; + }; + Loader.prototype = { + addNodes: function(nodes) { + this.inflight += nodes.length; + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + this.require(n); + } + this.checkDone(); + }, + addNode: function(node) { + this.inflight++; + this.require(node); + this.checkDone(); + }, + require: function(elt) { + var url = elt.src || elt.href; + elt.__nodeUrl = url; + if (!this.dedupe(url, elt)) { + this.fetch(url, elt); + } + }, + dedupe: function(url, elt) { + if (this.pending[url]) { + this.pending[url].push(elt); + return true; + } + var resource; + if (this.cache[url]) { + this.onload(url, elt, this.cache[url]); + this.tail(); + return true; + } + this.pending[url] = [ elt ]; + return false; + }, + fetch: function(url, elt) { + flags.load && console.log("fetch", url, elt); + if (!url) { + setTimeout(function() { + this.receive(url, elt, { + error: "href must be specified" + }, null); + }.bind(this), 0); + } else if (url.match(/^data:/)) { + var pieces = url.split(","); + var header = pieces[0]; + var body = pieces[1]; + if (header.indexOf(";base64") > -1) { + body = atob(body); + } else { + body = decodeURIComponent(body); + } + setTimeout(function() { + this.receive(url, elt, null, body); + }.bind(this), 0); + } else { + var receiveXhr = function(err, resource, redirectedUrl) { + this.receive(url, elt, err, resource, redirectedUrl); + }.bind(this); + xhr.load(url, receiveXhr); + } + }, + receive: function(url, elt, err, resource, redirectedUrl) { + this.cache[url] = resource; + var $p = this.pending[url]; + for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { + this.onload(url, p, resource, err, redirectedUrl); + this.tail(); + } + this.pending[url] = null; + }, + tail: function() { + --this.inflight; + this.checkDone(); + }, + checkDone: function() { + if (!this.inflight) { + this.oncomplete(); + } + } + }; + scope.Loader = Loader; + }); + window.HTMLImports.addModule(function(scope) { + var Observer = function(addCallback) { + this.addCallback = addCallback; + this.mo = new MutationObserver(this.handler.bind(this)); + }; + Observer.prototype = { + handler: function(mutations) { + for (var i = 0, l = mutations.length, m; i < l && (m = mutations[i]); i++) { + if (m.type === "childList" && m.addedNodes.length) { + this.addedNodes(m.addedNodes); + } + } + }, + addedNodes: function(nodes) { + if (this.addCallback) { + this.addCallback(nodes); + } + for (var i = 0, l = nodes.length, n, loading; i < l && (n = nodes[i]); i++) { + if (n.children && n.children.length) { + this.addedNodes(n.children); + } + } + }, + observe: function(root) { + this.mo.observe(root, { + childList: true, + subtree: true + }); + } + }; + scope.Observer = Observer; + }); + window.HTMLImports.addModule(function(scope) { + var path = scope.path; + var rootDocument = scope.rootDocument; + var flags = scope.flags; + var isIE = scope.isIE; + var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; + var IMPORT_SELECTOR = "link[rel=" + IMPORT_LINK_TYPE + "]"; + var importParser = { + documentSelectors: IMPORT_SELECTOR, + importsSelectors: [ IMPORT_SELECTOR, "link[rel=stylesheet]:not([type])", "style:not([type])", "script:not([type])", 'script[type="application/javascript"]', 'script[type="text/javascript"]' ].join(","), + map: { + link: "parseLink", + script: "parseScript", + style: "parseStyle" + }, + dynamicElements: [], + parseNext: function() { + var next = this.nextToParse(); + if (next) { + this.parse(next); + } + }, + parse: function(elt) { + if (this.isParsed(elt)) { + flags.parse && console.log("[%s] is already parsed", elt.localName); + return; + } + var fn = this[this.map[elt.localName]]; + if (fn) { + this.markParsing(elt); + fn.call(this, elt); + } + }, + parseDynamic: function(elt, quiet) { + this.dynamicElements.push(elt); + if (!quiet) { + this.parseNext(); + } + }, + markParsing: function(elt) { + flags.parse && console.log("parsing", elt); + this.parsingElement = elt; + }, + markParsingComplete: function(elt) { + elt.__importParsed = true; + this.markDynamicParsingComplete(elt); + if (elt.__importElement) { + elt.__importElement.__importParsed = true; + this.markDynamicParsingComplete(elt.__importElement); + } + this.parsingElement = null; + flags.parse && console.log("completed", elt); + }, + markDynamicParsingComplete: function(elt) { + var i = this.dynamicElements.indexOf(elt); + if (i >= 0) { + this.dynamicElements.splice(i, 1); + } + }, + parseImport: function(elt) { + elt.import = elt.__doc; + if (window.HTMLImports.__importsParsingHook) { + window.HTMLImports.__importsParsingHook(elt); + } + if (elt.import) { + elt.import.__importParsed = true; + } + this.markParsingComplete(elt); + if (elt.__resource && !elt.__error) { + elt.dispatchEvent(new CustomEvent("load", { + bubbles: false + })); + } else { + elt.dispatchEvent(new CustomEvent("error", { + bubbles: false + })); + } + if (elt.__pending) { + var fn; + while (elt.__pending.length) { + fn = elt.__pending.shift(); + if (fn) { + fn({ + target: elt + }); + } + } + } + this.parseNext(); + }, + parseLink: function(linkElt) { + if (nodeIsImport(linkElt)) { + this.parseImport(linkElt); + } else { + linkElt.href = linkElt.href; + this.parseGeneric(linkElt); + } + }, + parseStyle: function(elt) { + var src = elt; + elt = cloneStyle(elt); + src.__appliedElement = elt; + elt.__importElement = src; + this.parseGeneric(elt); + }, + parseGeneric: function(elt) { + this.trackElement(elt); + this.addElementToDocument(elt); + }, + rootImportForElement: function(elt) { + var n = elt; + while (n.ownerDocument.__importLink) { + n = n.ownerDocument.__importLink; + } + return n; + }, + addElementToDocument: function(elt) { + var port = this.rootImportForElement(elt.__importElement || elt); + port.parentNode.insertBefore(elt, port); + }, + trackElement: function(elt, callback) { + var self = this; + var done = function(e) { + elt.removeEventListener("load", done); + elt.removeEventListener("error", done); + if (callback) { + callback(e); + } + self.markParsingComplete(elt); + self.parseNext(); + }; + elt.addEventListener("load", done); + elt.addEventListener("error", done); + if (isIE && elt.localName === "style") { + var fakeLoad = false; + if (elt.textContent.indexOf("@import") == -1) { + fakeLoad = true; + } else if (elt.sheet) { + fakeLoad = true; + var csr = elt.sheet.cssRules; + var len = csr ? csr.length : 0; + for (var i = 0, r; i < len && (r = csr[i]); i++) { + if (r.type === CSSRule.IMPORT_RULE) { + fakeLoad = fakeLoad && Boolean(r.styleSheet); + } + } + } + if (fakeLoad) { + setTimeout(function() { + elt.dispatchEvent(new CustomEvent("load", { + bubbles: false + })); + }); + } + } + }, + parseScript: function(scriptElt) { + var script = document.createElement("script"); + script.__importElement = scriptElt; + script.src = scriptElt.src ? scriptElt.src : generateScriptDataUrl(scriptElt); + scope.currentScript = scriptElt; + this.trackElement(script, function(e) { + if (script.parentNode) { + script.parentNode.removeChild(script); + } + scope.currentScript = null; + }); + this.addElementToDocument(script); + }, + nextToParse: function() { + this._mayParse = []; + return !this.parsingElement && (this.nextToParseInDoc(rootDocument) || this.nextToParseDynamic()); + }, + nextToParseInDoc: function(doc, link) { + if (doc && this._mayParse.indexOf(doc) < 0) { + this._mayParse.push(doc); + var nodes = doc.querySelectorAll(this.parseSelectorsForNode(doc)); + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (!this.isParsed(n)) { + if (this.hasResource(n)) { + return nodeIsImport(n) ? this.nextToParseInDoc(n.__doc, n) : n; + } else { + return; + } + } + } + } + return link; + }, + nextToParseDynamic: function() { + return this.dynamicElements[0]; + }, + parseSelectorsForNode: function(node) { + var doc = node.ownerDocument || node; + return doc === rootDocument ? this.documentSelectors : this.importsSelectors; + }, + isParsed: function(node) { + return node.__importParsed; + }, + needsDynamicParsing: function(elt) { + return this.dynamicElements.indexOf(elt) >= 0; + }, + hasResource: function(node) { + if (nodeIsImport(node) && node.__doc === undefined) { + return false; + } + return true; + } + }; + function nodeIsImport(elt) { + return elt.localName === "link" && elt.rel === IMPORT_LINK_TYPE; + } + function generateScriptDataUrl(script) { + var scriptContent = generateScriptContent(script); + return "data:text/javascript;charset=utf-8," + encodeURIComponent(scriptContent); + } + function generateScriptContent(script) { + return script.textContent + generateSourceMapHint(script); + } + function generateSourceMapHint(script) { + var owner = script.ownerDocument; + owner.__importedScripts = owner.__importedScripts || 0; + var moniker = script.ownerDocument.baseURI; + var num = owner.__importedScripts ? "-" + owner.__importedScripts : ""; + owner.__importedScripts++; + return "\n//# sourceURL=" + moniker + num + ".js\n"; + } + function cloneStyle(style) { + var clone = style.ownerDocument.createElement("style"); + clone.textContent = style.textContent; + path.resolveUrlsInStyle(clone); + return clone; + } + scope.parser = importParser; + scope.IMPORT_SELECTOR = IMPORT_SELECTOR; + }); + window.HTMLImports.addModule(function(scope) { + var flags = scope.flags; + var IMPORT_LINK_TYPE = scope.IMPORT_LINK_TYPE; + var IMPORT_SELECTOR = scope.IMPORT_SELECTOR; + var rootDocument = scope.rootDocument; + var Loader = scope.Loader; + var Observer = scope.Observer; + var parser = scope.parser; + var importer = { + documents: {}, + documentPreloadSelectors: IMPORT_SELECTOR, + importsPreloadSelectors: [ IMPORT_SELECTOR ].join(","), + loadNode: function(node) { + importLoader.addNode(node); + }, + loadSubtree: function(parent) { + var nodes = this.marshalNodes(parent); + importLoader.addNodes(nodes); + }, + marshalNodes: function(parent) { + return parent.querySelectorAll(this.loadSelectorsForNode(parent)); + }, + loadSelectorsForNode: function(node) { + var doc = node.ownerDocument || node; + return doc === rootDocument ? this.documentPreloadSelectors : this.importsPreloadSelectors; + }, + loaded: function(url, elt, resource, err, redirectedUrl) { + flags.load && console.log("loaded", url, elt); + elt.__resource = resource; + elt.__error = err; + if (isImportLink(elt)) { + var doc = this.documents[url]; + if (doc === undefined) { + doc = err ? null : makeDocument(resource, redirectedUrl || url); + if (doc) { + doc.__importLink = elt; + this.bootDocument(doc); + } + this.documents[url] = doc; + } + elt.__doc = doc; + } + parser.parseNext(); + }, + bootDocument: function(doc) { + this.loadSubtree(doc); + this.observer.observe(doc); + parser.parseNext(); + }, + loadedAll: function() { + parser.parseNext(); + } + }; + var importLoader = new Loader(importer.loaded.bind(importer), importer.loadedAll.bind(importer)); + importer.observer = new Observer(); + function isImportLink(elt) { + return isLinkRel(elt, IMPORT_LINK_TYPE); + } + function isLinkRel(elt, rel) { + return elt.localName === "link" && elt.getAttribute("rel") === rel; + } + function hasBaseURIAccessor(doc) { + return !!Object.getOwnPropertyDescriptor(doc, "baseURI"); + } + function makeDocument(resource, url) { + var doc = document.implementation.createHTMLDocument(IMPORT_LINK_TYPE); + doc._URL = url; + var base = doc.createElement("base"); + base.setAttribute("href", url); + if (!doc.baseURI && !hasBaseURIAccessor(doc)) { + Object.defineProperty(doc, "baseURI", { + value: url + }); + } + var meta = doc.createElement("meta"); + meta.setAttribute("charset", "utf-8"); + doc.head.appendChild(meta); + doc.head.appendChild(base); + doc.body.innerHTML = resource; + if (window.HTMLTemplateElement && HTMLTemplateElement.bootstrap) { + HTMLTemplateElement.bootstrap(doc); + } + return doc; + } + if (!document.baseURI) { + var baseURIDescriptor = { + get: function() { + var base = document.querySelector("base"); + return base ? base.href : window.location.href; + }, + configurable: true + }; + Object.defineProperty(document, "baseURI", baseURIDescriptor); + Object.defineProperty(rootDocument, "baseURI", baseURIDescriptor); + } + scope.importer = importer; + scope.importLoader = importLoader; + }); + window.HTMLImports.addModule(function(scope) { + var parser = scope.parser; + var importer = scope.importer; + var dynamic = { + added: function(nodes) { + var owner, parsed, loading; + for (var i = 0, l = nodes.length, n; i < l && (n = nodes[i]); i++) { + if (!owner) { + owner = n.ownerDocument; + parsed = parser.isParsed(owner); + } + loading = this.shouldLoadNode(n); + if (loading) { + importer.loadNode(n); + } + if (this.shouldParseNode(n) && parsed) { + parser.parseDynamic(n, loading); + } + } + }, + shouldLoadNode: function(node) { + return node.nodeType === 1 && matches.call(node, importer.loadSelectorsForNode(node)); + }, + shouldParseNode: function(node) { + return node.nodeType === 1 && matches.call(node, parser.parseSelectorsForNode(node)); + } + }; + importer.observer.addCallback = dynamic.added.bind(dynamic); + var matches = HTMLElement.prototype.matches || HTMLElement.prototype.matchesSelector || HTMLElement.prototype.webkitMatchesSelector || HTMLElement.prototype.mozMatchesSelector || HTMLElement.prototype.msMatchesSelector; + }); + (function(scope) { + var initializeModules = scope.initializeModules; + var isIE = scope.isIE; + if (scope.useNative) { + return; + } + initializeModules(); + var rootDocument = scope.rootDocument; + function bootstrap() { + window.HTMLImports.importer.bootDocument(rootDocument); + } + if (document.readyState === "complete" || document.readyState === "interactive" && !window.attachEvent) { + bootstrap(); + } else { + document.addEventListener("DOMContentLoaded", bootstrap); + } + })(window.HTMLImports); + window.CustomElements = window.CustomElements || { + flags: {} + }; + (function(scope) { + var flags = scope.flags; + var modules = []; + var addModule = function(module) { + modules.push(module); + }; + var initializeModules = function() { + modules.forEach(function(module) { + module(scope); + }); + }; + scope.addModule = addModule; + scope.initializeModules = initializeModules; + scope.hasNative = Boolean(document.registerElement); + scope.isIE = /Trident/.test(navigator.userAgent); + scope.useNative = !flags.register && scope.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative); + })(window.CustomElements); + window.CustomElements.addModule(function(scope) { + var IMPORT_LINK_TYPE = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : "none"; + function forSubtree(node, cb) { + findAllElements(node, function(e) { + if (cb(e)) { + return true; + } + forRoots(e, cb); + }); + forRoots(node, cb); + } + function findAllElements(node, find, data) { + var e = node.firstElementChild; + if (!e) { + e = node.firstChild; + while (e && e.nodeType !== Node.ELEMENT_NODE) { + e = e.nextSibling; + } + } + while (e) { + if (find(e, data) !== true) { + findAllElements(e, find, data); + } + e = e.nextElementSibling; + } + return null; + } + function forRoots(node, cb) { + var root = node.shadowRoot; + while (root) { + forSubtree(root, cb); + root = root.olderShadowRoot; + } + } + function forDocumentTree(doc, cb) { + _forDocumentTree(doc, cb, []); + } + function _forDocumentTree(doc, cb, processingDocuments) { + doc = window.wrap(doc); + if (processingDocuments.indexOf(doc) >= 0) { + return; + } + processingDocuments.push(doc); + var imports = doc.querySelectorAll("link[rel=" + IMPORT_LINK_TYPE + "]"); + for (var i = 0, l = imports.length, n; i < l && (n = imports[i]); i++) { + if (n.import) { + _forDocumentTree(n.import, cb, processingDocuments); + } + } + cb(doc); + } + scope.forDocumentTree = forDocumentTree; + scope.forSubtree = forSubtree; + }); + window.CustomElements.addModule(function(scope) { + var flags = scope.flags; + var forSubtree = scope.forSubtree; + var forDocumentTree = scope.forDocumentTree; + function addedNode(node, isAttached) { + return added(node, isAttached) || addedSubtree(node, isAttached); + } + function added(node, isAttached) { + if (scope.upgrade(node, isAttached)) { + return true; + } + if (isAttached) { + attached(node); + } + } + function addedSubtree(node, isAttached) { + forSubtree(node, function(e) { + if (added(e, isAttached)) { + return true; + } + }); + } + var hasThrottledAttached = window.MutationObserver._isPolyfilled && flags["throttle-attached"]; + scope.hasPolyfillMutations = hasThrottledAttached; + scope.hasThrottledAttached = hasThrottledAttached; + var isPendingMutations = false; + var pendingMutations = []; + function deferMutation(fn) { + pendingMutations.push(fn); + if (!isPendingMutations) { + isPendingMutations = true; + setTimeout(takeMutations); + } + } + function takeMutations() { + isPendingMutations = false; + var $p = pendingMutations; + for (var i = 0, l = $p.length, p; i < l && (p = $p[i]); i++) { + p(); + } + pendingMutations = []; + } + function attached(element) { + if (hasThrottledAttached) { + deferMutation(function() { + _attached(element); + }); + } else { + _attached(element); + } + } + function _attached(element) { + if (element.__upgraded__ && !element.__attached) { + element.__attached = true; + if (element.attachedCallback) { + element.attachedCallback(); + } + } + } + function detachedNode(node) { + detached(node); + forSubtree(node, function(e) { + detached(e); + }); + } + function detached(element) { + if (hasThrottledAttached) { + deferMutation(function() { + _detached(element); + }); + } else { + _detached(element); + } + } + function _detached(element) { + if (element.__upgraded__ && element.__attached) { + element.__attached = false; + if (element.detachedCallback) { + element.detachedCallback(); + } + } + } + function inDocument(element) { + var p = element; + var doc = window.wrap(document); + while (p) { + if (p == doc) { + return true; + } + p = p.parentNode || p.nodeType === Node.DOCUMENT_FRAGMENT_NODE && p.host; + } + } + function watchShadow(node) { + if (node.shadowRoot && !node.shadowRoot.__watched) { + flags.dom && console.log("watching shadow-root for: ", node.localName); + var root = node.shadowRoot; + while (root) { + observe(root); + root = root.olderShadowRoot; + } + } + } + function handler(root, mutations) { + if (flags.dom) { + var mx = mutations[0]; + if (mx && mx.type === "childList" && mx.addedNodes) { + if (mx.addedNodes) { + var d = mx.addedNodes[0]; + while (d && d !== document && !d.host) { + d = d.parentNode; + } + var u = d && (d.URL || d._URL || d.host && d.host.localName) || ""; + u = u.split("/?").shift().split("/").pop(); + } + } + console.group("mutations (%d) [%s]", mutations.length, u || ""); + } + var isAttached = inDocument(root); + mutations.forEach(function(mx) { + if (mx.type === "childList") { + forEach(mx.addedNodes, function(n) { + if (!n.localName) { + return; + } + addedNode(n, isAttached); + }); + forEach(mx.removedNodes, function(n) { + if (!n.localName) { + return; + } + detachedNode(n); + }); + } + }); + flags.dom && console.groupEnd(); + } + function takeRecords(node) { + node = window.wrap(node); + if (!node) { + node = window.wrap(document); + } + while (node.parentNode) { + node = node.parentNode; + } + var observer = node.__observer; + if (observer) { + handler(node, observer.takeRecords()); + takeMutations(); + } + } + var forEach = Array.prototype.forEach.call.bind(Array.prototype.forEach); + function observe(inRoot) { + if (inRoot.__observer) { + return; + } + var observer = new MutationObserver(handler.bind(this, inRoot)); + observer.observe(inRoot, { + childList: true, + subtree: true + }); + inRoot.__observer = observer; + } + function upgradeDocument(doc) { + doc = window.wrap(doc); + flags.dom && console.group("upgradeDocument: ", doc.baseURI.split("/").pop()); + var isMainDocument = doc === window.wrap(document); + addedNode(doc, isMainDocument); + observe(doc); + flags.dom && console.groupEnd(); + } + function upgradeDocumentTree(doc) { + forDocumentTree(doc, upgradeDocument); + } + var originalCreateShadowRoot = Element.prototype.createShadowRoot; + if (originalCreateShadowRoot) { + Element.prototype.createShadowRoot = function() { + var root = originalCreateShadowRoot.call(this); + window.CustomElements.watchShadow(this); + return root; + }; + } + scope.watchShadow = watchShadow; + scope.upgradeDocumentTree = upgradeDocumentTree; + scope.upgradeDocument = upgradeDocument; + scope.upgradeSubtree = addedSubtree; + scope.upgradeAll = addedNode; + scope.attached = attached; + scope.takeRecords = takeRecords; + }); + window.CustomElements.addModule(function(scope) { + var flags = scope.flags; + function upgrade(node, isAttached) { + if (node.localName === "template") { + if (window.HTMLTemplateElement && HTMLTemplateElement.decorate) { + HTMLTemplateElement.decorate(node); + } + } + if (!node.__upgraded__ && node.nodeType === Node.ELEMENT_NODE) { + var is = node.getAttribute("is"); + var definition = scope.getRegisteredDefinition(node.localName) || scope.getRegisteredDefinition(is); + if (definition) { + if (is && definition.tag == node.localName || !is && !definition.extends) { + return upgradeWithDefinition(node, definition, isAttached); + } + } + } + } + function upgradeWithDefinition(element, definition, isAttached) { + flags.upgrade && console.group("upgrade:", element.localName); + if (definition.is) { + element.setAttribute("is", definition.is); + } + implementPrototype(element, definition); + element.__upgraded__ = true; + created(element); + if (isAttached) { + scope.attached(element); + } + scope.upgradeSubtree(element, isAttached); + flags.upgrade && console.groupEnd(); + return element; + } + function implementPrototype(element, definition) { + if (Object.__proto__) { + element.__proto__ = definition.prototype; + } else { + customMixin(element, definition.prototype, definition.native); + element.__proto__ = definition.prototype; + } + } + function customMixin(inTarget, inSrc, inNative) { + var used = {}; + var p = inSrc; + while (p !== inNative && p !== HTMLElement.prototype) { + var keys = Object.getOwnPropertyNames(p); + for (var i = 0, k; k = keys[i]; i++) { + if (!used[k]) { + Object.defineProperty(inTarget, k, Object.getOwnPropertyDescriptor(p, k)); + used[k] = 1; + } + } + p = Object.getPrototypeOf(p); + } + } + function created(element) { + if (element.createdCallback) { + element.createdCallback(); + } + } + scope.upgrade = upgrade; + scope.upgradeWithDefinition = upgradeWithDefinition; + scope.implementPrototype = implementPrototype; + }); + window.CustomElements.addModule(function(scope) { + var isIE = scope.isIE; + var upgradeDocumentTree = scope.upgradeDocumentTree; + var upgradeAll = scope.upgradeAll; + var upgradeWithDefinition = scope.upgradeWithDefinition; + var implementPrototype = scope.implementPrototype; + var useNative = scope.useNative; + function register(name, options) { + var definition = options || {}; + if (!name) { + throw new Error("document.registerElement: first argument `name` must not be empty"); + } + if (name.indexOf("-") < 0) { + throw new Error("document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '" + String(name) + "'."); + } + if (isReservedTag(name)) { + throw new Error("Failed to execute 'registerElement' on 'Document': Registration failed for type '" + String(name) + "'. The type name is invalid."); + } + if (getRegisteredDefinition(name)) { + throw new Error("DuplicateDefinitionError: a type with name '" + String(name) + "' is already registered"); + } + if (!definition.prototype) { + definition.prototype = Object.create(HTMLElement.prototype); + } + definition.__name = name.toLowerCase(); + if (definition.extends) { + definition.extends = definition.extends.toLowerCase(); + } + definition.lifecycle = definition.lifecycle || {}; + definition.ancestry = ancestry(definition.extends); + resolveTagName(definition); + resolvePrototypeChain(definition); + overrideAttributeApi(definition.prototype); + registerDefinition(definition.__name, definition); + definition.ctor = generateConstructor(definition); + definition.ctor.prototype = definition.prototype; + definition.prototype.constructor = definition.ctor; + if (scope.ready) { + upgradeDocumentTree(document); + } + return definition.ctor; + } + function overrideAttributeApi(prototype) { + if (prototype.setAttribute._polyfilled) { + return; + } + var setAttribute = prototype.setAttribute; + prototype.setAttribute = function(name, value) { + changeAttribute.call(this, name, value, setAttribute); + }; + var removeAttribute = prototype.removeAttribute; + prototype.removeAttribute = function(name) { + changeAttribute.call(this, name, null, removeAttribute); + }; + prototype.setAttribute._polyfilled = true; + } + function changeAttribute(name, value, operation) { + name = name.toLowerCase(); + var oldValue = this.getAttribute(name); + operation.apply(this, arguments); + var newValue = this.getAttribute(name); + if (this.attributeChangedCallback && newValue !== oldValue) { + this.attributeChangedCallback(name, oldValue, newValue); + } + } + function isReservedTag(name) { + for (var i = 0; i < reservedTagList.length; i++) { + if (name === reservedTagList[i]) { + return true; + } + } + } + var reservedTagList = [ "annotation-xml", "color-profile", "font-face", "font-face-src", "font-face-uri", "font-face-format", "font-face-name", "missing-glyph" ]; + function ancestry(extnds) { + var extendee = getRegisteredDefinition(extnds); + if (extendee) { + return ancestry(extendee.extends).concat([ extendee ]); + } + return []; + } + function resolveTagName(definition) { + var baseTag = definition.extends; + for (var i = 0, a; a = definition.ancestry[i]; i++) { + baseTag = a.is && a.tag; + } + definition.tag = baseTag || definition.__name; + if (baseTag) { + definition.is = definition.__name; + } + } + function resolvePrototypeChain(definition) { + if (!Object.__proto__) { + var nativePrototype = HTMLElement.prototype; + if (definition.is) { + var inst = document.createElement(definition.tag); + nativePrototype = Object.getPrototypeOf(inst); + } + var proto = definition.prototype, ancestor; + var foundPrototype = false; + while (proto) { + if (proto == nativePrototype) { + foundPrototype = true; + } + ancestor = Object.getPrototypeOf(proto); + if (ancestor) { + proto.__proto__ = ancestor; + } + proto = ancestor; + } + if (!foundPrototype) { + console.warn(definition.tag + " prototype not found in prototype chain for " + definition.is); + } + definition.native = nativePrototype; + } + } + function instantiate(definition) { + return upgradeWithDefinition(domCreateElement(definition.tag), definition); + } + var registry = {}; + function getRegisteredDefinition(name) { + if (name) { + return registry[name.toLowerCase()]; + } + } + function registerDefinition(name, definition) { + registry[name] = definition; + } + function generateConstructor(definition) { + return function() { + return instantiate(definition); + }; + } + var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; + function createElementNS(namespace, tag, typeExtension) { + if (namespace === HTML_NAMESPACE) { + return createElement(tag, typeExtension); + } else { + return domCreateElementNS(namespace, tag); + } + } + function createElement(tag, typeExtension) { + if (tag) { + tag = tag.toLowerCase(); + } + if (typeExtension) { + typeExtension = typeExtension.toLowerCase(); + } + var definition = getRegisteredDefinition(typeExtension || tag); + if (definition) { + if (tag == definition.tag && typeExtension == definition.is) { + return new definition.ctor(); + } + if (!typeExtension && !definition.is) { + return new definition.ctor(); + } + } + var element; + if (typeExtension) { + element = createElement(tag); + element.setAttribute("is", typeExtension); + return element; + } + element = domCreateElement(tag); + if (tag.indexOf("-") >= 0) { + implementPrototype(element, HTMLElement); + } + return element; + } + var domCreateElement = document.createElement.bind(document); + var domCreateElementNS = document.createElementNS.bind(document); + var isInstance; + if (!Object.__proto__ && !useNative) { + isInstance = function(obj, ctor) { + if (obj instanceof ctor) { + return true; + } + var p = obj; + while (p) { + if (p === ctor.prototype) { + return true; + } + p = p.__proto__; + } + return false; + }; + } else { + isInstance = function(obj, base) { + return obj instanceof base; + }; + } + function wrapDomMethodToForceUpgrade(obj, methodName) { + var orig = obj[methodName]; + obj[methodName] = function() { + var n = orig.apply(this, arguments); + upgradeAll(n); + return n; + }; + } + wrapDomMethodToForceUpgrade(Node.prototype, "cloneNode"); + wrapDomMethodToForceUpgrade(document, "importNode"); + document.registerElement = register; + document.createElement = createElement; + document.createElementNS = createElementNS; + scope.registry = registry; + scope.instanceof = isInstance; + scope.reservedTagList = reservedTagList; + scope.getRegisteredDefinition = getRegisteredDefinition; + document.register = document.registerElement; + }); + (function(scope) { + var useNative = scope.useNative; + var initializeModules = scope.initializeModules; + var isIE = scope.isIE; + if (useNative) { + var nop = function() {}; + scope.watchShadow = nop; + scope.upgrade = nop; + scope.upgradeAll = nop; + scope.upgradeDocumentTree = nop; + scope.upgradeSubtree = nop; + scope.takeRecords = nop; + scope.instanceof = function(obj, base) { + return obj instanceof base; + }; + } else { + initializeModules(); + } + var upgradeDocumentTree = scope.upgradeDocumentTree; + var upgradeDocument = scope.upgradeDocument; + if (!window.wrap) { + if (window.ShadowDOMPolyfill) { + window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded; + window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded; + } else { + window.wrap = window.unwrap = function(node) { + return node; + }; + } + } + if (window.HTMLImports) { + window.HTMLImports.__importsParsingHook = function(elt) { + if (elt.import) { + upgradeDocument(wrap(elt.import)); + } + }; + } + function bootstrap() { + upgradeDocumentTree(window.wrap(document)); + window.CustomElements.ready = true; + var requestAnimationFrame = window.requestAnimationFrame || function(f) { + setTimeout(f, 16); + }; + requestAnimationFrame(function() { + setTimeout(function() { + window.CustomElements.readyTime = Date.now(); + if (window.HTMLImports) { + window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime; + } + document.dispatchEvent(new CustomEvent("WebComponentsReady", { + bubbles: true + })); + }); + }); + } + if (document.readyState === "complete" || scope.flags.eager) { + bootstrap(); + } else if (document.readyState === "interactive" && !window.attachEvent && (!window.HTMLImports || window.HTMLImports.ready)) { + bootstrap(); + } else { + var loadEvent = window.HTMLImports && !window.HTMLImports.ready ? "HTMLImportsLoaded" : "DOMContentLoaded"; + window.addEventListener(loadEvent, bootstrap); + } + })(window.CustomElements); + (function(scope) { + var style = document.createElement("style"); + style.textContent = "" + "body {" + "transition: opacity ease-in 0.2s;" + " } \n" + "body[unresolved] {" + "opacity: 0; display: block; overflow: hidden; position: relative;" + " } \n"; + var head = document.querySelector("head"); + head.insertBefore(style, head.firstChild); + })(window.WebComponents); + }, {} ], + 3: [ function(require, module, exports) { + "use strict"; + var Class = require("class.extend"), hasConnected = false, ChromecastSessionManager; + function getCastContext() { + return cast.framework.CastContext.getInstance(); + } + ChromecastSessionManager = Class.extend({ + init: function(player) { + this.player = player; + this._sessionListener = this._onSessionStateChange.bind(this); + this._castListener = this._onCastStateChange.bind(this); + this._addCastContextEventListeners(); + this.player.on("dispose", this._removeCastContextEventListeners.bind(this)); + this._notifyPlayerOfDevicesAvailabilityChange(this.getCastContext().getCastState()); + this.remotePlayer = new cast.framework.RemotePlayer(); + this.remotePlayerController = new cast.framework.RemotePlayerController(this.remotePlayer); + }, + _addCastContextEventListeners: function() { + var sessionStateChangedEvt = cast.framework.CastContextEventType.SESSION_STATE_CHANGED, castStateChangedEvt = cast.framework.CastContextEventType.CAST_STATE_CHANGED; + this.getCastContext().addEventListener(sessionStateChangedEvt, this._sessionListener); + this.getCastContext().addEventListener(castStateChangedEvt, this._castListener); + }, + _removeCastContextEventListeners: function() { + var sessionStateChangedEvt = cast.framework.CastContextEventType.SESSION_STATE_CHANGED, castStateChangedEvt = cast.framework.CastContextEventType.CAST_STATE_CHANGED; + this.getCastContext().removeEventListener(sessionStateChangedEvt, this._sessionListener); + this.getCastContext().removeEventListener(castStateChangedEvt, this._castListener); + }, + _onSessionStateChange: function(event) { + if (event.sessionState === cast.framework.SessionState.SESSION_ENDED) { + this.player.trigger("chromecastDisconnected"); + this._reloadTech(); + } + }, + _onCastStateChange: function(event) { + this._notifyPlayerOfDevicesAvailabilityChange(event.castState); + }, + _notifyPlayerOfDevicesAvailabilityChange: function(castState) { + if (this.hasAvailableDevices(castState)) { + this.player.trigger("chromecastDevicesAvailable"); + } else { + this.player.trigger("chromecastDevicesUnavailable"); + } + }, + hasAvailableDevices: function(castState) { + castState = castState || this.getCastContext().getCastState(); + return castState === cast.framework.CastState.NOT_CONNECTED || castState === cast.framework.CastState.CONNECTING || castState === cast.framework.CastState.CONNECTED; + }, + openCastMenu: function() { + var onSessionSuccess; + if (!this.player.currentSource()) { + return; + } + onSessionSuccess = function() { + hasConnected = true; + this.player.trigger("chromecastConnected"); + this._reloadTech(); + }.bind(this); + this.getCastContext().requestSession().then(onSessionSuccess, function() {}); + }, + _reloadTech: function() { + var player = this.player, currentTime = player.currentTime(), wasPaused = player.paused(), sources = player.currentSources(); + player.src(sources); + player.ready(function() { + if (wasPaused) { + player.pause(); + } else { + player.play(); + } + player.currentTime(currentTime || 0); + }); + }, + getCastContext: getCastContext, + getRemotePlayer: function() { + return this.remotePlayer; + }, + getRemotePlayerController: function() { + return this.remotePlayerController; + } + }); + ChromecastSessionManager.isChromecastAPIAvailable = function() { + return window.chrome && window.chrome.cast && window.cast; + }; + ChromecastSessionManager.isChromecastConnected = function() { + return ChromecastSessionManager.isChromecastAPIAvailable() && getCastContext().getCastState() === cast.framework.CastState.CONNECTED && hasConnected; + }; + module.exports = ChromecastSessionManager; + }, { + "class.extend": 1 + } ], + 4: [ function(require, module, exports) { + "use strict"; + var ChromecastButton; + ChromecastButton = { + constructor: function(player) { + this.constructor.super_.apply(this, arguments); + player.on("chromecastConnected", this._onChromecastConnected.bind(this)); + player.on("chromecastDisconnected", this._onChromecastDisconnected.bind(this)); + player.on("chromecastDevicesAvailable", this._onChromecastDevicesAvailable.bind(this)); + player.on("chromecastDevicesUnavailable", this._onChromecastDevicesUnavailable.bind(this)); + this.controlText("Open Chromecast menu"); + if (player.chromecastSessionManager && player.chromecastSessionManager.hasAvailableDevices()) { + this._onChromecastDevicesAvailable(); + } else { + this._onChromecastDevicesUnavailable(); + } + }, + buildCSSClass: function() { + return "vjs-chromecast-button " + (this._isChromecastConnected ? "vjs-chromecast-casting-state " : "") + this.constructor.super_.prototype.buildCSSClass(); + }, + handleClick: function() { + this.player().trigger("chromecastRequested"); + }, + _onChromecastConnected: function() { + this._isChromecastConnected = true; + this._reloadCSSClasses(); + }, + _onChromecastDisconnected: function() { + this._isChromecastConnected = false; + this._reloadCSSClasses(); + }, + _onChromecastDevicesAvailable: function() { + this.show(); + }, + _onChromecastDevicesUnavailable: function() { + this.hide(); + }, + _reloadCSSClasses: function() { + if (!this.el_) { + return; + } + this.el_.className = this.buildCSSClass(); + } + }; + module.exports = function(videojs) { + var ChromecastButtonImpl; + ChromecastButtonImpl = videojs.extend(videojs.getComponent("Button"), ChromecastButton); + videojs.registerComponent("chromecastButton", ChromecastButtonImpl); + }; + }, {} ], + 5: [ function(require, module, exports) { + "use strict"; + var ChromecastSessionManager = require("./chromecast/ChromecastSessionManager"), CHECK_AVAILABILITY_INTERVAL = 1e3, CHECK_AVAILABILITY_TIMEOUT = 30 * 1e3; + function configureCastContext(options) { + var context = cast.framework.CastContext.getInstance(); + context.setOptions({ + receiverApplicationId: options.receiverAppID || chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID, + autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED + }); + } + function onChromecastRequested(player) { + player.chromecastSessionManager.openCastMenu(); + } + function setUpChromecastButton(player, options) { + var indexOpt; + if (options.addButtonToControlBar && !player.controlBar.getChild("chromecastButton")) { + indexOpt = player.controlBar.children().length; + if (typeof options.buttonPositionIndex !== "undefined") { + indexOpt = options.buttonPositionIndex >= 0 ? options.buttonPositionIndex : player.controlBar.children().length + options.buttonPositionIndex; + } + player.controlBar.addChild("chromecastButton", options, indexOpt); + } + player.on("chromecastRequested", onChromecastRequested.bind(null, player)); + } + function createSessionManager(player) { + if (!player.chromecastSessionManager) { + player.chromecastSessionManager = new ChromecastSessionManager(player); + } + } + function enableChromecast(player, options) { + configureCastContext(options); + createSessionManager(player); + setUpChromecastButton(player, options); + } + function waitUntilChromecastAPIsAreAvailable(player, options) { + var maxTries = CHECK_AVAILABILITY_TIMEOUT / CHECK_AVAILABILITY_INTERVAL, tries = 1, intervalID; + intervalID = setInterval(function() { + if (tries > maxTries) { + clearInterval(intervalID); + return; + } + if (ChromecastSessionManager.isChromecastAPIAvailable()) { + clearInterval(intervalID); + enableChromecast(player, options); + } + tries = tries + 1; + }, CHECK_AVAILABILITY_INTERVAL); + } + module.exports = function(videojs) { + videojs.registerPlugin("chromecast", function(options) { + var pluginOptions = Object.assign({ + addButtonToControlBar: true + }, options || {}); + this.ready(function() { + if (!this.controlBar) { + return; + } + if (ChromecastSessionManager.isChromecastAPIAvailable()) { + enableChromecast(this, pluginOptions); + } else { + waitUntilChromecastAPIsAreAvailable(this, pluginOptions); + } + }.bind(this)); + }); + }; + }, { + "./chromecast/ChromecastSessionManager": 3 + } ], + 6: [ function(require, module, exports) { + "use strict"; + var preloadWebComponents = require("./preloadWebComponents"), createChromecastButton = require("./components/ChromecastButton"), createChromecastTech = require("./tech/ChromecastTech"), enableChromecast = require("./enableChromecast"); + module.exports = function(videojs, userOpts) { + var options = Object.assign({ + preloadWebComponents: false + }, userOpts); + if (options.preloadWebComponents) { + preloadWebComponents(); + } + videojs = videojs || window.videojs; + createChromecastButton(videojs); + createChromecastTech(videojs); + enableChromecast(videojs); + }; + }, { + "./components/ChromecastButton": 4, + "./enableChromecast": 5, + "./preloadWebComponents": 7, + "./tech/ChromecastTech": 9 + } ], + 7: [ function(require, module, exports) { + "use strict"; + function doesUserAgentContainString(str) { + return typeof window.navigator.userAgent === "string" && window.navigator.userAgent.indexOf(str) >= 0; + } + module.exports = function() { + var needsWebComponents = !document.registerElement, iosChrome = doesUserAgentContainString("CriOS"), androidChrome; + androidChrome = doesUserAgentContainString("Android") && doesUserAgentContainString("Chrome/") && window.navigator.presentation; + if ((androidChrome || iosChrome) && needsWebComponents) { + require("webcomponents.js/webcomponents-lite.js"); + } + }; + }, { + "webcomponents.js/webcomponents-lite.js": 2 + } ], + 8: [ function(require, module, exports) { + "use strict"; + require("./index")(undefined, window.SILVERMINE_VIDEOJS_CHROMECAST_CONFIG); + }, { + "./index": 6 + } ], + 9: [ function(require, module, exports) { + "use strict"; + var ChromecastSessionManager = require("../chromecast/ChromecastSessionManager"), ChromecastTechUI = require("./ChromecastTechUI"), SESSION_TIMEOUT = 10 * 1e3, ChromecastTech; + ChromecastTech = { + constructor: function(options) { + var subclass; + this._eventListeners = []; + this.videojsPlayer = this.videojs(options.playerId); + this._chromecastSessionManager = this.videojsPlayer.chromecastSessionManager; + this._ui = new ChromecastTechUI(); + this._ui.updatePoster(this.videojsPlayer.poster()); + subclass = this.constructor.super_.apply(this, arguments); + this._remotePlayer = this._chromecastSessionManager.getRemotePlayer(); + this._remotePlayerController = this._chromecastSessionManager.getRemotePlayerController(); + this._listenToPlayerControllerEvents(); + this.on("dispose", this._removeAllEventListeners.bind(this)); + this._hasPlayedAnyItem = false; + this._requestTitle = options.requestTitleFn || function() {}; + this._requestSubtitle = options.requestSubtitleFn || function() {}; + this._requestCustomData = options.requestCustomDataFn || function() {}; + this._initialStartTime = options.startTime || 0; + this._playSource(options.source, this._initialStartTime); + this.ready(function() { + this.setMuted(options.muted); + }.bind(this)); + return subclass; + }, + createEl: function() { + return this._ui.getDOMElement(); + }, + play: function() { + if (!this.paused()) { + return; + } + if (this.ended() && !this._isMediaLoading) { + this._playSource({ + src: this.videojsPlayer.src() + }, 0); + } else { + this._remotePlayerController.playOrPause(); + } + }, + pause: function() { + if (!this.paused() && this._remotePlayer.canPause) { + this._remotePlayerController.playOrPause(); + } + }, + paused: function() { + return this._remotePlayer.isPaused || this.ended() || this._remotePlayer.playerState === null; + }, + setSource: function(source) { + if (this._currentSource && this._currentSource.src === source.src && this._currentSource.type === source.type) { + return; + } + this._currentSource = source; + this._playSource(source, 0); + }, + _playSource: function(source, startTime) { + var castSession = this._getCastSession(), mediaInfo = new chrome.cast.media.MediaInfo(source.src, source.type), title = this._requestTitle(source), subtitle = this._requestSubtitle(source), customData = this._requestCustomData(source), request; + this.trigger("waiting"); + this._clearSessionTimeout(); + mediaInfo.metadata = new chrome.cast.media.GenericMediaMetadata(); + mediaInfo.metadata.metadataType = chrome.cast.media.MetadataType.GENERIC; + mediaInfo.metadata.title = title; + mediaInfo.metadata.subtitle = subtitle; + mediaInfo.streamType = this.videojsPlayer.liveTracker && this.videojsPlayer.liveTracker.isLive() ? chrome.cast.media.StreamType.LIVE : chrome.cast.media.StreamType.BUFFERED; + if (customData) { + mediaInfo.customData = customData; + } + this._ui.updateTitle(title); + this._ui.updateSubtitle(subtitle); + request = new chrome.cast.media.LoadRequest(mediaInfo); + request.autoplay = true; + request.currentTime = startTime; + this._isMediaLoading = true; + this._hasPlayedCurrentItem = false; + castSession.loadMedia(request).then(function() { + if (!this._hasPlayedAnyItem) { + this.triggerReady(); + } + this.trigger("loadstart"); + this.trigger("loadeddata"); + this.trigger("play"); + this.trigger("playing"); + this._hasPlayedAnyItem = true; + this._isMediaLoading = false; + this._getMediaSession().addUpdateListener(this._onMediaSessionStatusChanged.bind(this)); + }.bind(this), this._triggerErrorEvent.bind(this)); + }, + setCurrentTime: function(time) { + var duration = this.duration(); + if (time > duration || !this._remotePlayer.canSeek) { + return; + } + this._remotePlayer.currentTime = Math.min(duration - 1, time); + this._remotePlayerController.seek(); + this._triggerTimeUpdateEvent(); + }, + currentTime: function() { + if (!this._hasPlayedAnyItem) { + return this._initialStartTime; + } + return this._remotePlayer.currentTime; + }, + duration: function() { + if (!this._hasPlayedAnyItem) { + return this.videojsPlayer.duration(); + } + return this._remotePlayer.duration; + }, + ended: function() { + var mediaSession = this._getMediaSession(); + if (!mediaSession && this._hasMediaSessionEnded) { + return true; + } + return mediaSession ? mediaSession.idleReason === chrome.cast.media.IdleReason.FINISHED : false; + }, + volume: function() { + return this._remotePlayer.volumeLevel; + }, + setVolume: function(volumeLevel) { + this._remotePlayer.volumeLevel = volumeLevel; + this._remotePlayerController.setVolumeLevel(); + this._triggerVolumeChangeEvent(); + }, + muted: function() { + return this._remotePlayer.isMuted; + }, + setMuted: function(isMuted) { + if (this._remotePlayer.isMuted && !isMuted || !this._remotePlayer.isMuted && isMuted) { + this._remotePlayerController.muteOrUnmute(); + } + }, + poster: function() { + return this._ui.getPoster(); + }, + setPoster: function(poster) { + this._ui.updatePoster(poster); + }, + buffered: function() { + return undefined; + }, + seekable: function() { + return this.videojs.createTimeRange(0, this.duration()); + }, + controls: function() { + return false; + }, + playsinline: function() { + return true; + }, + supportsFullScreen: function() { + return true; + }, + setAutoplay: function() {}, + playbackRate: function() { + var mediaSession = this._getMediaSession(); + return mediaSession ? mediaSession.playbackRate : 1; + }, + setPlaybackRate: function() {}, + preload: function() {}, + load: function() {}, + readyState: function() { + if (this._remotePlayer.playerState === "IDLE" || this._remotePlayer.playerState === "BUFFERING") { + return 0; + } + return 4; + }, + _listenToPlayerControllerEvents: function() { + var eventTypes = cast.framework.RemotePlayerEventType; + this._addEventListener(this._remotePlayerController, eventTypes.PLAYER_STATE_CHANGED, this._onPlayerStateChanged, this); + this._addEventListener(this._remotePlayerController, eventTypes.VOLUME_LEVEL_CHANGED, this._triggerVolumeChangeEvent, this); + this._addEventListener(this._remotePlayerController, eventTypes.IS_MUTED_CHANGED, this._triggerVolumeChangeEvent, this); + this._addEventListener(this._remotePlayerController, eventTypes.CURRENT_TIME_CHANGED, this._triggerTimeUpdateEvent, this); + this._addEventListener(this._remotePlayerController, eventTypes.DURATION_CHANGED, this._triggerDurationChangeEvent, this); + }, + _addEventListener: function(target, type, callback, context) { + var listener; + listener = { + target: target, + type: type, + callback: callback, + context: context, + listener: callback.bind(context) + }; + target.addEventListener(type, listener.listener); + this._eventListeners.push(listener); + }, + _removeAllEventListeners: function() { + while (this._eventListeners.length > 0) { + this._removeEventListener(this._eventListeners[0]); + } + this._eventListeners = []; + }, + _removeEventListener: function(listener) { + var index = -1, pass = false, i; + listener.target.removeEventListener(listener.type, listener.listener); + for (i = 0; i < this._eventListeners.length; i++) { + pass = this._eventListeners[i].target === listener.target && this._eventListeners[i].type === listener.type && this._eventListeners[i].callback === listener.callback && this._eventListeners[i].context === listener.context; + if (pass) { + index = i; + break; + } + } + if (index !== -1) { + this._eventListeners.splice(index, 1); + } + }, + _onPlayerStateChanged: function() { + var states = chrome.cast.media.PlayerState, playerState = this._remotePlayer.playerState; + if (playerState === states.PLAYING) { + this._hasPlayedCurrentItem = true; + this.trigger("play"); + this.trigger("playing"); + } else if (playerState === states.PAUSED) { + this.trigger("pause"); + } else if (playerState === states.IDLE && this.ended() || playerState === null && this._hasPlayedCurrentItem) { + this._hasPlayedCurrentItem = false; + this._closeSessionOnTimeout(); + this.trigger("ended"); + this._triggerTimeUpdateEvent(); + } else if (playerState === states.BUFFERING) { + this.trigger("waiting"); + } + }, + _onMediaSessionStatusChanged: function(isAlive) { + this._hasMediaSessionEnded = !!isAlive; + }, + _closeSessionOnTimeout: function() { + this._clearSessionTimeout(); + this._sessionTimeoutID = setTimeout(function() { + var castSession = this._getCastSession(); + if (castSession) { + castSession.endSession(true); + } + this._clearSessionTimeout(); + }.bind(this), SESSION_TIMEOUT); + }, + _clearSessionTimeout: function() { + if (this._sessionTimeoutID) { + clearTimeout(this._sessionTimeoutID); + this._sessionTimeoutID = false; + } + }, + _getCastContext: function() { + return this._chromecastSessionManager.getCastContext(); + }, + _getCastSession: function() { + return this._getCastContext().getCurrentSession(); + }, + _getMediaSession: function() { + var castSession = this._getCastSession(); + return castSession ? castSession.getMediaSession() : null; + }, + _triggerVolumeChangeEvent: function() { + this.trigger("volumechange"); + }, + _triggerTimeUpdateEvent: function() { + this.trigger("timeupdate"); + }, + _triggerDurationChangeEvent: function() { + this.trigger("durationchange"); + }, + _triggerErrorEvent: function() { + this.trigger("error"); + } + }; + module.exports = function(videojs) { + var Tech = videojs.getComponent("Tech"), ChromecastTechImpl; + ChromecastTechImpl = videojs.extend(Tech, ChromecastTech); + ChromecastTechImpl.canPlaySource = ChromecastSessionManager.isChromecastConnected.bind(ChromecastSessionManager); + ChromecastTechImpl.isSupported = ChromecastSessionManager.isChromecastConnected.bind(ChromecastSessionManager); + ChromecastTechImpl.prototype.featuresVolumeControl = true; + ChromecastTechImpl.prototype.featuresPlaybackRate = false; + ChromecastTechImpl.prototype.movingMediaElementInDOM = false; + ChromecastTechImpl.prototype.featuresFullscreenResize = true; + ChromecastTechImpl.prototype.featuresTimeupdateEvents = true; + ChromecastTechImpl.prototype.featuresProgressEvents = false; + ChromecastTechImpl.prototype.featuresNativeTextTracks = false; + ChromecastTechImpl.prototype.featuresNativeAudioTracks = false; + ChromecastTechImpl.prototype.featuresNativeVideoTracks = false; + ChromecastTechImpl.prototype.videojs = videojs; + videojs.registerTech("chromecast", ChromecastTechImpl); + }; + }, { + "../chromecast/ChromecastSessionManager": 3, + "./ChromecastTechUI": 10 + } ], + 10: [ function(require, module, exports) { + "use strict"; + var Class = require("class.extend"), ChromecastTechUI; + ChromecastTechUI = Class.extend({ + init: function() { + this._el = this._createDOMElement(); + }, + _createDOMElement: function() { + var el = this._createElement("div", "vjs-tech vjs-tech-chromecast"), posterContainerEl = this._createElement("div", "vjs-tech-chromecast-poster"), posterImageEl = this._createElement("img", "vjs-tech-chromecast-poster-img"), titleEl = this._createElement("div", "vjs-tech-chromecast-title"), subtitleEl = this._createElement("div", "vjs-tech-chromecast-subtitle"), titleContainer = this._createElement("div", "vjs-tech-chromecast-title-container"); + posterContainerEl.appendChild(posterImageEl); + titleContainer.appendChild(titleEl); + titleContainer.appendChild(subtitleEl); + el.appendChild(titleContainer); + el.appendChild(posterContainerEl); + return el; + }, + _createElement: function(type, className) { + var el = document.createElement(type); + el.className = className; + return el; + }, + getDOMElement: function() { + return this._el; + }, + _findPosterEl: function() { + return this._el.querySelector(".vjs-tech-chromecast-poster"); + }, + _findPosterImageEl: function() { + return this._el.querySelector(".vjs-tech-chromecast-poster-img"); + }, + _findTitleEl: function() { + return this._el.querySelector(".vjs-tech-chromecast-title"); + }, + _findSubtitleEl: function() { + return this._el.querySelector(".vjs-tech-chromecast-subtitle"); + }, + updatePoster: function(poster) { + var posterImageEl = this._findPosterImageEl(); + this._poster = poster ? poster : null; + if (poster) { + posterImageEl.setAttribute("src", poster); + posterImageEl.classList.remove("vjs-tech-chromecast-poster-img-empty"); + } else { + posterImageEl.removeAttribute("src"); + posterImageEl.classList.add("vjs-tech-chromecast-poster-img-empty"); + } + }, + getPoster: function() { + return this._poster; + }, + updateTitle: function(title) { + var titleEl = this._findTitleEl(); + this._title = title; + if (title) { + titleEl.innerHTML = title; + titleEl.classList.remove("vjs-tech-chromecast-title-empty"); + } else { + titleEl.classList.add("vjs-tech-chromecast-title-empty"); + } + }, + updateSubtitle: function(subtitle) { + var subtitleEl = this._findSubtitleEl(); + this._subtitle = subtitle; + if (subtitle) { + subtitleEl.innerHTML = subtitle; + subtitleEl.classList.remove("vjs-tech-chromecast-subtitle-empty"); + } else { + subtitleEl.classList.add("vjs-tech-chromecast-subtitle-empty"); + } + } + }); + module.exports = ChromecastTechUI; + }, { + "class.extend": 1 + } ] +}, {}, [ 8 ]); \ No newline at end of file diff --git a/public/_player/videojs/files.txt b/public/_player/videojs/files.txt index 97dd578..8cba701 100644 --- a/public/_player/videojs/files.txt +++ b/public/_player/videojs/files.txt @@ -5,3 +5,10 @@ dist/videojs-overlay.min.css dist/video-js-skin.min.css dist/videojs-license.min.js dist/videojs-license.min.css +dist/videojs-chromecast.min.js +dist/videojs-chromecast.min.css +dist/ic_cast_connected_white_24dp.png +dist/ic_cast_white_24dp.png +dist/videojs-airplay.min.js +dist/videojs-airplay.min.css +dist/ic_airplay_white_24px.svg diff --git a/public/_player/videojs/player.html b/public/_player/videojs/player.html index b6ed594..fc77677 100644 --- a/public/_player/videojs/player.html +++ b/public/_player/videojs/player.html @@ -15,11 +15,12 @@ - + {{#if airplay}} + + {{/if}} + {{#if chromecast}} + + {{/if}}
@@ -28,6 +29,13 @@ +{{#if airplay}} + +{{/if}} +{{#if chromecast}} + + +{{/if}} + {{#if airplay}} + + {{/if}} + {{#if chromecast}} + + + {{/if}} {{else}} @@ -824,6 +837,8 @@

Channels

var mute = convertBoolParam("mute", playerConfig.mute); var statistics = convertBoolParam("stats", playerConfig.statistics); var color = convertColorParam("color", playerConfig.color.buttons); + var chromecast = {{#if chromecast}}true{{else}}false{{/if}}; + var airplay = {{#if airplay}}true{{else}}false{{/if}}; diff --git a/public/_playersite/videojs.js b/public/_playersite/videojs.js index 10c8f27..0ed78e7 100644 --- a/public/_playersite/videojs.js +++ b/public/_playersite/videojs.js @@ -2,17 +2,28 @@ var config = { controls: true, poster: playerConfig.poster + '?t=' + String(new Date().getTime()), autoplay: autoplay ? 'muted' : false, - muted: mute, + muted: true, liveui: true, responsive: true, fluid: true, - sources: [{ src: playerConfig.source, type: 'application/x-mpegURL' }], + // Needed to append the url orgin in order for the source to properly pass to the cast device + sources: [{ src: window.location.origin + '/' + playerConfig.source, type: 'application/x-mpegURL' }], plugins: { license: playerConfig.license, }, }; +if (chromecast) { + config.techOrder = ['chromecast', 'html5']; + config.plugins.chromecast = {}; +} + +if (airplay) { + config.plugins.airPlay = {}; +} + var player = videojs('player', config); + player.ready(function () { if (playerConfig.logo.image.length != 0) { var overlay = null; diff --git a/src/I18n.js b/src/I18n.js index 958e1c9..57d8767 100644 --- a/src/I18n.js +++ b/src/I18n.js @@ -6,27 +6,30 @@ import * as plurals from 'make-plural/plurals'; import { messages as EN } from './locales/en/messages.js'; import { messages as DE } from './locales/de/messages.js'; +import { messages as ES } from './locales/es/messages.js'; import { messages as FR } from './locales/fr/messages.js'; import { messages as IT } from './locales/it/messages.js'; +import { messages as PL } from './locales/pl/messages.js'; import { messages as PT } from './locales/pt/messages.js'; -import { messages as ES } from './locales/es/messages.js'; import { messages as RU } from './locales/ru/messages.js'; import * as Storage from './utils/storage'; i18n.loadLocaleData('en', { plurals: plurals.en }); i18n.loadLocaleData('de', { plurals: plurals.de }); +i18n.loadLocaleData('es', { plurals: plurals.es }); i18n.loadLocaleData('fr', { plurals: plurals.fr }); i18n.loadLocaleData('it', { plurals: plurals.it }); +i18n.loadLocaleData('pl', { plurals: plurals.pl }); i18n.loadLocaleData('pt', { plurals: plurals.pt }); -i18n.loadLocaleData('es', { plurals: plurals.es }); i18n.loadLocaleData('ru', { plurals: plurals.ru }); i18n.load({ en: EN, de: DE, + es: ES, fr: FR, it: IT, + pl: PL, pt: PT, - es: ES, ru: RU, }); @@ -56,7 +59,7 @@ const getBrowserLanguage = (defaultLanguage) => { return match[0].toLowerCase(); }; -i18n.activate(getLanguage('en', ['en', 'de', 'fr', 'it', 'pt', 'es', 'ru'])); +i18n.activate(getLanguage('en', ['en', 'de', 'es', 'fr', 'it', 'pl', 'pt', 'ru'])); export default function Provider(props) { return {props.children}; diff --git a/src/locales/de/messages.js b/src/locales/de/messages.js index 327e87f..060f55e 100644 --- a/src/locales/de/messages.js +++ b/src/locales/de/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"<0>Compatibility list":"<0>Kompatibilitätsliste","<0>Show probe details":"<0>Details der Überprüfung anzeigen","ALSA":"ALSA","API endpoint not found. Settings not saved.":"API-Endpunkt nicht gefunden. Einstellungen nicht gespeichert.","AVFoundation":"AVFoundation","Abort":"Abbrechen","About":"Über","Add":"Hinzufügen","Add Publication":"Publikation hinzufügen","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Fügen Sie externe Widgets und Stile zur Publikationsseite hinzu. Einige Beispiele finden Sie auf der Hilfeseite.","Add new channel":"Neuen Kanal hinzufügen","Add: {0}":["Hinzufügen: ",["0"]],"Address":"Adresse","Address for the background image.":"Adresse des Hintergrundbildes.","Address to listen on for HTTP requests.":"Die Adresse für das Abhören von HTTP-Anfragen.","Address to listen on for HTTPS requests.":"Die Adresse für das Abhören von HTTPS-Anfragen.","Adjust publication site colors and background as you like.":"Farben und den Hintergrund der Publikationsseite nach Belieben anpassen.","Advanced monitoring":"Erweiterte Systemüberwachung","Advanced settings":"Erweiterte Einstellungen","Advanced setup":"Erweiterte Einrichtung","Alerting by email":"Benachrichtigung per E-Mail","All":"Alle","All important system settings.":"Alle wichtigen Systemeinstellungen.","Allow all referrer":"Erlaube alle Referrer","Allow counting how many viewers the stream has.":"Erlaubt das Zählen der Anzahl des Publikums vom Stream.","Amplitude":"Amplitude","An environment variable sets this value.":"Eine Umgebungsvariable legt diesen Wert fest.","App":"App","Application":"Anwendung","Are you sure you want to abort the wizard?":"Sind Sie sicher, dass Sie den Assistenten abbrechen wollen?","Audio":"Audio","Audio Device":"Audiogerät","Audio device":"Audiogerät","Audio from device":"Audio von Gerät","Audio settings":"Audio-Einstellungen","Audio setup":"Audio-Einrichtung","Auth0":"Auth0","Auth0 Tenant":"Auth0 Tenant","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 ist derzeit nicht verfügbar, da diese Schnittstelle von einer unsicheren Quelle geladen wurde.","Author":"Autor","Authorization":"Autorisierung","Automatic cleanup of all media data":"Automatische Bereinigung aller Mediadateien","Autoplay":"Autoplay","Available":"Verfügbar","Back":"Zurück","Background colors":"Hintergrundfarben","Background image":"Hintergrundbild","Backup URL":"Backup-URL","Backup server":"Backup-Server","Backup stream":"Backupstream","Backup stream key":"Backup stream key","Bandwidth":"Bandbreite","Bandwidth control":"Bandbreitensteuerung","Banner":"Banner","Basic":"Basic","Beep factor":"Piep-Faktor","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Beschreiben Sie kurz, was die Zuschauenden während des Live-Streams sehen werden.","Button color":"Farbe des Knopfes","Cache for files on /data.":"Cache für Dateien auf /data.","Cache time (Seconds)":"Cache-Zeit (Sek)","Cache types":"Cache-Typen","Capture clicks":"Klicks erfassen","Capture cursor":"Mauszeiger erfassen","Channel \"{0}\" saved":["Kanal \"",["0"],"\" gespeichert"],"Channels":"Kanäle","Check for updates":"Nach Updates suchen","Check the requirements":"Anforderungen prüfen","Choose a video stream":"Videostream wählen","Choose an audio stream":"Audiostream wählen","Choose an input device ...":"Eingabegerät wählen …","Choose codec ...":"Codec wählen …","Choose tenant ...":"Wähle einen Tenant","Chunk":"Segment","Close":"Schliessen","Code injection":"Code Injection","Codec":"Codec","Color":"Farbe","Config":"Konfiguration","Confirm password":"Bestätigen Sie das Passwort","Connect":"Verbinden","Connected device":"Verbundenes Gerät","Connected since <0/>":"Verbunden für <0/>","Connecting ...":"Verbinde ...","Connecting to Restreamer Core ...":"Mit Restreamer Core verbinden …","Connecting to Restreamer Core failed probably because of mixed content.":"Die Verbindung zu Restreamer Core ist wahrscheinlich wegen gemischter Inhalte fehlgeschlagen.","Content":"Inhalt","Content URL":"Content URL","Cores":"Cores","Create user":"Benutzer anlegen","Creative Commons":"Creative Commons","Custom ...":"Individuell …","Custom JSON config for datarhei Core.":"Individuelle JSON Konfiguration für den datarhei Core.","Custom audio device":"Individuelles Audiogerät","Custom audio index":"Individueller Audio-Index","Custom bitrate (kbit/s)":"Individuelle Bitrate (kbit/s)","Custom code injection":"Injektion von Individuellem Code","Custom delay":"Individuelle Verzögerung","Custom device":"Individuelles Gerät","Custom format":"Individuelles Format","Custom framerate":"Individuelle Bildfrequenz","Custom keyframe interval":"Individuelles Keyframe-Intervall","Custom layout":"Individuelles Aussehen","Custom sampling (Hz)":"Individuelle Abtastung (Hz)","Custom scale":"Individuelle Skalierung","Custom size":"Individuelle Größe","Custom video device":"Individuelles Videogerät","Custom video index":"Individueller Video-Index","Data copied to clipboard":"Daten wurden in die Zwischenablage kopiert","Death color":"Death color","Decoder":"Decoder","Default":"Standard","Delay":"Verzögerung","Delay (ms)":"Verzögerung (ms)","Delete":"Löschen","Deleting a publication service cannot be reversed. The publication stops immediately.":"Die Löschung eines Publikationsdienstes kann nicht rückgängig gemacht werden. Die Veröffentlichung wird sofort gestoppt.","Delivering mode":"Zustellmodus","Description":"Beschreibung","Design":"Design","Device":"Gerät","Disconnect":"Trennen","Disconnect & Continue":"Trennen und fortfahren","Disconnecting ...":"Trennen ...","Disk":"Festplatte","Disk cache":"Festplatten Zwischenspeicher","Disk storage":"Festplattenspeicher","Do you really want to restart the application now?":"Möchten Sie die Anwendung wirklich neu starten?","Do you want to delete \"{0}\"?":["Soll \"",["0"],"\" gelöscht werden?"],"Do you want to delete {title}?":["Möchten Sie ",["title"]," löschen?"],"Do you want to disconnect \"{0}\"?":["Möchten Sie die Verbindung zu „",["0"],"“ unterbrechen?"],"Docs":"Dokumente","Documentation":"Dokumentation","Dup. frames":"Duplizierte Frames","EDIT: Player":"EDIT: Player","EDIT: Publication Website":"BEARBEITEN: Publikation Website","Edit":"Bearbeiten","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Bearbeiten Sie die Audio- und Videoquellen für den Live-Stream. Fügen Sie eine Beschreibung hinzu, und legen Sie die gewünschte Inhaltslizenz fest.","Edit: {title}":["Bearbeiten: ",["title"]],"Embed":"Einbetten","Enable RTMP server ...":"RTMP-Server aktivieren …","Enable a periodic beep every second with this value times the carrier frequency":"Periodischen Piepton jede Sekunde mit diesem Wert mal der Trägerfrequenz aktivieren","Enable backup stream":"Backupstream aktivieren","Enable nerd statistics":"Nerd-Statistiken einschalten","Enable primary stream":"Primären Stream aktivieren","Enable snapshots":"Momentaufnahme aktivieren","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Es wird dringend empfohlen, die Autorisierung zu aktivieren. Andernfalls kann jeder auf diese Instanz zugreifen.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Es wird dringend empfohlen, die Basisauthentifizierung zu aktivieren. Andernfalls könnte jeder Daten in /memfs schreiben.","Encoder":"Encoder","Encoding":"Kodierung","Encryption":"Verschlüsselung","Enter a name for the new channel.":"Einen Namen für den neuen Kanal eingeben.","Enter password":"Passwort eingeben","Enter the address of your network source:":"Adresse des Netzwerkquelle eintragen:","Enter username":"Anmeldename eingeben","Entropy coder":"Entropy coder","Error":"Fehler","Error while copying data to clipboard":"Fehler beim Kopieren von Daten in die Zwischenablage","Error: {0}":["Fehler: ",["0"]],"Expands the area above the channel list (live chat).":"Erweitert den Bereich oberhalb der Kanalliste (Live-Chat).","Expands the area under the channel description (comment boxes).":"Erweitert den Bereich unter der Kanalbeschreibung (Kommentarfelder).","Expert mode":"Expertenmodus","Extend channel list":"Kanalliste erweitern","Extend content":"Inhalt erweitern","Extend footer":"Fußzeile erweitern","Extend header":"Header erweitern","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Publikationsdienst konnte nicht erstellt werden (",["0"],")"],"Failed to create publication website files.":"Die Dateien der Publikations-Website konnten nicht erstellt werden.","Failed to probe the source. Please check the <0>probe details.":"Prüfen der Quelle ist fehlgeschlagen. <0>Details der Überprüfung ansehen.","Failed to refresh token: {0}":["Token konnte nicht aktualisiert werden: ",["0"]],"Failed to save ingest metadata":"Speichern der Ingest-Metadaten fehlgeschlagen","Failed to stop process":"Prozess konnte nicht angehalten werden","Failed to store player size setting.":"Die Einstellung für die Playergröße konnte nicht gespeichert werden.","Failed to store publication service ({0})":["Publikationsdienst konnte nicht gespeichert werden (",["0"],")"],"Failed to update ingest process ({0})":["Aktualisierung des Ingest-Prozesses fehlgeschlagen (",["0"],")"],"Failed to update the player":"Aktualisierung des Players fehlgeschlagen","Failed to verify the source. Please check the address.":"Die Quelle konnte nicht verifiziert werden. Bitte Adresse prüfen.","Finish":"Speichern","Flags":"Flaggen","For Javascripts.":"Für Javascripte.","For Stylesheets.":"Für Stylesheets.","Force input framerate":"Bildfrequenz für die Eingabe erzwingen","Format":"Format","Frame drops":"Verlorene Frames","Framebuffer":"Bildspeicher","Framerate":"Bildfrequenz","Frequency (Hz)":"Frequenz (Hz)","GET":"GET","General":"Allgemein","Google Analytics ID":"Google Analytics ID","Google Analytics Tracker Name":"Name Google Analytics Tracker","HLS":"HLS","HLS statistic for the In-memory storage":"HLS-Statistik für den In-Memory-Speicher","HTTP and HTTPS":"HTTP und HTTPS","HTTP port":"HTTP Port","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"HTTPS Port","Hardware device":"Hardwaregerät","Header":"Kopfzeile","Headline":"Überschrift","Hosted Restreamer interface":"Gehostete Restreamer-Oberfläche","Human readable name on the service.":"Von Menschen lesbarer Name des Dienstes.","IP address":"IP-Adresse","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Wenn Sie die Ports geändert haben, kann es sein, dass Restreamer Core bereits neu gestartet wurde, aber jetzt auf einem anderen Port verfügbar ist.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Wenn Sie Let’s Encrypt TLS aktiviert haben, kann es einige Zeit dauern, die Zertifikate zu erwerben. Stellen Sie sicher, dass Restreamer Core über Port 80 aus dem Internet erreichbar ist. Bitte überprüfen Sie das Protokoll in der Konsole von Restreamer Core.","Ignore IP ranges":"IP-Bereiche ignorieren","Image URL":"Bild-URL","Imprint":"Impressum","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Neben dem Player bietet der Restreamer eine komplette Landingpage, mit der Sie Ihren Live-Stream einfach und schnell präsentieren können.","In-memory":"In-memory","In-memory storage":"In-Memory-Speicher","Incompatible":"Inkompatibel","Inherit":"Übernehmen","Inject 1":"Inject 1","Inject 2":"Inject 2","Inject 3":"Inject 3","Inject 4":"Inject 4","Internal HLS server":"Interner HLS-Server","Internal RTMP server":"Interner RTMP-Server","Interval (seconds)":"Intervall (Sekunden)","Issue alert":"Fehler melden","Keyframe interval (seconds)":"Keyframe-Intervall (Sekunden)","Layout":"Layout","Let's Encrypt certification":"Zertifizierung mit Let’s Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let’s Encrypt erfordert einen oder mehrere öffentliche Domainnamen und einen zugänglichen Port 80/TCP.","Level":"Level","Level of system protocol.":"Ebene des Systemprotokolls.","License":"Lizenz","Life color":"Life color","Linecolor":"Linienfarbe","Link":"Link","Link, mouseover":"Link, Mouseover","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Liste der IP-Bereiche in CIDR-Notation, z. B. 127.0.0.1/32, die von der Statistik nicht erfasst werden sollen - ein IP-Bereich pro Zeile. Leer lassen, um alle Sitzungen aufzuzeichnen.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Liste der zu cachenden Dateierweiterungen (z. B. \".html\"), eine pro Zeile. Leer lassen, um alle Dateitypen zu cachen.","List size (segments)":"Listengröße (Segmente)","Live-Streaming to Facebook Live RTMP service":"Live-Streaming zum Facebook Live RTMP-Dienst","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Live-Streaming zum Instagram. Für den Stream-Schlüssel wird ein Dienst wie <0>Yellow Duck benötigt.","Live-Streaming to Twitch Live RTMP Service.":"Live-Streaming zu Twitch.","Live-Streaming to Vimeo Live RTMP Service":"Live-Streaming zu Vimeo","Livesource ID":"Livesource-ID","Log level":"Protokollierungsebene","Logging":"Protokollieren","Login":"Anmelden","Login failed: Couldn't load API details":"Login fehlgeschlagen: Konnte die API-Details nicht laden","Login failed: {0}":["Login fehlgeschlagen: ",["0"]],"Login/JWT authorization":"Anmeldung/JWT-Autorisierung","Logo":"Logo","Logout":"Abmelden","MB":"MB","Main Source":"Hauptquelle","Main channel":"Hauptkanal","Main channel not found":"Hauptkanal nicht gefunden","Main channel saved":"Hauptkanal gespeichert","Main page channel (index.html).":"Kanal auf der Startseite (index.html)","Maintainer:":"Gepflegt von:","Maximum allowed cache size, 0 for unlimited.":"Maximal zulässige Cache-Größe, 0 für unbegrenzt.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Maximal erlaubte MB RAM für /memfs, 0 für unbegrenzt.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Maximal erlaubte MB, die von der Festplatte verbraucht werden dürfen. 0 für unbegrenzt.","Maximum bandwidth Mbit/s":"Maximale Bandbreite Mbit/s","Maximum delay in milliseconds.":"Maximale Latenz (Ms).","Maximum file size (Megabytes)":"Maximale Dateigröße (MB)","Maximum file size to put in cache.":"Maximale Dateigröße, die in den Cache gestellt wird.","Maximum log histroy":"Maximale Protokollhistorie","Maximum log lines":"Maximale Protokollzeilen","Maximum size (Megabytes)":"Maximale Größe (Megabytes)","Maximum viewer idle time (Seconds)":"Maximale Zuschauer Leerzeit (Sekunden)","Maximum viewers":"Maximale Anzahl von Zuschauenden","Memory":"Arbeitsspeicher","Meta information":"Meta-Informationen","Metadata":"Metadaten","Mold":"Mold","More about Twitter's copyright <0>here.":"Mehr über Twitter’s Urheberrecht <0>hier.","More about YouTube's copyright <0>here.":"Mehr über das Urheberrecht von YouTube <0>hier.","More about licenses here":"Mehr über die Lizenzen hier","More about the service":"Mehr über den Service","Mute":"Stumm","Name":"Name","Name for the template. If the name already exists, it will be overwritten.":"Templatename. Wenn der Name existiert, wird er überschrieben.","Network":"Netzwerk","Network source":"Netzwerk-Quelle","Next":"Weiter","Next: Audio":"Weiter: Audio","Next: Video setup":"Weiter: Video-Einrichtung","No":"Nein","No audio":"Kein Audio","No audio stream available":"Kein Audiostream verfügbar","No input device available":"Kein Eingabegerät vorhanden","No live stream was detected. Please check the software that sends the stream.":"Es wurde kein Livestream erkannt. Bitte die Software überprüfen, die den Stream sendet.","No source selected":"Keine Quelle ausgewählt","No sources available":"Keine Quellen verfügbar","No suitable encoder found.":"Keine passender Encoder gefunden.","No video":"Kein Video","No video stream available":"Kein Videostream verfügbar","Node ID":"Knoten-ID","Noise":"Rauschen","None":"Keine","Notes":"Hinweise","Number of log lines to keep.":"Anzahl der Protokollzeilen, die aufbewahrt werden sollen.","Number of logs to keep for each process.":"Anzahl der Protokolle, die je Prozess aufbewahrt werden sollen.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Ein Referrer pro Zeile, wie http://www.beispiel.com","Open":"Öffnen","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Passthrough (Kopieren) sollte nur bei Bedarf deaktiviert werden. Jede Kodierung erfordert zusätzliche CPU/GPU-Ressourcen.","Password":"Passwort","Password for authorization.":"Passwort für die Autorisierung.","Password for the device.":"Passwort von dem Gerät.","Persist viewer statistics":"Betrachterstatistiken beibehalten","Pixel format":"Pixelformat","Plan: <0>Starter":"Plan: <0>Starter","Platforms":"Plattformen","Playback":"Wiedergabe","Player":"Player","Player URL":"Player-URL","Player settings saved":"Playereinstellungen gespeichert","Playersite":"Playerseite","Playlist":"Wiedergabeliste","Please check the <0>process log":"Bitte <0>Prozessprotokoll prüfen","Please contact the operator of the service and check what happens.":"An den Betreiber des Dienstes wenden und prüfen, was passiert ist.","Please select a file to upload.":"Datei zum Hochladen auswählen.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"„Passthrough (Kopieren)“ sollte nur deaktiviert werden, wenn es erforderlich ist. Jedes weitere Encoding benötigt zusätzliche CPU/GPU Ressourcen.","Please wait. Probe stream data ...":"Bitte warten — der Stream wird geprüft ...","Please wait. Setting up the stream ...":"Bitte warten — einrichten des Streams ...","Port":"Port","Position":"Position","Preset":"Voreinstellung","Primary stream":"Primärer Stream","Primary stream key":"Primärer Stream-Schlüssel","Probe":"Prüfen","Process":"Prozess","Process control":"Prozesskontrolle","Process debug":"Prozess-Fehlerbehebung","Process debug report":"Prozess-Fehlerbehebungsbericht","Process details":"Prozess-Details","Process report":"Prozess-Bericht","Processing & Control":"Verarbeitung & Steuerung","Profile":"Profil","Protocol":"Protokoll","Protocols":"Protokolle","Public domain/s":"Öffentliceh Domain/s","Publication service not found":"Publikationsdienst nicht gefunden","Publication website settings saved":"Einstellungen der Publication Webseite gespeichert","Publications":"Publikationen","Pull Mode":"Abholmodus","Pull or recieve the data:":"Daten abholen oder empfangen:","Quality":"Qualität","RGB test pattern":"RGB-Testbild","RTMP app for publishing.":"RTMP-App für die Veröffentlichung.","RTMP server":"RTMP-Server","RTMP server is not enabled":"RTMP-Server ist nicht aktiviert","RTMP server listen address.":"RTMP-Server Lauschadresse.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"RTMP-Token für die Veröffentlichung und Wiedergabe. Das Token ist der Wert des URL-Abfrageparameters „token“.","RTMP/S":"RTMP/S","RTMPS server":"RTMPS-Server","RTSP":"RTSP","Raspberry Pi camera":"Raspberry Pi Kamera","Rate control":"Ratenkontrolle","Ratio":"Verhältnis","Read input at native speed":"Eingabe mit nativer Geschwindigkeit lesen","Receive Mode":"Empfangsmodus","Reconnect":"Wiederverbinden","Reconnect delay (seconds)":"Verzögerung beim Wiederherstellen der Verbindung (Sekunden)","Reconnecting in {0}s":["Wiederverbinden in ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["Die Wiederherstellung der Verbindung zum Restreamer Core ist in den letzten ",["RETRIES"]," Sekunden fehlgeschlagen."],"Reconnecting to Restreamer Core failed.":"Die Wiederherstellung der Verbindung zu Restreamer Core ist fehlgeschlagen.","Refresh":"Aktualisieren","Region":"Region","Reload":"Erneut laden","Remove the oldest entries if the /memfs is full":"Älteste Einträge entfernen, wenn das /memfs voll ist","Requires activation":"Aktivierung erforderlich","Restart":"Neustart","Restart required":"Neustart erforderlich","Restarting":"Neustart","Restarting Restreamer Core ...":"Neustart von Restreamer Core …","Restarting the application failed.":"Neustart der Anwendung ist fehlgeschlagen.","Restreamer Service":"Restreamer Service","Retrieving stream data ...":"Abrufen von Streamdaten ...","Retry":"Wiederholen","Rule":"Regel","Sampling":"Sampling","Save":"Speichern","Scale":"Skalierung","Seconds to keep files in cache.":"Sekunden, um Dateien im Cache zu halten.","Seconds until a process is restarted.":"Sekunden, bis ein Prozess neu gestartet wird.","Seconds until a staled process is terminated.":"Sekunden, bis ein hängender Prozess beendet wird.","Seconds until the snapshot/thumbnail of the video source is updated.":"Sekunden, bis ein Vorschaubild (JPEG) der Videoquelle aktualisiert wird.","Security":"Sicherheit","Security token":"Sicherheit Token","Seekbar color":"Seekbar Farbe","Segment length (seconds)":"Segmentlänge (Sek)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Das Segment wird nach Ablauf dieser Zeit auf dem folgenden Keyframe geschnitten. 2 wird empfohlen.","Segmentation":"Segmentierung","Select a device:":"Auswahl Gerät:","Select audio source:":"Audio-Quelle auswählen:","Select source ...":"Auswahl Quelle ...","Select video source:":"Videoquelle auswählen:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Wählen Sie aus, ob Sie den Stream von einer <0>Netzwerkquelle (z. B. einer Netzwerkkamera) oder dem <1>internen RTMP-Server (z. B. OBS-Streams an den Restreamer) beziehen.","Select your encoding setting:":"Einstellungen für die Encodierung:","Selected":"Ausgewählt","Selected channel":"Auswahl","Selection":"Auswahl","Send anonymous metrics (helps us for future development)":"Sende anonyme Anwendungsdaten (Hilft den Restreamer kontinuierlich zu verbessern)","Send stream to this address:":"Sende den Stream an diese Adresse:","Send video to Framebuffer":"Sendet das Video zum Bildspeicher","Server":"Server","Service":"Service","Service name":"Name des Dienstes","Service token for monitoring.":"Servicetoken für die Überwachung.","Sessions":"Zuschauer","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Legt eine Begrenzung der Bandbreite in Mbit/s für die ausgehende HLS-Datenübertragung fest. Alle Dienste, wie RTMP und ausgehende Prozesse, werden in die Berechnung einbezogen. Wenn die Bandbreite überschritten wird, erhalten HLS-Zuschauende den HTTP-Statuscode 509 (Bandwidth Limit Exceeded). 0 ist unbegrenzt.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Legt ein Limit für die Zuschauenden in der HLS-Sitzungen fest. Wenn das Limit überschritten wird, erhalten HLS-Zuschauende den HTTP-Statuscode 509 (Bandbreitenlimit überschritten). 0 ist unbegrenzt.","Setting for connection to the service.":"Einstellung für die Anbindung an den Service.","Settings":"Einstellungen","Settings (expert mode)":"Einstellungen (Experten-Modus)","Settings for /data path. The access is protected by":"Eintellungen für den /data Pfad. Der Zugriff wird geschützt durch","Settings for /memfs path.":"Einstellung für den /memfs Pfad.","Settings saved. All changes will be applied after restarting the application.":"Einstellungen gespeichert. Die Änderungen werden nach einem Neustart der Anwendungen übernommen.","Share button":"Share-Button","Shows a reference to the project.":"Zeigt einen Hinweis auf das Projekt.","Sign up (free)":"Anmelden (Kostenlos)","Silence":"Stille","Silence Audio":"Stilles Audio","Sine":"Sinus","Sitename":"Seitenname","Size":"Grösse","Snapshot":"Vorschaubild","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Socket-Zeitüberschreitung (Mikrosekunden)","Software":"Software","Source":"Quelle","Speed":"Geschwindigkeit","Stale timeout (seconds)":"Zeitüberschreitung (Sekunden)","Statistics":"Statistiken","Storage":"Speicherplatz","Stores the viewer statistics to the disk.":"Speichert die Zuschauerstatistik auf der Festplatte.","Stream":"Stream","Stream URL":"Stream-URL","Stream key":"Stream-Schlüssel","Stream name":"Streamname","Stream names":"Streamnamen","Support datarhei Restreamer":"Unterstütze datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Unterstützt HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT und mehr.","System":"System","Template":"Vorlage","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Vorlage, die für die Erstellung der Publikations-Website verwendet werden soll. Mit der Schaltfläche „Löschen“ wird die Auswahl aus dem System entfernt.","Terms":"Bedingungen","Test pattern":"Testbild","Test pattern (extended)":"Testbild (erweitert)","Text colors":"Textfarben","The amplitude (0.0 - 1.0) of the generated audio stream":"Die Amplitude (0,0 - 1,0) des erzeugten Audiostreams","The application is using an older version of the settings.":"Die Applikation verwendet eine ältere Version der Einstellungen.","The bitrate of the audio stream.":"Die Bitrate des Audiostreams.","The carrier frequency":"Trägerfrequenz","The channel \"{0}\" could not be deleted":["Der Kanal \"",["0"],"\\“ konnte nicht gelöscht werden"],"The channel \"{0}\" has been deleted":["Der Kanal \"",["0"],"\\“ wurde gelöscht"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"Die Löschung dieses Kanals kann nicht rückgängig gemacht werden. Alle Veröffentlichungen dieses Kanals werden entfernt.","The input profile is not complete. Please define a video and audio source.":"Unvollständiges Eingangsprofil. Video- und Audioquelle definieren.","The layout of the audio stream.":"Anordnung des Audiostreams.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Die maximale Anzahl von Wiedergabelistensegmenten. 0 enthält alle Segmente. 6 wird empfohlen.","The noise color":"Audio-Rauschfarbe","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"Die Person, die ein Werk mit dieser Urkunde verbunden hat, hat das Werk der Allgemeinheit gewidmet, indem sie auf alle ihre Rechte an dem Werk weltweit nach dem Urheberrecht, einschließlich aller verwandten und benachbarten Rechte, verzichtet, soweit dies gesetzlich zulässig ist. Sie können das Werk vervielfältigen, verändern, verbreiten und aufführen, auch für kommerzielle Zwecke, alles ohne um Erlaubnis zu fragen.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Der öffentlich erreichbare Domänenname des Hosts, auf dem der Restreamer läuft. Trennen Sie mehrere Domänennamen durch ein Komma.","The publication service \"{0}\" could not be deleted":["Der Publikationsdienst \"",["0"],"\" konnte nicht gelöscht werden"],"The publication service \"{0}\" has been created":["Der Publikationsdienst \"",["0"],"\" wurde erstellt"],"The publication service \"{0}\" has been deleted":["Der Publikationsdienst wurde \"",["0"],"\" gelöscht"],"The publication service has been created":"Der Publikationsdienst wurde erstellt","The sample rate of the audio stream.":"Abtastrate des Audiostreams.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Die ausgewählte Datei ist zu groß (",["0"]," Bytes). Es sind nur ",["1"]," Bytes erlaubt."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Der ausgewählte Dateityp (",["0"],") ist nich erlaubt. Erlaubte Dateitypen sind ",["types"]],"The settings for \"{0}\" have been saved":["Die Einstellungen für \"",["0"],"\" wurden gespeichert"],"The source doesn't provide any audio streams.":"Die Quelle stellt keine Audiostreams zur Verfügung.","The source doesn't provide any audio streams. Please check the <0>probe details.":"Die Quelle stellt keine Audiostreams zur Verfügung. Bitte die <0>Details der Überprüfung ansehen.","The source doesn't provide any compatible audio streams.":"Die Quelle stellt keine kompatiblen Audiostreams zur Verfügung.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"Die Quelle stellt keine kompatiblen Videostreams zur Verfügung. Bitte die <0>Anforderungen prüfen.","The source doesn't provide any video streams. Please check the <0>probe details.":"Die Quelle stellt keine Videostreams zur Verfügung. Bitte die <0>Details der Überprüfung ansehen.","The source doesn't provide any video streams. Please check the device.":"Die Quelle stellt keine Videostreams zur Verfügung. Bitte die Quelle prüfen.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"Die Videoquelle stellt keinen kompatiblen Audiokanal zur Verfügung. <0>Silence Audio wird empfohlen. Dienste wie z.B. YouTube, Facebook & Co. benötigen einen Audiokanal.","The video source is compatible. Select the desired resolution:":"Die Videoquelle ist kompatibel. Gewünschte Auflösung auswählen:","There are updates available. Here you get more information.":"Es sind Updates verfügbar. Hier erhalten Sie weitere Informationen.","There was a problem storing the settings. Settings not saved.":"Es gab ein Problem beim Speichern der Einstellungen. Einstellungen nicht gespeichert.","There was an error connecting to Restreamer Core at {0}.":["Es ist ein Fehler beim Verbinden mit Restreamer Core bei ",["0"]," aufgetreten."],"There was an error during upload: {0}":["Beim Hochladen ist ein Fehler aufgetreten: ",["0"]],"There was an error setting up the stream.":"Es ist ein Fehler beim Einrichten des Streams aufgetreten.","There were some errors in the settings. Settings not saved.":"Es gab einige Fehler in den Einstellungen. Einstellungen nicht gespeichert.","There's no login method available.":"Es ist keine Methode für die Anmeldung verfügbar.","This is a dummy service that explains to you the concepts of service.":"Dies ist ein Dummy-Dienst, der Ihnen die Konzepte des Dienstes erklärt.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Bitte Geduld. Es kann einen Moment dauern, bis der Restreamer Core neu gestartet ist …","This is to mention the copyright regulations for the target of this service.":"Dies ist ein Hinweis auf die urheberrechtlichen Bestimmungen für das Ziel dieses Dienstes.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Diese Lizenz erlaubt Wiederverwendern das Kopieren und Verteilen des Materials in jedem Medium oder Format nur in unangepasster Form und nur so lange, wie die Nennung des Urhebers erfolgt. Die Lizenz erlaubt die kommerzielle Nutzung.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Diese Lizenz erlaubt es Wiederverwendern, das Material in jedem Medium oder Format in unangepasster Form zu kopieren und zu verbreiten, und zwar nur für nicht-kommerzielle Zwecke und nur so lange, wie der Urheber genannt wird.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Diese Lizenz erlaubt es Wiederverwendern, das Material zu verbreiten, zu remixen, zu adaptieren und darauf aufzubauen, und zwar in jedem Medium oder Format und nur für nicht-kommerzielle Zwecke und nur so lange, wie die Nennung des Urhebers erfolgt.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Diese Lizenz erlaubt es Wiederverwendern, das Material zu verbreiten, zu remixen, zu adaptieren und darauf aufzubauen, und zwar in jedem Medium oder Format und nur für nicht-kommerzielle Zwecke, und nur solange der Urheber genannt wird. Wenn Sie das Material umarbeiten, anpassen oder darauf aufbauen, müssen Sie das geänderte Material unter identischen Bedingungen lizenzieren.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Diese Lizenz erlaubt es Wiederverwendern, das Material in jedem Medium oder Format zu verbreiten, zu remixen, anzupassen und darauf aufzubauen, solange der Urheber genannt wird. Die Lizenz erlaubt die kommerzielle Nutzung.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Diese Lizenz erlaubt es Wiederverwendern, das Material in jedem Medium oder Format zu verbreiten, zu remixen, anzupassen und darauf aufzubauen, solange der Urheber genannt wird. Die Lizenz erlaubt die kommerzielle Nutzung. Wenn Sie das Material umarbeiten, anpassen oder darauf aufbauen, müssen Sie das geänderte Material unter identischen Bedingungen lizenzieren.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Diese Quelle kann nicht bearbeitet werden, während sie in Gebrauch ist. Um fortzufahren, müssen Sie die Verbindung zur Quelle unterbrechen.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Diese Version der Benutzeroberfläche unterstützt nicht das verfügbare FFmpeg-Binary (",["0"],"). Die Benutzeroberfläche erfordert ",["1"],". Bitte verwenden Sie eine unterstützte FFmpeg-Binärdatei."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Diese Version der Benutzeroberfläche unterstützt nicht den angeschlossenen Kern (",["0"],"). Die Benutzeroberfläche erfordert ",["1"],". Bitte verwenden Sie eine kompatible Version der UI."],"This version of the UI is compatible.":"Die verwendete Version der Benutzeroberfläche ist kompatibel.","Time until an inactive viewer connection is treated as closed.":"Zeit bis eine inaktive Zuschauerverbindung als geschlossen behandelt wird.","Token":"Token","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Überträgt Schnappschüsse der Hauptquelle an einen HTTP/S Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Überträgt den Audiokanal der Hauptquelle an einen Icecast Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle als HTTP-Live-Streaming (HLS) an einen HTTP/S-Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle als MPEG-DASH an einen HTTP/S Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen Brightcove Live-Service. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Übertragen Sie die Hauptquelle an einen CDN77 RTMP Service. Mehr über die Einrichtung <0>hier.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Übertragen Sie die Hauptquelle an einen DaCast RTMP Service. Mehr über die Einrichtung <0>hier.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Übertragen Sie die Hauptquelle an einen MPEG-TS-Dienst. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen MPEG-TS-Dienst. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen RTSP-Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen Red5/Pro Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen SRT Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen UDP-Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen WOWZA Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Überträgt die Hauptquelle auf eine datarhei Core Ressource. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle auf eine livespotting.com Ressource. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Übertragen Sie die Hauptquelle an die Akamai (MSL) Media Services Live. Weitere Details zu den MSL-Encoder-Einstellungen finden Sie <0>hier.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Übertragen Sie die Hauptquelle an den Bitmovin-Cloud-Encoding-Service, ein leistungsstarkes Tool für Live-Streaming. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an den Restream RTMP Service. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Überträgt Ihr Video als RTMP-Stream mit dem erforderlichen, in YouTube Studio generierten Schlüssel. Weitere Informationen zum Einrichten eines Live-Streams finden Sie in der <0>Creator Academy von YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Überträgt Ihren Videostream mit dem erforderlichen Schlüssel, der in Twitter Producer generiert wurde. Weitere Informationen zum Einrichten eines Livestreams finden Sie unter <0>Producer von Twitter.","Tune":"Optimieren","UDP transport":"UDP-Transport","Unable to load the config.":"Die Konfiguration kann nicht geladen werden.","Unique ident on the service.":"Einzigartige Identität für den Service.","Unknown":"Unbekannt","Unselected":"Nicht gewählt","Upload":"Hochladen","Uploading the file failed":"Die Dateiübertragung ist fehlgeschlagen","Uploading the logo failed":"Hochladen des Logos fehlgeschlagen","Uptime":"Betriebszeit","Use Auth0 for your running Restreamer Core. More <0>details.":"Verwenden Sie Auth0 für Ihren laufenden Restreamer Core. Mehr <0>Details.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Verwenden Sie den Assistenten (<0/>) für eine schnelle und einfache Einrichtung, oder bearbeiten Sie (<1/>) die Quellen direkt im benutzerdefinierten Modus.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Copyright und die richtige Bildlizenz wählen. Ob frei für alle oder stark eingeschränkt. Überlege kurz, was andere mit dem Video machen dürfen.","User registration":"Benutzerregistrierung","Username":"Anmeldename","Username for authorization.":"Anmeldename für die Autorisierung.","Username for the device.":"Anmeldename von dem Gerät.","VPU ID":"VPU-ID","Video":"Video","Video device":"Videogerät","Video settings":"Videoeinstellungen","Video setup":"Video-Einrichtung","Video source":"Videoquelle","Viewer":"Zuschauende","Virtual source":"Virtuelle-Quelle","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Willkommen bei Restreamer v2, der Lösung für die schnelle und einfache Veröffentlichung von Videos. Kostenlos für private und kommerzielle Nutzung. Weitere Hilfe in der <0>Dokumentation.","Write protection":"Schreibschutz","YUV test pattern":"YUV-Testbild","Yes":"Ja","You can't abort the wizard because at least one input must be defined.":"Sie können den Assistenten nicht abbrechen, da mindestens ein Eingang definiert sein muss.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Konfiguration geändert. Damit die Änderungen wirksam werden muss die Anwendung neu starten. Jetzt neu starten?","You have to reconnect manually":"Verbindung manuell wiederherstellen","You have unsaved changes. Please save them before you can control the service again.":"Ungespeicherte Änderungen. Bitte speichern, bevor der Dienst wieder gesteuert werden kann.","Your stream needs to be encoded, but there's no suitable encoder available.":"Ihr Stream muss kodiert werden, aber es ist kein geeigneter Encoder verfügbar.","Your stream needs to be encoded. Choose the desired encoder:":"Stream muss kodiert werden. Gewünschten Encoder wählen:","blue":"blau","brown":"braun","iframe code":"iframe Code","kbit/s":"kbit/s","pink":"rosa","velvet":"velvet","violet":"violett","white":"weiß"}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"6 (+ guaranteed to start with a Key frame)":"6 (+ garantierter Start mit einem Keyframe)","7 (+ fragmented MP4 format)":"7 (+ fragmentierte MP4 Format)","<0>Compatibility list":"<0>Kompatibilitätsliste","<0>Show probe details":"<0>Details der Überprüfung anzeigen","ALSA":"ALSA","API endpoint not found. Settings not saved.":"API-Endpunkt nicht gefunden. Einstellungen nicht gespeichert.","AVFoundation":"AVFoundation","Abort":"Abbrechen","About":"Über","Add":"Hinzufügen","Add Publication":"Publikation hinzufügen","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Fügen Sie externe Widgets und Stile zur Publikationsseite hinzu. Einige Beispiele finden Sie auf der Hilfeseite.","Add new channel":"Neuen Kanal hinzufügen","Add: {0}":["Hinzufügen: ",["0"]],"Address":"Adresse","Address for the background image.":"Adresse des Hintergrundbildes.","Address to listen on for HTTP requests.":"Die Adresse für das Abhören von HTTP-Anfragen.","Address to listen on for HTTPS requests.":"Die Adresse für das Abhören von HTTPS-Anfragen.","Adjust publication site colors and background as you like.":"Farben und den Hintergrund der Publikationsseite nach Belieben anpassen.","Advanced monitoring":"Erweiterte Systemüberwachung","Advanced settings":"Erweiterte Einstellungen","Advanced setup":"Erweiterte Einrichtung","AirPlay":"AirPlay","Alerting by email":"Benachrichtigung per E-Mail","All":"Alle","All important system settings.":"Alle wichtigen Systemeinstellungen.","Allow all referrer":"Erlaube alle Referrer","Allow counting how many viewers the stream has.":"Erlaubt das Zählen der Anzahl des Publikums vom Stream.","Amplitude":"Amplitude","An environment variable sets this value.":"Eine Umgebungsvariable legt diesen Wert fest.","App":"App","Application":"Anwendung","Are you sure you want to abort the wizard?":"Sind Sie sicher, dass Sie den Assistenten abbrechen wollen?","Audio":"Audio","Audio Device":"Audiogerät","Audio device":"Audiogerät","Audio from device":"Audio von Gerät","Audio settings":"Audio-Einstellungen","Audio setup":"Audio-Einrichtung","Auth0":"Auth0","Auth0 Tenant":"Auth0 Tenant","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 ist derzeit nicht verfügbar, da diese Schnittstelle von einer unsicheren Quelle geladen wurde.","Author":"Autor","Authorization":"Autorisierung","Automatic cleanup of all media data":"Automatische Bereinigung aller Mediadateien","Autoplay":"Autoplay","Available":"Verfügbar","Back":"Zurück","Background colors":"Hintergrundfarben","Background image":"Hintergrundbild","Backup URL":"Backup-URL","Backup server":"Backup-Server","Backup stream":"Backupstream","Backup stream key":"Backup stream key","Bandwidth":"Bandbreite","Bandwidth control":"Bandbreitensteuerung","Banner":"Banner","Basic":"Basic","Beep factor":"Piep-Faktor","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Beschreiben Sie kurz, was die Zuschauenden während des Live-Streams sehen werden.","Button color":"Farbe des Knopfes","Cache for files on /data.":"Cache für Dateien auf /data.","Cache time (Seconds)":"Cache-Zeit (Sek)","Cache types":"Cache-Typen","Capture clicks":"Klicks erfassen","Capture cursor":"Mauszeiger erfassen","Channel \"{0}\" saved":["Kanal \"",["0"],"\" gespeichert"],"Channels":"Kanäle","Check for updates":"Nach Updates suchen","Check the requirements":"Anforderungen prüfen","Choose a video stream":"Videostream wählen","Choose an audio stream":"Audiostream wählen","Choose an input device ...":"Eingabegerät wählen …","Choose codec ...":"Codec wählen …","Choose tenant ...":"Wähle einen Tenant","Chromecast":"Chromecast","Chunk":"Segment","Close":"Schliessen","Code injection":"Code Injection","Codec":"Codec","Color":"Farbe","Config":"Konfiguration","Confirm password":"Bestätigen Sie das Passwort","Connect":"Verbinden","Connected device":"Verbundenes Gerät","Connected since <0/>":"Verbunden für <0/>","Connecting ...":"Verbinde ...","Connecting to Restreamer Core ...":"Mit Restreamer Core verbinden …","Connecting to Restreamer Core failed probably because of mixed content.":"Die Verbindung zu Restreamer Core ist wahrscheinlich wegen gemischter Inhalte fehlgeschlagen.","Content":"Inhalt","Content URL":"Inhalts-URL","Cores":"Cores","Create user":"Benutzer anlegen","Creative Commons":"Creative Commons","Custom ...":"Individuell …","Custom JSON config for datarhei Core.":"Individuelle JSON Konfiguration für den datarhei Core.","Custom audio device":"Individuelles Audiogerät","Custom audio index":"Individueller Audio-Index","Custom bitrate (kbit/s)":"Individuelle Bitrate (kbit/s)","Custom code injection":"Injektion von Individuellem Code","Custom delay":"Individuelle Verzögerung","Custom device":"Individuelles Gerät","Custom format":"Individuelles Format","Custom framerate":"Individuelle Bildfrequenz","Custom keyframe interval":"Individuelles Keyframe-Intervall","Custom layout":"Individuelles Aussehen","Custom sampling (Hz)":"Individuelle Abtastung (Hz)","Custom scale":"Individuelle Skalierung","Custom size":"Individuelle Größe","Custom video device":"Individuelles Videogerät","Custom video index":"Individueller Video-Index","Data copied to clipboard":"Daten wurden in die Zwischenablage kopiert","Death color":"Death color","Decibels (dB)":"Dezibel (dB)","Decoder":"Decoder","Default":"Standard","Delay":"Verzögerung","Delay (ms)":"Verzögerung (ms)","Delete":"Löschen","Deleting a publication service cannot be reversed. The publication stops immediately.":"Die Löschung eines Publikationsdienstes kann nicht rückgängig gemacht werden. Die Veröffentlichung wird sofort gestoppt.","Delivering mode":"Zustellmodus","Description":"Beschreibung","Design":"Design","Device":"Gerät","Disconnect":"Trennen","Disconnect & Continue":"Trennen und fortfahren","Disconnecting ...":"Trennen ...","Disk":"Festplatte","Disk cache":"Festplatten Zwischenspeicher","Disk storage":"Festplattenspeicher","Do you really want to restart the application now?":"Möchten Sie die Anwendung wirklich neu starten?","Do you want to delete \"{0}\"?":["Soll \"",["0"],"\" gelöscht werden?"],"Do you want to delete {title}?":["Möchten Sie ",["title"]," löschen?"],"Do you want to disconnect \"{0}\"?":["Möchten Sie die Verbindung zu „",["0"],"“ unterbrechen?"],"Docs":"Dokumente","Documentation":"Dokumentation","Dup. frames":"Duplizierte Frames","EDIT: Player":"EDIT: Player","EDIT: Publication Website":"BEARBEITEN: Publikation Website","EXT-X-VERSION":"EXT-X-VERSION","Edit":"Bearbeiten","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Bearbeiten Sie die Audio- und Videoquellen für den Live-Stream. Fügen Sie eine Beschreibung hinzu, und legen Sie die gewünschte Inhaltslizenz fest.","Edit: {title}":["Bearbeiten: ",["title"]],"Embed":"Einbetten","Enable":"Aktivieren","Enable RTMP server ...":"RTMP-Server aktivieren …","Enable SRT server ...":"SRT Server aktivieren ...","Enable a periodic beep every second with this value times the carrier frequency":"Periodischen Piepton jede Sekunde mit diesem Wert mal der Trägerfrequenz aktivieren","Enable backup stream":"Backupstream aktivieren","Enable nerd statistics":"Nerd-Statistiken einschalten","Enable now":"Jetzt aktivieren","Enable primary stream":"Primären Stream aktivieren","Enable snapshots":"Momentaufnahme aktivieren","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Es wird dringend empfohlen, die Autorisierung zu aktivieren. Andernfalls kann jeder auf diese Instanz zugreifen.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Es wird dringend empfohlen, die Basisauthentifizierung zu aktivieren. Andernfalls könnte jeder Daten in /memfs schreiben.","Encoder":"Encoder","Encoding":"Kodierung","Encryption":"Verschlüsselung","Enter a name for the new channel.":"Einen Namen für den neuen Kanal eingeben.","Enter password":"Passwort eingeben","Enter the address of your network source:":"Adresse des Netzwerkquelle eintragen:","Enter username":"Anmeldename eingeben","Entropy coder":"Entropy coder","Error":"Fehler","Error while copying data to clipboard":"Fehler beim Kopieren von Daten in die Zwischenablage","Error: {0}":["Fehler: ",["0"]],"Expands the area above the channel list (live chat).":"Erweitert den Bereich oberhalb der Kanalliste (Live-Chat).","Expands the area under the channel description (comment boxes).":"Erweitert den Bereich unter der Kanalbeschreibung (Kommentarfelder).","Expert mode":"Expertenmodus","Extend channel list":"Kanalliste erweitern","Extend content":"Inhalt erweitern","Extend footer":"Fußzeile erweitern","Extend header":"Header erweitern","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Publikationsdienst konnte nicht erstellt werden (",["0"],")"],"Failed to create publication website files.":"Die Dateien der Publikations-Website konnten nicht erstellt werden.","Failed to probe the source. Please check the <0>probe details.":"Prüfen der Quelle ist fehlgeschlagen. <0>Details der Überprüfung ansehen.","Failed to refresh token: {0}":["Token konnte nicht aktualisiert werden: ",["0"]],"Failed to save ingest metadata":"Speichern der Ingest-Metadaten fehlgeschlagen","Failed to stop process":"Prozess konnte nicht angehalten werden","Failed to store player size setting.":"Die Einstellung für die Playergröße konnte nicht gespeichert werden.","Failed to store publication service ({0})":["Publikationsdienst konnte nicht gespeichert werden (",["0"],")"],"Failed to update ingest process ({0})":["Aktualisierung des Ingest-Prozesses fehlgeschlagen (",["0"],")"],"Failed to update ingest snapshot process ({0})":["Aktualisierung des Vorschaubild-Prozesses fehlgeschlagen (",["0"],")"],"Failed to update the player":"Aktualisierung des Players fehlgeschlagen","Failed to update the playersite":"Aktualisierung der Playerseite fehlgeschlagen","Failed to verify the source. Please check the address.":"Die Quelle konnte nicht verifiziert werden. Bitte Adresse prüfen.","Filter":"Filter","Finish":"Speichern","Flags":"Flaggen","For Javascripts.":"Für Javascripte.","For Stylesheets.":"Für Stylesheets.","Force input framerate":"Bildfrequenz für die Eingabe erzwingen","Format":"Format","Frame drops":"Verlorene Frames","Framebuffer":"Bildspeicher","Framerate":"Bildfrequenz","Frequency (Hz)":"Frequenz (Hz)","GET":"GET","General":"Allgemein","Google Analytics ID":"Google Analytics ID","Google Analytics Tracker Name":"Name Google Analytics Tracker","HLS":"HLS","HLS output":"HLS Ausgabe","HLS server":"HLS-Server","HLS statistic for the In-memory storage":"HLS-Statistik für den In-Memory-Speicher","HTTP and HTTPS":"HTTP und HTTPS","HTTP port":"HTTP Port","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"HTTPS Port","Hardware device":"Hardwaregerät","Header":"Kopfzeile","Headline":"Überschrift","Horizontal Flip":"Horizontal spiegeln","Hosted Restreamer interface":"Gehostete Restreamer-Oberfläche","Human readable name on the service.":"Von Menschen lesbarer Name des Dienstes.","IP address":"IP-Adresse","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Wenn Sie die Ports geändert haben, kann es sein, dass Restreamer Core bereits neu gestartet wurde, aber jetzt auf einem anderen Port verfügbar ist.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Wenn Sie Let’s Encrypt TLS aktiviert haben, kann es einige Zeit dauern, die Zertifikate zu erwerben. Stellen Sie sicher, dass Restreamer Core über Port 80 aus dem Internet erreichbar ist. Bitte überprüfen Sie das Protokoll in der Konsole von Restreamer Core.","Ignore IP ranges":"IP-Bereiche ignorieren","Image URL":"Bild-URL","Imprint":"Impressum","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Neben dem Player bietet der Restreamer eine komplette Landingpage, mit der Sie Ihren Live-Stream einfach und schnell präsentieren können.","In-memory":"In-memory","In-memory storage":"In-Memory-Speicher","Incompatible":"Inkompatibel","Inherit":"Übernehmen","Inject 1":"Inject 1","Inject 2":"Inject 2","Inject 3":"Inject 3","Inject 4":"Inject 4","Interval (seconds)":"Intervall (Sekunden)","Issue alert":"Fehler melden","Keyframe interval (seconds)":"Keyframe-Intervall (Sekunden)","Layout":"Layout","Let's Encrypt certification":"Zertifizierung mit Let’s Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let’s Encrypt erfordert einen oder mehrere öffentliche Domainnamen und einen zugänglichen Port 80/TCP.","Level":"Level","Level of system protocol.":"Ebene des Systemprotokolls.","License":"Lizenz","Life color":"Life color","Linecolor":"Linienfarbe","Link":"Link","Link, mouseover":"Link, Mouseover","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Liste der IP-Bereiche in CIDR-Notation, z. B. 127.0.0.1/32, die von der Statistik nicht erfasst werden sollen - ein IP-Bereich pro Zeile. Leer lassen, um alle Sitzungen aufzuzeichnen.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Liste der zu cachenden Dateierweiterungen (z. B. \".html\"), eine pro Zeile. Leer lassen, um alle Dateitypen zu cachen.","List size (segments)":"Listengröße (Segmente)","Live-Streaming to Facebook Live RTMP service":"Live-Streaming zum Facebook Live RTMP-Dienst","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Live-Streaming zum Instagram. Für den Stream-Schlüssel wird ein Dienst wie <0>Yellow Duck benötigt.","Live-Streaming to Twitch Live RTMP Service.":"Live-Streaming zu Twitch.","Live-Streaming to Vimeo Live RTMP Service":"Live-Streaming zu Vimeo","Livesource ID":"Livesource-ID","Log level":"Protokollierungsebene","Logging":"Protokollieren","Login":"Anmelden","Login failed: Couldn't load API details":"Login fehlgeschlagen: Konnte die API-Details nicht laden","Login failed: {0}":["Login fehlgeschlagen: ",["0"]],"Login/JWT authorization":"Anmeldung/JWT-Autorisierung","Logo":"Logo","Logout":"Abmelden","Loudness Normalization":"Lautheitsnormalisierung","MB":"MB","Main Source":"Hauptquelle","Main channel":"Hauptkanal","Main channel not found":"Hauptkanal nicht gefunden","Main channel saved":"Hauptkanal gespeichert","Main page channel (index.html).":"Kanal auf der Startseite (index.html)","Maintainer:":"Gepflegt von:","Make the channel available as an RTMP stream (experimental).":"Macht den Kanal als RTMP-Stream verfügbar (experimentell).","Make the channel available as an SRT stream (experimental).":"Macht den Kanal als SRT-Stream verfügbar (experimentell).","Master playlist (increases browser/client compatibility)":"Master playlist (erhöht Kompatibilität mit Browsern/Klienten)","Maximum allowed cache size, 0 for unlimited.":"Maximal zulässige Cache-Größe, 0 für unbegrenzt.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Maximal erlaubte MB RAM für /memfs, 0 für unbegrenzt.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Maximal erlaubte MB, die von der Festplatte verbraucht werden dürfen. 0 für unbegrenzt.","Maximum bandwidth Mbit/s":"Maximale Bandbreite Mbit/s","Maximum delay in milliseconds.":"Maximale Latenz (Ms).","Maximum file size (Megabytes)":"Maximale Dateigröße (MB)","Maximum file size to put in cache.":"Maximale Dateigröße, die in den Cache gestellt wird.","Maximum log histroy":"Maximale Protokollhistorie","Maximum log lines":"Maximale Protokollzeilen","Maximum size (Megabytes)":"Maximale Größe (Megabytes)","Maximum viewer idle time (Seconds)":"Maximale Zuschauer Leerzeit (Sekunden)","Maximum viewers":"Maximale Anzahl von Zuschauenden","Memory":"Arbeitsspeicher","Meta information":"Meta-Informationen","Metadata":"Metadaten","Mold":"Mold","More about Twitter's copyright <0>here.":"Mehr über Twitter’s Urheberrecht <0>hier.","More about YouTube's copyright <0>here.":"Mehr über das Urheberrecht von YouTube <0>hier.","More about licenses here":"Mehr über die Lizenzen hier","More about the service":"Mehr über den Service","Mute":"Stumm","Mute a channel.":"Einen Kanal stumm schalten","Mute left":"Links stumm schalten","Mute right":"Rechts stumm schalten","Name":"Name","Name for the template. If the name already exists, it will be overwritten.":"Templatename. Wenn der Name existiert, wird er überschrieben.","Network":"Netzwerk","Network source":"Netzwerk-Quelle","Next":"Weiter","Next: Audio":"Weiter: Audio","Next: Video setup":"Weiter: Video-Einrichtung","No":"Nein","No audio":"Kein Audio","No audio stream available":"Kein Audiostream verfügbar","No input device available":"Kein Eingabegerät vorhanden","No live stream was detected. Please check the software that sends the stream.":"Es wurde kein Livestream erkannt. Bitte die Software überprüfen, die den Stream sendet.","No source selected":"Keine Quelle ausgewählt","No sources available":"Keine Quellen verfügbar","No suitable encoder found.":"Keine passender Encoder gefunden.","No suitable filter found.":"Keine passenden Filter gefunden.","No video":"Kein Video","No video stream available":"Kein Videostream verfügbar","Node ID":"Knoten-ID","Noise":"Rauschen","None":"Keine","Notes":"Hinweise","Number of log lines to keep.":"Anzahl der Protokollzeilen, die aufbewahrt werden sollen.","Number of logs to keep for each process.":"Anzahl der Protokolle, die je Prozess aufbewahrt werden sollen.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Ein Referrer pro Zeile, wie http://www.beispiel.com","Open":"Öffnen","Pan":"Schwenken","Passphrase":"Passwort","Passphrase for SRT encryption.":"Passwort für SRT-Verschlüsselung","Passphrase must be between 10 and 79 characters long":"Das Passwort muss zwischen 10 und 79 Zeichen lang sein.","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Passthrough (Kopieren) sollte nur bei Bedarf deaktiviert werden. Jede Kodierung erfordert zusätzliche CPU/GPU-Ressourcen.","Password":"Passwort","Password for authorization.":"Passwort für die Autorisierung.","Password for the device.":"Passwort von dem Gerät.","Persist viewer statistics":"Betrachterstatistiken beibehalten","Pixel format":"Pixelformat","Plan: <0>Starter":"Plan: <0>Starter","Platforms":"Plattformen","Playback":"Wiedergabe","Player":"Player","Player URL":"Player-URL","Player settings saved":"Playereinstellungen gespeichert","Playersite":"Playerseite","Playlist":"Wiedergabeliste","Playlist version (M3U8). Version 3 has the best browser/client compatibility.":"Playlist Version (M3U8). Version 3 bietet die grösste Kompatibilität mit Browsern/Klienten.","Please check the <0>process log":"Bitte <0>Prozessprotokoll prüfen","Please contact the operator of the service and check what happens.":"An den Betreiber des Dienstes wenden und prüfen, was passiert ist.","Please get in touch with the operator of the service and check what happens.":"Bitte kontaktieren Sie den Betreiber des Services.","Please select a file to upload.":"Datei zum Hochladen auswählen.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"„Passthrough (Kopieren)“ sollte nur deaktiviert werden, wenn es erforderlich ist. Jedes weitere Encoding benötigt zusätzliche CPU/GPU Ressourcen.","Please wait. Probe stream data ...":"Bitte warten — der Stream wird geprüft ...","Please wait. Setting up the stream ...":"Bitte warten — einrichten des Streams ...","Port":"Port","Position":"Position","Preset":"Voreinstellung","Primary stream":"Primärer Stream","Primary stream key":"Primärer Stream-Schlüssel","Probe":"Prüfen","Process":"Prozess","Process control":"Prozesskontrolle","Process debug report":"Prozess-Fehlerbehebungsbericht","Process details":"Prozess-Details","Process report":"Prozess-Bericht","Processing & Control":"Verarbeitung & Steuerung","Profile":"Profil","Protocol":"Protokoll","Protocols":"Protokolle","Public domain/s":"Öffentliceh Domain/s","Publication service not found":"Publikationsdienst nicht gefunden","Publication website settings saved":"Einstellungen der Publication Webseite gespeichert","Publications":"Publikationen","Pull Mode":"Abholmodus","Pull or recieve the data:":"Daten abholen oder empfangen:","Quality":"Qualität","RGB test pattern":"RGB-Testbild","RTMP":"RTMP","RTMP Port":"RTMP Port","RTMP app for publishing.":"RTMP-App für die Veröffentlichung.","RTMP output":"RTMP Ausgabe","RTMP server":"RTMP-Server","RTMP server is not enabled":"RTMP-Server ist nicht aktiviert","RTMP server listen address.":"RTMP-Server Zugriffsadresse.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"RTMP-Token für die Veröffentlichung und Wiedergabe. Das Token ist der Wert des URL-Abfrageparameters „token“.","RTMPS Port":"RTMPS Port","RTMPS server":"RTMPS-Server","RTMPS server listen address.":"RTMPS-Server Zugriffsadresse","RTSP":"RTSP","Raspberry Pi camera":"Raspberry Pi Kamera","Rate control":"Ratenkontrolle","Ratio":"Verhältnis","Read input at native speed":"Eingabe mit nativer Geschwindigkeit lesen","Receive Mode":"Empfangsmodus","Reconnect":"Wiederverbinden","Reconnect delay (seconds)":"Verzögerung beim Wiederherstellen der Verbindung (Sekunden)","Reconnecting in {0}s":["Wiederverbinden in ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["Die Wiederherstellung der Verbindung zum Restreamer Core ist in den letzten ",["RETRIES"]," Sekunden fehlgeschlagen."],"Reconnecting to Restreamer Core failed.":"Die Wiederherstellung der Verbindung zu Restreamer Core ist fehlgeschlagen.","Refresh":"Aktualisieren","Region":"Region","Reload":"Erneut laden","Remove the oldest entries if the /memfs is full":"Älteste Einträge entfernen, wenn das /memfs voll ist","Requires activation":"Aktivierung erforderlich","Restart":"Neustart","Restart required":"Neustart erforderlich","Restarting":"Neustart","Restarting Restreamer Core ...":"Neustart von Restreamer Core …","Restarting the application failed.":"Neustart der Anwendung ist fehlgeschlagen.","Restreamer Service":"Restreamer Service","Retrieving stream data ...":"Abrufen von Streamdaten ...","Retry":"Wiederholen","Rotate":"Rotieren","Rule":"Regel","SRT":"SRT","SRT output":"SRT Ausgabe","SRT server":"SRT Server","SRT server is not enabled":"Der SRT Server ist nicht aktiviert","SRT server listen address.":"SRT Zugriffsadresse","SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'":"SRT-Token für die Veröffentlichung und Wiedergabe. Das Token ist der Wert des streamid-Parameters „token“.","Sampling":"Sampling","Save":"Speichern","Scale":"Skalierung","Seconds to keep files in cache.":"Sekunden, um Dateien im Cache zu halten.","Seconds until a process is restarted.":"Sekunden, bis ein Prozess neu gestartet wird.","Seconds until a staled process is terminated.":"Sekunden, bis ein hängender Prozess beendet wird.","Seconds until the snapshot/thumbnail of the video source is updated.":"Sekunden, bis ein Vorschaubild (JPEG) der Videoquelle aktualisiert wird.","Security":"Sicherheit","Security passphrase":"Sicherheits-Passwort","Security token":"Sicherheit Token","Seekbar color":"Seekbar Farbe","Segment length (seconds)":"Segmentlänge (Sek)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Das Segment wird nach Ablauf dieser Zeit auf dem folgenden Keyframe geschnitten. 2 wird empfohlen.","Segmentation":"Segmentierung","Select RTMP or SRT (if enabled) for less latency.":"Benutze RTMP oder SRT (falls aktiviert) für eine geringere Latenz.","Select a device:":"Auswahl Gerät:","Select audio source:":"Audio-Quelle auswählen:","Select source ...":"Auswahl Quelle ...","Select video source:":"Videoquelle auswählen:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Wählen Sie aus, ob Sie den Stream von einer <0>Netzwerkquelle (z. B. einer Netzwerkkamera) oder dem <1>internen RTMP-Server (z. B. OBS-Streams an den Restreamer) beziehen.","Select your encoding setting:":"Einstellungen für die Encodierung:","Select your filter settings (optional):":"Filtereinstellungen auswählen (optional):","Selected":"Ausgewählt","Selected channel":"Auswahl","Selection":"Auswahl","Send anonymous metrics (helps us for future development)":"Sende anonyme Anwendungsdaten (Hilft den Restreamer kontinuierlich zu verbessern)","Send stream to this address:":"Sende den Stream an diese Adresse:","Send video to Framebuffer":"Sendet das Video zum Bildspeicher","Server":"Server","Server URL":"Server URL","Service":"Service","Service name":"Name des Dienstes","Service token for monitoring.":"Servicetoken für die Überwachung.","Sessions":"Zuschauer","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Legt eine Begrenzung der Bandbreite in Mbit/s für die ausgehende HLS-Datenübertragung fest. Alle Dienste, wie RTMP und ausgehende Prozesse, werden in die Berechnung einbezogen. Wenn die Bandbreite überschritten wird, erhalten HLS-Zuschauende den HTTP-Statuscode 509 (Bandwidth Limit Exceeded). 0 ist unbegrenzt.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Legt ein Limit für die Zuschauenden in der HLS-Sitzungen fest. Wenn das Limit überschritten wird, erhalten HLS-Zuschauende den HTTP-Statuscode 509 (Bandbreitenlimit überschritten). 0 ist unbegrenzt.","Setting for connection to the service.":"Einstellung für die Anbindung an den Service.","Settings":"Einstellungen","Settings (expert mode)":"Einstellungen (Experten-Modus)","Settings for /data path. The access is protected by":"Eintellungen für den /data Pfad. Der Zugriff wird geschützt durch","Settings for /memfs path.":"Einstellung für den /memfs Pfad.","Settings saved. All changes will be applied after restarting the application.":"Einstellungen gespeichert. Die Änderungen werden nach einem Neustart der Anwendungen übernommen.","Share button":"Share-Button","Shows a reference to the project.":"Zeigt einen Hinweis auf das Projekt.","Sign up (free)":"Anmelden (Kostenlos)","Silence":"Stille","Silence Audio":"Stilles Audio","Sine":"Sinus","Sitename":"Seitenname","Size":"Grösse","Snapshot":"Vorschaubild","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Socket-Zeitüberschreitung (Mikrosekunden)","Software":"Software","Source":"Quelle","Source & Encoding":"Quelle & Encoding","Speed":"Geschwindigkeit","Stale timeout (seconds)":"Zeitüberschreitung (Sekunden)","Statistics":"Statistiken","Storage":"Speicherplatz","Stores the viewer statistics to the disk.":"Speichert die Zuschauerstatistik auf der Festplatte.","Stream":"Stream","Stream URL":"Stream-URL","Stream key":"Stream-Schlüssel","Stream name":"Streamname","Stream names":"Streamnamen","Stream source for publication service (experimental).":"Streamquelle für den Publikationdienst (experimentell).","Support datarhei Restreamer":"Unterstütze datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Unterstützt HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT und mehr.","System":"System","Template":"Vorlage","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Vorlage, die für die Erstellung der Publikations-Website verwendet werden soll. Mit der Schaltfläche „Löschen“ wird die Auswahl aus dem System entfernt.","Terms":"Bedingungen","Test pattern":"Testbild","Test pattern (extended)":"Testbild (erweitert)","Text colors":"Textfarben","The RTMP output requires the RTMP Server.":"Die RTMP Ausgabe erfordert den RTMP-Server.","The SRT output requires the SRT Server.":"Die SRT Ausgabe erfordert den SRT-Server.","The amplitude (0.0 - 1.0) of the generated audio stream":"Die Amplitude (0,0 - 1,0) des erzeugten Audiostreams","The application is using an older version of the settings.":"Die Applikation verwendet eine ältere Version der Einstellungen.","The available FFmpeg binary doesn't support any of the required protocols.":"Die verfügbare FFmpeg-Version unterstützt keines der erforderlichen Protokolle.","The bitrate of the audio stream.":"Die Bitrate des Audiostreams.","The carrier frequency":"Trägerfrequenz","The channel \"{0}\" could not be deleted":["Der Kanal \"",["0"],"\\“ konnte nicht gelöscht werden"],"The channel \"{0}\" has been deleted":["Der Kanal \"",["0"],"\\“ wurde gelöscht"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"Die Löschung dieses Kanals kann nicht rückgängig gemacht werden. Alle Veröffentlichungen dieses Kanals werden entfernt.","The input profile is not complete. Please define a video and audio source.":"Unvollständiges Eingangsprofil. Video- und Audioquelle definieren.","The layout of the audio stream.":"Anordnung des Audiostreams.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Die maximale Anzahl von Wiedergabelistensegmenten. 0 enthält alle Segmente. 6 wird empfohlen.","The noise color":"Audio-Rauschfarbe","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"Die Person, die ein Werk mit dieser Urkunde verbunden hat, hat das Werk der Allgemeinheit gewidmet, indem sie auf alle ihre Rechte an dem Werk weltweit nach dem Urheberrecht, einschließlich aller verwandten und benachbarten Rechte, verzichtet, soweit dies gesetzlich zulässig ist. Sie können das Werk vervielfältigen, verändern, verbreiten und aufführen, auch für kommerzielle Zwecke, alles ohne um Erlaubnis zu fragen.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Der öffentlich erreichbare Domänenname des Hosts, auf dem der Restreamer läuft. Trennen Sie mehrere Domänennamen durch ein Komma.","The publication service \"{0}\" could not be deleted":["Der Publikationsdienst \"",["0"],"\" konnte nicht gelöscht werden"],"The publication service \"{0}\" has been created":["Der Publikationsdienst \"",["0"],"\" wurde erstellt"],"The publication service \"{0}\" has been deleted":["Der Publikationsdienst wurde \"",["0"],"\" gelöscht"],"The publication service has been created":"Der Publikationsdienst wurde erstellt","The sample rate of the audio stream.":"Abtastrate des Audiostreams.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Die ausgewählte Datei ist zu groß (",["0"]," Bytes). Es sind nur ",["1"]," Bytes erlaubt."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Der ausgewählte Dateityp (",["0"],") ist nich erlaubt. Erlaubte Dateitypen sind ",["types"]],"The settings for \"{0}\" have been saved":["Die Einstellungen für \"",["0"],"\" wurden gespeichert"],"The source doesn't provide any audio streams.":"Die Quelle stellt keine Audiostreams zur Verfügung.","The source doesn't provide any audio streams. Please check the <0>probe details.":"Die Quelle stellt keine Audiostreams zur Verfügung. Bitte die <0>Details der Überprüfung ansehen.","The source doesn't provide any compatible audio streams.":"Die Quelle stellt keine kompatiblen Audiostreams zur Verfügung.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"Die Quelle stellt keine kompatiblen Videostreams zur Verfügung. Bitte die <0>Anforderungen prüfen.","The source doesn't provide any video streams. Please check the <0>probe details.":"Die Quelle stellt keine Videostreams zur Verfügung. Bitte die <0>Details der Überprüfung ansehen.","The source doesn't provide any video streams. Please check the device.":"Die Quelle stellt keine Videostreams zur Verfügung. Bitte die Quelle prüfen.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"Die Videoquelle stellt keinen kompatiblen Audiokanal zur Verfügung. <0>Silence Audio wird empfohlen. Dienste wie z.B. YouTube, Facebook & Co. benötigen einen Audiokanal.","The video source is compatible. Select the desired resolution:":"Die Videoquelle ist kompatibel. Gewünschte Auflösung auswählen:","There are updates available. Here you get more information.":"Es sind Updates verfügbar. Hier erhalten Sie weitere Informationen.","There was a problem storing the settings. Settings not saved.":"Es gab ein Problem beim Speichern der Einstellungen. Einstellungen nicht gespeichert.","There was an error connecting to Restreamer Core at {0}.":["Es ist ein Fehler beim Verbinden mit Restreamer Core bei ",["0"]," aufgetreten."],"There was an error during upload: {0}":["Beim Hochladen ist ein Fehler aufgetreten: ",["0"]],"There was an error setting up the stream.":"Es ist ein Fehler beim Einrichten des Streams aufgetreten.","There were some errors in the settings. Settings not saved.":"Es gab einige Fehler in den Einstellungen. Einstellungen nicht gespeichert.","There's no login method available.":"Es ist keine Methode für die Anmeldung verfügbar.","This is a dummy service that explains to you the concepts of service.":"Dies ist ein Dummy-Dienst, der Ihnen die Konzepte des Dienstes erklärt.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Bitte Geduld. Es kann einen Moment dauern, bis der Restreamer Core neu gestartet ist …","This is to mention the copyright regulations for the target of this service.":"Dies ist ein Hinweis auf die urheberrechtlichen Bestimmungen für das Ziel dieses Dienstes.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Diese Lizenz erlaubt Wiederverwendern das Kopieren und Verteilen des Materials in jedem Medium oder Format nur in unangepasster Form und nur so lange, wie die Nennung des Urhebers erfolgt. Die Lizenz erlaubt die kommerzielle Nutzung.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Diese Lizenz erlaubt es Wiederverwendern, das Material in jedem Medium oder Format in unangepasster Form zu kopieren und zu verbreiten, und zwar nur für nicht-kommerzielle Zwecke und nur so lange, wie der Urheber genannt wird.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Diese Lizenz erlaubt es Wiederverwendern, das Material zu verbreiten, zu remixen, zu adaptieren und darauf aufzubauen, und zwar in jedem Medium oder Format und nur für nicht-kommerzielle Zwecke und nur so lange, wie die Nennung des Urhebers erfolgt.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Diese Lizenz erlaubt es Wiederverwendern, das Material zu verbreiten, zu remixen, zu adaptieren und darauf aufzubauen, und zwar in jedem Medium oder Format und nur für nicht-kommerzielle Zwecke, und nur solange der Urheber genannt wird. Wenn Sie das Material umarbeiten, anpassen oder darauf aufbauen, müssen Sie das geänderte Material unter identischen Bedingungen lizenzieren.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Diese Lizenz erlaubt es Wiederverwendern, das Material in jedem Medium oder Format zu verbreiten, zu remixen, anzupassen und darauf aufzubauen, solange der Urheber genannt wird. Die Lizenz erlaubt die kommerzielle Nutzung.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Diese Lizenz erlaubt es Wiederverwendern, das Material in jedem Medium oder Format zu verbreiten, zu remixen, anzupassen und darauf aufzubauen, solange der Urheber genannt wird. Die Lizenz erlaubt die kommerzielle Nutzung. Wenn Sie das Material umarbeiten, anpassen oder darauf aufbauen, müssen Sie das geänderte Material unter identischen Bedingungen lizenzieren.","This protocol is unknown or not supported by the available FFmpeg binary.":"Dieses Protokoll ist entweder unbekannt oder nicht verfügbar mit der verfügbaren FFmpeg-Version.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Diese Quelle kann nicht bearbeitet werden, während sie in Gebrauch ist. Um fortzufahren, müssen Sie die Verbindung zur Quelle unterbrechen.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Diese Version der Benutzeroberfläche unterstützt nicht das verfügbare FFmpeg-Binary (",["0"],"). Die Benutzeroberfläche erfordert ",["1"],". Bitte verwenden Sie eine unterstützte FFmpeg-Binärdatei."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Diese Version der Benutzeroberfläche unterstützt nicht den angeschlossenen Kern (",["0"],"). Die Benutzeroberfläche erfordert ",["1"],". Bitte verwenden Sie eine kompatible Version der UI."],"This version of the UI is compatible.":"Die verwendete Version der Benutzeroberfläche ist kompatibel.","Time until an inactive viewer connection is treated as closed.":"Zeit bis eine inaktive Zuschauerverbindung als geschlossen behandelt wird.","Token":"Token","Transmit a Livestream to a Telegram Channel.":"Übertrage einen Livestream zu einem Telegram Channel.","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Überträgt Schnappschüsse der Hauptquelle an einen HTTP/S Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Überträgt den Audiokanal der Hauptquelle an einen Icecast Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle als HTTP-Live-Streaming (HLS) an einen HTTP/S-Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle als MPEG-DASH an einen HTTP/S Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen Brightcove Live-Service. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Übertragen Sie die Hauptquelle an einen CDN77 RTMP Service. Mehr über die Einrichtung <0>hier.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Übertragen Sie die Hauptquelle an einen DaCast RTMP Service. Mehr über die Einrichtung <0>hier.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Übertragen Sie die Hauptquelle an einen MPEG-TS-Dienst. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen MPEG-TS-Dienst. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen RTSP-Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen Red5/Pro Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen SRT Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen UDP-Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an einen WOWZA Server. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Überträgt die Hauptquelle auf eine datarhei Core Ressource. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle auf eine livespotting.com Ressource. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Übertragen Sie die Hauptquelle an die Akamai (MSL) Media Services Live. Weitere Details zu den MSL-Encoder-Einstellungen finden Sie <0>hier.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Übertragen Sie die Hauptquelle an den Bitmovin-Cloud-Encoding-Service, ein leistungsstarkes Tool für Live-Streaming. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Übertragen Sie die Hauptquelle an den Restream RTMP Service. Weitere Details zu den Einstellungen finden Sie <0>hier.","Transmit to a Azure Media Services. More details can be found <0>here.":"Überträgt Ihren Videostream zu Azure Media Services. Weiters Informationen finden sie <0>hier.","Transmit to linkedIn. More details can be found <0>here.":"Überträgt Ihren Videostream zu linkedIn. Weitere Informationen finden sie <0>hier.","Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.":"Überträgt Ihren Livestream an einen Owncast-Server. <0>Weitere Informationen zu den Einstellungen.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Überträgt Ihr Video als RTMP-Stream mit dem erforderlichen, in YouTube Studio generierten Schlüssel. Weitere Informationen zum Einrichten eines Live-Streams finden Sie in der <0>Creator Academy von YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Überträgt Ihren Videostream mit dem erforderlichen Schlüssel, der in Twitter Producer generiert wurde. Weitere Informationen zum Einrichten eines Livestreams finden Sie unter <0>Producer von Twitter.","Tune":"Optimieren","UDP transport":"UDP-Transport","Unable to load the config.":"Die Konfiguration kann nicht geladen werden.","Unique ident on the service.":"Einzigartige Identität für den Service.","Unknown":"Unbekannt","Unselected":"Nicht gewählt","Upload":"Hochladen","Uploading the file failed":"Die Dateiübertragung ist fehlgeschlagen","Uploading the logo failed":"Hochladen des Logos fehlgeschlagen","Uptime":"Betriebszeit","Use Auth0 for your running Restreamer Core. More <0>details.":"Verwenden Sie Auth0 für Ihren laufenden Restreamer Core. Mehr <0>Details.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Verwenden Sie den Assistenten (<0/>) für eine schnelle und einfache Einrichtung, oder bearbeiten Sie (<1/>) die Quellen direkt im benutzerdefinierten Modus.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Copyright und die richtige Bildlizenz wählen. Ob frei für alle oder stark eingeschränkt. Überlege kurz, was andere mit dem Video machen dürfen.","User registration":"Benutzerregistrierung","Username":"Anmeldename","Username for authorization.":"Anmeldename für die Autorisierung.","Username for the device.":"Anmeldename von dem Gerät.","VPU ID":"VPU-ID","Vertical Flip":"Vertikal spiegeln","Video":"Video","Video device":"Videogerät","Video settings":"Videoeinstellungen","Video setup":"Video-Einrichtung","Video source":"Videoquelle","Viewer":"Zuschauende","Virtual source":"Virtuelle-Quelle","Volume":"Lautstärke","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Willkommen bei Restreamer v2, der Lösung für die schnelle und einfache Veröffentlichung von Videos. Kostenlos für private und kommerzielle Nutzung. Weitere Hilfe in der <0>Dokumentation.","Where to store the HLS playlist and segments. In-Memory is recommended.":"Wo die HLS-Playlist und Segmente gespeichert werden sollen. In-Memory ist empfohlen.","Write protection":"Schreibschutz","YUV test pattern":"YUV-Testbild","Yes":"Ja","You can't abort the wizard because at least one input must be defined.":"Sie können den Assistenten nicht abbrechen, da mindestens ein Eingang definiert sein muss.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Konfiguration geändert. Damit die Änderungen wirksam werden muss die Anwendung neu starten. Jetzt neu starten?","You have to reconnect manually":"Verbindung manuell wiederherstellen","You have unsaved changes. Please save them before you can control the service again.":"Ungespeicherte Änderungen. Bitte speichern, bevor der Dienst wieder gesteuert werden kann.","Your stream needs to be encoded, but there's no suitable encoder available.":"Ihr Stream muss kodiert werden, aber es ist kein geeigneter Encoder verfügbar.","Your stream needs to be encoded. Choose the desired encoder:":"Stream muss kodiert werden. Gewünschten Encoder wählen:","blue":"blau","brown":"braun","iframe code":"iframe Code","kbit/s":"kbit/s","pink":"rosa","velvet":"velvet","violet":"violett","white":"weiß"}}; \ No newline at end of file diff --git a/src/locales/de/messages.po b/src/locales/de/messages.po index 37b0d7e..0f3b068 100644 --- a/src/locales/de/messages.po +++ b/src/locales/de/messages.po @@ -13,12 +13,20 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: src/misc/controls/HLS.js:81 +msgid "6 (+ guaranteed to start with a Key frame)" +msgstr "6 (+ garantierter Start mit einem Keyframe)" + +#: src/misc/controls/HLS.js:84 +msgid "7 (+ fragmented MP4 format)" +msgstr "7 (+ fragmentierte MP4 Format)" + #: src/misc/EncodingSelect.js:224 msgid "<0>Compatibility list" msgstr "<0>Kompatibilitätsliste" -#: src/views/Edit/Profile.js:380 -#: src/views/Edit/Profile.js:510 +#: src/views/Edit/Profile.js:393 +#: src/views/Edit/Profile.js:543 msgid "<0>Show probe details" msgstr "<0>Details der Überprüfung anzeigen" @@ -26,7 +34,7 @@ msgstr "<0>Details der Überprüfung anzeigen" msgid "ALSA" msgstr "ALSA" -#: src/views/Settings.js:907 +#: src/views/Settings.js:974 msgid "API endpoint not found. Settings not saved." msgstr "API-Endpunkt nicht gefunden. Einstellungen nicht gespeichert." @@ -35,16 +43,16 @@ msgid "AVFoundation" msgstr "AVFoundation" #: src/misc/ChannelList.js:356 -#: src/views/Edit/Profile.js:410 -#: src/views/Edit/Wizard/index.js:1153 -#: src/views/Edit/index.js:549 -#: src/views/Edit/index.js:575 -#: src/views/Edit/index.js:594 -#: src/views/Publication/Add.js:362 -#: src/views/Publication/Edit.js:601 -#: src/views/Settings.js:1972 -#: src/views/Settings.js:2031 -#: src/views/Settings.js:2053 +#: src/views/Edit/Profile.js:433 +#: src/views/Edit/Wizard/index.js:1168 +#: src/views/Edit/index.js:603 +#: src/views/Edit/index.js:629 +#: src/views/Edit/index.js:648 +#: src/views/Publication/Add.js:364 +#: src/views/Publication/Edit.js:563 +#: src/views/Settings.js:2123 +#: src/views/Settings.js:2182 +#: src/views/Settings.js:2204 msgid "Abort" msgstr "Abbrechen" @@ -57,11 +65,11 @@ msgstr "Über" msgid "Add" msgstr "Hinzufügen" -#: src/views/Publication/Add.js:321 +#: src/views/Publication/Add.js:323 msgid "Add Publication" msgstr "Publikation hinzufügen" -#: src/views/Playersite.js:692 +#: src/views/Playersite.js:708 msgid "Add external widgets and styles to the publication site. You can find some examples on the help page." msgstr "Fügen Sie externe Widgets und Stile zur Publikationsseite hinzu. Einige Beispiele finden Sie auf der Hilfeseite." @@ -69,18 +77,20 @@ msgstr "Fügen Sie externe Widgets und Stile zur Publikationsseite hinzu. Einige msgid "Add new channel" msgstr "Neuen Kanal hinzufügen" -#: src/views/Publication/Add.js:324 +#: src/views/Publication/Add.js:326 msgid "Add: {0}" msgstr "Hinzufügen: {0}" -#: src/views/Edit/Sources/Network.js:355 +#: src/views/Edit/Sources/Network.js:421 #: src/views/Edit/Wizard/Sources/Network.js:66 +#: src/views/Publication/Services/Azure.js:98 #: src/views/Publication/Services/Brightcove.js:95 -#: src/views/Publication/Services/Core.js:100 +#: src/views/Publication/Services/Core.js:116 #: src/views/Publication/Services/DASH.js:192 #: src/views/Publication/Services/HLS.js:181 #: src/views/Publication/Services/Icecast.js:160 #: src/views/Publication/Services/Image2.js:126 +#: src/views/Publication/Services/Linkedin.js:93 #: src/views/Publication/Services/MPEGTS.js:160 #: src/views/Publication/Services/RTMP.js:132 #: src/views/Publication/Services/RTSP.js:150 @@ -88,23 +98,23 @@ msgstr "Hinzufügen: {0}" #: src/views/Publication/Services/SRT.js:161 #: src/views/Publication/Services/UDP.js:127 #: src/views/Publication/Services/WOWZA.js:132 -#: src/views/Settings.js:1302 +#: src/views/Settings.js:1370 msgid "Address" msgstr "Adresse" -#: src/views/Playersite.js:629 +#: src/views/Playersite.js:645 msgid "Address for the background image." msgstr "Adresse des Hintergrundbildes." -#: src/views/Settings.js:1331 +#: src/views/Settings.js:1399 msgid "Address to listen on for HTTP requests." msgstr "Die Adresse für das Abhören von HTTP-Anfragen." -#: src/views/Settings.js:1344 +#: src/views/Settings.js:1412 msgid "Address to listen on for HTTPS requests." msgstr "Die Adresse für das Abhören von HTTPS-Anfragen." -#: src/views/Playersite.js:514 +#: src/views/Playersite.js:530 msgid "Adjust publication site colors and background as you like." msgstr "Farben und den Hintergrund der Publikationsseite nach Belieben anpassen." @@ -112,7 +122,7 @@ msgstr "Farben und den Hintergrund der Publikationsseite nach Belieben anpassen. msgid "Advanced monitoring" msgstr "Erweiterte Systemüberwachung" -#: src/views/Edit/Sources/Network.js:396 +#: src/views/Edit/Sources/Network.js:474 #: src/views/Publication/Services/DASH.js:204 #: src/views/Publication/Services/HLS.js:193 #: src/views/Publication/Services/Icecast.js:170 @@ -125,27 +135,32 @@ msgstr "Erweiterte Systemüberwachung" msgid "Advanced settings" msgstr "Erweiterte Einstellungen" -#: src/views/Edit/Wizard/index.js:287 +#: src/views/Edit/Wizard/index.js:302 msgid "Advanced setup" msgstr "Erweiterte Einrichtung" +#: src/views/Playersite.js:433 +#: src/views/Publication/Player.js:443 +msgid "AirPlay" +msgstr "AirPlay" + #: src/views/Login.js:325 msgid "Alerting by email" msgstr "Benachrichtigung per E-Mail" -#: src/views/Publication/Add.js:344 +#: src/views/Publication/Add.js:346 msgid "All" msgstr "Alle" -#: src/views/Settings.js:1163 +#: src/views/Settings.js:1231 msgid "All important system settings." msgstr "Alle wichtigen Systemeinstellungen." -#: src/views/Settings.js:1478 +#: src/views/Settings.js:1548 msgid "Allow all referrer" msgstr "Erlaube alle Referrer" -#: src/views/Settings.js:1518 +#: src/views/Settings.js:1588 msgid "Allow counting how many viewers the stream has." msgstr "Erlaubt das Zählen der Anzahl des Publikums vom Stream." @@ -157,8 +172,8 @@ msgstr "Amplitude" msgid "An environment variable sets this value." msgstr "Eine Umgebungsvariable legt diesen Wert fest." -#: src/views/Publication/Services/Core.js:107 -#: src/views/Settings.js:1816 +#: src/views/Publication/Services/Core.js:124 +#: src/views/Settings.js:1897 msgid "App" msgstr "App" @@ -168,11 +183,11 @@ msgstr "App" msgid "Application" msgstr "Anwendung" -#: src/views/Edit/Wizard/index.js:1172 +#: src/views/Edit/Wizard/index.js:1187 msgid "Are you sure you want to abort the wizard?" msgstr "Sind Sie sicher, dass Sie den Assistenten abbrechen wollen?" -#: src/views/Publication/Add.js:492 +#: src/views/Publication/Add.js:467 msgid "Audio" msgstr "Audio" @@ -185,18 +200,18 @@ msgstr "Audiogerät" msgid "Audio device" msgstr "Audiogerät" -#: src/views/Edit/Wizard/index.js:875 -#: src/views/Edit/Wizard/index.js:887 +#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:902 msgid "Audio from device" msgstr "Audio von Gerät" -#: src/views/Edit/Profile.js:425 +#: src/views/Edit/Profile.js:448 #: src/views/Edit/ProfileSummary.js:90 -#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Edit.js:506 msgid "Audio settings" msgstr "Audio-Einstellungen" -#: src/views/Edit/Wizard/index.js:828 +#: src/views/Edit/Wizard/index.js:843 msgid "Audio setup" msgstr "Audio-Einrichtung" @@ -216,39 +231,39 @@ msgstr "Auth0 ist derzeit nicht verfügbar, da diese Schnittstelle von einer uns msgid "Author" msgstr "Autor" -#: src/views/Settings.js:1143 -#: src/views/Settings.js:1415 +#: src/views/Settings.js:1210 +#: src/views/Settings.js:1483 msgid "Authorization" msgstr "Autorisierung" -#: src/misc/controls/HLS.js:83 +#: src/misc/controls/HLS.js:123 msgid "Automatic cleanup of all media data" msgstr "Automatische Bereinigung aller Mediadateien" -#: src/views/Publication/Player.js:437 +#: src/views/Publication/Player.js:440 msgid "Autoplay" msgstr "Autoplay" -#: src/views/Playersite.js:445 +#: src/views/Playersite.js:461 msgid "Available" msgstr "Verfügbar" -#: src/views/Edit/Profile.js:541 -#: src/views/Edit/Wizard/index.js:408 -#: src/views/Edit/Wizard/index.js:647 -#: src/views/Edit/Wizard/index.js:912 -#: src/views/Edit/Wizard/index.js:1024 -#: src/views/Edit/Wizard/index.js:1082 -#: src/views/Edit/Wizard/index.js:1164 -#: src/views/Publication/Add.js:528 +#: src/views/Edit/Profile.js:584 +#: src/views/Edit/Wizard/index.js:423 +#: src/views/Edit/Wizard/index.js:662 +#: src/views/Edit/Wizard/index.js:927 +#: src/views/Edit/Wizard/index.js:1039 +#: src/views/Edit/Wizard/index.js:1097 +#: src/views/Edit/Wizard/index.js:1179 +#: src/views/Publication/Add.js:492 msgid "Back" msgstr "Zurück" -#: src/views/Playersite.js:563 +#: src/views/Playersite.js:579 msgid "Background colors" msgstr "Hintergrundfarben" -#: src/views/Playersite.js:616 +#: src/views/Playersite.js:632 msgid "Background image" msgstr "Hintergrundbild" @@ -273,7 +288,7 @@ msgstr "Backup stream key" msgid "Bandwidth" msgstr "Bandbreite" -#: src/views/Settings.js:1373 +#: src/views/Settings.js:1441 msgid "Bandwidth control" msgstr "Bandbreitensteuerung" @@ -282,7 +297,7 @@ msgid "Banner" msgstr "Banner" #: src/views/Login.js:241 -#: src/views/Settings.js:1420 +#: src/views/Settings.js:1488 msgid "Basic" msgstr "Basic" @@ -295,24 +310,24 @@ msgstr "Piep-Faktor" msgid "Bitrate" msgstr "Bitrate" -#: src/views/Edit/Wizard/index.js:1013 -#: src/views/Edit/index.js:510 +#: src/views/Edit/Wizard/index.js:1028 +#: src/views/Edit/index.js:564 msgid "Briefly describe what the audience will see during the live stream." msgstr "Beschreiben Sie kurz, was die Zuschauenden während des Live-Streams sehen werden." -#: src/views/Publication/Player.js:352 +#: src/views/Publication/Player.js:355 msgid "Button color" msgstr "Farbe des Knopfes" -#: src/views/Settings.js:1687 +#: src/views/Settings.js:1757 msgid "Cache for files on /data." msgstr "Cache für Dateien auf /data." -#: src/views/Settings.js:1715 +#: src/views/Settings.js:1785 msgid "Cache time (Seconds)" msgstr "Cache-Zeit (Sek)" -#: src/views/Settings.js:1743 +#: src/views/Settings.js:1813 msgid "Cache types" msgstr "Cache-Typen" @@ -324,7 +339,7 @@ msgstr "Klicks erfassen" msgid "Capture cursor" msgstr "Mauszeiger erfassen" -#: src/views/Edit/index.js:327 +#: src/views/Edit/index.js:339 msgid "Channel \"{0}\" saved" msgstr "Kanal \"{0}\" gespeichert" @@ -332,11 +347,11 @@ msgstr "Kanal \"{0}\" gespeichert" msgid "Channels" msgstr "Kanäle" -#: src/views/Settings.js:1172 +#: src/views/Settings.js:1240 msgid "Check for updates" msgstr "Nach Updates suchen" -#: src/views/Publication/Add.js:272 +#: src/views/Publication/Add.js:276 msgid "Check the requirements" msgstr "Anforderungen prüfen" @@ -350,8 +365,8 @@ msgstr "Audiostream wählen" #: src/views/Edit/Sources/ALSA.js:96 #: src/views/Edit/Sources/Framebuffer.js:80 -#: src/views/Edit/Sources/Raspicam.js:84 -#: src/views/Edit/Sources/V4L.js:90 +#: src/views/Edit/Sources/Raspicam.js:87 +#: src/views/Edit/Sources/V4L.js:93 msgid "Choose an input device ..." msgstr "Eingabegerät wählen …" @@ -363,16 +378,21 @@ msgstr "Codec wählen …" msgid "Choose tenant ..." msgstr "Wähle einen Tenant" +#: src/views/Playersite.js:425 +#: src/views/Publication/Player.js:442 +msgid "Chromecast" +msgstr "Chromecast" + #: src/views/Publication/Services/DASH.js:309 #: src/views/Publication/Services/HLS.js:249 msgid "Chunk" msgstr "Segment" #: src/misc/ModalContent.js:77 -#: src/views/Playersite.js:782 -#: src/views/Publication/Add.js:525 -#: src/views/Publication/Edit.js:565 -#: src/views/Publication/Player.js:447 +#: src/views/Playersite.js:798 +#: src/views/Publication/Add.js:489 +#: src/views/Publication/Edit.js:527 +#: src/views/Publication/Player.js:452 msgid "Close" msgstr "Schliessen" @@ -385,11 +405,11 @@ msgid "Codec" msgstr "Codec" #: src/views/Edit/Sources/VirtualAudio.js:110 -#: src/views/Publication/Player.js:320 +#: src/views/Publication/Player.js:323 msgid "Color" msgstr "Farbe" -#: src/views/Settings.js:1282 +#: src/views/Settings.js:1350 msgid "Config" msgstr "Konfiguration" @@ -410,7 +430,7 @@ msgid "Connected since <0/>" msgstr "Verbunden für <0/>" #: src/misc/ActionButton.js:12 -#: src/views/Main/index.js:305 +#: src/views/Main/index.js:334 #: src/views/Publication/Process.js:40 msgid "Connecting ..." msgstr "Verbinde ..." @@ -424,14 +444,14 @@ msgid "Connecting to Restreamer Core failed probably because of mixed content." msgstr "Die Verbindung zu Restreamer Core ist wahrscheinlich wegen gemischter Inhalte fehlgeschlagen." #: src/misc/controls/Metadata.js:70 -#: src/views/Playersite.js:659 -#: src/views/Playersite.js:676 +#: src/views/Playersite.js:675 +#: src/views/Playersite.js:692 msgid "Content" msgstr "Inhalt" -#: src/views/Main/index.js:365 +#: src/views/Main/index.js:394 msgid "Content URL" -msgstr "" +msgstr "Inhalts-URL" #: src/Footer.js:193 msgid "Cores" @@ -445,7 +465,7 @@ msgstr "Benutzer anlegen" msgid "Creative Commons" msgstr "Creative Commons" -#: src/misc/coders/Encoders/audio/Opus.js:59 +#: src/misc/coders/Encoders/audio/Opus.js:61 #: src/misc/coders/settings/Audio.js:25 #: src/misc/coders/settings/Audio.js:71 #: src/misc/coders/settings/Audio.js:122 @@ -454,14 +474,17 @@ msgstr "Creative Commons" #: src/misc/coders/settings/Video.js:115 #: src/misc/coders/settings/Video.js:181 #: src/misc/coders/settings/Video.js:220 +#: src/misc/filters/audio/Resample.js:63 +#: src/misc/filters/audio/Resample.js:114 +#: src/misc/filters/audio/Volume.js:58 #: src/views/Edit/Sources/ALSA.js:101 #: src/views/Edit/Sources/AVFoundation.js:120 #: src/views/Edit/Sources/AVFoundation.js:153 -#: src/views/Edit/Sources/V4L.js:96 +#: src/views/Edit/Sources/V4L.js:99 msgid "Custom ..." msgstr "Individuell …" -#: src/views/Settings.js:1288 +#: src/views/Settings.js:1356 msgid "Custom JSON config for datarhei Core." msgstr "Individuelle JSON Konfiguration für den datarhei Core." @@ -478,11 +501,11 @@ msgstr "Individueller Audio-Index" msgid "Custom bitrate (kbit/s)" msgstr "Individuelle Bitrate (kbit/s)" -#: src/views/Playersite.js:687 +#: src/views/Playersite.js:703 msgid "Custom code injection" msgstr "Injektion von Individuellem Code" -#: src/misc/coders/Encoders/audio/Opus.js:85 +#: src/misc/coders/Encoders/audio/Opus.js:87 msgid "Custom delay" msgstr "Individuelle Verzögerung" @@ -503,10 +526,12 @@ msgid "Custom keyframe interval" msgstr "Individuelles Keyframe-Intervall" #: src/misc/coders/settings/Audio.js:98 +#: src/misc/filters/audio/Resample.js:90 msgid "Custom layout" msgstr "Individuelles Aussehen" #: src/misc/coders/settings/Audio.js:149 +#: src/misc/filters/audio/Resample.js:141 msgid "Custom sampling (Hz)" msgstr "Individuelle Abtastung (Hz)" @@ -518,7 +543,7 @@ msgstr "Individuelle Skalierung" msgid "Custom size" msgstr "Individuelle Größe" -#: src/views/Edit/Sources/V4L.js:110 +#: src/views/Edit/Sources/V4L.js:113 msgid "Custom video device" msgstr "Individuelles Videogerät" @@ -536,8 +561,12 @@ msgstr "Daten wurden in die Zwischenablage kopiert" msgid "Death color" msgstr "Death color" +#: src/misc/filters/audio/Volume.js:74 +msgid "Decibels (dB)" +msgstr "Dezibel (dB)" + #: src/misc/EncodingSelect.js:210 -#: src/views/Edit/Wizard/index.js:628 +#: src/views/Edit/Wizard/index.js:643 msgid "Decoder" msgstr "Decoder" @@ -545,13 +574,13 @@ msgstr "Decoder" #: src/views/Edit/Sources/AVFoundation.js:149 #: src/views/Edit/Wizard/Sources/AVFoundation.js:76 #: src/views/Edit/Wizard/Sources/AVFoundation.js:105 -#: src/views/Playersite.js:451 -#: src/views/Playersite.js:526 -#: src/views/Playersite.js:570 +#: src/views/Playersite.js:467 +#: src/views/Playersite.js:542 +#: src/views/Playersite.js:586 msgid "Default" msgstr "Standard" -#: src/misc/coders/Encoders/audio/Opus.js:84 +#: src/misc/coders/Encoders/audio/Opus.js:86 msgid "Delay" msgstr "Verzögerung" @@ -559,15 +588,15 @@ msgstr "Verzögerung" msgid "Delay (ms)" msgstr "Verzögerung (ms)" -#: src/views/Edit/index.js:563 -#: src/views/Edit/index.js:599 -#: src/views/Playersite.js:474 -#: src/views/Publication/Edit.js:574 -#: src/views/Publication/Edit.js:606 +#: src/views/Edit/index.js:617 +#: src/views/Edit/index.js:653 +#: src/views/Playersite.js:490 +#: src/views/Publication/Edit.js:536 +#: src/views/Publication/Edit.js:568 msgid "Delete" msgstr "Löschen" -#: src/views/Publication/Edit.js:611 +#: src/views/Publication/Edit.js:573 msgid "Deleting a publication service cannot be reversed. The publication stops immediately." msgstr "Die Löschung eines Publikationsdienstes kann nicht rückgängig gemacht werden. Die Veröffentlichung wird sofort gestoppt." @@ -582,12 +611,12 @@ msgid "Description" msgstr "Beschreibung" #: src/views/Playersite.js:352 -#: src/views/Playersite.js:509 +#: src/views/Playersite.js:525 msgid "Design" msgstr "Design" #: src/views/Edit/Sources/Framebuffer.js:87 -#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:905 #: src/views/Publication/Services/Framebuffer.js:93 msgid "Device" msgstr "Gerät" @@ -598,7 +627,7 @@ msgstr "Gerät" msgid "Disconnect" msgstr "Trennen" -#: src/views/Edit/index.js:580 +#: src/views/Edit/index.js:634 msgid "Disconnect & Continue" msgstr "Trennen und fortfahren" @@ -607,12 +636,13 @@ msgstr "Trennen und fortfahren" msgid "Disconnecting ..." msgstr "Trennen ..." -#: src/views/Settings.js:1650 +#: src/misc/controls/HLS.js:70 +#: src/views/Settings.js:1720 msgid "Disk" msgstr "Festplatte" -#: src/views/Settings.js:1684 -#: src/views/Settings.js:1692 +#: src/views/Settings.js:1754 +#: src/views/Settings.js:1762 msgid "Disk cache" msgstr "Festplatten Zwischenspeicher" @@ -621,19 +651,19 @@ msgstr "Festplatten Zwischenspeicher" msgid "Disk storage" msgstr "Festplattenspeicher" -#: src/views/Settings.js:2063 +#: src/views/Settings.js:2214 msgid "Do you really want to restart the application now?" msgstr "Möchten Sie die Anwendung wirklich neu starten?" -#: src/views/Edit/index.js:591 +#: src/views/Edit/index.js:645 msgid "Do you want to delete \"{0}\"?" msgstr "Soll \"{0}\" gelöscht werden?" -#: src/views/Publication/Edit.js:598 +#: src/views/Publication/Edit.js:560 msgid "Do you want to delete {title}?" msgstr "Möchten Sie {title} löschen?" -#: src/views/Edit/index.js:572 +#: src/views/Edit/index.js:626 msgid "Do you want to disconnect \"{0}\"?" msgstr "Möchten Sie die Verbindung zu „{0}“ unterbrechen?" @@ -658,7 +688,7 @@ msgstr "Dokumentation" msgid "Dup. frames" msgstr "Duplizierte Frames" -#: src/views/Publication/Player.js:285 +#: src/views/Publication/Player.js:288 msgid "EDIT: Player" msgstr "EDIT: Player" @@ -666,27 +696,41 @@ msgstr "EDIT: Player" msgid "EDIT: Publication Website" msgstr "BEARBEITEN: Publikation Website" -#: src/views/Edit/index.js:391 +#: src/misc/controls/HLS.js:78 +msgid "EXT-X-VERSION" +msgstr "EXT-X-VERSION" + +#: src/views/Edit/index.js:403 msgid "Edit" msgstr "Bearbeiten" -#: src/views/Edit/index.js:417 +#: src/views/Edit/index.js:429 msgid "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." msgstr "Bearbeiten Sie die Audio- und Videoquellen für den Live-Stream. Fügen Sie eine Beschreibung hinzu, und legen Sie die gewünschte Inhaltslizenz fest." -#: src/views/Publication/Edit.js:377 +#: src/views/Publication/Edit.js:384 msgid "Edit: {title}" msgstr "Bearbeiten: {title}" -#: src/views/Publication/Player.js:319 +#: src/views/Publication/Player.js:322 msgid "Embed" msgstr "Einbetten" -#: src/views/Edit/Sources/Network.js:577 +#: src/misc/controls/RTMP.js:48 +#: src/misc/controls/SRT.js:48 +msgid "Enable" +msgstr "Aktivieren" + +#: src/views/Edit/Sources/Network.js:684 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:55 msgid "Enable RTMP server ..." msgstr "RTMP-Server aktivieren …" +#: src/views/Edit/Sources/Network.js:733 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:55 +msgid "Enable SRT server ..." +msgstr "SRT Server aktivieren ..." + #: src/views/Edit/Sources/VirtualAudio.js:162 msgid "Enable a periodic beep every second with this value times the carrier frequency" msgstr "Periodischen Piepton jede Sekunde mit diesem Wert mal der Trägerfrequenz aktivieren" @@ -696,10 +740,15 @@ msgstr "Periodischen Piepton jede Sekunde mit diesem Wert mal der Trägerfrequen msgid "Enable backup stream" msgstr "Backupstream aktivieren" -#: src/views/Publication/Player.js:427 +#: src/views/Publication/Player.js:430 msgid "Enable nerd statistics" msgstr "Nerd-Statistiken einschalten" +#: src/misc/controls/RTMP.js:70 +#: src/misc/controls/SRT.js:70 +msgid "Enable now" +msgstr "Jetzt aktivieren" + #: src/views/Publication/Services/Dummy.js:277 #: src/views/Publication/Services/Facebook.js:138 msgid "Enable primary stream" @@ -709,23 +758,21 @@ msgstr "Primären Stream aktivieren" msgid "Enable snapshots" msgstr "Momentaufnahme aktivieren" -#: src/views/Settings.js:1433 +#: src/views/Settings.js:1503 msgid "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." msgstr "Es wird dringend empfohlen, die Autorisierung zu aktivieren. Andernfalls kann jeder auf diese Instanz zugreifen." -#: src/views/Settings.js:1593 +#: src/views/Settings.js:1663 msgid "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." msgstr "Es wird dringend empfohlen, die Basisauthentifizierung zu aktivieren. Andernfalls könnte jeder Daten in /memfs schreiben." -#: src/views/Edit/Wizard/index.js:634 +#: src/views/Edit/Wizard/index.js:649 msgid "Encoder" msgstr "Encoder" -#: src/views/Edit/Summary.js:66 -#: src/views/Publication/Add.js:374 -#: src/views/Publication/Add.js:466 -#: src/views/Publication/Edit.js:388 -#: src/views/Publication/Edit.js:505 +#: src/views/Edit/Summary.js:95 +#: src/views/Publication/Add.js:441 +#: src/views/Publication/Edit.js:478 msgid "Encoding" msgstr "Kodierung" @@ -743,7 +790,7 @@ msgstr "Einen Namen für den neuen Kanal eingeben." msgid "Enter password" msgstr "Passwort eingeben" -#: src/views/Edit/Sources/Network.js:348 +#: src/views/Edit/Sources/Network.js:414 #: src/views/Edit/Wizard/Sources/Network.js:59 msgid "Enter the address of your network source:" msgstr "Adresse des Netzwerkquelle eintragen:" @@ -752,15 +799,15 @@ msgstr "Adresse des Netzwerkquelle eintragen:" msgid "Enter username" msgstr "Anmeldename eingeben" -#: src/misc/coders/Encoders/video/H264VideoToolbox.js:61 +#: src/misc/coders/Encoders/video/H264VideoToolbox.js:64 msgid "Entropy coder" msgstr "Entropy coder" -#: src/views/Edit/Wizard/index.js:1118 +#: src/views/Edit/Wizard/index.js:1133 #: src/views/Incompatible.js:30 #: src/views/Invalid.js:29 #: src/views/Publication/Process.js:63 -#: src/views/Settings.js:1109 +#: src/views/Settings.js:1176 msgid "Error" msgstr "Fehler" @@ -770,40 +817,40 @@ msgstr "Fehler" msgid "Error while copying data to clipboard" msgstr "Fehler beim Kopieren von Daten in die Zwischenablage" -#: src/views/Main/index.js:324 +#: src/views/Main/index.js:353 #: src/views/Publication/Process.js:64 msgid "Error: {0}" msgstr "Fehler: {0}" -#: src/views/Playersite.js:732 +#: src/views/Playersite.js:748 msgid "Expands the area above the channel list (live chat)." msgstr "Erweitert den Bereich oberhalb der Kanalliste (Live-Chat)." -#: src/views/Playersite.js:752 +#: src/views/Playersite.js:768 msgid "Expands the area under the channel description (comment boxes)." msgstr "Erweitert den Bereich unter der Kanalbeschreibung (Kommentarfelder)." -#: src/views/Settings.js:1199 +#: src/views/Settings.js:1267 msgid "Expert mode" msgstr "Expertenmodus" -#: src/views/Playersite.js:717 +#: src/views/Playersite.js:733 msgid "Extend channel list" msgstr "Kanalliste erweitern" -#: src/views/Playersite.js:737 +#: src/views/Playersite.js:753 msgid "Extend content" msgstr "Inhalt erweitern" -#: src/views/Playersite.js:757 +#: src/views/Playersite.js:773 msgid "Extend footer" msgstr "Fußzeile erweitern" -#: src/views/Playersite.js:697 +#: src/views/Playersite.js:713 msgid "Extend header" msgstr "Header erweitern" -#: src/views/Settings.js:1936 +#: src/views/Settings.js:2087 msgid "FFmpeg" msgstr "FFmpeg" @@ -812,7 +859,7 @@ msgstr "FFmpeg" msgid "FPS" msgstr "FPS" -#: src/views/Publication/Add.js:180 +#: src/views/Publication/Add.js:187 msgid "Failed to create publication service ({0})" msgstr "Publikationsdienst konnte nicht erstellt werden ({0})" @@ -820,12 +867,12 @@ msgstr "Publikationsdienst konnte nicht erstellt werden ({0})" msgid "Failed to create publication website files." msgstr "Die Dateien der Publikations-Website konnten nicht erstellt werden." -#: src/views/Edit/Profile.js:341 -#: src/views/Edit/Profile.js:471 +#: src/views/Edit/Profile.js:354 +#: src/views/Edit/Profile.js:504 msgid "Failed to probe the source. Please check the <0>probe details." msgstr "Prüfen der Quelle ist fehlgeschlagen. <0>Details der Überprüfung ansehen." -#: src/utils/restreamer.js:434 +#: src/utils/restreamer.js:446 msgid "Failed to refresh token: {0}" msgstr "Token konnte nicht aktualisiert werden: {0}" @@ -841,7 +888,7 @@ msgstr "Prozess konnte nicht angehalten werden" msgid "Failed to store player size setting." msgstr "Die Einstellung für die Playergröße konnte nicht gespeichert werden." -#: src/views/Publication/Edit.js:222 +#: src/views/Publication/Edit.js:230 msgid "Failed to store publication service ({0})" msgstr "Publikationsdienst konnte nicht gespeichert werden ({0})" @@ -850,15 +897,27 @@ msgid "Failed to update ingest process ({0})" msgstr "Aktualisierung des Ingest-Prozesses fehlgeschlagen ({0})" #: src/views/Edit/index.js:310 +msgid "Failed to update ingest snapshot process ({0})" +msgstr "Aktualisierung des Vorschaubild-Prozesses fehlgeschlagen ({0})" + +#: src/views/Edit/index.js:316 msgid "Failed to update the player" msgstr "Aktualisierung des Players fehlgeschlagen" -#: src/views/Edit/Wizard/index.js:375 -#: src/views/Edit/Wizard/index.js:838 +#: src/views/Edit/index.js:322 +msgid "Failed to update the playersite" +msgstr "Aktualisierung der Playerseite fehlgeschlagen" + +#: src/views/Edit/Wizard/index.js:390 +#: src/views/Edit/Wizard/index.js:853 msgid "Failed to verify the source. Please check the address." msgstr "Die Quelle konnte nicht verifiziert werden. Bitte Adresse prüfen." -#: src/views/Edit/Profile.js:549 +#: src/views/Edit/Summary.js:101 +msgid "Filter" +msgstr "Filter" + +#: src/views/Edit/Profile.js:592 msgid "Finish" msgstr "Speichern" @@ -866,15 +925,15 @@ msgstr "Speichern" msgid "Flags" msgstr "Flaggen" -#: src/views/Playersite.js:772 +#: src/views/Playersite.js:788 msgid "For Javascripts." msgstr "Für Javascripte." -#: src/views/Playersite.js:712 +#: src/views/Playersite.js:728 msgid "For Stylesheets." msgstr "Für Stylesheets." -#: src/views/Edit/Sources/Network.js:439 +#: src/views/Edit/Sources/Network.js:521 msgid "Force input framerate" msgstr "Bildfrequenz für die Eingabe erzwingen" @@ -891,7 +950,7 @@ msgid "Framebuffer" msgstr "Bildspeicher" #: src/misc/coders/settings/Video.js:135 -#: src/views/Edit/Sources/Network.js:452 +#: src/views/Edit/Sources/Network.js:534 msgid "Framerate" msgstr "Bildfrequenz" @@ -899,7 +958,7 @@ msgstr "Bildfrequenz" msgid "Frequency (Hz)" msgstr "Frequenz (Hz)" -#: src/views/Publication/Services/Core.js:129 +#: src/views/Publication/Services/Core.js:154 #: src/views/Publication/Services/Facebook.js:115 #: src/views/Publication/Services/Facebook.js:133 #: src/views/Publication/Services/Instagram.js:88 @@ -910,13 +969,13 @@ msgstr "Frequenz (Hz)" msgid "GET" msgstr "GET" -#: src/views/Edit/Sources/Network.js:471 -#: src/views/Edit/index.js:400 +#: src/views/Edit/Sources/Network.js:553 #: src/views/Edit/index.js:412 +#: src/views/Edit/index.js:424 #: src/views/Playersite.js:350 #: src/views/Playersite.js:363 -#: src/views/Publication/Add.js:372 -#: src/views/Publication/Edit.js:386 +#: src/views/Publication/Add.js:374 +#: src/views/Publication/Edit.js:393 #: src/views/Publication/Services/DASH.js:211 #: src/views/Publication/Services/HLS.js:200 #: src/views/Publication/Services/Icecast.js:177 @@ -924,62 +983,73 @@ msgstr "GET" #: src/views/Publication/Services/RTMP.js:145 #: src/views/Publication/Services/RTSP.js:169 #: src/views/Publication/Services/SRT.js:177 -#: src/views/Settings.js:1138 -#: src/views/Settings.js:1158 +#: src/views/Settings.js:1205 +#: src/views/Settings.js:1226 msgid "General" msgstr "Allgemein" -#: src/views/Publication/Player.js:410 +#: src/views/Publication/Player.js:413 msgid "Google Analytics ID" msgstr "Google Analytics ID" -#: src/views/Publication/Player.js:420 +#: src/views/Publication/Player.js:423 msgid "Google Analytics Tracker Name" msgstr "Name Google Analytics Tracker" -#: src/views/Edit/index.js:471 -#: src/views/Main/index.js:369 +#: src/views/Main/index.js:403 msgid "HLS" msgstr "HLS" -#: src/views/Settings.js:1510 +#: src/views/Edit/index.js:483 +msgid "HLS output" +msgstr "HLS Ausgabe" + +#: src/views/Edit/Wizard/Sources/InternalHLS.js:73 +msgid "HLS server" +msgstr "HLS-Server" + +#: src/views/Settings.js:1580 msgid "HLS statistic for the In-memory storage" msgstr "HLS-Statistik für den In-Memory-Speicher" -#: src/views/Edit/Sources/Network.js:429 +#: src/views/Edit/Sources/Network.js:511 msgid "HTTP and HTTPS" msgstr "HTTP und HTTPS" -#: src/views/Settings.js:1323 +#: src/views/Settings.js:1391 msgid "HTTP port" msgstr "HTTP Port" -#: src/views/Settings.js:1352 +#: src/views/Settings.js:1420 msgid "HTTPS (SSL/TLS)" msgstr "HTTPS (SSL/TLS)" -#: src/views/Settings.js:1336 +#: src/views/Settings.js:1404 msgid "HTTPS port" msgstr "HTTPS Port" -#: src/views/Edit/Sources/V4L.js:151 +#: src/views/Edit/Sources/V4L.js:154 #: src/views/Edit/Wizard/Sources/V4L.js:140 msgid "Hardware device" msgstr "Hardwaregerät" -#: src/views/Playersite.js:579 +#: src/views/Playersite.js:595 msgid "Header" msgstr "Kopfzeile" -#: src/views/Playersite.js:535 +#: src/views/Playersite.js:551 msgid "Headline" msgstr "Überschrift" +#: src/misc/filters/video/HFlip.js:65 +msgid "Horizontal Flip" +msgstr "Horizontal spiegeln" + #: src/views/Login.js:319 msgid "Hosted Restreamer interface" msgstr "Gehostete Restreamer-Oberfläche" -#: src/views/Settings.js:1258 +#: src/views/Settings.js:1326 msgid "Human readable name on the service." msgstr "Von Menschen lesbarer Name des Dienstes." @@ -987,24 +1057,24 @@ msgstr "Von Menschen lesbarer Name des Dienstes." msgid "IP address" msgstr "IP-Adresse" -#: src/views/Settings.js:2008 +#: src/views/Settings.js:2159 msgid "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." msgstr "Wenn Sie die Ports geändert haben, kann es sein, dass Restreamer Core bereits neu gestartet wurde, aber jetzt auf einem anderen Port verfügbar ist." -#: src/views/Settings.js:2002 +#: src/views/Settings.js:2153 msgid "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." msgstr "Wenn Sie Let’s Encrypt TLS aktiviert haben, kann es einige Zeit dauern, die Zertifikate zu erwerben. Stellen Sie sicher, dass Restreamer Core über Port 80 aus dem Internet erreichbar ist. Bitte überprüfen Sie das Protokoll in der Konsole von Restreamer Core." -#: src/views/Settings.js:1525 +#: src/views/Settings.js:1595 msgid "Ignore IP ranges" msgstr "IP-Bereiche ignorieren" -#: src/views/Playersite.js:624 -#: src/views/Publication/Player.js:366 +#: src/views/Playersite.js:640 +#: src/views/Publication/Player.js:369 msgid "Image URL" msgstr "Bild-URL" -#: src/views/Playersite.js:649 +#: src/views/Playersite.js:665 msgid "Imprint" msgstr "Impressum" @@ -1012,7 +1082,8 @@ msgstr "Impressum" msgid "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." msgstr "Neben dem Player bietet der Restreamer eine komplette Landingpage, mit der Sie Ihren Live-Stream einfach und schnell präsentieren können." -#: src/views/Settings.js:1577 +#: src/misc/controls/HLS.js:67 +#: src/views/Settings.js:1647 msgid "In-memory" msgstr "In-memory" @@ -1021,39 +1092,35 @@ msgstr "In-memory" msgid "In-memory storage" msgstr "In-Memory-Speicher" -#: src/views/Publication/Add.js:269 +#: src/views/Publication/Add.js:273 msgid "Incompatible" msgstr "Inkompatibel" #: src/misc/coders/settings/Audio.js:67 #: src/misc/coders/settings/Audio.js:118 +#: src/misc/filters/audio/Pan.js:47 +#: src/misc/filters/audio/Resample.js:59 +#: src/misc/filters/audio/Resample.js:110 +#: src/misc/filters/audio/Volume.js:46 msgid "Inherit" msgstr "Übernehmen" -#: src/views/Playersite.js:707 +#: src/views/Playersite.js:723 msgid "Inject 1" msgstr "Inject 1" -#: src/views/Playersite.js:727 +#: src/views/Playersite.js:743 msgid "Inject 2" msgstr "Inject 2" -#: src/views/Playersite.js:747 +#: src/views/Playersite.js:763 msgid "Inject 3" msgstr "Inject 3" -#: src/views/Playersite.js:767 +#: src/views/Playersite.js:783 msgid "Inject 4" msgstr "Inject 4" -#: src/views/Edit/Wizard/Sources/InternalHLS.js:75 -msgid "Internal HLS server" -msgstr "Interner HLS-Server" - -#: src/views/Edit/Wizard/Sources/InternalRTMP.js:95 -msgid "Internal RTMP server" -msgstr "Interner RTMP-Server" - #: src/misc/controls/Snapshot.js:50 msgid "Interval (seconds)" msgstr "Intervall (Sekunden)" @@ -1068,28 +1135,29 @@ msgid "Keyframe interval (seconds)" msgstr "Keyframe-Intervall (Sekunden)" #: src/misc/coders/settings/Audio.js:97 +#: src/misc/filters/audio/Resample.js:89 msgid "Layout" msgstr "Layout" -#: src/views/Settings.js:1357 +#: src/views/Settings.js:1425 msgid "Let's Encrypt certification" msgstr "Zertifizierung mit Let’s Encrypt" -#: src/views/Settings.js:1365 +#: src/views/Settings.js:1433 msgid "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." msgstr "Let’s Encrypt erfordert einen oder mehrere öffentliche Domainnamen und einen zugänglichen Port 80/TCP." -#: src/misc/coders/Encoders/video/H264NVENC.js:109 +#: src/misc/coders/Encoders/video/H264NVENC.js:112 msgid "Level" msgstr "Level" -#: src/views/Settings.js:1918 +#: src/views/Settings.js:2069 msgid "Level of system protocol." msgstr "Ebene des Systemprotokolls." -#: src/views/Edit/Wizard/index.js:1061 -#: src/views/Edit/index.js:403 -#: src/views/Edit/index.js:525 +#: src/views/Edit/Wizard/index.js:1076 +#: src/views/Edit/index.js:415 +#: src/views/Edit/index.js:579 msgid "License" msgstr "Lizenz" @@ -1097,28 +1165,28 @@ msgstr "Lizenz" msgid "Life color" msgstr "Life color" -#: src/views/Playersite.js:606 +#: src/views/Playersite.js:622 msgid "Linecolor" msgstr "Linienfarbe" -#: src/views/Playersite.js:544 -#: src/views/Publication/Player.js:396 +#: src/views/Playersite.js:560 +#: src/views/Publication/Player.js:399 msgid "Link" msgstr "Link" -#: src/views/Playersite.js:553 +#: src/views/Playersite.js:569 msgid "Link, mouseover" msgstr "Link, Mouseover" -#: src/views/Settings.js:1533 +#: src/views/Settings.js:1603 msgid "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." msgstr "Liste der IP-Bereiche in CIDR-Notation, z. B. 127.0.0.1/32, die von der Statistik nicht erfasst werden sollen - ein IP-Bereich pro Zeile. Leer lassen, um alle Sitzungen aufzuzeichnen." -#: src/views/Settings.js:1751 +#: src/views/Settings.js:1821 msgid "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." msgstr "Liste der zu cachenden Dateierweiterungen (z. B. \".html\"), eine pro Zeile. Leer lassen, um alle Dateitypen zu cachen." -#: src/misc/controls/HLS.js:74 +#: src/misc/controls/HLS.js:107 msgid "List size (segments)" msgstr "Listengröße (Segmente)" @@ -1142,13 +1210,13 @@ msgstr "Live-Streaming zu Vimeo" msgid "Livesource ID" msgstr "Livesource-ID" -#: src/views/Settings.js:1870 +#: src/views/Settings.js:2021 msgid "Log level" msgstr "Protokollierungsebene" #: src/misc/modals/Process.js:90 -#: src/views/Settings.js:1147 -#: src/views/Settings.js:1846 +#: src/views/Settings.js:1215 +#: src/views/Settings.js:1997 msgid "Logging" msgstr "Protokollieren" @@ -1159,23 +1227,23 @@ msgstr "Protokollieren" msgid "Login" msgstr "Anmelden" -#: src/utils/restreamer.js:263 #: src/utils/restreamer.js:268 -#: src/utils/restreamer.js:297 +#: src/utils/restreamer.js:273 #: src/utils/restreamer.js:302 +#: src/utils/restreamer.js:307 msgid "Login failed: Couldn't load API details" msgstr "Login fehlgeschlagen: Konnte die API-Details nicht laden" -#: src/utils/restreamer.js:254 -#: src/utils/restreamer.js:288 +#: src/utils/restreamer.js:259 +#: src/utils/restreamer.js:293 msgid "Login failed: {0}" msgstr "Login fehlgeschlagen: {0}" -#: src/views/Settings.js:1425 +#: src/views/Settings.js:1493 msgid "Login/JWT authorization" msgstr "Anmeldung/JWT-Autorisierung" -#: src/views/Publication/Player.js:321 +#: src/views/Publication/Player.js:324 msgid "Logo" msgstr "Logo" @@ -1183,24 +1251,28 @@ msgstr "Logo" msgid "Logout" msgstr "Abmelden" +#: src/misc/filters/audio/Loudnorm.js:66 +msgid "Loudness Normalization" +msgstr "Lautheitsnormalisierung" + #: src/Footer.js:208 msgid "MB" msgstr "MB" -#: src/views/Edit/index.js:380 +#: src/views/Edit/index.js:392 msgid "Main Source" msgstr "Hauptquelle" -#: src/views/Main/index.js:260 +#: src/views/Main/index.js:289 #: src/views/Playersite.js:389 msgid "Main channel" msgstr "Hauptkanal" -#: src/views/Publication/Player.js:102 +#: src/views/Publication/Player.js:99 msgid "Main channel not found" msgstr "Hauptkanal nicht gefunden" -#: src/views/Edit/Wizard/index.js:188 +#: src/views/Edit/Wizard/index.js:194 msgid "Main channel saved" msgstr "Hauptkanal gespeichert" @@ -1208,63 +1280,70 @@ msgstr "Hauptkanal gespeichert" msgid "Main page channel (index.html)." msgstr "Kanal auf der Startseite (index.html)" -#: src/views/Publication/Add.js:411 -#: src/views/Publication/Add.js:444 -#: src/views/Publication/Add.js:511 -#: src/views/Publication/Edit.js:419 -#: src/views/Publication/Edit.js:483 -#: src/views/Publication/Edit.js:552 +#: src/views/Publication/TabContent.js:49 msgid "Maintainer:" msgstr "Gepflegt von:" -#: src/views/Settings.js:1710 +#: src/misc/controls/RTMP.js:54 +msgid "Make the channel available as an RTMP stream (experimental)." +msgstr "Macht den Kanal als RTMP-Stream verfügbar (experimentell)." + +#: src/misc/controls/SRT.js:54 +msgid "Make the channel available as an SRT stream (experimental)." +msgstr "Macht den Kanal als SRT-Stream verfügbar (experimentell)." + +#: src/misc/controls/HLS.js:117 +msgid "Master playlist (increases browser/client compatibility)" +msgstr "Master playlist (erhöht Kompatibilität mit Browsern/Klienten)" + +#: src/views/Settings.js:1780 msgid "Maximum allowed cache size, 0 for unlimited." msgstr "Maximal zulässige Cache-Größe, 0 für unbegrenzt." -#: src/views/Settings.js:1632 +#: src/views/Settings.js:1702 msgid "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." msgstr "Maximal erlaubte MB RAM für /memfs, 0 für unbegrenzt." -#: src/views/Settings.js:1676 +#: src/views/Settings.js:1746 msgid "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." msgstr "Maximal erlaubte MB, die von der Festplatte verbraucht werden dürfen. 0 für unbegrenzt." -#: src/views/Settings.js:1394 +#: src/views/Settings.js:1462 msgid "Maximum bandwidth Mbit/s" msgstr "Maximale Bandbreite Mbit/s" -#: src/misc/coders/Encoders/audio/Opus.js:74 +#: src/misc/coders/Encoders/audio/Opus.js:76 msgid "Maximum delay in milliseconds." msgstr "Maximale Latenz (Ms)." -#: src/views/Settings.js:1728 +#: src/views/Settings.js:1798 msgid "Maximum file size (Megabytes)" msgstr "Maximale Dateigröße (MB)" -#: src/views/Settings.js:1736 +#: src/views/Settings.js:1806 msgid "Maximum file size to put in cache." msgstr "Maximale Dateigröße, die in den Cache gestellt wird." -#: src/views/Settings.js:1954 +#: src/views/Settings.js:2105 msgid "Maximum log histroy" msgstr "Maximale Protokollhistorie" -#: src/views/Settings.js:1923 -#: src/views/Settings.js:1941 +#: src/views/Settings.js:2074 +#: src/views/Settings.js:2092 msgid "Maximum log lines" msgstr "Maximale Protokollzeilen" -#: src/views/Settings.js:1624 -#: src/views/Settings.js:1668 -#: src/views/Settings.js:1702 +#: src/views/Settings.js:1694 +#: src/views/Settings.js:1738 +#: src/views/Settings.js:1772 msgid "Maximum size (Megabytes)" msgstr "Maximale Größe (Megabytes)" -#: src/views/Settings.js:1542 +#: src/views/Settings.js:1612 msgid "Maximum viewer idle time (Seconds)" msgstr "Maximale Zuschauer Leerzeit (Sekunden)" -#: src/views/Settings.js:1378 +#: src/views/Settings.js:1446 msgid "Maximum viewers" msgstr "Maximale Anzahl von Zuschauenden" @@ -1272,12 +1351,12 @@ msgstr "Maximale Anzahl von Zuschauenden" msgid "Memory" msgstr "Arbeitsspeicher" -#: src/views/Edit/index.js:402 +#: src/views/Edit/index.js:414 msgid "Meta information" msgstr "Meta-Informationen" -#: src/views/Edit/Wizard/index.js:1006 -#: src/views/Edit/index.js:505 +#: src/views/Edit/Wizard/index.js:1021 +#: src/views/Edit/index.js:559 msgid "Metadata" msgstr "Metadaten" @@ -1299,44 +1378,56 @@ msgstr "Mehr über das Urheberrecht von YouTube <0>hier." msgid "More about licenses here" msgstr "Mehr über die Lizenzen hier" -#: src/views/Settings.js:1227 +#: src/views/Settings.js:1295 msgid "More about the service" msgstr "Mehr über den Service" -#: src/views/Publication/Player.js:438 +#: src/views/Publication/Player.js:441 msgid "Mute" msgstr "Stumm" +#: src/misc/filters/audio/Pan.js:57 +msgid "Mute a channel." +msgstr "Einen Kanal stumm schalten" + +#: src/misc/filters/audio/Pan.js:50 +msgid "Mute left" +msgstr "Links stumm schalten" + +#: src/misc/filters/audio/Pan.js:53 +msgid "Mute right" +msgstr "Rechts stumm schalten" + #: src/misc/ChannelList.js:380 #: src/misc/controls/Metadata.js:76 #: src/misc/controls/Metadata.js:98 -#: src/views/Playersite.js:489 -#: src/views/Settings.js:1250 +#: src/views/Playersite.js:505 +#: src/views/Settings.js:1318 msgid "Name" msgstr "Name" -#: src/views/Playersite.js:494 +#: src/views/Playersite.js:510 msgid "Name for the template. If the name already exists, it will be overwritten." msgstr "Templatename. Wenn der Name existiert, wird er überschrieben." -#: src/views/Settings.js:1142 -#: src/views/Settings.js:1297 +#: src/views/Settings.js:1209 +#: src/views/Settings.js:1365 msgid "Network" msgstr "Netzwerk" -#: src/views/Edit/Sources/Network.js:684 -#: src/views/Edit/Wizard/Sources/Network.js:110 +#: src/views/Edit/Sources/Network.js:840 +#: src/views/Edit/Wizard/Sources/Network.js:123 msgid "Network source" msgstr "Netzwerk-Quelle" -#: src/views/Edit/Wizard/index.js:413 -#: src/views/Edit/Wizard/index.js:652 -#: src/views/Edit/Wizard/index.js:917 -#: src/views/Edit/Wizard/index.js:1029 +#: src/views/Edit/Wizard/index.js:428 +#: src/views/Edit/Wizard/index.js:667 +#: src/views/Edit/Wizard/index.js:932 +#: src/views/Edit/Wizard/index.js:1044 msgid "Next" msgstr "Weiter" -#: src/views/Edit/Profile.js:413 +#: src/views/Edit/Profile.js:436 msgid "Next: Audio" msgstr "Weiter: Audio" @@ -1344,12 +1435,12 @@ msgstr "Weiter: Audio" msgid "Next: Video setup" msgstr "Weiter: Video-Einrichtung" -#: src/views/Edit/Wizard/index.js:1182 +#: src/views/Edit/Wizard/index.js:1197 msgid "No" msgstr "Nein" #: src/views/Edit/Sources/NoAudio.js:45 -#: src/views/Edit/Wizard/index.js:901 +#: src/views/Edit/Wizard/index.js:916 msgid "No audio" msgstr "Kein Audio" @@ -1362,11 +1453,11 @@ msgstr "Kein Audiostream verfügbar" msgid "No input device available" msgstr "Kein Eingabegerät vorhanden" -#: src/views/Edit/Wizard/index.js:373 +#: src/views/Edit/Wizard/index.js:388 msgid "No live stream was detected. Please check the software that sends the stream." msgstr "Es wurde kein Livestream erkannt. Bitte die Software überprüfen, die den Stream sendet." -#: src/views/Edit/Summary.js:28 +#: src/views/Edit/Summary.js:29 msgid "No source selected" msgstr "Keine Quelle ausgewählt" @@ -1378,8 +1469,12 @@ msgstr "Keine Quellen verfügbar" msgid "No suitable encoder found." msgstr "Keine passender Encoder gefunden." -#: src/views/Main/index.js:286 -#: src/views/Publication/Player.js:294 +#: src/misc/FilterSelect.js:106 +msgid "No suitable filter found." +msgstr "Keine passenden Filter gefunden." + +#: src/views/Main/index.js:315 +#: src/views/Publication/Player.js:297 msgid "No video" msgstr "Kein Video" @@ -1387,7 +1482,7 @@ msgstr "Kein Video" msgid "No video stream available" msgstr "Kein Videostream verfügbar" -#: src/views/Settings.js:1243 +#: src/views/Settings.js:1311 msgid "Node ID" msgstr "Knoten-ID" @@ -1396,44 +1491,61 @@ msgid "Noise" msgstr "Rauschen" #: src/views/Edit/Sources/AVFoundation.js:145 -#: src/views/Edit/Summary.js:30 +#: src/views/Edit/Summary.js:31 +#: src/views/Edit/Summary.js:107 #: src/views/Edit/Wizard/Sources/AVFoundation.js:98 msgid "None" msgstr "Keine" #: src/views/Playersite.js:353 -#: src/views/Playersite.js:644 +#: src/views/Playersite.js:660 msgid "Notes" msgstr "Hinweise" -#: src/views/Settings.js:1931 -#: src/views/Settings.js:1949 +#: src/views/Settings.js:2082 +#: src/views/Settings.js:2100 msgid "Number of log lines to keep." msgstr "Anzahl der Protokollzeilen, die aufbewahrt werden sollen." -#: src/views/Settings.js:1962 +#: src/views/Settings.js:2113 msgid "Number of logs to keep for each process." msgstr "Anzahl der Protokolle, die je Prozess aufbewahrt werden sollen." -#: src/views/Playersite.js:813 -#: src/views/Publication/Player.js:466 +#: src/views/Playersite.js:829 +#: src/views/Publication/Player.js:471 msgid "OK" msgstr "OK" -#: src/views/Settings.js:1497 +#: src/views/Settings.js:1567 msgid "One referrer per line, e.g. http://www.example.com" msgstr "Ein Referrer pro Zeile, wie http://www.beispiel.com" -#: src/views/Playersite.js:798 +#: src/views/Playersite.js:814 msgid "Open" msgstr "Öffnen" -#: src/views/Publication/Edit.js:510 +#: src/misc/filters/audio/Pan.js:45 +msgid "Pan" +msgstr "Schwenken" + +#: src/views/Settings.js:1971 +msgid "Passphrase" +msgstr "Passwort" + +#: src/views/Settings.js:1988 +msgid "Passphrase for SRT encryption." +msgstr "Passwort für SRT-Verschlüsselung" + +#: src/views/Settings.js:1980 +msgid "Passphrase must be between 10 and 79 characters long" +msgstr "Das Passwort muss zwischen 10 und 79 Zeichen lang sein." + +#: src/views/Publication/Edit.js:483 msgid "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." msgstr "Passthrough (Kopieren) sollte nur bei Bedarf deaktiviert werden. Jede Kodierung erfordert zusätzliche CPU/GPU-Ressourcen." -#: src/views/Edit/Sources/Network.js:382 -#: src/views/Edit/Wizard/Sources/Network.js:88 +#: src/views/Edit/Sources/Network.js:460 +#: src/views/Edit/Wizard/Sources/Network.js:97 #: src/views/Login.js:282 #: src/views/Publication/Services/Akamai.js:134 #: src/views/Publication/Services/DASH.js:198 @@ -1442,22 +1554,22 @@ msgstr "Passthrough (Kopieren) sollte nur bei Bedarf deaktiviert werden. Jede Ko #: src/views/Publication/Services/RTSP.js:156 #: src/views/Publication/Services/Red5.js:157 #: src/views/Publication/Services/WOWZA.js:178 -#: src/views/Settings.js:1453 -#: src/views/Settings.js:1611 +#: src/views/Settings.js:1523 +#: src/views/Settings.js:1681 msgid "Password" msgstr "Passwort" -#: src/views/Settings.js:1459 -#: src/views/Settings.js:1619 +#: src/views/Settings.js:1529 +#: src/views/Settings.js:1689 msgid "Password for authorization." msgstr "Passwort für die Autorisierung." -#: src/views/Edit/Sources/Network.js:387 -#: src/views/Edit/Wizard/Sources/Network.js:90 +#: src/views/Edit/Sources/Network.js:465 +#: src/views/Edit/Wizard/Sources/Network.js:103 msgid "Password for the device." msgstr "Passwort von dem Gerät." -#: src/views/Settings.js:1555 +#: src/views/Settings.js:1625 msgid "Persist viewer statistics" msgstr "Betrachterstatistiken beibehalten" @@ -1469,25 +1581,25 @@ msgstr "Pixelformat" msgid "Plan: <0>Starter" msgstr "Plan: <0>Starter" -#: src/views/Publication/Add.js:347 +#: src/views/Publication/Add.js:349 msgid "Platforms" msgstr "Plattformen" -#: src/views/Publication/Player.js:323 -#: src/views/Settings.js:1144 -#: src/views/Settings.js:1468 +#: src/views/Publication/Player.js:326 +#: src/views/Settings.js:1211 +#: src/views/Settings.js:1538 msgid "Playback" msgstr "Wiedergabe" -#: src/views/Main/Egress.js:95 +#: src/views/Main/Egress.js:100 msgid "Player" msgstr "Player" -#: src/views/Publication/Player.js:328 +#: src/views/Publication/Player.js:331 msgid "Player URL" msgstr "Player-URL" -#: src/views/Publication/Player.js:257 +#: src/views/Publication/Player.js:254 msgid "Player settings saved" msgstr "Playereinstellungen gespeichert" @@ -1501,20 +1613,26 @@ msgstr "Playerseite" msgid "Playlist" msgstr "Wiedergabeliste" -#: src/views/Main/index.js:329 +#: src/misc/controls/HLS.js:88 +msgid "Playlist version (M3U8). Version 3 has the best browser/client compatibility." +msgstr "Playlist Version (M3U8). Version 3 bietet die grösste Kompatibilität mit Browsern/Klienten." + +#: src/views/Main/index.js:358 msgid "Please check the <0>process log" msgstr "Bitte <0>Prozessprotokoll prüfen" #: src/views/Publication/Services/Akamai.js:29 +#: src/views/Publication/Services/Azure.js:29 #: src/views/Publication/Services/Bitmovin.js:23 #: src/views/Publication/Services/Brightcove.js:23 #: src/views/Publication/Services/CDN77.js:23 -#: src/views/Publication/Services/Core.js:26 +#: src/views/Publication/Services/Core.js:27 #: src/views/Publication/Services/DASH.js:35 #: src/views/Publication/Services/DaCast.js:26 #: src/views/Publication/Services/HLS.js:37 #: src/views/Publication/Services/Icecast.js:29 #: src/views/Publication/Services/Image2.js:33 +#: src/views/Publication/Services/Linkedin.js:24 #: src/views/Publication/Services/Livespotting.js:23 #: src/views/Publication/Services/MPEGTS.js:35 #: src/views/Publication/Services/RTMP.js:32 @@ -1527,37 +1645,42 @@ msgstr "Bitte <0>Prozessprotokoll prüfen" msgid "Please contact the operator of the service and check what happens." msgstr "An den Betreiber des Dienstes wenden und prüfen, was passiert ist." +#: src/views/Publication/Services/Owncast.js:23 +#: src/views/Publication/Services/Telegram.js:14 +msgid "Please get in touch with the operator of the service and check what happens." +msgstr "Bitte kontaktieren Sie den Betreiber des Services." + #: src/views/Playersite.js:122 #: src/views/Playersite.js:197 -#: src/views/Publication/Player.js:159 +#: src/views/Publication/Player.js:156 msgid "Please select a file to upload." msgstr "Datei zum Hochladen auswählen." -#: src/views/Publication/Add.js:471 +#: src/views/Publication/Add.js:446 msgid "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." msgstr "„Passthrough (Kopieren)“ sollte nur deaktiviert werden, wenn es erforderlich ist. Jedes weitere Encoding benötigt zusätzliche CPU/GPU Ressourcen." -#: src/views/Edit/Wizard/index.js:435 -#: src/views/Edit/Wizard/index.js:933 +#: src/views/Edit/Wizard/index.js:450 +#: src/views/Edit/Wizard/index.js:948 msgid "Please wait. Probe stream data ..." msgstr "Bitte warten — der Stream wird geprüft ..." -#: src/views/Edit/Wizard/index.js:1103 +#: src/views/Edit/Wizard/index.js:1118 msgid "Please wait. Setting up the stream ..." msgstr "Bitte warten — einrichten des Streams ..." #: src/views/Publication/Services/Bitmovin.js:92 -#: src/views/Settings.js:1803 +#: src/views/Settings.js:1945 msgid "Port" msgstr "Port" -#: src/views/Publication/Player.js:381 +#: src/views/Publication/Player.js:384 msgid "Position" msgstr "Position" -#: src/misc/coders/Encoders/video/H264NVENC.js:67 -#: src/misc/coders/Encoders/video/X264.js:62 -#: src/misc/coders/Encoders/video/X265.js:62 +#: src/misc/coders/Encoders/video/H264NVENC.js:70 +#: src/misc/coders/Encoders/video/X264.js:72 +#: src/misc/coders/Encoders/video/X265.js:72 msgid "Preset" msgstr "Voreinstellung" @@ -1572,92 +1695,96 @@ msgstr "Primärer Stream-Schlüssel" #: src/views/Edit/Sources/ALSA.js:136 #: src/views/Edit/Sources/AVFoundation.js:201 #: src/views/Edit/Sources/Framebuffer.js:110 -#: src/views/Edit/Sources/Network.js:505 -#: src/views/Edit/Sources/Network.js:552 -#: src/views/Edit/Sources/Network.js:599 -#: src/views/Edit/Sources/Raspicam.js:113 -#: src/views/Edit/Sources/V4L.js:131 +#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:660 +#: src/views/Edit/Sources/Network.js:706 +#: src/views/Edit/Sources/Network.js:755 +#: src/views/Edit/Sources/Raspicam.js:116 +#: src/views/Edit/Sources/V4L.js:134 #: src/views/Edit/Sources/VirtualAudio.js:169 #: src/views/Edit/Sources/VirtualVideo.js:188 msgid "Probe" msgstr "Prüfen" -#: src/views/Edit/index.js:493 -#: src/views/Publication/Add.js:433 -#: src/views/Publication/Edit.js:441 +#: src/views/Edit/index.js:547 +#: src/views/Publication/Add.js:407 +#: src/views/Publication/Edit.js:420 msgid "Process" msgstr "Prozess" -#: src/views/Publication/Add.js:373 -#: src/views/Publication/Edit.js:387 +#: src/views/Publication/Add.js:376 +#: src/views/Publication/Edit.js:395 msgid "Process control" msgstr "Prozesskontrolle" -#: src/views/Publication/Edit.js:471 -msgid "Process debug" -msgstr "Prozess-Fehlerbehebung" - -#: src/views/Main/index.js:413 -#: src/views/Publication/Edit.js:591 +#: src/views/Main/index.js:472 +#: src/views/Publication/Edit.js:553 msgid "Process debug report" msgstr "Prozess-Fehlerbehebungsbericht" -#: src/views/Main/index.js:389 -#: src/views/Main/index.js:405 -#: src/views/Publication/Edit.js:468 -#: src/views/Publication/Edit.js:583 +#: src/views/Main/index.js:448 +#: src/views/Main/index.js:464 +#: src/views/Publication/Edit.js:444 +#: src/views/Publication/Edit.js:545 msgid "Process details" msgstr "Prozess-Details" -#: src/views/Main/index.js:392 +#: src/views/Main/index.js:451 +#: src/views/Publication/Edit.js:447 msgid "Process report" msgstr "Prozess-Bericht" -#: src/views/Edit/index.js:401 -#: src/views/Edit/index.js:463 +#: src/views/Edit/index.js:413 +#: src/views/Edit/index.js:475 msgid "Processing & Control" msgstr "Verarbeitung & Steuerung" -#: src/misc/coders/Encoders/video/H264NVENC.js:92 -#: src/misc/coders/Encoders/video/H264VAAPI.js:82 +#: src/misc/coders/Encoders/video/H264NVENC.js:95 +#: src/misc/coders/Encoders/video/H264VAAPI.js:85 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:85 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:85 #: src/misc/coders/settings/Video.js:142 -#: src/views/Edit/Wizard/index.js:607 +#: src/views/Edit/Wizard/index.js:622 msgid "Profile" msgstr "Profil" -#: src/views/Edit/Sources/Network.js:520 +#: src/views/Edit/Sources/Network.js:623 #: src/views/Publication/Services/Akamai.js:144 #: src/views/Publication/Services/Akamai.js:182 +#: src/views/Publication/Services/Azure.js:89 #: src/views/Publication/Services/Bitmovin.js:86 #: src/views/Publication/Services/Brightcove.js:87 #: src/views/Publication/Services/CDN77.js:90 -#: src/views/Publication/Services/Core.js:91 +#: src/views/Publication/Services/Core.js:106 #: src/views/Publication/Services/DASH.js:186 #: src/views/Publication/Services/DaCast.js:110 #: src/views/Publication/Services/DaCast.js:168 #: src/views/Publication/Services/HLS.js:175 #: src/views/Publication/Services/Icecast.js:154 #: src/views/Publication/Services/Image2.js:120 +#: src/views/Publication/Services/Linkedin.js:84 #: src/views/Publication/Services/MPEGTS.js:154 +#: src/views/Publication/Services/Owncast.js:88 #: src/views/Publication/Services/RTMP.js:122 #: src/views/Publication/Services/RTSP.js:144 #: src/views/Publication/Services/Red5.js:105 #: src/views/Publication/Services/SRT.js:158 +#: src/views/Publication/Services/Telegram.js:79 #: src/views/Publication/Services/UDP.js:124 #: src/views/Publication/Services/WOWZA.js:122 msgid "Protocol" msgstr "Protokoll" -#: src/views/Publication/Add.js:353 +#: src/views/Publication/Add.js:355 msgid "Protocols" msgstr "Protokolle" -#: src/views/Settings.js:1307 +#: src/views/Settings.js:1375 msgid "Public domain/s" msgstr "Öffentliceh Domain/s" -#: src/views/Publication/Edit.js:113 -#: src/views/Publication/Edit.js:123 +#: src/views/Publication/Edit.js:107 +#: src/views/Publication/Edit.js:117 msgid "Publication service not found" msgstr "Publikationsdienst nicht gefunden" @@ -1669,16 +1796,18 @@ msgstr "Einstellungen der Publication Webseite gespeichert" msgid "Publications" msgstr "Publikationen" -#: src/views/Edit/Sources/Network.js:657 +#: src/views/Edit/Sources/Network.js:813 msgid "Pull Mode" msgstr "Abholmodus" -#: src/views/Edit/Sources/Network.js:656 +#: src/views/Edit/Sources/Network.js:812 msgid "Pull or recieve the data:" msgstr "Daten abholen oder empfangen:" #: src/misc/Progress.js:90 -#: src/misc/coders/Encoders/video/H264VAAPI.js:137 +#: src/misc/coders/Encoders/video/H264VAAPI.js:140 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:140 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:140 msgid "Quality" msgstr "Qualität" @@ -1686,47 +1815,67 @@ msgstr "Qualität" msgid "RGB test pattern" msgstr "RGB-Testbild" -#: src/views/Settings.js:1824 +#: src/views/Main/index.js:412 +#: src/views/Settings.js:1213 +#: src/views/Settings.js:1830 +msgid "RTMP" +msgstr "RTMP" + +#: src/views/Settings.js:1871 +msgid "RTMP Port" +msgstr "RTMP Port" + +#: src/views/Settings.js:1905 msgid "RTMP app for publishing." msgstr "RTMP-App für die Veröffentlichung." -#: src/views/Settings.js:1765 +#: src/views/Edit/index.js:498 +msgid "RTMP output" +msgstr "RTMP Ausgabe" + +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:93 +#: src/views/Settings.js:1835 msgid "RTMP server" msgstr "RTMP-Server" -#: src/views/Edit/Sources/Network.js:572 +#: src/views/Edit/Sources/Network.js:679 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:50 msgid "RTMP server is not enabled" msgstr "RTMP-Server ist nicht aktiviert" -#: src/views/Settings.js:1811 +#: src/views/Settings.js:1879 msgid "RTMP server listen address." -msgstr "RTMP-Server Lauschadresse." +msgstr "RTMP-Server Zugriffsadresse." -#: src/views/Settings.js:1837 +#: src/views/Settings.js:1918 msgid "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" msgstr "RTMP-Token für die Veröffentlichung und Wiedergabe. Das Token ist der Wert des URL-Abfrageparameters „token“." -#: src/views/Settings.js:1146 -#: src/views/Settings.js:1760 -msgid "RTMP/S" -msgstr "RTMP/S" +#: src/views/Settings.js:1884 +msgid "RTMPS Port" +msgstr "RTMPS Port" -#: src/views/Settings.js:1772 +#: src/views/Settings.js:1843 msgid "RTMPS server" msgstr "RTMPS-Server" -#: src/views/Edit/Sources/Network.js:405 +#: src/views/Settings.js:1892 +msgid "RTMPS server listen address." +msgstr "RTMPS-Server Zugriffsadresse" + +#: src/views/Edit/Sources/Network.js:483 msgid "RTSP" msgstr "RTSP" -#: src/views/Edit/Sources/Raspicam.js:132 +#: src/views/Edit/Sources/Raspicam.js:135 #: src/views/Edit/Wizard/Sources/Raspicam.js:117 msgid "Raspberry Pi camera" msgstr "Raspberry Pi Kamera" -#: src/misc/coders/Encoders/video/H264NVENC.js:144 -#: src/misc/coders/Encoders/video/H264VAAPI.js:63 +#: src/misc/coders/Encoders/video/H264NVENC.js:147 +#: src/misc/coders/Encoders/video/H264VAAPI.js:66 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:66 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:66 msgid "Rate control" msgstr "Ratenkontrolle" @@ -1734,11 +1883,11 @@ msgstr "Ratenkontrolle" msgid "Ratio" msgstr "Verhältnis" -#: src/views/Edit/Sources/Network.js:434 +#: src/views/Edit/Sources/Network.js:516 msgid "Read input at native speed" msgstr "Eingabe mit nativer Geschwindigkeit lesen" -#: src/views/Edit/Sources/Network.js:658 +#: src/views/Edit/Sources/Network.js:814 msgid "Receive Mode" msgstr "Empfangsmodus" @@ -1752,13 +1901,13 @@ msgstr "Wiederverbinden" msgid "Reconnect delay (seconds)" msgstr "Verzögerung beim Wiederherstellen der Verbindung (Sekunden)" -#: src/views/Main/index.js:340 +#: src/views/Main/index.js:369 #: src/views/Publication/Process.js:68 #: src/views/Publication/Process.js:81 msgid "Reconnecting in {0}s" msgstr "Wiederverbinden in {0}s" -#: src/views/Settings.js:1999 +#: src/views/Settings.js:2150 msgid "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." msgstr "Die Wiederherstellung der Verbindung zum Restreamer Core ist in den letzten {RETRIES} Sekunden fehlgeschlagen." @@ -1768,7 +1917,7 @@ msgstr "Die Wiederherstellung der Verbindung zu Restreamer Core ist fehlgeschlag #: src/views/Edit/Sources/ALSA.js:122 #: src/views/Edit/Sources/AVFoundation.js:181 -#: src/views/Edit/Sources/V4L.js:117 +#: src/views/Edit/Sources/V4L.js:120 #: src/views/Edit/Wizard/Sources/AVFoundation.js:135 #: src/views/Edit/Wizard/Sources/V4L.js:120 msgid "Refresh" @@ -1782,72 +1931,105 @@ msgid "Region" msgstr "Region" #: src/views/Password.js:159 -#: src/views/Settings.js:2019 +#: src/views/Settings.js:2170 msgid "Reload" msgstr "Erneut laden" -#: src/views/Settings.js:1637 +#: src/views/Settings.js:1707 msgid "Remove the oldest entries if the /memfs is full" msgstr "Älteste Einträge entfernen, wenn das /memfs voll ist" -#: src/views/Settings.js:1784 +#: src/views/Settings.js:1852 msgid "Requires activation" msgstr "Aktivierung erforderlich" -#: src/views/Settings.js:1206 -#: src/views/Settings.js:2036 -#: src/views/Settings.js:2049 -#: src/views/Settings.js:2058 +#: src/views/Settings.js:1274 +#: src/views/Settings.js:2187 +#: src/views/Settings.js:2200 +#: src/views/Settings.js:2209 msgid "Restart" msgstr "Neustart" -#: src/views/Settings.js:2027 +#: src/views/Settings.js:2178 msgid "Restart required" msgstr "Neustart erforderlich" #: src/views/Password.js:136 -#: src/views/Settings.js:1987 +#: src/views/Settings.js:2138 msgid "Restarting" msgstr "Neustart" #: src/views/Password.js:141 -#: src/views/Settings.js:1992 +#: src/views/Settings.js:2143 msgid "Restarting Restreamer Core ..." msgstr "Neustart von Restreamer Core …" -#: src/views/Settings.js:1015 +#: src/views/Settings.js:1082 msgid "Restarting the application failed." msgstr "Neustart der Anwendung ist fehlgeschlagen." -#: src/views/Settings.js:1234 +#: src/views/Settings.js:1302 msgid "Restreamer Service" msgstr "Restreamer Service" -#: src/views/Main/index.js:239 +#: src/views/Main/index.js:267 msgid "Retrieving stream data ..." msgstr "Abrufen von Streamdaten ..." -#: src/views/Edit/Wizard/index.js:1128 +#: src/views/Edit/Wizard/index.js:1143 #: src/views/Invalid.js:43 -#: src/views/Settings.js:1116 +#: src/views/Settings.js:1183 msgid "Retry" msgstr "Wiederholen" +#: src/misc/filters/video/Transpose.js:46 +msgid "Rotate" +msgstr "Rotieren" + #: src/views/Edit/Sources/VirtualVideo.js:155 msgid "Rule" msgstr "Regel" +#: src/views/Main/index.js:422 +#: src/views/Settings.js:1214 +#: src/views/Settings.js:1927 +msgid "SRT" +msgstr "SRT" + +#: src/views/Edit/index.js:517 +msgid "SRT output" +msgstr "SRT Ausgabe" + +#: src/views/Edit/Wizard/Sources/InternalSRT.js:93 +#: src/views/Settings.js:1932 +msgid "SRT server" +msgstr "SRT Server" + +#: src/views/Edit/Sources/Network.js:728 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:50 +msgid "SRT server is not enabled" +msgstr "Der SRT Server ist nicht aktiviert" + +#: src/views/Settings.js:1953 +msgid "SRT server listen address." +msgstr "SRT Zugriffsadresse" + +#: src/views/Settings.js:1966 +msgid "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" +msgstr "SRT-Token für die Veröffentlichung und Wiedergabe. Das Token ist der Wert des streamid-Parameters „token“." + #: src/misc/coders/settings/Audio.js:148 +#: src/misc/filters/audio/Resample.js:140 msgid "Sampling" msgstr "Sampling" -#: src/views/Edit/Wizard/index.js:1087 -#: src/views/Edit/index.js:560 -#: src/views/Playersite.js:788 -#: src/views/Publication/Add.js:534 -#: src/views/Publication/Edit.js:571 -#: src/views/Publication/Player.js:452 -#: src/views/Settings.js:1977 +#: src/views/Edit/Wizard/index.js:1102 +#: src/views/Edit/index.js:614 +#: src/views/Playersite.js:804 +#: src/views/Publication/Add.js:498 +#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Player.js:457 +#: src/views/Settings.js:2128 msgid "Save" msgstr "Speichern" @@ -1855,7 +2037,7 @@ msgstr "Speichern" msgid "Scale" msgstr "Skalierung" -#: src/views/Settings.js:1723 +#: src/views/Settings.js:1793 msgid "Seconds to keep files in cache." msgstr "Sekunden, um Dateien im Cache zu halten." @@ -1871,24 +2053,28 @@ msgstr "Sekunden, bis ein hängender Prozess beendet wird." msgid "Seconds until the snapshot/thumbnail of the video source is updated." msgstr "Sekunden, bis ein Vorschaubild (JPEG) der Videoquelle aktualisiert wird." -#: src/views/Settings.js:1473 +#: src/views/Settings.js:1543 msgid "Security" msgstr "Sicherheit" -#: src/views/Publication/Services/Core.js:122 +#: src/views/Publication/Services/Core.js:145 +msgid "Security passphrase" +msgstr "Sicherheits-Passwort" + +#: src/views/Publication/Services/Core.js:138 #: src/views/Publication/Services/Livespotting.js:103 msgid "Security token" msgstr "Sicherheit Token" -#: src/views/Publication/Player.js:342 +#: src/views/Publication/Player.js:345 msgid "Seekbar color" msgstr "Seekbar Farbe" -#: src/misc/controls/HLS.js:62 +#: src/misc/controls/HLS.js:95 msgid "Segment length (seconds)" msgstr "Segmentlänge (Sek)" -#: src/misc/controls/HLS.js:67 +#: src/misc/controls/HLS.js:100 msgid "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." msgstr "Das Segment wird nach Ablauf dieser Zeit auf dem folgenden Keyframe geschnitten. 2 wird empfohlen." @@ -1897,11 +2083,16 @@ msgstr "Das Segment wird nach Ablauf dieser Zeit auf dem folgenden Keyframe gesc msgid "Segmentation" msgstr "Segmentierung" +#: src/views/Publication/Add.js:429 +#: src/views/Publication/Edit.js:470 +msgid "Select RTMP or SRT (if enabled) for less latency." +msgstr "Benutze RTMP oder SRT (falls aktiviert) für eine geringere Latenz." + #: src/views/Edit/Sources/ALSA.js:108 #: src/views/Edit/Sources/AVFoundation.js:172 #: src/views/Edit/Sources/Framebuffer.js:99 -#: src/views/Edit/Sources/Raspicam.js:96 -#: src/views/Edit/Sources/V4L.js:103 +#: src/views/Edit/Sources/Raspicam.js:99 +#: src/views/Edit/Sources/V4L.js:106 #: src/views/Edit/Wizard/Sources/AVFoundation.js:120 #: src/views/Edit/Wizard/Sources/Raspicam.js:95 #: src/views/Edit/Wizard/Sources/V4L.js:114 @@ -1920,7 +2111,7 @@ msgstr "Auswahl Quelle ..." msgid "Select video source:" msgstr "Videoquelle auswählen:" -#: src/views/Edit/Wizard/index.js:268 +#: src/views/Edit/Wizard/index.js:283 msgid "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." msgstr "Wählen Sie aus, ob Sie den Stream von einer <0>Netzwerkquelle (z. B. einer Netzwerkkamera) oder dem <1>internen RTMP-Server (z. B. OBS-Streams an den Restreamer) beziehen." @@ -1928,7 +2119,11 @@ msgstr "Wählen Sie aus, ob Sie den Stream von einer <0>Netzwerkquelle (z. B msgid "Select your encoding setting:" msgstr "Einstellungen für die Encodierung:" -#: src/views/Playersite.js:588 +#: src/misc/FilterSelect.js:121 +msgid "Select your filter settings (optional):" +msgstr "Filtereinstellungen auswählen (optional):" + +#: src/views/Playersite.js:604 msgid "Selected" msgstr "Ausgewählt" @@ -1936,18 +2131,20 @@ msgstr "Ausgewählt" msgid "Selected channel" msgstr "Auswahl" -#: src/views/Playersite.js:449 +#: src/views/Playersite.js:465 msgid "Selection" msgstr "Auswahl" -#: src/views/Settings.js:1190 +#: src/views/Settings.js:1258 msgid "Send anonymous metrics (helps us for future development)" msgstr "Sende anonyme Anwendungsdaten (Hilft den Restreamer kontinuierlich zu verbessern)" -#: src/views/Edit/Sources/Network.js:542 -#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:650 +#: src/views/Edit/Sources/Network.js:696 +#: src/views/Edit/Sources/Network.js:745 #: src/views/Edit/Wizard/Sources/InternalHLS.js:48 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:68 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:68 msgid "Send stream to this address:" msgstr "Sende den Stream an diese Adresse:" @@ -1959,19 +2156,24 @@ msgstr "Sendet das Video zum Bildspeicher" msgid "Server" msgstr "Server" +#: src/views/Publication/Services/Owncast.js:100 +#: src/views/Publication/Services/Telegram.js:91 +msgid "Server URL" +msgstr "Server URL" + #: src/Header.js:257 #: src/views/Login.js:246 -#: src/views/Settings.js:1140 -#: src/views/Settings.js:1220 +#: src/views/Settings.js:1207 +#: src/views/Settings.js:1288 msgid "Service" msgstr "Service" -#: src/views/Publication/Add.js:392 +#: src/views/Publication/Add.js:387 #: src/views/Publication/Edit.js:406 msgid "Service name" msgstr "Name des Dienstes" -#: src/views/Settings.js:1271 +#: src/views/Settings.js:1339 msgid "Service token for monitoring." msgstr "Servicetoken für die Überwachung." @@ -1979,35 +2181,35 @@ msgstr "Servicetoken für die Überwachung." msgid "Sessions" msgstr "Zuschauer" -#: src/views/Settings.js:1402 +#: src/views/Settings.js:1470 msgid "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Legt eine Begrenzung der Bandbreite in Mbit/s für die ausgehende HLS-Datenübertragung fest. Alle Dienste, wie RTMP und ausgehende Prozesse, werden in die Berechnung einbezogen. Wenn die Bandbreite überschritten wird, erhalten HLS-Zuschauende den HTTP-Statuscode 509 (Bandwidth Limit Exceeded). 0 ist unbegrenzt." -#: src/views/Settings.js:1386 +#: src/views/Settings.js:1454 msgid "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Legt ein Limit für die Zuschauenden in der HLS-Sitzungen fest. Wenn das Limit überschritten wird, erhalten HLS-Zuschauende den HTTP-Statuscode 509 (Bandbreitenlimit überschritten). 0 ist unbegrenzt." -#: src/views/Settings.js:1225 +#: src/views/Settings.js:1293 msgid "Setting for connection to the service." msgstr "Einstellung für die Anbindung an den Service." -#: src/views/Settings.js:1126 +#: src/views/Settings.js:1193 msgid "Settings" msgstr "Einstellungen" -#: src/views/Settings.js:1128 +#: src/views/Settings.js:1195 msgid "Settings (expert mode)" msgstr "Einstellungen (Experten-Modus)" -#: src/views/Settings.js:1653 +#: src/views/Settings.js:1723 msgid "Settings for /data path. The access is protected by" msgstr "Eintellungen für den /data Pfad. Der Zugriff wird geschützt durch" -#: src/views/Settings.js:1580 +#: src/views/Settings.js:1650 msgid "Settings for /memfs path." msgstr "Einstellung für den /memfs Pfad." -#: src/views/Settings.js:958 +#: src/views/Settings.js:1025 msgid "Settings saved. All changes will be applied after restarting the application." msgstr "Einstellungen gespeichert. Die Änderungen werden nach einem Neustart der Anwendungen übernommen." @@ -2015,7 +2217,7 @@ msgstr "Einstellungen gespeichert. Die Änderungen werden nach einem Neustart de msgid "Share button" msgstr "Share-Button" -#: src/views/Playersite.js:431 +#: src/views/Playersite.js:447 msgid "Shows a reference to the project." msgstr "Zeigt einen Hinweis auf das Projekt." @@ -2027,7 +2229,7 @@ msgstr "Anmelden (Kostenlos)" msgid "Silence" msgstr "Stille" -#: src/views/Edit/Wizard/index.js:898 +#: src/views/Edit/Wizard/index.js:913 msgid "Silence Audio" msgstr "Stilles Audio" @@ -2043,8 +2245,8 @@ msgstr "Seitenname" msgid "Size" msgstr "Grösse" -#: src/views/Edit/index.js:482 -#: src/views/Main/index.js:372 +#: src/views/Edit/index.js:536 +#: src/views/Main/index.js:431 msgid "Snapshot" msgstr "Vorschaubild" @@ -2052,19 +2254,29 @@ msgstr "Vorschaubild" msgid "Social-login (OAuth2, 2FA)" msgstr "Social-login (OAuth2, 2FA)" -#: src/views/Edit/Sources/Network.js:418 +#: src/views/Edit/Sources/Network.js:500 msgid "Socket timeout (microseconds)" msgstr "Socket-Zeitüberschreitung (Mikrosekunden)" -#: src/views/Publication/Add.js:350 +#: src/views/Publication/Add.js:352 msgid "Software" msgstr "Software" +#: src/misc/controls/Source.js:74 #: src/views/Edit/Sources/VirtualAudio.js:88 #: src/views/Edit/Sources/VirtualVideo.js:112 +#: src/views/Publication/Add.js:424 +#: src/views/Publication/Edit.js:465 msgid "Source" msgstr "Quelle" +#: src/views/Publication/Add.js:375 +#: src/views/Publication/Add.js:419 +#: src/views/Publication/Edit.js:394 +#: src/views/Publication/Edit.js:460 +msgid "Source & Encoding" +msgstr "Quelle & Encoding" + #: src/misc/Progress.js:103 msgid "Speed" msgstr "Geschwindigkeit" @@ -2073,24 +2285,25 @@ msgstr "Geschwindigkeit" msgid "Stale timeout (seconds)" msgstr "Zeitüberschreitung (Sekunden)" -#: src/views/Publication/Player.js:322 -#: src/views/Settings.js:1505 +#: src/views/Publication/Player.js:325 +#: src/views/Settings.js:1575 msgid "Statistics" msgstr "Statistiken" -#: src/views/Settings.js:1145 -#: src/views/Settings.js:1572 +#: src/misc/controls/HLS.js:65 +#: src/views/Settings.js:1212 +#: src/views/Settings.js:1642 msgid "Storage" msgstr "Speicherplatz" -#: src/views/Settings.js:1563 +#: src/views/Settings.js:1633 msgid "Stores the viewer statistics to the disk." msgstr "Speichert die Zuschauerstatistik auf der Festplatte." #: src/views/Edit/StreamSelect.js:30 #: src/views/Edit/StreamSelect.js:36 #: src/views/Edit/StreamSelect.js:81 -#: src/views/Edit/Wizard/index.js:878 +#: src/views/Edit/Wizard/index.js:893 msgid "Stream" msgstr "Stream" @@ -2103,7 +2316,9 @@ msgstr "Stream-URL" #: src/views/Publication/Services/DaCast.js:153 #: src/views/Publication/Services/Dummy.js:274 #: src/views/Publication/Services/Instagram.js:84 +#: src/views/Publication/Services/Owncast.js:110 #: src/views/Publication/Services/Restream.js:116 +#: src/views/Publication/Services/Telegram.js:101 #: src/views/Publication/Services/Twitch.js:129 #: src/views/Publication/Services/Twitter.js:175 #: src/views/Publication/Services/Vimeo.js:73 @@ -2112,7 +2327,7 @@ msgid "Stream key" msgstr "Stream-Schlüssel" #: src/views/Publication/Services/Brightcove.js:101 -#: src/views/Publication/Services/Core.js:113 +#: src/views/Publication/Services/Core.js:131 #: src/views/Publication/Services/Red5.js:136 #: src/views/Publication/Services/WOWZA.js:158 msgid "Stream name" @@ -2122,31 +2337,35 @@ msgstr "Streamname" msgid "Stream names" msgstr "Streamnamen" -#: src/views/Playersite.js:425 +#: src/misc/controls/Source.js:78 +msgid "Stream source for publication service (experimental)." +msgstr "Streamquelle für den Publikationdienst (experimentell)." + +#: src/views/Playersite.js:441 msgid "Support datarhei Restreamer" msgstr "Unterstütze datarhei Restreamer" -#: src/views/Edit/Sources/Network.js:361 +#: src/views/Edit/Sources/Network.js:427 #: src/views/Edit/Wizard/Sources/Network.js:72 msgid "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." msgstr "Unterstützt HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT und mehr." #: src/Footer.js:184 #: src/Header.js:275 -#: src/views/Settings.js:1851 +#: src/views/Settings.js:2002 msgid "System" msgstr "System" #: src/views/Playersite.js:351 -#: src/views/Playersite.js:440 +#: src/views/Playersite.js:456 msgid "Template" msgstr "Vorlage" -#: src/views/Playersite.js:462 +#: src/views/Playersite.js:478 msgid "Template to be used for creating the publication website. The delete button removes the selection from the system." msgstr "Vorlage, die für die Erstellung der Publikations-Website verwendet werden soll. Mit der Schaltfläche „Löschen“ wird die Auswahl aus dem System entfernt." -#: src/views/Playersite.js:666 +#: src/views/Playersite.js:682 msgid "Terms" msgstr "Bedingungen" @@ -2158,18 +2377,30 @@ msgstr "Testbild" msgid "Test pattern (extended)" msgstr "Testbild (erweitert)" -#: src/views/Playersite.js:519 +#: src/views/Playersite.js:535 msgid "Text colors" msgstr "Textfarben" +#: src/misc/controls/RTMP.js:61 +msgid "The RTMP output requires the RTMP Server." +msgstr "Die RTMP Ausgabe erfordert den RTMP-Server." + +#: src/misc/controls/SRT.js:61 +msgid "The SRT output requires the SRT Server." +msgstr "Die SRT Ausgabe erfordert den SRT-Server." + #: src/views/Edit/Sources/VirtualAudio.js:131 msgid "The amplitude (0.0 - 1.0) of the generated audio stream" msgstr "Die Amplitude (0,0 - 1,0) des erzeugten Audiostreams" -#: src/views/Settings.js:1210 +#: src/views/Settings.js:1278 msgid "The application is using an older version of the settings." msgstr "Die Applikation verwendet eine ältere Version der Einstellungen." +#: src/views/Edit/Sources/Network.js:611 +msgid "The available FFmpeg binary doesn't support any of the required protocols." +msgstr "Die verfügbare FFmpeg-Version unterstützt keines der erforderlichen Protokolle." + #: src/misc/coders/settings/Audio.js:40 msgid "The bitrate of the audio stream." msgstr "Die Bitrate des Audiostreams." @@ -2178,15 +2409,15 @@ msgstr "Die Bitrate des Audiostreams." msgid "The carrier frequency" msgstr "Trägerfrequenz" -#: src/views/Edit/index.js:352 +#: src/views/Edit/index.js:364 msgid "The channel \"{0}\" could not be deleted" msgstr "Der Kanal \"{0}\\“ konnte nicht gelöscht werden" -#: src/views/Edit/index.js:361 +#: src/views/Edit/index.js:373 msgid "The channel \"{0}\" has been deleted" msgstr "Der Kanal \"{0}\\“ wurde gelöscht" -#: src/views/Edit/index.js:604 +#: src/views/Edit/index.js:658 msgid "The deletion of this channel can not be recovered. All publications of this channel will be removed." msgstr "Die Löschung dieses Kanals kann nicht rückgängig gemacht werden. Alle Veröffentlichungen dieses Kanals werden entfernt." @@ -2196,10 +2427,11 @@ msgid "The input profile is not complete. Please define a video and audio source msgstr "Unvollständiges Eingangsprofil. Video- und Audioquelle definieren." #: src/misc/coders/settings/Audio.js:86 +#: src/misc/filters/audio/Resample.js:78 msgid "The layout of the audio stream." msgstr "Anordnung des Audiostreams." -#: src/misc/controls/HLS.js:79 +#: src/misc/controls/HLS.js:112 msgid "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." msgstr "Die maximale Anzahl von Wiedergabelistensegmenten. 0 enthält alle Segmente. 6 wird empfohlen." @@ -2211,83 +2443,84 @@ msgstr "Audio-Rauschfarbe" msgid "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." msgstr "Die Person, die ein Werk mit dieser Urkunde verbunden hat, hat das Werk der Allgemeinheit gewidmet, indem sie auf alle ihre Rechte an dem Werk weltweit nach dem Urheberrecht, einschließlich aller verwandten und benachbarten Rechte, verzichtet, soweit dies gesetzlich zulässig ist. Sie können das Werk vervielfältigen, verändern, verbreiten und aufführen, auch für kommerzielle Zwecke, alles ohne um Erlaubnis zu fragen." -#: src/views/Settings.js:1315 +#: src/views/Settings.js:1383 msgid "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." msgstr "Der öffentlich erreichbare Domänenname des Hosts, auf dem der Restreamer läuft. Trennen Sie mehrere Domänennamen durch ein Komma." -#: src/views/Publication/Edit.js:270 +#: src/views/Publication/Edit.js:278 msgid "The publication service \"{0}\" could not be deleted" msgstr "Der Publikationsdienst \"{0}\" konnte nicht gelöscht werden" -#: src/views/Publication/Add.js:188 +#: src/views/Publication/Add.js:195 msgid "The publication service \"{0}\" has been created" msgstr "Der Publikationsdienst \"{0}\" wurde erstellt" -#: src/views/Publication/Edit.js:276 +#: src/views/Publication/Edit.js:284 msgid "The publication service \"{0}\" has been deleted" msgstr "Der Publikationsdienst wurde \"{0}\" gelöscht" -#: src/views/Publication/Add.js:186 +#: src/views/Publication/Add.js:193 msgid "The publication service has been created" msgstr "Der Publikationsdienst wurde erstellt" #: src/misc/coders/settings/Audio.js:137 +#: src/misc/filters/audio/Resample.js:129 msgid "The sample rate of the audio stream." msgstr "Abtastrate des Audiostreams." #: src/views/Playersite.js:152 #: src/views/Playersite.js:227 -#: src/views/Publication/Player.js:189 +#: src/views/Publication/Player.js:186 msgid "The selected file is too big ({0} bytes). Only {1} bytes are allowed." msgstr "Die ausgewählte Datei ist zu groß ({0} Bytes). Es sind nur {1} Bytes erlaubt." #: src/views/Playersite.js:141 #: src/views/Playersite.js:216 -#: src/views/Publication/Player.js:178 +#: src/views/Publication/Player.js:175 msgid "The selected file type ({0}) is not allowed. Allowed file types are {types}" msgstr "Der ausgewählte Dateityp ({0}) ist nich erlaubt. Erlaubte Dateitypen sind {types}" -#: src/views/Publication/Edit.js:230 +#: src/views/Publication/Edit.js:238 msgid "The settings for \"{0}\" have been saved" msgstr "Die Einstellungen für \"{0}\" wurden gespeichert" -#: src/views/Edit/Wizard/index.js:846 +#: src/views/Edit/Wizard/index.js:861 msgid "The source doesn't provide any audio streams." msgstr "Die Quelle stellt keine Audiostreams zur Verfügung." -#: src/views/Edit/Profile.js:487 +#: src/views/Edit/Profile.js:520 msgid "The source doesn't provide any audio streams. Please check the <0>probe details." msgstr "Die Quelle stellt keine Audiostreams zur Verfügung. Bitte die <0>Details der Überprüfung ansehen." -#: src/views/Edit/Wizard/index.js:854 +#: src/views/Edit/Wizard/index.js:869 msgid "The source doesn't provide any compatible audio streams." msgstr "Die Quelle stellt keine kompatiblen Audiostreams zur Verfügung." -#: src/views/Edit/Wizard/index.js:392 +#: src/views/Edit/Wizard/index.js:407 msgid "The source doesn't provide any compatible video streams. Please check the <0>requirements." msgstr "Die Quelle stellt keine kompatiblen Videostreams zur Verfügung. Bitte die <0>Anforderungen prüfen." -#: src/views/Edit/Profile.js:357 +#: src/views/Edit/Profile.js:370 msgid "The source doesn't provide any video streams. Please check the <0>probe details." msgstr "Die Quelle stellt keine Videostreams zur Verfügung. Bitte die <0>Details der Überprüfung ansehen." -#: src/views/Edit/Wizard/index.js:384 +#: src/views/Edit/Wizard/index.js:399 msgid "The source doesn't provide any video streams. Please check the device." msgstr "Die Quelle stellt keine Videostreams zur Verfügung. Bitte die Quelle prüfen." -#: src/views/Edit/Wizard/index.js:865 +#: src/views/Edit/Wizard/index.js:880 msgid "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." msgstr "Die Videoquelle stellt keinen kompatiblen Audiokanal zur Verfügung. <0>Silence Audio wird empfohlen. Dienste wie z.B. YouTube, Facebook & Co. benötigen einen Audiokanal." -#: src/views/Edit/Wizard/index.js:603 +#: src/views/Edit/Wizard/index.js:618 msgid "The video source is compatible. Select the desired resolution:" msgstr "Die Videoquelle ist kompatibel. Gewünschte Auflösung auswählen:" -#: src/views/Settings.js:1182 +#: src/views/Settings.js:1250 msgid "There are updates available. Here you get more information." msgstr "Es sind Updates verfügbar. Hier erhalten Sie weitere Informationen." -#: src/views/Settings.js:911 +#: src/views/Settings.js:978 msgid "There was a problem storing the settings. Settings not saved." msgstr "Es gab ein Problem beim Speichern der Einstellungen. Einstellungen nicht gespeichert." @@ -2297,15 +2530,15 @@ msgstr "Es ist ein Fehler beim Verbinden mit Restreamer Core bei {0} aufgetreten #: src/views/Playersite.js:165 #: src/views/Playersite.js:240 -#: src/views/Publication/Player.js:202 +#: src/views/Publication/Player.js:199 msgid "There was an error during upload: {0}" msgstr "Beim Hochladen ist ein Fehler aufgetreten: {0}" -#: src/views/Edit/Wizard/index.js:1123 +#: src/views/Edit/Wizard/index.js:1138 msgid "There was an error setting up the stream." msgstr "Es ist ein Fehler beim Einrichten des Streams aufgetreten." -#: src/views/Settings.js:909 +#: src/views/Settings.js:976 msgid "There were some errors in the settings. Settings not saved." msgstr "Es gab einige Fehler in den Einstellungen. Einstellungen nicht gespeichert." @@ -2349,7 +2582,11 @@ msgstr "Diese Lizenz erlaubt es Wiederverwendern, das Material in jedem Medium o msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." msgstr "Diese Lizenz erlaubt es Wiederverwendern, das Material in jedem Medium oder Format zu verbreiten, zu remixen, anzupassen und darauf aufzubauen, solange der Urheber genannt wird. Die Lizenz erlaubt die kommerzielle Nutzung. Wenn Sie das Material umarbeiten, anpassen oder darauf aufbauen, müssen Sie das geänderte Material unter identischen Bedingungen lizenzieren." -#: src/views/Edit/index.js:585 +#: src/views/Edit/Sources/Network.js:435 +msgid "This protocol is unknown or not supported by the available FFmpeg binary." +msgstr "Dieses Protokoll ist entweder unbekannt oder nicht verfügbar mit der verfügbaren FFmpeg-Version." + +#: src/views/Edit/index.js:639 msgid "This source cannot be edited while it is in use. To continue, you have to disconnect the source." msgstr "Diese Quelle kann nicht bearbeitet werden, während sie in Gebrauch ist. Um fortzufahren, müssen Sie die Verbindung zur Quelle unterbrechen." @@ -2365,15 +2602,20 @@ msgstr "Diese Version der Benutzeroberfläche unterstützt nicht den angeschloss msgid "This version of the UI is compatible." msgstr "Die verwendete Version der Benutzeroberfläche ist kompatibel." -#: src/views/Settings.js:1550 +#: src/views/Settings.js:1620 msgid "Time until an inactive viewer connection is treated as closed." msgstr "Zeit bis eine inaktive Zuschauerverbindung als geschlossen behandelt wird." -#: src/views/Settings.js:1263 -#: src/views/Settings.js:1829 +#: src/views/Settings.js:1331 +#: src/views/Settings.js:1910 +#: src/views/Settings.js:1958 msgid "Token" msgstr "Token" +#: src/views/Publication/Services/Telegram.js:13 +msgid "Transmit a Livestream to a Telegram Channel." +msgstr "Übertrage einen Livestream zu einem Telegram Channel." + #: src/views/Publication/Services/Image2.js:25 msgid "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." msgstr "Überträgt Schnappschüsse der Hauptquelle an einen HTTP/S Server. Weitere Details zu den Einstellungen finden Sie <0>hier." @@ -2430,7 +2672,7 @@ msgstr "Übertragen Sie die Hauptquelle an einen UDP-Server. Weitere Details zu msgid "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." msgstr "Übertragen Sie die Hauptquelle an einen WOWZA Server. Weitere Details zu den Einstellungen finden Sie <0>hier." -#: src/views/Publication/Services/Core.js:18 +#: src/views/Publication/Services/Core.js:19 msgid "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." msgstr "Überträgt die Hauptquelle auf eine datarhei Core Ressource. Weitere Details zu den Einstellungen finden Sie <0>hier." @@ -2450,6 +2692,18 @@ msgstr "Übertragen Sie die Hauptquelle an den Bitmovin-Cloud-Encoding-Service, msgid "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." msgstr "Übertragen Sie die Hauptquelle an den Restream RTMP Service. Weitere Details zu den Einstellungen finden Sie <0>hier." +#: src/views/Publication/Services/Azure.js:17 +msgid "Transmit to a Azure Media Services. More details can be found <0>here." +msgstr "Überträgt Ihren Videostream zu Azure Media Services. Weiters Informationen finden sie <0>hier." + +#: src/views/Publication/Services/Linkedin.js:16 +msgid "Transmit to linkedIn. More details can be found <0>here." +msgstr "Überträgt Ihren Videostream zu linkedIn. Weitere Informationen finden sie <0>hier." + +#: src/views/Publication/Services/Owncast.js:15 +msgid "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." +msgstr "Überträgt Ihren Livestream an einen Owncast-Server. <0>Weitere Informationen zu den Einstellungen." + #: src/views/Publication/Services/Youtube.js:21 msgid "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." msgstr "Überträgt Ihr Video als RTMP-Stream mit dem erforderlichen, in YouTube Studio generierten Schlüssel. Weitere Informationen zum Einrichten eines Live-Streams finden Sie in der <0>Creator Academy von YouTube." @@ -2458,36 +2712,36 @@ msgstr "Überträgt Ihr Video als RTMP-Stream mit dem erforderlichen, in YouTube msgid "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." msgstr "Überträgt Ihren Videostream mit dem erforderlichen Schlüssel, der in Twitter Producer generiert wurde. Weitere Informationen zum Einrichten eines Livestreams finden Sie unter <0>Producer von Twitter." -#: src/misc/coders/Encoders/video/X264.js:83 -#: src/misc/coders/Encoders/video/X265.js:83 +#: src/misc/coders/Encoders/video/X264.js:93 +#: src/misc/coders/Encoders/video/X265.js:93 msgid "Tune" msgstr "Optimieren" -#: src/views/Edit/Sources/Network.js:409 +#: src/views/Edit/Sources/Network.js:488 #: src/views/Edit/Wizard/Sources/Network.js:77 msgid "UDP transport" msgstr "UDP-Transport" -#: src/views/Settings.js:1111 +#: src/views/Settings.js:1178 msgid "Unable to load the config." msgstr "Die Konfiguration kann nicht geladen werden." -#: src/views/Settings.js:1245 +#: src/views/Settings.js:1313 msgid "Unique ident on the service." msgstr "Einzigartige Identität für den Service." -#: src/views/Main/Egress.js:91 +#: src/views/Main/Egress.js:96 msgid "Unknown" msgstr "Unbekannt" -#: src/views/Playersite.js:597 +#: src/views/Playersite.js:613 msgid "Unselected" msgstr "Nicht gewählt" -#: src/views/Playersite.js:482 -#: src/views/Playersite.js:499 -#: src/views/Playersite.js:634 -#: src/views/Publication/Player.js:373 +#: src/views/Playersite.js:498 +#: src/views/Playersite.js:515 +#: src/views/Playersite.js:650 +#: src/views/Publication/Player.js:376 msgid "Upload" msgstr "Hochladen" @@ -2495,7 +2749,7 @@ msgstr "Hochladen" msgid "Uploading the file failed" msgstr "Die Dateiübertragung ist fehlgeschlagen" -#: src/views/Publication/Player.js:232 +#: src/views/Publication/Player.js:229 msgid "Uploading the logo failed" msgstr "Hochladen des Logos fehlgeschlagen" @@ -2509,15 +2763,15 @@ msgstr "Betriebszeit" msgid "Use Auth0 for your running Restreamer Core. More <0>details." msgstr "Verwenden Sie Auth0 für Ihren laufenden Restreamer Core. Mehr <0>Details." -#: src/views/Edit/index.js:426 +#: src/views/Edit/index.js:438 msgid "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." msgstr "Verwenden Sie den Assistenten (<0/>) für eine schnelle und einfache Einrichtung, oder bearbeiten Sie (<1/>) die Quellen direkt im benutzerdefinierten Modus." -#: src/views/Edit/Wizard/index.js:1068 +#: src/views/Edit/Wizard/index.js:1083 msgid "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." -#: src/views/Edit/index.js:530 +#: src/views/Edit/index.js:584 msgid "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Copyright und die richtige Bildlizenz wählen. Ob frei für alle oder stark eingeschränkt. Überlege kurz, was andere mit dem Video machen dürfen." @@ -2525,8 +2779,8 @@ msgstr "Copyright und die richtige Bildlizenz wählen. Ob frei für alle oder st msgid "User registration" msgstr "Benutzerregistrierung" -#: src/views/Edit/Sources/Network.js:370 -#: src/views/Edit/Wizard/Sources/Network.js:81 +#: src/views/Edit/Sources/Network.js:448 +#: src/views/Edit/Wizard/Sources/Network.js:84 #: src/views/Login.js:272 #: src/views/Publication/Services/DASH.js:195 #: src/views/Publication/Services/DaCast.js:131 @@ -2534,18 +2788,18 @@ msgstr "Benutzerregistrierung" #: src/views/Publication/Services/RTSP.js:153 #: src/views/Publication/Services/Red5.js:146 #: src/views/Publication/Services/WOWZA.js:168 -#: src/views/Settings.js:1440 -#: src/views/Settings.js:1598 +#: src/views/Settings.js:1510 +#: src/views/Settings.js:1668 msgid "Username" msgstr "Anmeldename" -#: src/views/Settings.js:1446 -#: src/views/Settings.js:1606 +#: src/views/Settings.js:1516 +#: src/views/Settings.js:1676 msgid "Username for authorization." msgstr "Anmeldename für die Autorisierung." -#: src/views/Edit/Sources/Network.js:375 -#: src/views/Edit/Wizard/Sources/Network.js:83 +#: src/views/Edit/Sources/Network.js:453 +#: src/views/Edit/Wizard/Sources/Network.js:90 msgid "Username for the device." msgstr "Anmeldename von dem Gerät." @@ -2553,28 +2807,32 @@ msgstr "Anmeldename von dem Gerät." msgid "VPU ID" msgstr "VPU-ID" -#: src/views/Publication/Add.js:476 +#: src/misc/filters/video/VFlip.js:65 +msgid "Vertical Flip" +msgstr "Vertikal spiegeln" + +#: src/views/Publication/Add.js:451 msgid "Video" msgstr "Video" #: src/views/Edit/Sources/AVFoundation.js:126 -#: src/views/Edit/Sources/Raspicam.js:89 -#: src/views/Edit/Sources/V4L.js:109 +#: src/views/Edit/Sources/Raspicam.js:92 +#: src/views/Edit/Sources/V4L.js:112 #: src/views/Edit/Wizard/Sources/AVFoundation.js:82 #: src/views/Edit/Wizard/Sources/Raspicam.js:86 #: src/views/Edit/Wizard/Sources/V4L.js:105 msgid "Video device" msgstr "Videogerät" -#: src/views/Edit/Profile.js:320 +#: src/views/Edit/Profile.js:333 #: src/views/Edit/ProfileSummary.js:66 -#: src/views/Publication/Edit.js:517 +#: src/views/Publication/Edit.js:490 msgid "Video settings" msgstr "Videoeinstellungen" -#: src/views/Edit/Wizard/index.js:264 -#: src/views/Edit/Wizard/index.js:354 -#: src/views/Edit/Wizard/index.js:596 +#: src/views/Edit/Wizard/index.js:279 +#: src/views/Edit/Wizard/index.js:369 +#: src/views/Edit/Wizard/index.js:611 msgid "Video setup" msgstr "Video-Einrichtung" @@ -2594,11 +2852,19 @@ msgstr "Zuschauende" msgid "Virtual source" msgstr "Virtuelle-Quelle" +#: src/misc/filters/audio/Volume.js:44 +msgid "Volume" +msgstr "Lautstärke" + #: src/views/Welcome.js:27 msgid "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." msgstr "Willkommen bei Restreamer v2, der Lösung für die schnelle und einfache Veröffentlichung von Videos. Kostenlos für private und kommerzielle Nutzung. Weitere Hilfe in der <0>Dokumentation." -#: src/views/Settings.js:1585 +#: src/misc/controls/HLS.js:74 +msgid "Where to store the HLS playlist and segments. In-Memory is recommended." +msgstr "Wo die HLS-Playlist und Segmente gespeichert werden sollen. In-Memory ist empfohlen." + +#: src/views/Settings.js:1655 msgid "Write protection" msgstr "Schreibschutz" @@ -2606,32 +2872,32 @@ msgstr "Schreibschutz" msgid "YUV test pattern" msgstr "YUV-Testbild" -#: src/views/Edit/Wizard/index.js:1177 +#: src/views/Edit/Wizard/index.js:1192 msgid "Yes" msgstr "Ja" -#: src/views/Edit/Wizard/index.js:1159 +#: src/views/Edit/Wizard/index.js:1174 msgid "You can't abort the wizard because at least one input must be defined." msgstr "Sie können den Assistenten nicht abbrechen, da mindestens ein Eingang definiert sein muss." -#: src/views/Settings.js:2041 +#: src/views/Settings.js:2192 msgid "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" msgstr "Konfiguration geändert. Damit die Änderungen wirksam werden muss die Anwendung neu starten. Jetzt neu starten?" -#: src/views/Main/index.js:347 +#: src/views/Main/index.js:376 #: src/views/Publication/Process.js:73 msgid "You have to reconnect manually" msgstr "Verbindung manuell wiederherstellen" -#: src/views/Publication/Edit.js:456 +#: src/views/Publication/Edit.js:432 msgid "You have unsaved changes. Please save them before you can control the service again." msgstr "Ungespeicherte Änderungen. Bitte speichern, bevor der Dienst wieder gesteuert werden kann." -#: src/views/Edit/Wizard/index.js:616 +#: src/views/Edit/Wizard/index.js:631 msgid "Your stream needs to be encoded, but there's no suitable encoder available." msgstr "Ihr Stream muss kodiert werden, aber es ist kein geeigneter Encoder verfügbar." -#: src/views/Edit/Wizard/index.js:623 +#: src/views/Edit/Wizard/index.js:638 msgid "Your stream needs to be encoded. Choose the desired encoder:" msgstr "Stream muss kodiert werden. Gewünschten Encoder wählen:" @@ -2643,7 +2909,7 @@ msgstr "blau" msgid "brown" msgstr "braun" -#: src/views/Publication/Player.js:331 +#: src/views/Publication/Player.js:334 msgid "iframe code" msgstr "iframe Code" diff --git a/src/locales/en/messages.js b/src/locales/en/messages.js index 85030f3..f86af97 100644 --- a/src/locales/en/messages.js +++ b/src/locales/en/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"<0>Compatibility list":"<0>Compatibility list","<0>Show probe details":"<0>Show probe details","ALSA":"ALSA","API endpoint not found. Settings not saved.":"API endpoint not found. Settings not saved.","AVFoundation":"AVFoundation","Abort":"Abort","About":"About","Add":"Add","Add Publication":"Add Publication","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Add external widgets and styles to the publication site. You can find some examples on the help page.","Add new channel":"Add new channel","Add: {0}":["Add: ",["0"]],"Address":"Address","Address for the background image.":"Address for the background image.","Address to listen on for HTTP requests.":"Address to listen on for HTTP requests.","Address to listen on for HTTPS requests.":"Address to listen on for HTTPS requests.","Adjust publication site colors and background as you like.":"Adjust publication site colors and background as you like.","Advanced monitoring":"Advanced monitoring","Advanced settings":"Advanced settings","Advanced setup":"Advanced setup","Alerting by email":"Alerting by email","All":"All","All important system settings.":"All important system settings.","Allow all referrer":"Allow all referrer","Allow counting how many viewers the stream has.":"Allow counting how many viewers the stream has.","Amplitude":"Amplitude","An environment variable sets this value.":"An environment variable sets this value.","App":"App","Application":"Application","Are you sure you want to abort the wizard?":"Are you sure you want to abort the wizard?","Audio":"Audio","Audio Device":"Audio Device","Audio device":"Audio device","Audio from device":"Audio from device","Audio settings":"Audio settings","Audio setup":"Audio setup","Auth0":"Auth0","Auth0 Tenant":"Auth0 Tenant","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 is currently not available because this interface is loaded from an insecure origin.","Author":"Author","Authorization":"Authorization","Automatic cleanup of all media data":"Automatic cleanup of all media data","Autoplay":"Autoplay","Available":"Available","Back":"Back","Background colors":"Background colors","Background image":"Background image","Backup URL":"Backup URL","Backup server":"Backup server","Backup stream":"Backup stream","Backup stream key":"Backup stream key","Bandwidth":"Bandwidth","Bandwidth control":"Bandwidth control","Banner":"Banner","Basic":"Basic","Beep factor":"Beep factor","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Briefly describe what the audience will see during the live stream.","Button color":"Button color","Cache for files on /data.":"Cache for files on /data.","Cache time (Seconds)":"Cache time (Seconds)","Cache types":"Cache types","Capture clicks":"Capture clicks","Capture cursor":"Capture cursor","Channel \"{0}\" saved":["Channel \"",["0"],"\" saved"],"Channels":"Channels","Check for updates":"Check for updates","Check the requirements":"Check the requirements","Choose a video stream":"Choose a video stream","Choose an audio stream":"Choose an audio stream","Choose an input device ...":"Choose an input device ...","Choose codec ...":"Choose codec ...","Choose tenant ...":"Choose tenant ...","Chunk":"Chunk","Close":"Close","Code injection":"Code injection","Codec":"Codec","Color":"Color","Config":"Config","Confirm password":"Confirm password","Connect":"Connect","Connected device":"Connected device","Connected since <0/>":"Connected since <0/>","Connecting ...":"Connecting ...","Connecting to Restreamer Core ...":"Connecting to Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"Connecting to Restreamer Core failed probably because of mixed content.","Content":"Content","Content URL":"Content URL","Cores":"Cores","Create user":"Create user","Creative Commons":"Creative Commons","Custom ...":"Custom ...","Custom JSON config for datarhei Core.":"Custom JSON config for datarhei Core.","Custom audio device":"Custom audio device","Custom audio index":"Custom audio index","Custom bitrate (kbit/s)":"Custom bitrate (kbit/s)","Custom code injection":"Custom code injection","Custom delay":"Custom delay","Custom device":"Custom device","Custom format":"Custom format","Custom framerate":"Custom framerate","Custom keyframe interval":"Custom keyframe interval","Custom layout":"Custom layout","Custom sampling (Hz)":"Custom sampling (Hz)","Custom scale":"Custom scale","Custom size":"Custom size","Custom video device":"Custom video device","Custom video index":"Custom video index","Data copied to clipboard":"Data copied to clipboard","Death color":"Death color","Decoder":"Decoder","Default":"Default","Delay":"Delay","Delay (ms)":"Delay (ms)","Delete":"Delete","Deleting a publication service cannot be reversed. The publication stops immediately.":"Deleting a publication service cannot be reversed. The publication stops immediately.","Delivering mode":"Delivering mode","Description":"Description","Design":"Design","Device":"Device","Disconnect":"Disconnect","Disconnect & Continue":"Disconnect & Continue","Disconnecting ...":"Disconnecting ...","Disk":"Disk","Disk cache":"Disk cache","Disk storage":"Disk storage","Do you really want to restart the application now?":"Do you really want to restart the application now?","Do you want to delete \"{0}\"?":["Do you want to delete \"",["0"],"\"?"],"Do you want to delete {title}?":["Do you want to delete ",["title"],"?"],"Do you want to disconnect \"{0}\"?":["Do you want to disconnect \"",["0"],"\"?"],"Docs":"Docs","Documentation":"Documentation","Dup. frames":"Dup. frames","EDIT: Player":"EDIT: Player","EDIT: Publication Website":"EDIT: Publication Website","Edit":"Edit","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Edit the audio and video sources for the live stream. Add a description, and set your desired content license.","Edit: {title}":["Edit: ",["title"]],"Embed":"Embed","Enable RTMP server ...":"Enable RTMP server ...","Enable a periodic beep every second with this value times the carrier frequency":"Enable a periodic beep every second with this value times the carrier frequency","Enable backup stream":"Enable backup stream","Enable nerd statistics":"Enable nerd statistics","Enable primary stream":"Enable primary stream","Enable snapshots":"Enable snapshots","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Enabling authorization is strongly advised. Otherwise, anybody can access this instance.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.","Encoder":"Encoder","Encoding":"Encoding","Encryption":"Encryption","Enter a name for the new channel.":"Enter a name for the new channel.","Enter password":"Enter password","Enter the address of your network source:":"Enter the address of your network source:","Enter username":"Enter username","Entropy coder":"Entropy coder","Error":"Error","Error while copying data to clipboard":"Error while copying data to clipboard","Error: {0}":["Error: ",["0"]],"Expands the area above the channel list (live chat).":"Expands the area above the channel list (live chat).","Expands the area under the channel description (comment boxes).":"Expands the area under the channel description (comment boxes).","Expert mode":"Expert mode","Extend channel list":"Extend channel list","Extend content":"Extend content","Extend footer":"Extend footer","Extend header":"Extend header","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Failed to create publication service (",["0"],")"],"Failed to create publication website files.":"Failed to create publication website files.","Failed to probe the source. Please check the <0>probe details.":"Failed to probe the source. Please check the <0>probe details.","Failed to refresh token: {0}":["Failed to refresh token: ",["0"]],"Failed to save ingest metadata":"Failed to save ingest metadata","Failed to stop process":"Failed to stop process","Failed to store player size setting.":"Failed to store player size setting.","Failed to store publication service ({0})":["Failed to store publication service (",["0"],")"],"Failed to update ingest process ({0})":["Failed to update ingest process (",["0"],")"],"Failed to update the player":"Failed to update the player","Failed to verify the source. Please check the address.":"Failed to verify the source. Please check the address.","Finish":"Finish","Flags":"Flags","For Javascripts.":"For Javascripts.","For Stylesheets.":"For Stylesheets.","Force input framerate":"Force input framerate","Format":"Format","Frame drops":"Frame drops","Framebuffer":"Framebuffer","Framerate":"Framerate","Frequency (Hz)":"Frequency (Hz)","GET":"GET","General":"General","Google Analytics ID":"Google Analytics ID","Google Analytics Tracker Name":"Google Analytics Tracker Name","HLS":"HLS","HLS statistic for the In-memory storage":"HLS statistic for the In-memory storage","HTTP and HTTPS":"HTTP and HTTPS","HTTP port":"HTTP port","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"HTTPS port","Hardware device":"Hardware device","Header":"Header","Headline":"Headline","Hosted Restreamer interface":"Hosted Restreamer interface","Human readable name on the service.":"Human readable name on the service.","IP address":"IP address","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.","Ignore IP ranges":"Ignore IP ranges","Image URL":"Image URL","Imprint":"Imprint","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.","In-memory":"In-memory","In-memory storage":"In-memory storage","Incompatible":"Incompatible","Inherit":"Inherit","Inject 1":"Inject 1","Inject 2":"Inject 2","Inject 3":"Inject 3","Inject 4":"Inject 4","Internal HLS server":"Internal HLS server","Internal RTMP server":"Internal RTMP server","Interval (seconds)":"Interval (seconds)","Issue alert":"Issue alert","Keyframe interval (seconds)":"Keyframe interval (seconds)","Layout":"Layout","Let's Encrypt certification":"Let's Encrypt certification","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.","Level":"Level","Level of system protocol.":"Level of system protocol.","License":"License","Life color":"Life color","Linecolor":"Linecolor","Link":"Link","Link, mouseover":"Link, mouseover","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.","List size (segments)":"List size (segments)","Live-Streaming to Facebook Live RTMP service":"Live-Streaming to Facebook Live RTMP service","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Live-Streaming to Twitch Live RTMP Service.","Live-Streaming to Vimeo Live RTMP Service":"Live-Streaming to Vimeo Live RTMP Service","Livesource ID":"Livesource ID","Log level":"Log level","Logging":"Logging","Login":"Login","Login failed: Couldn't load API details":"Login failed: Couldn't load API details","Login failed: {0}":["Login failed: ",["0"]],"Login/JWT authorization":"Login/JWT authorization","Logo":"Logo","Logout":"Logout","MB":"MB","Main Source":"Main Source","Main channel":"Main channel","Main channel not found":"Main channel not found","Main channel saved":"Main channel saved","Main page channel (index.html).":"Main page channel (index.html).","Maintainer:":"Maintainer:","Maximum allowed cache size, 0 for unlimited.":"Maximum allowed cache size, 0 for unlimited.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Maximum allowed megabytes to consume from hard disk. 0 for unlimited.","Maximum bandwidth Mbit/s":"Maximum bandwidth Mbit/s","Maximum delay in milliseconds.":"Maximum delay in milliseconds.","Maximum file size (Megabytes)":"Maximum file size (Megabytes)","Maximum file size to put in cache.":"Maximum file size to put in cache.","Maximum log histroy":"Maximum log histroy","Maximum log lines":"Maximum log lines","Maximum size (Megabytes)":"Maximum size (Megabytes)","Maximum viewer idle time (Seconds)":"Maximum viewer idle time (Seconds)","Maximum viewers":"Maximum viewers","Memory":"Memory","Meta information":"Meta information","Metadata":"Metadata","Mold":"Mold","More about Twitter's copyright <0>here.":"More about Twitter's copyright <0>here.","More about YouTube's copyright <0>here.":"More about YouTube's copyright <0>here.","More about licenses here":"More about licenses here","More about the service":"More about the service","Mute":"Mute","Name":"Name","Name for the template. If the name already exists, it will be overwritten.":"Name for the template. If the name already exists, it will be overwritten.","Network":"Network","Network source":"Network source","Next":"Next","Next: Audio":"Next: Audio","Next: Video setup":"Next: Video setup","No":"No","No audio":"No audio","No audio stream available":"No audio stream available","No input device available":"No input device available","No live stream was detected. Please check the software that sends the stream.":"No live stream was detected. Please check the software that sends the stream.","No source selected":"No source selected","No sources available":"No sources available","No suitable encoder found.":"No suitable encoder found.","No video":"No video","No video stream available":"No video stream available","Node ID":"Node ID","Noise":"Noise","None":"None","Notes":"Notes","Number of log lines to keep.":"Number of log lines to keep.","Number of logs to keep for each process.":"Number of logs to keep for each process.","OK":"OK","One referrer per line, e.g. http://www.example.com":"One referrer per line, e.g. http://www.example.com","Open":"Open","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.","Password":"Password","Password for authorization.":"Password for authorization.","Password for the device.":"Password for the device.","Persist viewer statistics":"Persist viewer statistics","Pixel format":"Pixel format","Plan: <0>Starter":"Plan: <0>Starter","Platforms":"Platforms","Playback":"Playback","Player":"Player","Player URL":"Player URL","Player settings saved":"Player settings saved","Playersite":"Playersite","Playlist":"Playlist","Please check the <0>process log":"Please check the <0>process log","Please contact the operator of the service and check what happens.":"Please contact the operator of the service and check what happens.","Please select a file to upload.":"Please select a file to upload.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.","Please wait. Probe stream data ...":"Please wait. Probe stream data ...","Please wait. Setting up the stream ...":"Please wait. Setting up the stream ...","Port":"Port","Position":"Position","Preset":"Preset","Primary stream":"Primary stream","Primary stream key":"Primary stream key","Probe":"Probe","Process":"Process","Process control":"Process control","Process debug":"Process debug","Process debug report":"Process debug report","Process details":"Process details","Process report":"Process report","Processing & Control":"Processing & Control","Profile":"Profile","Protocol":"Protocol","Protocols":"Protocols","Public domain/s":"Public domain/s","Publication service not found":"Publication service not found","Publication website settings saved":"Publication website settings saved","Publications":"Publications","Pull Mode":"Pull Mode","Pull or recieve the data:":"Pull or recieve the data:","Quality":"Quality","RGB test pattern":"RGB test pattern","RTMP app for publishing.":"RTMP app for publishing.","RTMP server":"RTMP server","RTMP server is not enabled":"RTMP server is not enabled","RTMP server listen address.":"RTMP server listen address.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'","RTMP/S":"RTMP/S","RTMPS server":"RTMPS server","RTSP":"RTSP","Raspberry Pi camera":"Raspberry Pi camera","Rate control":"Rate control","Ratio":"Ratio","Read input at native speed":"Read input at native speed","Receive Mode":"Receive Mode","Reconnect":"Reconnect","Reconnect delay (seconds)":"Reconnect delay (seconds)","Reconnecting in {0}s":["Reconnecting in ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["Reconnecting to Restreamer Core failed for the last ",["RETRIES"]," seconds."],"Reconnecting to Restreamer Core failed.":"Reconnecting to Restreamer Core failed.","Refresh":"Refresh","Region":"Region","Reload":"Reload","Remove the oldest entries if the /memfs is full":"Remove the oldest entries if the /memfs is full","Requires activation":"Requires activation","Restart":"Restart","Restart required":"Restart required","Restarting":"Restarting","Restarting Restreamer Core ...":"Restarting Restreamer Core ...","Restarting the application failed.":"Restarting the application failed.","Restreamer Service":"Restreamer Service","Retrieving stream data ...":"Retrieving stream data ...","Retry":"Retry","Rule":"Rule","Sampling":"Sampling","Save":"Save","Scale":"Scale","Seconds to keep files in cache.":"Seconds to keep files in cache.","Seconds until a process is restarted.":"Seconds until a process is restarted.","Seconds until a staled process is terminated.":"Seconds until a staled process is terminated.","Seconds until the snapshot/thumbnail of the video source is updated.":"Seconds until the snapshot/thumbnail of the video source is updated.","Security":"Security","Security token":"Security token","Seekbar color":"Seekbar color","Segment length (seconds)":"Segment length (seconds)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Segment will be cut on the following keyframe after this time has passed. 2 is recommended.","Segmentation":"Segmentation","Select a device:":"Select a device:","Select audio source:":"Select audio source:","Select source ...":"Select source ...","Select video source:":"Select video source:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).","Select your encoding setting:":"Select your encoding setting:","Selected":"Selected","Selected channel":"Selected channel","Selection":"Selection","Send anonymous metrics (helps us for future development)":"Send anonymous metrics (helps us for future development)","Send stream to this address:":"Send stream to this address:","Send video to Framebuffer":"Send video to Framebuffer","Server":"Server","Service":"Service","Service name":"Service name","Service token for monitoring.":"Service token for monitoring.","Sessions":"Sessions","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.","Setting for connection to the service.":"Setting for connection to the service.","Settings":"Settings","Settings (expert mode)":"Settings (expert mode)","Settings for /data path. The access is protected by":"Settings for /data path. The access is protected by","Settings for /memfs path.":"Settings for /memfs path.","Settings saved. All changes will be applied after restarting the application.":"Settings saved. All changes will be applied after restarting the application.","Share button":"Share button","Shows a reference to the project.":"Shows a reference to the project.","Sign up (free)":"Sign up (free)","Silence":"Silence","Silence Audio":"Silence Audio","Sine":"Sine","Sitename":"Sitename","Size":"Size","Snapshot":"Snapshot","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Socket timeout (microseconds)","Software":"Software","Source":"Source","Speed":"Speed","Stale timeout (seconds)":"Stale timeout (seconds)","Statistics":"Statistics","Storage":"Storage","Stores the viewer statistics to the disk.":"Stores the viewer statistics to the disk.","Stream":"Stream","Stream URL":"Stream URL","Stream key":"Stream key","Stream name":"Stream name","Stream names":"Stream names","Support datarhei Restreamer":"Support datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.","System":"System","Template":"Template","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Template to be used for creating the publication website. The delete button removes the selection from the system.","Terms":"Terms","Test pattern":"Test pattern","Test pattern (extended)":"Test pattern (extended)","Text colors":"Text colors","The amplitude (0.0 - 1.0) of the generated audio stream":"The amplitude (0.0 - 1.0) of the generated audio stream","The application is using an older version of the settings.":"The application is using an older version of the settings.","The bitrate of the audio stream.":"The bitrate of the audio stream.","The carrier frequency":"The carrier frequency","The channel \"{0}\" could not be deleted":["The channel \"",["0"],"\" could not be deleted"],"The channel \"{0}\" has been deleted":["The channel \"",["0"],"\" has been deleted"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"The deletion of this channel can not be recovered. All publications of this channel will be removed.","The input profile is not complete. Please define a video and audio source.":"The input profile is not complete. Please define a video and audio source.","The layout of the audio stream.":"The layout of the audio stream.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.","The noise color":"The noise color","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.","The publication service \"{0}\" could not be deleted":["The publication service \"",["0"],"\" could not be deleted"],"The publication service \"{0}\" has been created":["The publication service \"",["0"],"\" has been created"],"The publication service \"{0}\" has been deleted":["The publication service \"",["0"],"\" has been deleted"],"The publication service has been created":"The publication service has been created","The sample rate of the audio stream.":"The sample rate of the audio stream.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["The selected file is too big (",["0"]," bytes). Only ",["1"]," bytes are allowed."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["The selected file type (",["0"],") is not allowed. Allowed file types are ",["types"]],"The settings for \"{0}\" have been saved":["The settings for \"",["0"],"\" have been saved"],"The source doesn't provide any audio streams.":"The source doesn't provide any audio streams.","The source doesn't provide any audio streams. Please check the <0>probe details.":"The source doesn't provide any audio streams. Please check the <0>probe details.","The source doesn't provide any compatible audio streams.":"The source doesn't provide any compatible audio streams.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"The source doesn't provide any compatible video streams. Please check the <0>requirements.","The source doesn't provide any video streams. Please check the <0>probe details.":"The source doesn't provide any video streams. Please check the <0>probe details.","The source doesn't provide any video streams. Please check the device.":"The source doesn't provide any video streams. Please check the device.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.","The video source is compatible. Select the desired resolution:":"The video source is compatible. Select the desired resolution:","There are updates available. Here you get more information.":"There are updates available. Here you get more information.","There was a problem storing the settings. Settings not saved.":"There was a problem storing the settings. Settings not saved.","There was an error connecting to Restreamer Core at {0}.":["There was an error connecting to Restreamer Core at ",["0"],"."],"There was an error during upload: {0}":["There was an error during upload: ",["0"]],"There was an error setting up the stream.":"There was an error setting up the stream.","There were some errors in the settings. Settings not saved.":"There were some errors in the settings. Settings not saved.","There's no login method available.":"There's no login method available.","This is a dummy service that explains to you the concepts of service.":"This is a dummy service that explains to you the concepts of service.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..","This is to mention the copyright regulations for the target of this service.":"This is to mention the copyright regulations for the target of this service.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"This source cannot be edited while it is in use. To continue, you have to disconnect the source.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["This version of the UI doesn't support the available FFmpeg binary (",["0"],"). The UI requires ",["1"],". Please use a supported FFmpeg binary."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["This version of the UI doesn't support the connected Core (",["0"],"). The UI requires ",["1"],". Please use a compatible version of the UI."],"This version of the UI is compatible.":"This version of the UI is compatible.","Time until an inactive viewer connection is treated as closed.":"Time until an inactive viewer connection is treated as closed.","Token":"Token","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Transmit the main source to an SRT Server. More details about the settings can be found <0>here.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Transmit the main source to an UDP Server. More details about the settings can be found <0>here.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.","Tune":"Tune","UDP transport":"UDP transport","Unable to load the config.":"Unable to load the config.","Unique ident on the service.":"Unique ident on the service.","Unknown":"Unknown","Unselected":"Unselected","Upload":"Upload","Uploading the file failed":"Uploading the file failed","Uploading the logo failed":"Uploading the logo failed","Uptime":"Uptime","Use Auth0 for your running Restreamer Core. More <0>details.":"Use Auth0 for your running Restreamer Core. More <0>details.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.","User registration":"User registration","Username":"Username","Username for authorization.":"Username for authorization.","Username for the device.":"Username for the device.","VPU ID":"VPU ID","Video":"Video","Video device":"Video device","Video settings":"Video settings","Video setup":"Video setup","Video source":"Video source","Viewer":"Viewer","Virtual source":"Virtual source","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.","Write protection":"Write protection","YUV test pattern":"YUV test pattern","Yes":"Yes","You can't abort the wizard because at least one input must be defined.":"You can't abort the wizard because at least one input must be defined.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?","You have to reconnect manually":"You have to reconnect manually","You have unsaved changes. Please save them before you can control the service again.":"You have unsaved changes. Please save them before you can control the service again.","Your stream needs to be encoded, but there's no suitable encoder available.":"Your stream needs to be encoded, but there's no suitable encoder available.","Your stream needs to be encoded. Choose the desired encoder:":"Your stream needs to be encoded. Choose the desired encoder:","blue":"blue","brown":"brown","iframe code":"iframe code","kbit/s":"kbit/s","pink":"pink","velvet":"velvet","violet":"violet","white":"white"}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"6 (+ guaranteed to start with a Key frame)":"6 (+ guaranteed to start with a Key frame)","7 (+ fragmented MP4 format)":"7 (+ fragmented MP4 format)","<0>Compatibility list":"<0>Compatibility list","<0>Show probe details":"<0>Show probe details","ALSA":"ALSA","API endpoint not found. Settings not saved.":"API endpoint not found. Settings not saved.","AVFoundation":"AVFoundation","Abort":"Abort","About":"About","Add":"Add","Add Publication":"Add Publication","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Add external widgets and styles to the publication site. You can find some examples on the help page.","Add new channel":"Add new channel","Add: {0}":["Add: ",["0"]],"Address":"Address","Address for the background image.":"Address for the background image.","Address to listen on for HTTP requests.":"Address to listen on for HTTP requests.","Address to listen on for HTTPS requests.":"Address to listen on for HTTPS requests.","Adjust publication site colors and background as you like.":"Adjust publication site colors and background as you like.","Advanced monitoring":"Advanced monitoring","Advanced settings":"Advanced settings","Advanced setup":"Advanced setup","AirPlay":"AirPlay","Alerting by email":"Alerting by email","All":"All","All important system settings.":"All important system settings.","Allow all referrer":"Allow all referrer","Allow counting how many viewers the stream has.":"Allow counting how many viewers the stream has.","Amplitude":"Amplitude","An environment variable sets this value.":"An environment variable sets this value.","App":"App","Application":"Application","Are you sure you want to abort the wizard?":"Are you sure you want to abort the wizard?","Audio":"Audio","Audio Device":"Audio Device","Audio device":"Audio device","Audio from device":"Audio from device","Audio settings":"Audio settings","Audio setup":"Audio setup","Auth0":"Auth0","Auth0 Tenant":"Auth0 Tenant","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 is currently not available because this interface is loaded from an insecure origin.","Author":"Author","Authorization":"Authorization","Automatic cleanup of all media data":"Automatic cleanup of all media data","Autoplay":"Autoplay","Available":"Available","Back":"Back","Background colors":"Background colors","Background image":"Background image","Backup URL":"Backup URL","Backup server":"Backup server","Backup stream":"Backup stream","Backup stream key":"Backup stream key","Bandwidth":"Bandwidth","Bandwidth control":"Bandwidth control","Banner":"Banner","Basic":"Basic","Beep factor":"Beep factor","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Briefly describe what the audience will see during the live stream.","Button color":"Button color","Cache for files on /data.":"Cache for files on /data.","Cache time (Seconds)":"Cache time (Seconds)","Cache types":"Cache types","Capture clicks":"Capture clicks","Capture cursor":"Capture cursor","Channel \"{0}\" saved":["Channel \"",["0"],"\" saved"],"Channels":"Channels","Check for updates":"Check for updates","Check the requirements":"Check the requirements","Choose a video stream":"Choose a video stream","Choose an audio stream":"Choose an audio stream","Choose an input device ...":"Choose an input device ...","Choose codec ...":"Choose codec ...","Choose tenant ...":"Choose tenant ...","Chromecast":"Chromecast","Chunk":"Chunk","Close":"Close","Code injection":"Code injection","Codec":"Codec","Color":"Color","Config":"Config","Confirm password":"Confirm password","Connect":"Connect","Connected device":"Connected device","Connected since <0/>":"Connected since <0/>","Connecting ...":"Connecting ...","Connecting to Restreamer Core ...":"Connecting to Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"Connecting to Restreamer Core failed probably because of mixed content.","Content":"Content","Content URL":"Content URL","Cores":"Cores","Create user":"Create user","Creative Commons":"Creative Commons","Custom ...":"Custom ...","Custom JSON config for datarhei Core.":"Custom JSON config for datarhei Core.","Custom audio device":"Custom audio device","Custom audio index":"Custom audio index","Custom bitrate (kbit/s)":"Custom bitrate (kbit/s)","Custom code injection":"Custom code injection","Custom delay":"Custom delay","Custom device":"Custom device","Custom format":"Custom format","Custom framerate":"Custom framerate","Custom keyframe interval":"Custom keyframe interval","Custom layout":"Custom layout","Custom sampling (Hz)":"Custom sampling (Hz)","Custom scale":"Custom scale","Custom size":"Custom size","Custom video device":"Custom video device","Custom video index":"Custom video index","Data copied to clipboard":"Data copied to clipboard","Death color":"Death color","Decibels (dB)":"Decibels (dB)","Decoder":"Decoder","Default":"Default","Delay":"Delay","Delay (ms)":"Delay (ms)","Delete":"Delete","Deleting a publication service cannot be reversed. The publication stops immediately.":"Deleting a publication service cannot be reversed. The publication stops immediately.","Delivering mode":"Delivering mode","Description":"Description","Design":"Design","Device":"Device","Disconnect":"Disconnect","Disconnect & Continue":"Disconnect & Continue","Disconnecting ...":"Disconnecting ...","Disk":"Disk","Disk cache":"Disk cache","Disk storage":"Disk storage","Do you really want to restart the application now?":"Do you really want to restart the application now?","Do you want to delete \"{0}\"?":["Do you want to delete \"",["0"],"\"?"],"Do you want to delete {title}?":["Do you want to delete ",["title"],"?"],"Do you want to disconnect \"{0}\"?":["Do you want to disconnect \"",["0"],"\"?"],"Docs":"Docs","Documentation":"Documentation","Dup. frames":"Dup. frames","EDIT: Player":"EDIT: Player","EDIT: Publication Website":"EDIT: Publication Website","EXT-X-VERSION":"EXT-X-VERSION","Edit":"Edit","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Edit the audio and video sources for the live stream. Add a description, and set your desired content license.","Edit: {title}":["Edit: ",["title"]],"Embed":"Embed","Enable":"Enable","Enable RTMP server ...":"Enable RTMP server ...","Enable SRT server ...":"Enable SRT server ...","Enable a periodic beep every second with this value times the carrier frequency":"Enable a periodic beep every second with this value times the carrier frequency","Enable backup stream":"Enable backup stream","Enable nerd statistics":"Enable nerd statistics","Enable now":"Enable now","Enable primary stream":"Enable primary stream","Enable snapshots":"Enable snapshots","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Enabling authorization is strongly advised. Otherwise, anybody can access this instance.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.","Encoder":"Encoder","Encoding":"Encoding","Encryption":"Encryption","Enter a name for the new channel.":"Enter a name for the new channel.","Enter password":"Enter password","Enter the address of your network source:":"Enter the address of your network source:","Enter username":"Enter username","Entropy coder":"Entropy coder","Error":"Error","Error while copying data to clipboard":"Error while copying data to clipboard","Error: {0}":["Error: ",["0"]],"Expands the area above the channel list (live chat).":"Expands the area above the channel list (live chat).","Expands the area under the channel description (comment boxes).":"Expands the area under the channel description (comment boxes).","Expert mode":"Expert mode","Extend channel list":"Extend channel list","Extend content":"Extend content","Extend footer":"Extend footer","Extend header":"Extend header","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Failed to create publication service (",["0"],")"],"Failed to create publication website files.":"Failed to create publication website files.","Failed to probe the source. Please check the <0>probe details.":"Failed to probe the source. Please check the <0>probe details.","Failed to refresh token: {0}":["Failed to refresh token: ",["0"]],"Failed to save ingest metadata":"Failed to save ingest metadata","Failed to stop process":"Failed to stop process","Failed to store player size setting.":"Failed to store player size setting.","Failed to store publication service ({0})":["Failed to store publication service (",["0"],")"],"Failed to update ingest process ({0})":["Failed to update ingest process (",["0"],")"],"Failed to update ingest snapshot process ({0})":["Failed to update ingest snapshot process (",["0"],")"],"Failed to update the player":"Failed to update the player","Failed to update the playersite":"Failed to update the playersite","Failed to verify the source. Please check the address.":"Failed to verify the source. Please check the address.","Filter":"Filter","Finish":"Finish","Flags":"Flags","For Javascripts.":"For Javascripts.","For Stylesheets.":"For Stylesheets.","Force input framerate":"Force input framerate","Format":"Format","Frame drops":"Frame drops","Framebuffer":"Framebuffer","Framerate":"Framerate","Frequency (Hz)":"Frequency (Hz)","GET":"GET","General":"General","Google Analytics ID":"Google Analytics ID","Google Analytics Tracker Name":"Google Analytics Tracker Name","HLS":"HLS","HLS output":"HLS output","HLS server":"HLS server","HLS statistic for the In-memory storage":"HLS statistic for the In-memory storage","HTTP and HTTPS":"HTTP and HTTPS","HTTP port":"HTTP port","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"HTTPS port","Hardware device":"Hardware device","Header":"Header","Headline":"Headline","Horizontal Flip":"Horizontal Flip","Hosted Restreamer interface":"Hosted Restreamer interface","Human readable name on the service.":"Human readable name on the service.","IP address":"IP address","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.","Ignore IP ranges":"Ignore IP ranges","Image URL":"Image URL","Imprint":"Imprint","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.","In-memory":"In-memory","In-memory storage":"In-memory storage","Incompatible":"Incompatible","Inherit":"Inherit","Inject 1":"Inject 1","Inject 2":"Inject 2","Inject 3":"Inject 3","Inject 4":"Inject 4","Interval (seconds)":"Interval (seconds)","Issue alert":"Issue alert","Keyframe interval (seconds)":"Keyframe interval (seconds)","Layout":"Layout","Let's Encrypt certification":"Let's Encrypt certification","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.","Level":"Level","Level of system protocol.":"Level of system protocol.","License":"License","Life color":"Life color","Linecolor":"Linecolor","Link":"Link","Link, mouseover":"Link, mouseover","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.","List size (segments)":"List size (segments)","Live-Streaming to Facebook Live RTMP service":"Live-Streaming to Facebook Live RTMP service","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Live-Streaming to Twitch Live RTMP Service.","Live-Streaming to Vimeo Live RTMP Service":"Live-Streaming to Vimeo Live RTMP Service","Livesource ID":"Livesource ID","Log level":"Log level","Logging":"Logging","Login":"Login","Login failed: Couldn't load API details":"Login failed: Couldn't load API details","Login failed: {0}":["Login failed: ",["0"]],"Login/JWT authorization":"Login/JWT authorization","Logo":"Logo","Logout":"Logout","Loudness Normalization":"Loudness Normalization","MB":"MB","Main Source":"Main Source","Main channel":"Main channel","Main channel not found":"Main channel not found","Main channel saved":"Main channel saved","Main page channel (index.html).":"Main page channel (index.html).","Maintainer:":"Maintainer:","Make the channel available as an RTMP stream (experimental).":"Make the channel available as an RTMP stream (experimental).","Make the channel available as an SRT stream (experimental).":"Make the channel available as an SRT stream (experimental).","Master playlist (increases browser/client compatibility)":"Master playlist (increases browser/client compatibility)","Maximum allowed cache size, 0 for unlimited.":"Maximum allowed cache size, 0 for unlimited.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Maximum allowed megabytes to consume from hard disk. 0 for unlimited.","Maximum bandwidth Mbit/s":"Maximum bandwidth Mbit/s","Maximum delay in milliseconds.":"Maximum delay in milliseconds.","Maximum file size (Megabytes)":"Maximum file size (Megabytes)","Maximum file size to put in cache.":"Maximum file size to put in cache.","Maximum log histroy":"Maximum log histroy","Maximum log lines":"Maximum log lines","Maximum size (Megabytes)":"Maximum size (Megabytes)","Maximum viewer idle time (Seconds)":"Maximum viewer idle time (Seconds)","Maximum viewers":"Maximum viewers","Memory":"Memory","Meta information":"Meta information","Metadata":"Metadata","Mold":"Mold","More about Twitter's copyright <0>here.":"More about Twitter's copyright <0>here.","More about YouTube's copyright <0>here.":"More about YouTube's copyright <0>here.","More about licenses here":"More about licenses here","More about the service":"More about the service","Mute":"Mute","Mute a channel.":"Mute a channel.","Mute left":"Mute left","Mute right":"Mute right","Name":"Name","Name for the template. If the name already exists, it will be overwritten.":"Name for the template. If the name already exists, it will be overwritten.","Network":"Network","Network source":"Network source","Next":"Next","Next: Audio":"Next: Audio","Next: Video setup":"Next: Video setup","No":"No","No audio":"No audio","No audio stream available":"No audio stream available","No input device available":"No input device available","No live stream was detected. Please check the software that sends the stream.":"No live stream was detected. Please check the software that sends the stream.","No source selected":"No source selected","No sources available":"No sources available","No suitable encoder found.":"No suitable encoder found.","No suitable filter found.":"No suitable filter found.","No video":"No video","No video stream available":"No video stream available","Node ID":"Node ID","Noise":"Noise","None":"None","Notes":"Notes","Number of log lines to keep.":"Number of log lines to keep.","Number of logs to keep for each process.":"Number of logs to keep for each process.","OK":"OK","One referrer per line, e.g. http://www.example.com":"One referrer per line, e.g. http://www.example.com","Open":"Open","Pan":"Pan","Passphrase":"Passphrase","Passphrase for SRT encryption.":"Passphrase for SRT encryption.","Passphrase must be between 10 and 79 characters long":"Passphrase must be between 10 and 79 characters long","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.","Password":"Password","Password for authorization.":"Password for authorization.","Password for the device.":"Password for the device.","Persist viewer statistics":"Persist viewer statistics","Pixel format":"Pixel format","Plan: <0>Starter":"Plan: <0>Starter","Platforms":"Platforms","Playback":"Playback","Player":"Player","Player URL":"Player URL","Player settings saved":"Player settings saved","Playersite":"Playersite","Playlist":"Playlist","Playlist version (M3U8). Version 3 has the best browser/client compatibility.":"Playlist version (M3U8). Version 3 has the best browser/client compatibility.","Please check the <0>process log":"Please check the <0>process log","Please contact the operator of the service and check what happens.":"Please contact the operator of the service and check what happens.","Please get in touch with the operator of the service and check what happens.":"Please get in touch with the operator of the service and check what happens.","Please select a file to upload.":"Please select a file to upload.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.","Please wait. Probe stream data ...":"Please wait. Probe stream data ...","Please wait. Setting up the stream ...":"Please wait. Setting up the stream ...","Port":"Port","Position":"Position","Preset":"Preset","Primary stream":"Primary stream","Primary stream key":"Primary stream key","Probe":"Probe","Process":"Process","Process control":"Process control","Process debug report":"Process debug report","Process details":"Process details","Process report":"Process report","Processing & Control":"Processing & Control","Profile":"Profile","Protocol":"Protocol","Protocols":"Protocols","Public domain/s":"Public domain/s","Publication service not found":"Publication service not found","Publication website settings saved":"Publication website settings saved","Publications":"Publications","Pull Mode":"Pull Mode","Pull or recieve the data:":"Pull or recieve the data:","Quality":"Quality","RGB test pattern":"RGB test pattern","RTMP":"RTMP","RTMP Port":"RTMP Port","RTMP app for publishing.":"RTMP app for publishing.","RTMP output":"RTMP output","RTMP server":"RTMP server","RTMP server is not enabled":"RTMP server is not enabled","RTMP server listen address.":"RTMP server listen address.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'","RTMPS Port":"RTMPS Port","RTMPS server":"RTMPS server","RTMPS server listen address.":"RTMPS server listen address.","RTSP":"RTSP","Raspberry Pi camera":"Raspberry Pi camera","Rate control":"Rate control","Ratio":"Ratio","Read input at native speed":"Read input at native speed","Receive Mode":"Receive Mode","Reconnect":"Reconnect","Reconnect delay (seconds)":"Reconnect delay (seconds)","Reconnecting in {0}s":["Reconnecting in ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["Reconnecting to Restreamer Core failed for the last ",["RETRIES"]," seconds."],"Reconnecting to Restreamer Core failed.":"Reconnecting to Restreamer Core failed.","Refresh":"Refresh","Region":"Region","Reload":"Reload","Remove the oldest entries if the /memfs is full":"Remove the oldest entries if the /memfs is full","Requires activation":"Requires activation","Restart":"Restart","Restart required":"Restart required","Restarting":"Restarting","Restarting Restreamer Core ...":"Restarting Restreamer Core ...","Restarting the application failed.":"Restarting the application failed.","Restreamer Service":"Restreamer Service","Retrieving stream data ...":"Retrieving stream data ...","Retry":"Retry","Rotate":"Rotate","Rule":"Rule","SRT":"SRT","SRT output":"SRT output","SRT server":"SRT server","SRT server is not enabled":"SRT server is not enabled","SRT server listen address.":"SRT server listen address.","SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'":"SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'","Sampling":"Sampling","Save":"Save","Scale":"Scale","Seconds to keep files in cache.":"Seconds to keep files in cache.","Seconds until a process is restarted.":"Seconds until a process is restarted.","Seconds until a staled process is terminated.":"Seconds until a staled process is terminated.","Seconds until the snapshot/thumbnail of the video source is updated.":"Seconds until the snapshot/thumbnail of the video source is updated.","Security":"Security","Security passphrase":"Security passphrase","Security token":"Security token","Seekbar color":"Seekbar color","Segment length (seconds)":"Segment length (seconds)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Segment will be cut on the following keyframe after this time has passed. 2 is recommended.","Segmentation":"Segmentation","Select RTMP or SRT (if enabled) for less latency.":"Select RTMP or SRT (if enabled) for less latency.","Select a device:":"Select a device:","Select audio source:":"Select audio source:","Select source ...":"Select source ...","Select video source:":"Select video source:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).","Select your encoding setting:":"Select your encoding setting:","Select your filter settings (optional):":"Select your filter settings (optional):","Selected":"Selected","Selected channel":"Selected channel","Selection":"Selection","Send anonymous metrics (helps us for future development)":"Send anonymous metrics (helps us for future development)","Send stream to this address:":"Send stream to this address:","Send video to Framebuffer":"Send video to Framebuffer","Server":"Server","Server URL":"Server URL","Service":"Service","Service name":"Service name","Service token for monitoring.":"Service token for monitoring.","Sessions":"Sessions","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.","Setting for connection to the service.":"Setting for connection to the service.","Settings":"Settings","Settings (expert mode)":"Settings (expert mode)","Settings for /data path. The access is protected by":"Settings for /data path. The access is protected by","Settings for /memfs path.":"Settings for /memfs path.","Settings saved. All changes will be applied after restarting the application.":"Settings saved. All changes will be applied after restarting the application.","Share button":"Share button","Shows a reference to the project.":"Shows a reference to the project.","Sign up (free)":"Sign up (free)","Silence":"Silence","Silence Audio":"Silence Audio","Sine":"Sine","Sitename":"Sitename","Size":"Size","Snapshot":"Snapshot","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Socket timeout (microseconds)","Software":"Software","Source":"Source","Source & Encoding":"Source & Encoding","Speed":"Speed","Stale timeout (seconds)":"Stale timeout (seconds)","Statistics":"Statistics","Storage":"Storage","Stores the viewer statistics to the disk.":"Stores the viewer statistics to the disk.","Stream":"Stream","Stream URL":"Stream URL","Stream key":"Stream key","Stream name":"Stream name","Stream names":"Stream names","Stream source for publication service (experimental).":"Stream source for publication service (experimental).","Support datarhei Restreamer":"Support datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.","System":"System","Template":"Template","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Template to be used for creating the publication website. The delete button removes the selection from the system.","Terms":"Terms","Test pattern":"Test pattern","Test pattern (extended)":"Test pattern (extended)","Text colors":"Text colors","The RTMP output requires the RTMP Server.":"The RTMP output requires the RTMP Server.","The SRT output requires the SRT Server.":"The SRT output requires the SRT Server.","The amplitude (0.0 - 1.0) of the generated audio stream":"The amplitude (0.0 - 1.0) of the generated audio stream","The application is using an older version of the settings.":"The application is using an older version of the settings.","The available FFmpeg binary doesn't support any of the required protocols.":"The available FFmpeg binary doesn't support any of the required protocols.","The bitrate of the audio stream.":"The bitrate of the audio stream.","The carrier frequency":"The carrier frequency","The channel \"{0}\" could not be deleted":["The channel \"",["0"],"\" could not be deleted"],"The channel \"{0}\" has been deleted":["The channel \"",["0"],"\" has been deleted"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"The deletion of this channel can not be recovered. All publications of this channel will be removed.","The input profile is not complete. Please define a video and audio source.":"The input profile is not complete. Please define a video and audio source.","The layout of the audio stream.":"The layout of the audio stream.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.","The noise color":"The noise color","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.","The publication service \"{0}\" could not be deleted":["The publication service \"",["0"],"\" could not be deleted"],"The publication service \"{0}\" has been created":["The publication service \"",["0"],"\" has been created"],"The publication service \"{0}\" has been deleted":["The publication service \"",["0"],"\" has been deleted"],"The publication service has been created":"The publication service has been created","The sample rate of the audio stream.":"The sample rate of the audio stream.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["The selected file is too big (",["0"]," bytes). Only ",["1"]," bytes are allowed."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["The selected file type (",["0"],") is not allowed. Allowed file types are ",["types"]],"The settings for \"{0}\" have been saved":["The settings for \"",["0"],"\" have been saved"],"The source doesn't provide any audio streams.":"The source doesn't provide any audio streams.","The source doesn't provide any audio streams. Please check the <0>probe details.":"The source doesn't provide any audio streams. Please check the <0>probe details.","The source doesn't provide any compatible audio streams.":"The source doesn't provide any compatible audio streams.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"The source doesn't provide any compatible video streams. Please check the <0>requirements.","The source doesn't provide any video streams. Please check the <0>probe details.":"The source doesn't provide any video streams. Please check the <0>probe details.","The source doesn't provide any video streams. Please check the device.":"The source doesn't provide any video streams. Please check the device.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.","The video source is compatible. Select the desired resolution:":"The video source is compatible. Select the desired resolution:","There are updates available. Here you get more information.":"There are updates available. Here you get more information.","There was a problem storing the settings. Settings not saved.":"There was a problem storing the settings. Settings not saved.","There was an error connecting to Restreamer Core at {0}.":["There was an error connecting to Restreamer Core at ",["0"],"."],"There was an error during upload: {0}":["There was an error during upload: ",["0"]],"There was an error setting up the stream.":"There was an error setting up the stream.","There were some errors in the settings. Settings not saved.":"There were some errors in the settings. Settings not saved.","There's no login method available.":"There's no login method available.","This is a dummy service that explains to you the concepts of service.":"This is a dummy service that explains to you the concepts of service.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..","This is to mention the copyright regulations for the target of this service.":"This is to mention the copyright regulations for the target of this service.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.","This protocol is unknown or not supported by the available FFmpeg binary.":"This protocol is unknown or not supported by the available FFmpeg binary.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"This source cannot be edited while it is in use. To continue, you have to disconnect the source.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["This version of the UI doesn't support the available FFmpeg binary (",["0"],"). The UI requires ",["1"],". Please use a supported FFmpeg binary."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["This version of the UI doesn't support the connected Core (",["0"],"). The UI requires ",["1"],". Please use a compatible version of the UI."],"This version of the UI is compatible.":"This version of the UI is compatible.","Time until an inactive viewer connection is treated as closed.":"Time until an inactive viewer connection is treated as closed.","Token":"Token","Transmit a Livestream to a Telegram Channel.":"Transmit a Livestream to a Telegram Channel.","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Transmit the main source to an SRT Server. More details about the settings can be found <0>here.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Transmit the main source to an UDP Server. More details about the settings can be found <0>here.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.","Transmit to a Azure Media Services. More details can be found <0>here.":"Transmit to a Azure Media Services. More details can be found <0>here.","Transmit to linkedIn. More details can be found <0>here.":"Transmit to linkedIn. More details can be found <0>here.","Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.":"Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.","Tune":"Tune","UDP transport":"UDP transport","Unable to load the config.":"Unable to load the config.","Unique ident on the service.":"Unique ident on the service.","Unknown":"Unknown","Unselected":"Unselected","Upload":"Upload","Uploading the file failed":"Uploading the file failed","Uploading the logo failed":"Uploading the logo failed","Uptime":"Uptime","Use Auth0 for your running Restreamer Core. More <0>details.":"Use Auth0 for your running Restreamer Core. More <0>details.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.","User registration":"User registration","Username":"Username","Username for authorization.":"Username for authorization.","Username for the device.":"Username for the device.","VPU ID":"VPU ID","Vertical Flip":"Vertical Flip","Video":"Video","Video device":"Video device","Video settings":"Video settings","Video setup":"Video setup","Video source":"Video source","Viewer":"Viewer","Virtual source":"Virtual source","Volume":"Volume","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.","Where to store the HLS playlist and segments. In-Memory is recommended.":"Where to store the HLS playlist and segments. In-Memory is recommended.","Write protection":"Write protection","YUV test pattern":"YUV test pattern","Yes":"Yes","You can't abort the wizard because at least one input must be defined.":"You can't abort the wizard because at least one input must be defined.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?","You have to reconnect manually":"You have to reconnect manually","You have unsaved changes. Please save them before you can control the service again.":"You have unsaved changes. Please save them before you can control the service again.","Your stream needs to be encoded, but there's no suitable encoder available.":"Your stream needs to be encoded, but there's no suitable encoder available.","Your stream needs to be encoded. Choose the desired encoder:":"Your stream needs to be encoded. Choose the desired encoder:","blue":"blue","brown":"brown","iframe code":"iframe code","kbit/s":"kbit/s","pink":"pink","velvet":"velvet","violet":"violet","white":"white"}}; \ No newline at end of file diff --git a/src/locales/en/messages.po b/src/locales/en/messages.po index 1c055d0..11210b4 100644 --- a/src/locales/en/messages.po +++ b/src/locales/en/messages.po @@ -13,12 +13,20 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: src/misc/controls/HLS.js:81 +msgid "6 (+ guaranteed to start with a Key frame)" +msgstr "6 (+ guaranteed to start with a Key frame)" + +#: src/misc/controls/HLS.js:84 +msgid "7 (+ fragmented MP4 format)" +msgstr "7 (+ fragmented MP4 format)" + #: src/misc/EncodingSelect.js:224 msgid "<0>Compatibility list" msgstr "<0>Compatibility list" -#: src/views/Edit/Profile.js:380 -#: src/views/Edit/Profile.js:510 +#: src/views/Edit/Profile.js:393 +#: src/views/Edit/Profile.js:543 msgid "<0>Show probe details" msgstr "<0>Show probe details" @@ -26,7 +34,7 @@ msgstr "<0>Show probe details" msgid "ALSA" msgstr "ALSA" -#: src/views/Settings.js:907 +#: src/views/Settings.js:974 msgid "API endpoint not found. Settings not saved." msgstr "API endpoint not found. Settings not saved." @@ -35,16 +43,16 @@ msgid "AVFoundation" msgstr "AVFoundation" #: src/misc/ChannelList.js:356 -#: src/views/Edit/Profile.js:410 -#: src/views/Edit/Wizard/index.js:1153 -#: src/views/Edit/index.js:549 -#: src/views/Edit/index.js:575 -#: src/views/Edit/index.js:594 -#: src/views/Publication/Add.js:362 -#: src/views/Publication/Edit.js:601 -#: src/views/Settings.js:1972 -#: src/views/Settings.js:2031 -#: src/views/Settings.js:2053 +#: src/views/Edit/Profile.js:433 +#: src/views/Edit/Wizard/index.js:1168 +#: src/views/Edit/index.js:603 +#: src/views/Edit/index.js:629 +#: src/views/Edit/index.js:648 +#: src/views/Publication/Add.js:364 +#: src/views/Publication/Edit.js:563 +#: src/views/Settings.js:2123 +#: src/views/Settings.js:2182 +#: src/views/Settings.js:2204 msgid "Abort" msgstr "Abort" @@ -57,11 +65,11 @@ msgstr "About" msgid "Add" msgstr "Add" -#: src/views/Publication/Add.js:321 +#: src/views/Publication/Add.js:323 msgid "Add Publication" msgstr "Add Publication" -#: src/views/Playersite.js:692 +#: src/views/Playersite.js:708 msgid "Add external widgets and styles to the publication site. You can find some examples on the help page." msgstr "Add external widgets and styles to the publication site. You can find some examples on the help page." @@ -69,18 +77,20 @@ msgstr "Add external widgets and styles to the publication site. You can find so msgid "Add new channel" msgstr "Add new channel" -#: src/views/Publication/Add.js:324 +#: src/views/Publication/Add.js:326 msgid "Add: {0}" msgstr "Add: {0}" -#: src/views/Edit/Sources/Network.js:355 +#: src/views/Edit/Sources/Network.js:421 #: src/views/Edit/Wizard/Sources/Network.js:66 +#: src/views/Publication/Services/Azure.js:98 #: src/views/Publication/Services/Brightcove.js:95 -#: src/views/Publication/Services/Core.js:100 +#: src/views/Publication/Services/Core.js:116 #: src/views/Publication/Services/DASH.js:192 #: src/views/Publication/Services/HLS.js:181 #: src/views/Publication/Services/Icecast.js:160 #: src/views/Publication/Services/Image2.js:126 +#: src/views/Publication/Services/Linkedin.js:93 #: src/views/Publication/Services/MPEGTS.js:160 #: src/views/Publication/Services/RTMP.js:132 #: src/views/Publication/Services/RTSP.js:150 @@ -88,23 +98,23 @@ msgstr "Add: {0}" #: src/views/Publication/Services/SRT.js:161 #: src/views/Publication/Services/UDP.js:127 #: src/views/Publication/Services/WOWZA.js:132 -#: src/views/Settings.js:1302 +#: src/views/Settings.js:1370 msgid "Address" msgstr "Address" -#: src/views/Playersite.js:629 +#: src/views/Playersite.js:645 msgid "Address for the background image." msgstr "Address for the background image." -#: src/views/Settings.js:1331 +#: src/views/Settings.js:1399 msgid "Address to listen on for HTTP requests." msgstr "Address to listen on for HTTP requests." -#: src/views/Settings.js:1344 +#: src/views/Settings.js:1412 msgid "Address to listen on for HTTPS requests." msgstr "Address to listen on for HTTPS requests." -#: src/views/Playersite.js:514 +#: src/views/Playersite.js:530 msgid "Adjust publication site colors and background as you like." msgstr "Adjust publication site colors and background as you like." @@ -112,7 +122,7 @@ msgstr "Adjust publication site colors and background as you like." msgid "Advanced monitoring" msgstr "Advanced monitoring" -#: src/views/Edit/Sources/Network.js:396 +#: src/views/Edit/Sources/Network.js:474 #: src/views/Publication/Services/DASH.js:204 #: src/views/Publication/Services/HLS.js:193 #: src/views/Publication/Services/Icecast.js:170 @@ -125,27 +135,32 @@ msgstr "Advanced monitoring" msgid "Advanced settings" msgstr "Advanced settings" -#: src/views/Edit/Wizard/index.js:287 +#: src/views/Edit/Wizard/index.js:302 msgid "Advanced setup" msgstr "Advanced setup" +#: src/views/Playersite.js:433 +#: src/views/Publication/Player.js:443 +msgid "AirPlay" +msgstr "AirPlay" + #: src/views/Login.js:325 msgid "Alerting by email" msgstr "Alerting by email" -#: src/views/Publication/Add.js:344 +#: src/views/Publication/Add.js:346 msgid "All" msgstr "All" -#: src/views/Settings.js:1163 +#: src/views/Settings.js:1231 msgid "All important system settings." msgstr "All important system settings." -#: src/views/Settings.js:1478 +#: src/views/Settings.js:1548 msgid "Allow all referrer" msgstr "Allow all referrer" -#: src/views/Settings.js:1518 +#: src/views/Settings.js:1588 msgid "Allow counting how many viewers the stream has." msgstr "Allow counting how many viewers the stream has." @@ -157,8 +172,8 @@ msgstr "Amplitude" msgid "An environment variable sets this value." msgstr "An environment variable sets this value." -#: src/views/Publication/Services/Core.js:107 -#: src/views/Settings.js:1816 +#: src/views/Publication/Services/Core.js:124 +#: src/views/Settings.js:1897 msgid "App" msgstr "App" @@ -168,11 +183,11 @@ msgstr "App" msgid "Application" msgstr "Application" -#: src/views/Edit/Wizard/index.js:1172 +#: src/views/Edit/Wizard/index.js:1187 msgid "Are you sure you want to abort the wizard?" msgstr "Are you sure you want to abort the wizard?" -#: src/views/Publication/Add.js:492 +#: src/views/Publication/Add.js:467 msgid "Audio" msgstr "Audio" @@ -185,18 +200,18 @@ msgstr "Audio Device" msgid "Audio device" msgstr "Audio device" -#: src/views/Edit/Wizard/index.js:875 -#: src/views/Edit/Wizard/index.js:887 +#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:902 msgid "Audio from device" msgstr "Audio from device" -#: src/views/Edit/Profile.js:425 +#: src/views/Edit/Profile.js:448 #: src/views/Edit/ProfileSummary.js:90 -#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Edit.js:506 msgid "Audio settings" msgstr "Audio settings" -#: src/views/Edit/Wizard/index.js:828 +#: src/views/Edit/Wizard/index.js:843 msgid "Audio setup" msgstr "Audio setup" @@ -216,39 +231,39 @@ msgstr "Auth0 is currently not available because this interface is loaded from a msgid "Author" msgstr "Author" -#: src/views/Settings.js:1143 -#: src/views/Settings.js:1415 +#: src/views/Settings.js:1210 +#: src/views/Settings.js:1483 msgid "Authorization" msgstr "Authorization" -#: src/misc/controls/HLS.js:83 +#: src/misc/controls/HLS.js:123 msgid "Automatic cleanup of all media data" msgstr "Automatic cleanup of all media data" -#: src/views/Publication/Player.js:437 +#: src/views/Publication/Player.js:440 msgid "Autoplay" msgstr "Autoplay" -#: src/views/Playersite.js:445 +#: src/views/Playersite.js:461 msgid "Available" msgstr "Available" -#: src/views/Edit/Profile.js:541 -#: src/views/Edit/Wizard/index.js:408 -#: src/views/Edit/Wizard/index.js:647 -#: src/views/Edit/Wizard/index.js:912 -#: src/views/Edit/Wizard/index.js:1024 -#: src/views/Edit/Wizard/index.js:1082 -#: src/views/Edit/Wizard/index.js:1164 -#: src/views/Publication/Add.js:528 +#: src/views/Edit/Profile.js:584 +#: src/views/Edit/Wizard/index.js:423 +#: src/views/Edit/Wizard/index.js:662 +#: src/views/Edit/Wizard/index.js:927 +#: src/views/Edit/Wizard/index.js:1039 +#: src/views/Edit/Wizard/index.js:1097 +#: src/views/Edit/Wizard/index.js:1179 +#: src/views/Publication/Add.js:492 msgid "Back" msgstr "Back" -#: src/views/Playersite.js:563 +#: src/views/Playersite.js:579 msgid "Background colors" msgstr "Background colors" -#: src/views/Playersite.js:616 +#: src/views/Playersite.js:632 msgid "Background image" msgstr "Background image" @@ -273,7 +288,7 @@ msgstr "Backup stream key" msgid "Bandwidth" msgstr "Bandwidth" -#: src/views/Settings.js:1373 +#: src/views/Settings.js:1441 msgid "Bandwidth control" msgstr "Bandwidth control" @@ -282,7 +297,7 @@ msgid "Banner" msgstr "Banner" #: src/views/Login.js:241 -#: src/views/Settings.js:1420 +#: src/views/Settings.js:1488 msgid "Basic" msgstr "Basic" @@ -295,24 +310,24 @@ msgstr "Beep factor" msgid "Bitrate" msgstr "Bitrate" -#: src/views/Edit/Wizard/index.js:1013 -#: src/views/Edit/index.js:510 +#: src/views/Edit/Wizard/index.js:1028 +#: src/views/Edit/index.js:564 msgid "Briefly describe what the audience will see during the live stream." msgstr "Briefly describe what the audience will see during the live stream." -#: src/views/Publication/Player.js:352 +#: src/views/Publication/Player.js:355 msgid "Button color" msgstr "Button color" -#: src/views/Settings.js:1687 +#: src/views/Settings.js:1757 msgid "Cache for files on /data." msgstr "Cache for files on /data." -#: src/views/Settings.js:1715 +#: src/views/Settings.js:1785 msgid "Cache time (Seconds)" msgstr "Cache time (Seconds)" -#: src/views/Settings.js:1743 +#: src/views/Settings.js:1813 msgid "Cache types" msgstr "Cache types" @@ -324,7 +339,7 @@ msgstr "Capture clicks" msgid "Capture cursor" msgstr "Capture cursor" -#: src/views/Edit/index.js:327 +#: src/views/Edit/index.js:339 msgid "Channel \"{0}\" saved" msgstr "Channel \"{0}\" saved" @@ -332,11 +347,11 @@ msgstr "Channel \"{0}\" saved" msgid "Channels" msgstr "Channels" -#: src/views/Settings.js:1172 +#: src/views/Settings.js:1240 msgid "Check for updates" msgstr "Check for updates" -#: src/views/Publication/Add.js:272 +#: src/views/Publication/Add.js:276 msgid "Check the requirements" msgstr "Check the requirements" @@ -350,8 +365,8 @@ msgstr "Choose an audio stream" #: src/views/Edit/Sources/ALSA.js:96 #: src/views/Edit/Sources/Framebuffer.js:80 -#: src/views/Edit/Sources/Raspicam.js:84 -#: src/views/Edit/Sources/V4L.js:90 +#: src/views/Edit/Sources/Raspicam.js:87 +#: src/views/Edit/Sources/V4L.js:93 msgid "Choose an input device ..." msgstr "Choose an input device ..." @@ -363,16 +378,21 @@ msgstr "Choose codec ..." msgid "Choose tenant ..." msgstr "Choose tenant ..." +#: src/views/Playersite.js:425 +#: src/views/Publication/Player.js:442 +msgid "Chromecast" +msgstr "Chromecast" + #: src/views/Publication/Services/DASH.js:309 #: src/views/Publication/Services/HLS.js:249 msgid "Chunk" msgstr "Chunk" #: src/misc/ModalContent.js:77 -#: src/views/Playersite.js:782 -#: src/views/Publication/Add.js:525 -#: src/views/Publication/Edit.js:565 -#: src/views/Publication/Player.js:447 +#: src/views/Playersite.js:798 +#: src/views/Publication/Add.js:489 +#: src/views/Publication/Edit.js:527 +#: src/views/Publication/Player.js:452 msgid "Close" msgstr "Close" @@ -385,11 +405,11 @@ msgid "Codec" msgstr "Codec" #: src/views/Edit/Sources/VirtualAudio.js:110 -#: src/views/Publication/Player.js:320 +#: src/views/Publication/Player.js:323 msgid "Color" msgstr "Color" -#: src/views/Settings.js:1282 +#: src/views/Settings.js:1350 msgid "Config" msgstr "Config" @@ -410,7 +430,7 @@ msgid "Connected since <0/>" msgstr "Connected since <0/>" #: src/misc/ActionButton.js:12 -#: src/views/Main/index.js:305 +#: src/views/Main/index.js:334 #: src/views/Publication/Process.js:40 msgid "Connecting ..." msgstr "Connecting ..." @@ -424,12 +444,12 @@ msgid "Connecting to Restreamer Core failed probably because of mixed content." msgstr "Connecting to Restreamer Core failed probably because of mixed content." #: src/misc/controls/Metadata.js:70 -#: src/views/Playersite.js:659 -#: src/views/Playersite.js:676 +#: src/views/Playersite.js:675 +#: src/views/Playersite.js:692 msgid "Content" msgstr "Content" -#: src/views/Main/index.js:365 +#: src/views/Main/index.js:394 msgid "Content URL" msgstr "Content URL" @@ -445,7 +465,7 @@ msgstr "Create user" msgid "Creative Commons" msgstr "Creative Commons" -#: src/misc/coders/Encoders/audio/Opus.js:59 +#: src/misc/coders/Encoders/audio/Opus.js:61 #: src/misc/coders/settings/Audio.js:25 #: src/misc/coders/settings/Audio.js:71 #: src/misc/coders/settings/Audio.js:122 @@ -454,14 +474,17 @@ msgstr "Creative Commons" #: src/misc/coders/settings/Video.js:115 #: src/misc/coders/settings/Video.js:181 #: src/misc/coders/settings/Video.js:220 +#: src/misc/filters/audio/Resample.js:63 +#: src/misc/filters/audio/Resample.js:114 +#: src/misc/filters/audio/Volume.js:58 #: src/views/Edit/Sources/ALSA.js:101 #: src/views/Edit/Sources/AVFoundation.js:120 #: src/views/Edit/Sources/AVFoundation.js:153 -#: src/views/Edit/Sources/V4L.js:96 +#: src/views/Edit/Sources/V4L.js:99 msgid "Custom ..." msgstr "Custom ..." -#: src/views/Settings.js:1288 +#: src/views/Settings.js:1356 msgid "Custom JSON config for datarhei Core." msgstr "Custom JSON config for datarhei Core." @@ -478,11 +501,11 @@ msgstr "Custom audio index" msgid "Custom bitrate (kbit/s)" msgstr "Custom bitrate (kbit/s)" -#: src/views/Playersite.js:687 +#: src/views/Playersite.js:703 msgid "Custom code injection" msgstr "Custom code injection" -#: src/misc/coders/Encoders/audio/Opus.js:85 +#: src/misc/coders/Encoders/audio/Opus.js:87 msgid "Custom delay" msgstr "Custom delay" @@ -503,10 +526,12 @@ msgid "Custom keyframe interval" msgstr "Custom keyframe interval" #: src/misc/coders/settings/Audio.js:98 +#: src/misc/filters/audio/Resample.js:90 msgid "Custom layout" msgstr "Custom layout" #: src/misc/coders/settings/Audio.js:149 +#: src/misc/filters/audio/Resample.js:141 msgid "Custom sampling (Hz)" msgstr "Custom sampling (Hz)" @@ -518,7 +543,7 @@ msgstr "Custom scale" msgid "Custom size" msgstr "Custom size" -#: src/views/Edit/Sources/V4L.js:110 +#: src/views/Edit/Sources/V4L.js:113 msgid "Custom video device" msgstr "Custom video device" @@ -536,8 +561,12 @@ msgstr "Data copied to clipboard" msgid "Death color" msgstr "Death color" +#: src/misc/filters/audio/Volume.js:74 +msgid "Decibels (dB)" +msgstr "Decibels (dB)" + #: src/misc/EncodingSelect.js:210 -#: src/views/Edit/Wizard/index.js:628 +#: src/views/Edit/Wizard/index.js:643 msgid "Decoder" msgstr "Decoder" @@ -545,13 +574,13 @@ msgstr "Decoder" #: src/views/Edit/Sources/AVFoundation.js:149 #: src/views/Edit/Wizard/Sources/AVFoundation.js:76 #: src/views/Edit/Wizard/Sources/AVFoundation.js:105 -#: src/views/Playersite.js:451 -#: src/views/Playersite.js:526 -#: src/views/Playersite.js:570 +#: src/views/Playersite.js:467 +#: src/views/Playersite.js:542 +#: src/views/Playersite.js:586 msgid "Default" msgstr "Default" -#: src/misc/coders/Encoders/audio/Opus.js:84 +#: src/misc/coders/Encoders/audio/Opus.js:86 msgid "Delay" msgstr "Delay" @@ -559,15 +588,15 @@ msgstr "Delay" msgid "Delay (ms)" msgstr "Delay (ms)" -#: src/views/Edit/index.js:563 -#: src/views/Edit/index.js:599 -#: src/views/Playersite.js:474 -#: src/views/Publication/Edit.js:574 -#: src/views/Publication/Edit.js:606 +#: src/views/Edit/index.js:617 +#: src/views/Edit/index.js:653 +#: src/views/Playersite.js:490 +#: src/views/Publication/Edit.js:536 +#: src/views/Publication/Edit.js:568 msgid "Delete" msgstr "Delete" -#: src/views/Publication/Edit.js:611 +#: src/views/Publication/Edit.js:573 msgid "Deleting a publication service cannot be reversed. The publication stops immediately." msgstr "Deleting a publication service cannot be reversed. The publication stops immediately." @@ -582,12 +611,12 @@ msgid "Description" msgstr "Description" #: src/views/Playersite.js:352 -#: src/views/Playersite.js:509 +#: src/views/Playersite.js:525 msgid "Design" msgstr "Design" #: src/views/Edit/Sources/Framebuffer.js:87 -#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:905 #: src/views/Publication/Services/Framebuffer.js:93 msgid "Device" msgstr "Device" @@ -598,7 +627,7 @@ msgstr "Device" msgid "Disconnect" msgstr "Disconnect" -#: src/views/Edit/index.js:580 +#: src/views/Edit/index.js:634 msgid "Disconnect & Continue" msgstr "Disconnect & Continue" @@ -607,12 +636,13 @@ msgstr "Disconnect & Continue" msgid "Disconnecting ..." msgstr "Disconnecting ..." -#: src/views/Settings.js:1650 +#: src/misc/controls/HLS.js:70 +#: src/views/Settings.js:1720 msgid "Disk" msgstr "Disk" -#: src/views/Settings.js:1684 -#: src/views/Settings.js:1692 +#: src/views/Settings.js:1754 +#: src/views/Settings.js:1762 msgid "Disk cache" msgstr "Disk cache" @@ -621,19 +651,19 @@ msgstr "Disk cache" msgid "Disk storage" msgstr "Disk storage" -#: src/views/Settings.js:2063 +#: src/views/Settings.js:2214 msgid "Do you really want to restart the application now?" msgstr "Do you really want to restart the application now?" -#: src/views/Edit/index.js:591 +#: src/views/Edit/index.js:645 msgid "Do you want to delete \"{0}\"?" msgstr "Do you want to delete \"{0}\"?" -#: src/views/Publication/Edit.js:598 +#: src/views/Publication/Edit.js:560 msgid "Do you want to delete {title}?" msgstr "Do you want to delete {title}?" -#: src/views/Edit/index.js:572 +#: src/views/Edit/index.js:626 msgid "Do you want to disconnect \"{0}\"?" msgstr "Do you want to disconnect \"{0}\"?" @@ -658,7 +688,7 @@ msgstr "Documentation" msgid "Dup. frames" msgstr "Dup. frames" -#: src/views/Publication/Player.js:285 +#: src/views/Publication/Player.js:288 msgid "EDIT: Player" msgstr "EDIT: Player" @@ -666,27 +696,41 @@ msgstr "EDIT: Player" msgid "EDIT: Publication Website" msgstr "EDIT: Publication Website" -#: src/views/Edit/index.js:391 +#: src/misc/controls/HLS.js:78 +msgid "EXT-X-VERSION" +msgstr "EXT-X-VERSION" + +#: src/views/Edit/index.js:403 msgid "Edit" msgstr "Edit" -#: src/views/Edit/index.js:417 +#: src/views/Edit/index.js:429 msgid "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." msgstr "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." -#: src/views/Publication/Edit.js:377 +#: src/views/Publication/Edit.js:384 msgid "Edit: {title}" msgstr "Edit: {title}" -#: src/views/Publication/Player.js:319 +#: src/views/Publication/Player.js:322 msgid "Embed" msgstr "Embed" -#: src/views/Edit/Sources/Network.js:577 +#: src/misc/controls/RTMP.js:48 +#: src/misc/controls/SRT.js:48 +msgid "Enable" +msgstr "Enable" + +#: src/views/Edit/Sources/Network.js:684 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:55 msgid "Enable RTMP server ..." msgstr "Enable RTMP server ..." +#: src/views/Edit/Sources/Network.js:733 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:55 +msgid "Enable SRT server ..." +msgstr "Enable SRT server ..." + #: src/views/Edit/Sources/VirtualAudio.js:162 msgid "Enable a periodic beep every second with this value times the carrier frequency" msgstr "Enable a periodic beep every second with this value times the carrier frequency" @@ -696,10 +740,15 @@ msgstr "Enable a periodic beep every second with this value times the carrier fr msgid "Enable backup stream" msgstr "Enable backup stream" -#: src/views/Publication/Player.js:427 +#: src/views/Publication/Player.js:430 msgid "Enable nerd statistics" msgstr "Enable nerd statistics" +#: src/misc/controls/RTMP.js:70 +#: src/misc/controls/SRT.js:70 +msgid "Enable now" +msgstr "Enable now" + #: src/views/Publication/Services/Dummy.js:277 #: src/views/Publication/Services/Facebook.js:138 msgid "Enable primary stream" @@ -709,23 +758,21 @@ msgstr "Enable primary stream" msgid "Enable snapshots" msgstr "Enable snapshots" -#: src/views/Settings.js:1433 +#: src/views/Settings.js:1503 msgid "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." msgstr "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." -#: src/views/Settings.js:1593 +#: src/views/Settings.js:1663 msgid "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." msgstr "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." -#: src/views/Edit/Wizard/index.js:634 +#: src/views/Edit/Wizard/index.js:649 msgid "Encoder" msgstr "Encoder" -#: src/views/Edit/Summary.js:66 -#: src/views/Publication/Add.js:374 -#: src/views/Publication/Add.js:466 -#: src/views/Publication/Edit.js:388 -#: src/views/Publication/Edit.js:505 +#: src/views/Edit/Summary.js:95 +#: src/views/Publication/Add.js:441 +#: src/views/Publication/Edit.js:478 msgid "Encoding" msgstr "Encoding" @@ -743,7 +790,7 @@ msgstr "Enter a name for the new channel." msgid "Enter password" msgstr "Enter password" -#: src/views/Edit/Sources/Network.js:348 +#: src/views/Edit/Sources/Network.js:414 #: src/views/Edit/Wizard/Sources/Network.js:59 msgid "Enter the address of your network source:" msgstr "Enter the address of your network source:" @@ -752,15 +799,15 @@ msgstr "Enter the address of your network source:" msgid "Enter username" msgstr "Enter username" -#: src/misc/coders/Encoders/video/H264VideoToolbox.js:61 +#: src/misc/coders/Encoders/video/H264VideoToolbox.js:64 msgid "Entropy coder" msgstr "Entropy coder" -#: src/views/Edit/Wizard/index.js:1118 +#: src/views/Edit/Wizard/index.js:1133 #: src/views/Incompatible.js:30 #: src/views/Invalid.js:29 #: src/views/Publication/Process.js:63 -#: src/views/Settings.js:1109 +#: src/views/Settings.js:1176 msgid "Error" msgstr "Error" @@ -770,40 +817,40 @@ msgstr "Error" msgid "Error while copying data to clipboard" msgstr "Error while copying data to clipboard" -#: src/views/Main/index.js:324 +#: src/views/Main/index.js:353 #: src/views/Publication/Process.js:64 msgid "Error: {0}" msgstr "Error: {0}" -#: src/views/Playersite.js:732 +#: src/views/Playersite.js:748 msgid "Expands the area above the channel list (live chat)." msgstr "Expands the area above the channel list (live chat)." -#: src/views/Playersite.js:752 +#: src/views/Playersite.js:768 msgid "Expands the area under the channel description (comment boxes)." msgstr "Expands the area under the channel description (comment boxes)." -#: src/views/Settings.js:1199 +#: src/views/Settings.js:1267 msgid "Expert mode" msgstr "Expert mode" -#: src/views/Playersite.js:717 +#: src/views/Playersite.js:733 msgid "Extend channel list" msgstr "Extend channel list" -#: src/views/Playersite.js:737 +#: src/views/Playersite.js:753 msgid "Extend content" msgstr "Extend content" -#: src/views/Playersite.js:757 +#: src/views/Playersite.js:773 msgid "Extend footer" msgstr "Extend footer" -#: src/views/Playersite.js:697 +#: src/views/Playersite.js:713 msgid "Extend header" msgstr "Extend header" -#: src/views/Settings.js:1936 +#: src/views/Settings.js:2087 msgid "FFmpeg" msgstr "FFmpeg" @@ -812,7 +859,7 @@ msgstr "FFmpeg" msgid "FPS" msgstr "FPS" -#: src/views/Publication/Add.js:180 +#: src/views/Publication/Add.js:187 msgid "Failed to create publication service ({0})" msgstr "Failed to create publication service ({0})" @@ -820,12 +867,12 @@ msgstr "Failed to create publication service ({0})" msgid "Failed to create publication website files." msgstr "Failed to create publication website files." -#: src/views/Edit/Profile.js:341 -#: src/views/Edit/Profile.js:471 +#: src/views/Edit/Profile.js:354 +#: src/views/Edit/Profile.js:504 msgid "Failed to probe the source. Please check the <0>probe details." msgstr "Failed to probe the source. Please check the <0>probe details." -#: src/utils/restreamer.js:434 +#: src/utils/restreamer.js:446 msgid "Failed to refresh token: {0}" msgstr "Failed to refresh token: {0}" @@ -841,7 +888,7 @@ msgstr "Failed to stop process" msgid "Failed to store player size setting." msgstr "Failed to store player size setting." -#: src/views/Publication/Edit.js:222 +#: src/views/Publication/Edit.js:230 msgid "Failed to store publication service ({0})" msgstr "Failed to store publication service ({0})" @@ -850,15 +897,27 @@ msgid "Failed to update ingest process ({0})" msgstr "Failed to update ingest process ({0})" #: src/views/Edit/index.js:310 +msgid "Failed to update ingest snapshot process ({0})" +msgstr "Failed to update ingest snapshot process ({0})" + +#: src/views/Edit/index.js:316 msgid "Failed to update the player" msgstr "Failed to update the player" -#: src/views/Edit/Wizard/index.js:375 -#: src/views/Edit/Wizard/index.js:838 +#: src/views/Edit/index.js:322 +msgid "Failed to update the playersite" +msgstr "Failed to update the playersite" + +#: src/views/Edit/Wizard/index.js:390 +#: src/views/Edit/Wizard/index.js:853 msgid "Failed to verify the source. Please check the address." msgstr "Failed to verify the source. Please check the address." -#: src/views/Edit/Profile.js:549 +#: src/views/Edit/Summary.js:101 +msgid "Filter" +msgstr "Filter" + +#: src/views/Edit/Profile.js:592 msgid "Finish" msgstr "Finish" @@ -866,15 +925,15 @@ msgstr "Finish" msgid "Flags" msgstr "Flags" -#: src/views/Playersite.js:772 +#: src/views/Playersite.js:788 msgid "For Javascripts." msgstr "For Javascripts." -#: src/views/Playersite.js:712 +#: src/views/Playersite.js:728 msgid "For Stylesheets." msgstr "For Stylesheets." -#: src/views/Edit/Sources/Network.js:439 +#: src/views/Edit/Sources/Network.js:521 msgid "Force input framerate" msgstr "Force input framerate" @@ -891,7 +950,7 @@ msgid "Framebuffer" msgstr "Framebuffer" #: src/misc/coders/settings/Video.js:135 -#: src/views/Edit/Sources/Network.js:452 +#: src/views/Edit/Sources/Network.js:534 msgid "Framerate" msgstr "Framerate" @@ -899,7 +958,7 @@ msgstr "Framerate" msgid "Frequency (Hz)" msgstr "Frequency (Hz)" -#: src/views/Publication/Services/Core.js:129 +#: src/views/Publication/Services/Core.js:154 #: src/views/Publication/Services/Facebook.js:115 #: src/views/Publication/Services/Facebook.js:133 #: src/views/Publication/Services/Instagram.js:88 @@ -910,13 +969,13 @@ msgstr "Frequency (Hz)" msgid "GET" msgstr "GET" -#: src/views/Edit/Sources/Network.js:471 -#: src/views/Edit/index.js:400 +#: src/views/Edit/Sources/Network.js:553 #: src/views/Edit/index.js:412 +#: src/views/Edit/index.js:424 #: src/views/Playersite.js:350 #: src/views/Playersite.js:363 -#: src/views/Publication/Add.js:372 -#: src/views/Publication/Edit.js:386 +#: src/views/Publication/Add.js:374 +#: src/views/Publication/Edit.js:393 #: src/views/Publication/Services/DASH.js:211 #: src/views/Publication/Services/HLS.js:200 #: src/views/Publication/Services/Icecast.js:177 @@ -924,62 +983,73 @@ msgstr "GET" #: src/views/Publication/Services/RTMP.js:145 #: src/views/Publication/Services/RTSP.js:169 #: src/views/Publication/Services/SRT.js:177 -#: src/views/Settings.js:1138 -#: src/views/Settings.js:1158 +#: src/views/Settings.js:1205 +#: src/views/Settings.js:1226 msgid "General" msgstr "General" -#: src/views/Publication/Player.js:410 +#: src/views/Publication/Player.js:413 msgid "Google Analytics ID" msgstr "Google Analytics ID" -#: src/views/Publication/Player.js:420 +#: src/views/Publication/Player.js:423 msgid "Google Analytics Tracker Name" msgstr "Google Analytics Tracker Name" -#: src/views/Edit/index.js:471 -#: src/views/Main/index.js:369 +#: src/views/Main/index.js:403 msgid "HLS" msgstr "HLS" -#: src/views/Settings.js:1510 +#: src/views/Edit/index.js:483 +msgid "HLS output" +msgstr "HLS output" + +#: src/views/Edit/Wizard/Sources/InternalHLS.js:73 +msgid "HLS server" +msgstr "HLS server" + +#: src/views/Settings.js:1580 msgid "HLS statistic for the In-memory storage" msgstr "HLS statistic for the In-memory storage" -#: src/views/Edit/Sources/Network.js:429 +#: src/views/Edit/Sources/Network.js:511 msgid "HTTP and HTTPS" msgstr "HTTP and HTTPS" -#: src/views/Settings.js:1323 +#: src/views/Settings.js:1391 msgid "HTTP port" msgstr "HTTP port" -#: src/views/Settings.js:1352 +#: src/views/Settings.js:1420 msgid "HTTPS (SSL/TLS)" msgstr "HTTPS (SSL/TLS)" -#: src/views/Settings.js:1336 +#: src/views/Settings.js:1404 msgid "HTTPS port" msgstr "HTTPS port" -#: src/views/Edit/Sources/V4L.js:151 +#: src/views/Edit/Sources/V4L.js:154 #: src/views/Edit/Wizard/Sources/V4L.js:140 msgid "Hardware device" msgstr "Hardware device" -#: src/views/Playersite.js:579 +#: src/views/Playersite.js:595 msgid "Header" msgstr "Header" -#: src/views/Playersite.js:535 +#: src/views/Playersite.js:551 msgid "Headline" msgstr "Headline" +#: src/misc/filters/video/HFlip.js:65 +msgid "Horizontal Flip" +msgstr "Horizontal Flip" + #: src/views/Login.js:319 msgid "Hosted Restreamer interface" msgstr "Hosted Restreamer interface" -#: src/views/Settings.js:1258 +#: src/views/Settings.js:1326 msgid "Human readable name on the service." msgstr "Human readable name on the service." @@ -987,24 +1057,24 @@ msgstr "Human readable name on the service." msgid "IP address" msgstr "IP address" -#: src/views/Settings.js:2008 +#: src/views/Settings.js:2159 msgid "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." msgstr "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." -#: src/views/Settings.js:2002 +#: src/views/Settings.js:2153 msgid "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." msgstr "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." -#: src/views/Settings.js:1525 +#: src/views/Settings.js:1595 msgid "Ignore IP ranges" msgstr "Ignore IP ranges" -#: src/views/Playersite.js:624 -#: src/views/Publication/Player.js:366 +#: src/views/Playersite.js:640 +#: src/views/Publication/Player.js:369 msgid "Image URL" msgstr "Image URL" -#: src/views/Playersite.js:649 +#: src/views/Playersite.js:665 msgid "Imprint" msgstr "Imprint" @@ -1012,7 +1082,8 @@ msgstr "Imprint" msgid "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." msgstr "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." -#: src/views/Settings.js:1577 +#: src/misc/controls/HLS.js:67 +#: src/views/Settings.js:1647 msgid "In-memory" msgstr "In-memory" @@ -1021,39 +1092,35 @@ msgstr "In-memory" msgid "In-memory storage" msgstr "In-memory storage" -#: src/views/Publication/Add.js:269 +#: src/views/Publication/Add.js:273 msgid "Incompatible" msgstr "Incompatible" #: src/misc/coders/settings/Audio.js:67 #: src/misc/coders/settings/Audio.js:118 +#: src/misc/filters/audio/Pan.js:47 +#: src/misc/filters/audio/Resample.js:59 +#: src/misc/filters/audio/Resample.js:110 +#: src/misc/filters/audio/Volume.js:46 msgid "Inherit" msgstr "Inherit" -#: src/views/Playersite.js:707 +#: src/views/Playersite.js:723 msgid "Inject 1" msgstr "Inject 1" -#: src/views/Playersite.js:727 +#: src/views/Playersite.js:743 msgid "Inject 2" msgstr "Inject 2" -#: src/views/Playersite.js:747 +#: src/views/Playersite.js:763 msgid "Inject 3" msgstr "Inject 3" -#: src/views/Playersite.js:767 +#: src/views/Playersite.js:783 msgid "Inject 4" msgstr "Inject 4" -#: src/views/Edit/Wizard/Sources/InternalHLS.js:75 -msgid "Internal HLS server" -msgstr "Internal HLS server" - -#: src/views/Edit/Wizard/Sources/InternalRTMP.js:95 -msgid "Internal RTMP server" -msgstr "Internal RTMP server" - #: src/misc/controls/Snapshot.js:50 msgid "Interval (seconds)" msgstr "Interval (seconds)" @@ -1068,28 +1135,29 @@ msgid "Keyframe interval (seconds)" msgstr "Keyframe interval (seconds)" #: src/misc/coders/settings/Audio.js:97 +#: src/misc/filters/audio/Resample.js:89 msgid "Layout" msgstr "Layout" -#: src/views/Settings.js:1357 +#: src/views/Settings.js:1425 msgid "Let's Encrypt certification" msgstr "Let's Encrypt certification" -#: src/views/Settings.js:1365 +#: src/views/Settings.js:1433 msgid "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." msgstr "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." -#: src/misc/coders/Encoders/video/H264NVENC.js:109 +#: src/misc/coders/Encoders/video/H264NVENC.js:112 msgid "Level" msgstr "Level" -#: src/views/Settings.js:1918 +#: src/views/Settings.js:2069 msgid "Level of system protocol." msgstr "Level of system protocol." -#: src/views/Edit/Wizard/index.js:1061 -#: src/views/Edit/index.js:403 -#: src/views/Edit/index.js:525 +#: src/views/Edit/Wizard/index.js:1076 +#: src/views/Edit/index.js:415 +#: src/views/Edit/index.js:579 msgid "License" msgstr "License" @@ -1097,28 +1165,28 @@ msgstr "License" msgid "Life color" msgstr "Life color" -#: src/views/Playersite.js:606 +#: src/views/Playersite.js:622 msgid "Linecolor" msgstr "Linecolor" -#: src/views/Playersite.js:544 -#: src/views/Publication/Player.js:396 +#: src/views/Playersite.js:560 +#: src/views/Publication/Player.js:399 msgid "Link" msgstr "Link" -#: src/views/Playersite.js:553 +#: src/views/Playersite.js:569 msgid "Link, mouseover" msgstr "Link, mouseover" -#: src/views/Settings.js:1533 +#: src/views/Settings.js:1603 msgid "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." msgstr "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." -#: src/views/Settings.js:1751 +#: src/views/Settings.js:1821 msgid "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." msgstr "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." -#: src/misc/controls/HLS.js:74 +#: src/misc/controls/HLS.js:107 msgid "List size (segments)" msgstr "List size (segments)" @@ -1142,13 +1210,13 @@ msgstr "Live-Streaming to Vimeo Live RTMP Service" msgid "Livesource ID" msgstr "Livesource ID" -#: src/views/Settings.js:1870 +#: src/views/Settings.js:2021 msgid "Log level" msgstr "Log level" #: src/misc/modals/Process.js:90 -#: src/views/Settings.js:1147 -#: src/views/Settings.js:1846 +#: src/views/Settings.js:1215 +#: src/views/Settings.js:1997 msgid "Logging" msgstr "Logging" @@ -1159,23 +1227,23 @@ msgstr "Logging" msgid "Login" msgstr "Login" -#: src/utils/restreamer.js:263 #: src/utils/restreamer.js:268 -#: src/utils/restreamer.js:297 +#: src/utils/restreamer.js:273 #: src/utils/restreamer.js:302 +#: src/utils/restreamer.js:307 msgid "Login failed: Couldn't load API details" msgstr "Login failed: Couldn't load API details" -#: src/utils/restreamer.js:254 -#: src/utils/restreamer.js:288 +#: src/utils/restreamer.js:259 +#: src/utils/restreamer.js:293 msgid "Login failed: {0}" msgstr "Login failed: {0}" -#: src/views/Settings.js:1425 +#: src/views/Settings.js:1493 msgid "Login/JWT authorization" msgstr "Login/JWT authorization" -#: src/views/Publication/Player.js:321 +#: src/views/Publication/Player.js:324 msgid "Logo" msgstr "Logo" @@ -1183,24 +1251,28 @@ msgstr "Logo" msgid "Logout" msgstr "Logout" +#: src/misc/filters/audio/Loudnorm.js:66 +msgid "Loudness Normalization" +msgstr "Loudness Normalization" + #: src/Footer.js:208 msgid "MB" msgstr "MB" -#: src/views/Edit/index.js:380 +#: src/views/Edit/index.js:392 msgid "Main Source" msgstr "Main Source" -#: src/views/Main/index.js:260 +#: src/views/Main/index.js:289 #: src/views/Playersite.js:389 msgid "Main channel" msgstr "Main channel" -#: src/views/Publication/Player.js:102 +#: src/views/Publication/Player.js:99 msgid "Main channel not found" msgstr "Main channel not found" -#: src/views/Edit/Wizard/index.js:188 +#: src/views/Edit/Wizard/index.js:194 msgid "Main channel saved" msgstr "Main channel saved" @@ -1208,63 +1280,70 @@ msgstr "Main channel saved" msgid "Main page channel (index.html)." msgstr "Main page channel (index.html)." -#: src/views/Publication/Add.js:411 -#: src/views/Publication/Add.js:444 -#: src/views/Publication/Add.js:511 -#: src/views/Publication/Edit.js:419 -#: src/views/Publication/Edit.js:483 -#: src/views/Publication/Edit.js:552 +#: src/views/Publication/TabContent.js:49 msgid "Maintainer:" msgstr "Maintainer:" -#: src/views/Settings.js:1710 +#: src/misc/controls/RTMP.js:54 +msgid "Make the channel available as an RTMP stream (experimental)." +msgstr "Make the channel available as an RTMP stream (experimental)." + +#: src/misc/controls/SRT.js:54 +msgid "Make the channel available as an SRT stream (experimental)." +msgstr "Make the channel available as an SRT stream (experimental)." + +#: src/misc/controls/HLS.js:117 +msgid "Master playlist (increases browser/client compatibility)" +msgstr "Master playlist (increases browser/client compatibility)" + +#: src/views/Settings.js:1780 msgid "Maximum allowed cache size, 0 for unlimited." msgstr "Maximum allowed cache size, 0 for unlimited." -#: src/views/Settings.js:1632 +#: src/views/Settings.js:1702 msgid "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." msgstr "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." -#: src/views/Settings.js:1676 +#: src/views/Settings.js:1746 msgid "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." msgstr "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." -#: src/views/Settings.js:1394 +#: src/views/Settings.js:1462 msgid "Maximum bandwidth Mbit/s" msgstr "Maximum bandwidth Mbit/s" -#: src/misc/coders/Encoders/audio/Opus.js:74 +#: src/misc/coders/Encoders/audio/Opus.js:76 msgid "Maximum delay in milliseconds." msgstr "Maximum delay in milliseconds." -#: src/views/Settings.js:1728 +#: src/views/Settings.js:1798 msgid "Maximum file size (Megabytes)" msgstr "Maximum file size (Megabytes)" -#: src/views/Settings.js:1736 +#: src/views/Settings.js:1806 msgid "Maximum file size to put in cache." msgstr "Maximum file size to put in cache." -#: src/views/Settings.js:1954 +#: src/views/Settings.js:2105 msgid "Maximum log histroy" msgstr "Maximum log histroy" -#: src/views/Settings.js:1923 -#: src/views/Settings.js:1941 +#: src/views/Settings.js:2074 +#: src/views/Settings.js:2092 msgid "Maximum log lines" msgstr "Maximum log lines" -#: src/views/Settings.js:1624 -#: src/views/Settings.js:1668 -#: src/views/Settings.js:1702 +#: src/views/Settings.js:1694 +#: src/views/Settings.js:1738 +#: src/views/Settings.js:1772 msgid "Maximum size (Megabytes)" msgstr "Maximum size (Megabytes)" -#: src/views/Settings.js:1542 +#: src/views/Settings.js:1612 msgid "Maximum viewer idle time (Seconds)" msgstr "Maximum viewer idle time (Seconds)" -#: src/views/Settings.js:1378 +#: src/views/Settings.js:1446 msgid "Maximum viewers" msgstr "Maximum viewers" @@ -1272,12 +1351,12 @@ msgstr "Maximum viewers" msgid "Memory" msgstr "Memory" -#: src/views/Edit/index.js:402 +#: src/views/Edit/index.js:414 msgid "Meta information" msgstr "Meta information" -#: src/views/Edit/Wizard/index.js:1006 -#: src/views/Edit/index.js:505 +#: src/views/Edit/Wizard/index.js:1021 +#: src/views/Edit/index.js:559 msgid "Metadata" msgstr "Metadata" @@ -1299,44 +1378,56 @@ msgstr "More about YouTube's copyright <0>here." msgid "More about licenses here" msgstr "More about licenses here" -#: src/views/Settings.js:1227 +#: src/views/Settings.js:1295 msgid "More about the service" msgstr "More about the service" -#: src/views/Publication/Player.js:438 +#: src/views/Publication/Player.js:441 msgid "Mute" msgstr "Mute" +#: src/misc/filters/audio/Pan.js:57 +msgid "Mute a channel." +msgstr "Mute a channel." + +#: src/misc/filters/audio/Pan.js:50 +msgid "Mute left" +msgstr "Mute left" + +#: src/misc/filters/audio/Pan.js:53 +msgid "Mute right" +msgstr "Mute right" + #: src/misc/ChannelList.js:380 #: src/misc/controls/Metadata.js:76 #: src/misc/controls/Metadata.js:98 -#: src/views/Playersite.js:489 -#: src/views/Settings.js:1250 +#: src/views/Playersite.js:505 +#: src/views/Settings.js:1318 msgid "Name" msgstr "Name" -#: src/views/Playersite.js:494 +#: src/views/Playersite.js:510 msgid "Name for the template. If the name already exists, it will be overwritten." msgstr "Name for the template. If the name already exists, it will be overwritten." -#: src/views/Settings.js:1142 -#: src/views/Settings.js:1297 +#: src/views/Settings.js:1209 +#: src/views/Settings.js:1365 msgid "Network" msgstr "Network" -#: src/views/Edit/Sources/Network.js:684 -#: src/views/Edit/Wizard/Sources/Network.js:110 +#: src/views/Edit/Sources/Network.js:840 +#: src/views/Edit/Wizard/Sources/Network.js:123 msgid "Network source" msgstr "Network source" -#: src/views/Edit/Wizard/index.js:413 -#: src/views/Edit/Wizard/index.js:652 -#: src/views/Edit/Wizard/index.js:917 -#: src/views/Edit/Wizard/index.js:1029 +#: src/views/Edit/Wizard/index.js:428 +#: src/views/Edit/Wizard/index.js:667 +#: src/views/Edit/Wizard/index.js:932 +#: src/views/Edit/Wizard/index.js:1044 msgid "Next" msgstr "Next" -#: src/views/Edit/Profile.js:413 +#: src/views/Edit/Profile.js:436 msgid "Next: Audio" msgstr "Next: Audio" @@ -1344,12 +1435,12 @@ msgstr "Next: Audio" msgid "Next: Video setup" msgstr "Next: Video setup" -#: src/views/Edit/Wizard/index.js:1182 +#: src/views/Edit/Wizard/index.js:1197 msgid "No" msgstr "No" #: src/views/Edit/Sources/NoAudio.js:45 -#: src/views/Edit/Wizard/index.js:901 +#: src/views/Edit/Wizard/index.js:916 msgid "No audio" msgstr "No audio" @@ -1362,11 +1453,11 @@ msgstr "No audio stream available" msgid "No input device available" msgstr "No input device available" -#: src/views/Edit/Wizard/index.js:373 +#: src/views/Edit/Wizard/index.js:388 msgid "No live stream was detected. Please check the software that sends the stream." msgstr "No live stream was detected. Please check the software that sends the stream." -#: src/views/Edit/Summary.js:28 +#: src/views/Edit/Summary.js:29 msgid "No source selected" msgstr "No source selected" @@ -1378,8 +1469,12 @@ msgstr "No sources available" msgid "No suitable encoder found." msgstr "No suitable encoder found." -#: src/views/Main/index.js:286 -#: src/views/Publication/Player.js:294 +#: src/misc/FilterSelect.js:106 +msgid "No suitable filter found." +msgstr "No suitable filter found." + +#: src/views/Main/index.js:315 +#: src/views/Publication/Player.js:297 msgid "No video" msgstr "No video" @@ -1387,7 +1482,7 @@ msgstr "No video" msgid "No video stream available" msgstr "No video stream available" -#: src/views/Settings.js:1243 +#: src/views/Settings.js:1311 msgid "Node ID" msgstr "Node ID" @@ -1396,44 +1491,61 @@ msgid "Noise" msgstr "Noise" #: src/views/Edit/Sources/AVFoundation.js:145 -#: src/views/Edit/Summary.js:30 +#: src/views/Edit/Summary.js:31 +#: src/views/Edit/Summary.js:107 #: src/views/Edit/Wizard/Sources/AVFoundation.js:98 msgid "None" msgstr "None" #: src/views/Playersite.js:353 -#: src/views/Playersite.js:644 +#: src/views/Playersite.js:660 msgid "Notes" msgstr "Notes" -#: src/views/Settings.js:1931 -#: src/views/Settings.js:1949 +#: src/views/Settings.js:2082 +#: src/views/Settings.js:2100 msgid "Number of log lines to keep." msgstr "Number of log lines to keep." -#: src/views/Settings.js:1962 +#: src/views/Settings.js:2113 msgid "Number of logs to keep for each process." msgstr "Number of logs to keep for each process." -#: src/views/Playersite.js:813 -#: src/views/Publication/Player.js:466 +#: src/views/Playersite.js:829 +#: src/views/Publication/Player.js:471 msgid "OK" msgstr "OK" -#: src/views/Settings.js:1497 +#: src/views/Settings.js:1567 msgid "One referrer per line, e.g. http://www.example.com" msgstr "One referrer per line, e.g. http://www.example.com" -#: src/views/Playersite.js:798 +#: src/views/Playersite.js:814 msgid "Open" msgstr "Open" -#: src/views/Publication/Edit.js:510 +#: src/misc/filters/audio/Pan.js:45 +msgid "Pan" +msgstr "Pan" + +#: src/views/Settings.js:1971 +msgid "Passphrase" +msgstr "Passphrase" + +#: src/views/Settings.js:1988 +msgid "Passphrase for SRT encryption." +msgstr "Passphrase for SRT encryption." + +#: src/views/Settings.js:1980 +msgid "Passphrase must be between 10 and 79 characters long" +msgstr "Passphrase must be between 10 and 79 characters long" + +#: src/views/Publication/Edit.js:483 msgid "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." msgstr "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." -#: src/views/Edit/Sources/Network.js:382 -#: src/views/Edit/Wizard/Sources/Network.js:88 +#: src/views/Edit/Sources/Network.js:460 +#: src/views/Edit/Wizard/Sources/Network.js:97 #: src/views/Login.js:282 #: src/views/Publication/Services/Akamai.js:134 #: src/views/Publication/Services/DASH.js:198 @@ -1442,22 +1554,22 @@ msgstr "Passthrough (copy) should only be disabled if necessary. Each encoding r #: src/views/Publication/Services/RTSP.js:156 #: src/views/Publication/Services/Red5.js:157 #: src/views/Publication/Services/WOWZA.js:178 -#: src/views/Settings.js:1453 -#: src/views/Settings.js:1611 +#: src/views/Settings.js:1523 +#: src/views/Settings.js:1681 msgid "Password" msgstr "Password" -#: src/views/Settings.js:1459 -#: src/views/Settings.js:1619 +#: src/views/Settings.js:1529 +#: src/views/Settings.js:1689 msgid "Password for authorization." msgstr "Password for authorization." -#: src/views/Edit/Sources/Network.js:387 -#: src/views/Edit/Wizard/Sources/Network.js:90 +#: src/views/Edit/Sources/Network.js:465 +#: src/views/Edit/Wizard/Sources/Network.js:103 msgid "Password for the device." msgstr "Password for the device." -#: src/views/Settings.js:1555 +#: src/views/Settings.js:1625 msgid "Persist viewer statistics" msgstr "Persist viewer statistics" @@ -1469,25 +1581,25 @@ msgstr "Pixel format" msgid "Plan: <0>Starter" msgstr "Plan: <0>Starter" -#: src/views/Publication/Add.js:347 +#: src/views/Publication/Add.js:349 msgid "Platforms" msgstr "Platforms" -#: src/views/Publication/Player.js:323 -#: src/views/Settings.js:1144 -#: src/views/Settings.js:1468 +#: src/views/Publication/Player.js:326 +#: src/views/Settings.js:1211 +#: src/views/Settings.js:1538 msgid "Playback" msgstr "Playback" -#: src/views/Main/Egress.js:95 +#: src/views/Main/Egress.js:100 msgid "Player" msgstr "Player" -#: src/views/Publication/Player.js:328 +#: src/views/Publication/Player.js:331 msgid "Player URL" msgstr "Player URL" -#: src/views/Publication/Player.js:257 +#: src/views/Publication/Player.js:254 msgid "Player settings saved" msgstr "Player settings saved" @@ -1501,20 +1613,26 @@ msgstr "Playersite" msgid "Playlist" msgstr "Playlist" -#: src/views/Main/index.js:329 +#: src/misc/controls/HLS.js:88 +msgid "Playlist version (M3U8). Version 3 has the best browser/client compatibility." +msgstr "Playlist version (M3U8). Version 3 has the best browser/client compatibility." + +#: src/views/Main/index.js:358 msgid "Please check the <0>process log" msgstr "Please check the <0>process log" #: src/views/Publication/Services/Akamai.js:29 +#: src/views/Publication/Services/Azure.js:29 #: src/views/Publication/Services/Bitmovin.js:23 #: src/views/Publication/Services/Brightcove.js:23 #: src/views/Publication/Services/CDN77.js:23 -#: src/views/Publication/Services/Core.js:26 +#: src/views/Publication/Services/Core.js:27 #: src/views/Publication/Services/DASH.js:35 #: src/views/Publication/Services/DaCast.js:26 #: src/views/Publication/Services/HLS.js:37 #: src/views/Publication/Services/Icecast.js:29 #: src/views/Publication/Services/Image2.js:33 +#: src/views/Publication/Services/Linkedin.js:24 #: src/views/Publication/Services/Livespotting.js:23 #: src/views/Publication/Services/MPEGTS.js:35 #: src/views/Publication/Services/RTMP.js:32 @@ -1527,37 +1645,42 @@ msgstr "Please check the <0>process log" msgid "Please contact the operator of the service and check what happens." msgstr "Please contact the operator of the service and check what happens." +#: src/views/Publication/Services/Owncast.js:23 +#: src/views/Publication/Services/Telegram.js:14 +msgid "Please get in touch with the operator of the service and check what happens." +msgstr "Please get in touch with the operator of the service and check what happens." + #: src/views/Playersite.js:122 #: src/views/Playersite.js:197 -#: src/views/Publication/Player.js:159 +#: src/views/Publication/Player.js:156 msgid "Please select a file to upload." msgstr "Please select a file to upload." -#: src/views/Publication/Add.js:471 +#: src/views/Publication/Add.js:446 msgid "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." msgstr "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." -#: src/views/Edit/Wizard/index.js:435 -#: src/views/Edit/Wizard/index.js:933 +#: src/views/Edit/Wizard/index.js:450 +#: src/views/Edit/Wizard/index.js:948 msgid "Please wait. Probe stream data ..." msgstr "Please wait. Probe stream data ..." -#: src/views/Edit/Wizard/index.js:1103 +#: src/views/Edit/Wizard/index.js:1118 msgid "Please wait. Setting up the stream ..." msgstr "Please wait. Setting up the stream ..." #: src/views/Publication/Services/Bitmovin.js:92 -#: src/views/Settings.js:1803 +#: src/views/Settings.js:1945 msgid "Port" msgstr "Port" -#: src/views/Publication/Player.js:381 +#: src/views/Publication/Player.js:384 msgid "Position" msgstr "Position" -#: src/misc/coders/Encoders/video/H264NVENC.js:67 -#: src/misc/coders/Encoders/video/X264.js:62 -#: src/misc/coders/Encoders/video/X265.js:62 +#: src/misc/coders/Encoders/video/H264NVENC.js:70 +#: src/misc/coders/Encoders/video/X264.js:72 +#: src/misc/coders/Encoders/video/X265.js:72 msgid "Preset" msgstr "Preset" @@ -1572,92 +1695,96 @@ msgstr "Primary stream key" #: src/views/Edit/Sources/ALSA.js:136 #: src/views/Edit/Sources/AVFoundation.js:201 #: src/views/Edit/Sources/Framebuffer.js:110 -#: src/views/Edit/Sources/Network.js:505 -#: src/views/Edit/Sources/Network.js:552 -#: src/views/Edit/Sources/Network.js:599 -#: src/views/Edit/Sources/Raspicam.js:113 -#: src/views/Edit/Sources/V4L.js:131 +#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:660 +#: src/views/Edit/Sources/Network.js:706 +#: src/views/Edit/Sources/Network.js:755 +#: src/views/Edit/Sources/Raspicam.js:116 +#: src/views/Edit/Sources/V4L.js:134 #: src/views/Edit/Sources/VirtualAudio.js:169 #: src/views/Edit/Sources/VirtualVideo.js:188 msgid "Probe" msgstr "Probe" -#: src/views/Edit/index.js:493 -#: src/views/Publication/Add.js:433 -#: src/views/Publication/Edit.js:441 +#: src/views/Edit/index.js:547 +#: src/views/Publication/Add.js:407 +#: src/views/Publication/Edit.js:420 msgid "Process" msgstr "Process" -#: src/views/Publication/Add.js:373 -#: src/views/Publication/Edit.js:387 +#: src/views/Publication/Add.js:376 +#: src/views/Publication/Edit.js:395 msgid "Process control" msgstr "Process control" -#: src/views/Publication/Edit.js:471 -msgid "Process debug" -msgstr "Process debug" - -#: src/views/Main/index.js:413 -#: src/views/Publication/Edit.js:591 +#: src/views/Main/index.js:472 +#: src/views/Publication/Edit.js:553 msgid "Process debug report" msgstr "Process debug report" -#: src/views/Main/index.js:389 -#: src/views/Main/index.js:405 -#: src/views/Publication/Edit.js:468 -#: src/views/Publication/Edit.js:583 +#: src/views/Main/index.js:448 +#: src/views/Main/index.js:464 +#: src/views/Publication/Edit.js:444 +#: src/views/Publication/Edit.js:545 msgid "Process details" msgstr "Process details" -#: src/views/Main/index.js:392 +#: src/views/Main/index.js:451 +#: src/views/Publication/Edit.js:447 msgid "Process report" msgstr "Process report" -#: src/views/Edit/index.js:401 -#: src/views/Edit/index.js:463 +#: src/views/Edit/index.js:413 +#: src/views/Edit/index.js:475 msgid "Processing & Control" msgstr "Processing & Control" -#: src/misc/coders/Encoders/video/H264NVENC.js:92 -#: src/misc/coders/Encoders/video/H264VAAPI.js:82 +#: src/misc/coders/Encoders/video/H264NVENC.js:95 +#: src/misc/coders/Encoders/video/H264VAAPI.js:85 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:85 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:85 #: src/misc/coders/settings/Video.js:142 -#: src/views/Edit/Wizard/index.js:607 +#: src/views/Edit/Wizard/index.js:622 msgid "Profile" msgstr "Profile" -#: src/views/Edit/Sources/Network.js:520 +#: src/views/Edit/Sources/Network.js:623 #: src/views/Publication/Services/Akamai.js:144 #: src/views/Publication/Services/Akamai.js:182 +#: src/views/Publication/Services/Azure.js:89 #: src/views/Publication/Services/Bitmovin.js:86 #: src/views/Publication/Services/Brightcove.js:87 #: src/views/Publication/Services/CDN77.js:90 -#: src/views/Publication/Services/Core.js:91 +#: src/views/Publication/Services/Core.js:106 #: src/views/Publication/Services/DASH.js:186 #: src/views/Publication/Services/DaCast.js:110 #: src/views/Publication/Services/DaCast.js:168 #: src/views/Publication/Services/HLS.js:175 #: src/views/Publication/Services/Icecast.js:154 #: src/views/Publication/Services/Image2.js:120 +#: src/views/Publication/Services/Linkedin.js:84 #: src/views/Publication/Services/MPEGTS.js:154 +#: src/views/Publication/Services/Owncast.js:88 #: src/views/Publication/Services/RTMP.js:122 #: src/views/Publication/Services/RTSP.js:144 #: src/views/Publication/Services/Red5.js:105 #: src/views/Publication/Services/SRT.js:158 +#: src/views/Publication/Services/Telegram.js:79 #: src/views/Publication/Services/UDP.js:124 #: src/views/Publication/Services/WOWZA.js:122 msgid "Protocol" msgstr "Protocol" -#: src/views/Publication/Add.js:353 +#: src/views/Publication/Add.js:355 msgid "Protocols" msgstr "Protocols" -#: src/views/Settings.js:1307 +#: src/views/Settings.js:1375 msgid "Public domain/s" msgstr "Public domain/s" -#: src/views/Publication/Edit.js:113 -#: src/views/Publication/Edit.js:123 +#: src/views/Publication/Edit.js:107 +#: src/views/Publication/Edit.js:117 msgid "Publication service not found" msgstr "Publication service not found" @@ -1669,16 +1796,18 @@ msgstr "Publication website settings saved" msgid "Publications" msgstr "Publications" -#: src/views/Edit/Sources/Network.js:657 +#: src/views/Edit/Sources/Network.js:813 msgid "Pull Mode" msgstr "Pull Mode" -#: src/views/Edit/Sources/Network.js:656 +#: src/views/Edit/Sources/Network.js:812 msgid "Pull or recieve the data:" msgstr "Pull or recieve the data:" #: src/misc/Progress.js:90 -#: src/misc/coders/Encoders/video/H264VAAPI.js:137 +#: src/misc/coders/Encoders/video/H264VAAPI.js:140 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:140 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:140 msgid "Quality" msgstr "Quality" @@ -1686,47 +1815,67 @@ msgstr "Quality" msgid "RGB test pattern" msgstr "RGB test pattern" -#: src/views/Settings.js:1824 +#: src/views/Main/index.js:412 +#: src/views/Settings.js:1213 +#: src/views/Settings.js:1830 +msgid "RTMP" +msgstr "RTMP" + +#: src/views/Settings.js:1871 +msgid "RTMP Port" +msgstr "RTMP Port" + +#: src/views/Settings.js:1905 msgid "RTMP app for publishing." msgstr "RTMP app for publishing." -#: src/views/Settings.js:1765 +#: src/views/Edit/index.js:498 +msgid "RTMP output" +msgstr "RTMP output" + +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:93 +#: src/views/Settings.js:1835 msgid "RTMP server" msgstr "RTMP server" -#: src/views/Edit/Sources/Network.js:572 +#: src/views/Edit/Sources/Network.js:679 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:50 msgid "RTMP server is not enabled" msgstr "RTMP server is not enabled" -#: src/views/Settings.js:1811 +#: src/views/Settings.js:1879 msgid "RTMP server listen address." msgstr "RTMP server listen address." -#: src/views/Settings.js:1837 +#: src/views/Settings.js:1918 msgid "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" msgstr "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" -#: src/views/Settings.js:1146 -#: src/views/Settings.js:1760 -msgid "RTMP/S" -msgstr "RTMP/S" +#: src/views/Settings.js:1884 +msgid "RTMPS Port" +msgstr "RTMPS Port" -#: src/views/Settings.js:1772 +#: src/views/Settings.js:1843 msgid "RTMPS server" msgstr "RTMPS server" -#: src/views/Edit/Sources/Network.js:405 +#: src/views/Settings.js:1892 +msgid "RTMPS server listen address." +msgstr "RTMPS server listen address." + +#: src/views/Edit/Sources/Network.js:483 msgid "RTSP" msgstr "RTSP" -#: src/views/Edit/Sources/Raspicam.js:132 +#: src/views/Edit/Sources/Raspicam.js:135 #: src/views/Edit/Wizard/Sources/Raspicam.js:117 msgid "Raspberry Pi camera" msgstr "Raspberry Pi camera" -#: src/misc/coders/Encoders/video/H264NVENC.js:144 -#: src/misc/coders/Encoders/video/H264VAAPI.js:63 +#: src/misc/coders/Encoders/video/H264NVENC.js:147 +#: src/misc/coders/Encoders/video/H264VAAPI.js:66 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:66 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:66 msgid "Rate control" msgstr "Rate control" @@ -1734,11 +1883,11 @@ msgstr "Rate control" msgid "Ratio" msgstr "Ratio" -#: src/views/Edit/Sources/Network.js:434 +#: src/views/Edit/Sources/Network.js:516 msgid "Read input at native speed" msgstr "Read input at native speed" -#: src/views/Edit/Sources/Network.js:658 +#: src/views/Edit/Sources/Network.js:814 msgid "Receive Mode" msgstr "Receive Mode" @@ -1752,13 +1901,13 @@ msgstr "Reconnect" msgid "Reconnect delay (seconds)" msgstr "Reconnect delay (seconds)" -#: src/views/Main/index.js:340 +#: src/views/Main/index.js:369 #: src/views/Publication/Process.js:68 #: src/views/Publication/Process.js:81 msgid "Reconnecting in {0}s" msgstr "Reconnecting in {0}s" -#: src/views/Settings.js:1999 +#: src/views/Settings.js:2150 msgid "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." msgstr "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." @@ -1768,7 +1917,7 @@ msgstr "Reconnecting to Restreamer Core failed." #: src/views/Edit/Sources/ALSA.js:122 #: src/views/Edit/Sources/AVFoundation.js:181 -#: src/views/Edit/Sources/V4L.js:117 +#: src/views/Edit/Sources/V4L.js:120 #: src/views/Edit/Wizard/Sources/AVFoundation.js:135 #: src/views/Edit/Wizard/Sources/V4L.js:120 msgid "Refresh" @@ -1782,72 +1931,105 @@ msgid "Region" msgstr "Region" #: src/views/Password.js:159 -#: src/views/Settings.js:2019 +#: src/views/Settings.js:2170 msgid "Reload" msgstr "Reload" -#: src/views/Settings.js:1637 +#: src/views/Settings.js:1707 msgid "Remove the oldest entries if the /memfs is full" msgstr "Remove the oldest entries if the /memfs is full" -#: src/views/Settings.js:1784 +#: src/views/Settings.js:1852 msgid "Requires activation" msgstr "Requires activation" -#: src/views/Settings.js:1206 -#: src/views/Settings.js:2036 -#: src/views/Settings.js:2049 -#: src/views/Settings.js:2058 +#: src/views/Settings.js:1274 +#: src/views/Settings.js:2187 +#: src/views/Settings.js:2200 +#: src/views/Settings.js:2209 msgid "Restart" msgstr "Restart" -#: src/views/Settings.js:2027 +#: src/views/Settings.js:2178 msgid "Restart required" msgstr "Restart required" #: src/views/Password.js:136 -#: src/views/Settings.js:1987 +#: src/views/Settings.js:2138 msgid "Restarting" msgstr "Restarting" #: src/views/Password.js:141 -#: src/views/Settings.js:1992 +#: src/views/Settings.js:2143 msgid "Restarting Restreamer Core ..." msgstr "Restarting Restreamer Core ..." -#: src/views/Settings.js:1015 +#: src/views/Settings.js:1082 msgid "Restarting the application failed." msgstr "Restarting the application failed." -#: src/views/Settings.js:1234 +#: src/views/Settings.js:1302 msgid "Restreamer Service" msgstr "Restreamer Service" -#: src/views/Main/index.js:239 +#: src/views/Main/index.js:267 msgid "Retrieving stream data ..." msgstr "Retrieving stream data ..." -#: src/views/Edit/Wizard/index.js:1128 +#: src/views/Edit/Wizard/index.js:1143 #: src/views/Invalid.js:43 -#: src/views/Settings.js:1116 +#: src/views/Settings.js:1183 msgid "Retry" msgstr "Retry" +#: src/misc/filters/video/Transpose.js:46 +msgid "Rotate" +msgstr "Rotate" + #: src/views/Edit/Sources/VirtualVideo.js:155 msgid "Rule" msgstr "Rule" +#: src/views/Main/index.js:422 +#: src/views/Settings.js:1214 +#: src/views/Settings.js:1927 +msgid "SRT" +msgstr "SRT" + +#: src/views/Edit/index.js:517 +msgid "SRT output" +msgstr "SRT output" + +#: src/views/Edit/Wizard/Sources/InternalSRT.js:93 +#: src/views/Settings.js:1932 +msgid "SRT server" +msgstr "SRT server" + +#: src/views/Edit/Sources/Network.js:728 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:50 +msgid "SRT server is not enabled" +msgstr "SRT server is not enabled" + +#: src/views/Settings.js:1953 +msgid "SRT server listen address." +msgstr "SRT server listen address." + +#: src/views/Settings.js:1966 +msgid "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" +msgstr "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" + #: src/misc/coders/settings/Audio.js:148 +#: src/misc/filters/audio/Resample.js:140 msgid "Sampling" msgstr "Sampling" -#: src/views/Edit/Wizard/index.js:1087 -#: src/views/Edit/index.js:560 -#: src/views/Playersite.js:788 -#: src/views/Publication/Add.js:534 -#: src/views/Publication/Edit.js:571 -#: src/views/Publication/Player.js:452 -#: src/views/Settings.js:1977 +#: src/views/Edit/Wizard/index.js:1102 +#: src/views/Edit/index.js:614 +#: src/views/Playersite.js:804 +#: src/views/Publication/Add.js:498 +#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Player.js:457 +#: src/views/Settings.js:2128 msgid "Save" msgstr "Save" @@ -1855,7 +2037,7 @@ msgstr "Save" msgid "Scale" msgstr "Scale" -#: src/views/Settings.js:1723 +#: src/views/Settings.js:1793 msgid "Seconds to keep files in cache." msgstr "Seconds to keep files in cache." @@ -1871,24 +2053,28 @@ msgstr "Seconds until a staled process is terminated." msgid "Seconds until the snapshot/thumbnail of the video source is updated." msgstr "Seconds until the snapshot/thumbnail of the video source is updated." -#: src/views/Settings.js:1473 +#: src/views/Settings.js:1543 msgid "Security" msgstr "Security" -#: src/views/Publication/Services/Core.js:122 +#: src/views/Publication/Services/Core.js:145 +msgid "Security passphrase" +msgstr "Security passphrase" + +#: src/views/Publication/Services/Core.js:138 #: src/views/Publication/Services/Livespotting.js:103 msgid "Security token" msgstr "Security token" -#: src/views/Publication/Player.js:342 +#: src/views/Publication/Player.js:345 msgid "Seekbar color" msgstr "Seekbar color" -#: src/misc/controls/HLS.js:62 +#: src/misc/controls/HLS.js:95 msgid "Segment length (seconds)" msgstr "Segment length (seconds)" -#: src/misc/controls/HLS.js:67 +#: src/misc/controls/HLS.js:100 msgid "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." msgstr "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." @@ -1897,11 +2083,16 @@ msgstr "Segment will be cut on the following keyframe after this time has passed msgid "Segmentation" msgstr "Segmentation" +#: src/views/Publication/Add.js:429 +#: src/views/Publication/Edit.js:470 +msgid "Select RTMP or SRT (if enabled) for less latency." +msgstr "Select RTMP or SRT (if enabled) for less latency." + #: src/views/Edit/Sources/ALSA.js:108 #: src/views/Edit/Sources/AVFoundation.js:172 #: src/views/Edit/Sources/Framebuffer.js:99 -#: src/views/Edit/Sources/Raspicam.js:96 -#: src/views/Edit/Sources/V4L.js:103 +#: src/views/Edit/Sources/Raspicam.js:99 +#: src/views/Edit/Sources/V4L.js:106 #: src/views/Edit/Wizard/Sources/AVFoundation.js:120 #: src/views/Edit/Wizard/Sources/Raspicam.js:95 #: src/views/Edit/Wizard/Sources/V4L.js:114 @@ -1920,7 +2111,7 @@ msgstr "Select source ..." msgid "Select video source:" msgstr "Select video source:" -#: src/views/Edit/Wizard/index.js:268 +#: src/views/Edit/Wizard/index.js:283 msgid "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." msgstr "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." @@ -1928,7 +2119,11 @@ msgstr "Select whether you pull the stream from a <0>network source (such as msgid "Select your encoding setting:" msgstr "Select your encoding setting:" -#: src/views/Playersite.js:588 +#: src/misc/FilterSelect.js:121 +msgid "Select your filter settings (optional):" +msgstr "Select your filter settings (optional):" + +#: src/views/Playersite.js:604 msgid "Selected" msgstr "Selected" @@ -1936,18 +2131,20 @@ msgstr "Selected" msgid "Selected channel" msgstr "Selected channel" -#: src/views/Playersite.js:449 +#: src/views/Playersite.js:465 msgid "Selection" msgstr "Selection" -#: src/views/Settings.js:1190 +#: src/views/Settings.js:1258 msgid "Send anonymous metrics (helps us for future development)" msgstr "Send anonymous metrics (helps us for future development)" -#: src/views/Edit/Sources/Network.js:542 -#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:650 +#: src/views/Edit/Sources/Network.js:696 +#: src/views/Edit/Sources/Network.js:745 #: src/views/Edit/Wizard/Sources/InternalHLS.js:48 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:68 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:68 msgid "Send stream to this address:" msgstr "Send stream to this address:" @@ -1959,19 +2156,24 @@ msgstr "Send video to Framebuffer" msgid "Server" msgstr "Server" +#: src/views/Publication/Services/Owncast.js:100 +#: src/views/Publication/Services/Telegram.js:91 +msgid "Server URL" +msgstr "Server URL" + #: src/Header.js:257 #: src/views/Login.js:246 -#: src/views/Settings.js:1140 -#: src/views/Settings.js:1220 +#: src/views/Settings.js:1207 +#: src/views/Settings.js:1288 msgid "Service" msgstr "Service" -#: src/views/Publication/Add.js:392 +#: src/views/Publication/Add.js:387 #: src/views/Publication/Edit.js:406 msgid "Service name" msgstr "Service name" -#: src/views/Settings.js:1271 +#: src/views/Settings.js:1339 msgid "Service token for monitoring." msgstr "Service token for monitoring." @@ -1979,35 +2181,35 @@ msgstr "Service token for monitoring." msgid "Sessions" msgstr "Sessions" -#: src/views/Settings.js:1402 +#: src/views/Settings.js:1470 msgid "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." -#: src/views/Settings.js:1386 +#: src/views/Settings.js:1454 msgid "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." -#: src/views/Settings.js:1225 +#: src/views/Settings.js:1293 msgid "Setting for connection to the service." msgstr "Setting for connection to the service." -#: src/views/Settings.js:1126 +#: src/views/Settings.js:1193 msgid "Settings" msgstr "Settings" -#: src/views/Settings.js:1128 +#: src/views/Settings.js:1195 msgid "Settings (expert mode)" msgstr "Settings (expert mode)" -#: src/views/Settings.js:1653 +#: src/views/Settings.js:1723 msgid "Settings for /data path. The access is protected by" msgstr "Settings for /data path. The access is protected by" -#: src/views/Settings.js:1580 +#: src/views/Settings.js:1650 msgid "Settings for /memfs path." msgstr "Settings for /memfs path." -#: src/views/Settings.js:958 +#: src/views/Settings.js:1025 msgid "Settings saved. All changes will be applied after restarting the application." msgstr "Settings saved. All changes will be applied after restarting the application." @@ -2015,7 +2217,7 @@ msgstr "Settings saved. All changes will be applied after restarting the applica msgid "Share button" msgstr "Share button" -#: src/views/Playersite.js:431 +#: src/views/Playersite.js:447 msgid "Shows a reference to the project." msgstr "Shows a reference to the project." @@ -2027,7 +2229,7 @@ msgstr "Sign up (free)" msgid "Silence" msgstr "Silence" -#: src/views/Edit/Wizard/index.js:898 +#: src/views/Edit/Wizard/index.js:913 msgid "Silence Audio" msgstr "Silence Audio" @@ -2043,8 +2245,8 @@ msgstr "Sitename" msgid "Size" msgstr "Size" -#: src/views/Edit/index.js:482 -#: src/views/Main/index.js:372 +#: src/views/Edit/index.js:536 +#: src/views/Main/index.js:431 msgid "Snapshot" msgstr "Snapshot" @@ -2052,19 +2254,29 @@ msgstr "Snapshot" msgid "Social-login (OAuth2, 2FA)" msgstr "Social-login (OAuth2, 2FA)" -#: src/views/Edit/Sources/Network.js:418 +#: src/views/Edit/Sources/Network.js:500 msgid "Socket timeout (microseconds)" msgstr "Socket timeout (microseconds)" -#: src/views/Publication/Add.js:350 +#: src/views/Publication/Add.js:352 msgid "Software" msgstr "Software" +#: src/misc/controls/Source.js:74 #: src/views/Edit/Sources/VirtualAudio.js:88 #: src/views/Edit/Sources/VirtualVideo.js:112 +#: src/views/Publication/Add.js:424 +#: src/views/Publication/Edit.js:465 msgid "Source" msgstr "Source" +#: src/views/Publication/Add.js:375 +#: src/views/Publication/Add.js:419 +#: src/views/Publication/Edit.js:394 +#: src/views/Publication/Edit.js:460 +msgid "Source & Encoding" +msgstr "Source & Encoding" + #: src/misc/Progress.js:103 msgid "Speed" msgstr "Speed" @@ -2073,24 +2285,25 @@ msgstr "Speed" msgid "Stale timeout (seconds)" msgstr "Stale timeout (seconds)" -#: src/views/Publication/Player.js:322 -#: src/views/Settings.js:1505 +#: src/views/Publication/Player.js:325 +#: src/views/Settings.js:1575 msgid "Statistics" msgstr "Statistics" -#: src/views/Settings.js:1145 -#: src/views/Settings.js:1572 +#: src/misc/controls/HLS.js:65 +#: src/views/Settings.js:1212 +#: src/views/Settings.js:1642 msgid "Storage" msgstr "Storage" -#: src/views/Settings.js:1563 +#: src/views/Settings.js:1633 msgid "Stores the viewer statistics to the disk." msgstr "Stores the viewer statistics to the disk." #: src/views/Edit/StreamSelect.js:30 #: src/views/Edit/StreamSelect.js:36 #: src/views/Edit/StreamSelect.js:81 -#: src/views/Edit/Wizard/index.js:878 +#: src/views/Edit/Wizard/index.js:893 msgid "Stream" msgstr "Stream" @@ -2103,7 +2316,9 @@ msgstr "Stream URL" #: src/views/Publication/Services/DaCast.js:153 #: src/views/Publication/Services/Dummy.js:274 #: src/views/Publication/Services/Instagram.js:84 +#: src/views/Publication/Services/Owncast.js:110 #: src/views/Publication/Services/Restream.js:116 +#: src/views/Publication/Services/Telegram.js:101 #: src/views/Publication/Services/Twitch.js:129 #: src/views/Publication/Services/Twitter.js:175 #: src/views/Publication/Services/Vimeo.js:73 @@ -2112,7 +2327,7 @@ msgid "Stream key" msgstr "Stream key" #: src/views/Publication/Services/Brightcove.js:101 -#: src/views/Publication/Services/Core.js:113 +#: src/views/Publication/Services/Core.js:131 #: src/views/Publication/Services/Red5.js:136 #: src/views/Publication/Services/WOWZA.js:158 msgid "Stream name" @@ -2122,31 +2337,35 @@ msgstr "Stream name" msgid "Stream names" msgstr "Stream names" -#: src/views/Playersite.js:425 +#: src/misc/controls/Source.js:78 +msgid "Stream source for publication service (experimental)." +msgstr "Stream source for publication service (experimental)." + +#: src/views/Playersite.js:441 msgid "Support datarhei Restreamer" msgstr "Support datarhei Restreamer" -#: src/views/Edit/Sources/Network.js:361 +#: src/views/Edit/Sources/Network.js:427 #: src/views/Edit/Wizard/Sources/Network.js:72 msgid "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." msgstr "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." #: src/Footer.js:184 #: src/Header.js:275 -#: src/views/Settings.js:1851 +#: src/views/Settings.js:2002 msgid "System" msgstr "System" #: src/views/Playersite.js:351 -#: src/views/Playersite.js:440 +#: src/views/Playersite.js:456 msgid "Template" msgstr "Template" -#: src/views/Playersite.js:462 +#: src/views/Playersite.js:478 msgid "Template to be used for creating the publication website. The delete button removes the selection from the system." msgstr "Template to be used for creating the publication website. The delete button removes the selection from the system." -#: src/views/Playersite.js:666 +#: src/views/Playersite.js:682 msgid "Terms" msgstr "Terms" @@ -2158,18 +2377,30 @@ msgstr "Test pattern" msgid "Test pattern (extended)" msgstr "Test pattern (extended)" -#: src/views/Playersite.js:519 +#: src/views/Playersite.js:535 msgid "Text colors" msgstr "Text colors" +#: src/misc/controls/RTMP.js:61 +msgid "The RTMP output requires the RTMP Server." +msgstr "The RTMP output requires the RTMP Server." + +#: src/misc/controls/SRT.js:61 +msgid "The SRT output requires the SRT Server." +msgstr "The SRT output requires the SRT Server." + #: src/views/Edit/Sources/VirtualAudio.js:131 msgid "The amplitude (0.0 - 1.0) of the generated audio stream" msgstr "The amplitude (0.0 - 1.0) of the generated audio stream" -#: src/views/Settings.js:1210 +#: src/views/Settings.js:1278 msgid "The application is using an older version of the settings." msgstr "The application is using an older version of the settings." +#: src/views/Edit/Sources/Network.js:611 +msgid "The available FFmpeg binary doesn't support any of the required protocols." +msgstr "The available FFmpeg binary doesn't support any of the required protocols." + #: src/misc/coders/settings/Audio.js:40 msgid "The bitrate of the audio stream." msgstr "The bitrate of the audio stream." @@ -2178,15 +2409,15 @@ msgstr "The bitrate of the audio stream." msgid "The carrier frequency" msgstr "The carrier frequency" -#: src/views/Edit/index.js:352 +#: src/views/Edit/index.js:364 msgid "The channel \"{0}\" could not be deleted" msgstr "The channel \"{0}\" could not be deleted" -#: src/views/Edit/index.js:361 +#: src/views/Edit/index.js:373 msgid "The channel \"{0}\" has been deleted" msgstr "The channel \"{0}\" has been deleted" -#: src/views/Edit/index.js:604 +#: src/views/Edit/index.js:658 msgid "The deletion of this channel can not be recovered. All publications of this channel will be removed." msgstr "The deletion of this channel can not be recovered. All publications of this channel will be removed." @@ -2196,10 +2427,11 @@ msgid "The input profile is not complete. Please define a video and audio source msgstr "The input profile is not complete. Please define a video and audio source." #: src/misc/coders/settings/Audio.js:86 +#: src/misc/filters/audio/Resample.js:78 msgid "The layout of the audio stream." msgstr "The layout of the audio stream." -#: src/misc/controls/HLS.js:79 +#: src/misc/controls/HLS.js:112 msgid "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." msgstr "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." @@ -2211,83 +2443,84 @@ msgstr "The noise color" msgid "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." msgstr "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." -#: src/views/Settings.js:1315 +#: src/views/Settings.js:1383 msgid "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." msgstr "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." -#: src/views/Publication/Edit.js:270 +#: src/views/Publication/Edit.js:278 msgid "The publication service \"{0}\" could not be deleted" msgstr "The publication service \"{0}\" could not be deleted" -#: src/views/Publication/Add.js:188 +#: src/views/Publication/Add.js:195 msgid "The publication service \"{0}\" has been created" msgstr "The publication service \"{0}\" has been created" -#: src/views/Publication/Edit.js:276 +#: src/views/Publication/Edit.js:284 msgid "The publication service \"{0}\" has been deleted" msgstr "The publication service \"{0}\" has been deleted" -#: src/views/Publication/Add.js:186 +#: src/views/Publication/Add.js:193 msgid "The publication service has been created" msgstr "The publication service has been created" #: src/misc/coders/settings/Audio.js:137 +#: src/misc/filters/audio/Resample.js:129 msgid "The sample rate of the audio stream." msgstr "The sample rate of the audio stream." #: src/views/Playersite.js:152 #: src/views/Playersite.js:227 -#: src/views/Publication/Player.js:189 +#: src/views/Publication/Player.js:186 msgid "The selected file is too big ({0} bytes). Only {1} bytes are allowed." msgstr "The selected file is too big ({0} bytes). Only {1} bytes are allowed." #: src/views/Playersite.js:141 #: src/views/Playersite.js:216 -#: src/views/Publication/Player.js:178 +#: src/views/Publication/Player.js:175 msgid "The selected file type ({0}) is not allowed. Allowed file types are {types}" msgstr "The selected file type ({0}) is not allowed. Allowed file types are {types}" -#: src/views/Publication/Edit.js:230 +#: src/views/Publication/Edit.js:238 msgid "The settings for \"{0}\" have been saved" msgstr "The settings for \"{0}\" have been saved" -#: src/views/Edit/Wizard/index.js:846 +#: src/views/Edit/Wizard/index.js:861 msgid "The source doesn't provide any audio streams." msgstr "The source doesn't provide any audio streams." -#: src/views/Edit/Profile.js:487 +#: src/views/Edit/Profile.js:520 msgid "The source doesn't provide any audio streams. Please check the <0>probe details." msgstr "The source doesn't provide any audio streams. Please check the <0>probe details." -#: src/views/Edit/Wizard/index.js:854 +#: src/views/Edit/Wizard/index.js:869 msgid "The source doesn't provide any compatible audio streams." msgstr "The source doesn't provide any compatible audio streams." -#: src/views/Edit/Wizard/index.js:392 +#: src/views/Edit/Wizard/index.js:407 msgid "The source doesn't provide any compatible video streams. Please check the <0>requirements." msgstr "The source doesn't provide any compatible video streams. Please check the <0>requirements." -#: src/views/Edit/Profile.js:357 +#: src/views/Edit/Profile.js:370 msgid "The source doesn't provide any video streams. Please check the <0>probe details." msgstr "The source doesn't provide any video streams. Please check the <0>probe details." -#: src/views/Edit/Wizard/index.js:384 +#: src/views/Edit/Wizard/index.js:399 msgid "The source doesn't provide any video streams. Please check the device." msgstr "The source doesn't provide any video streams. Please check the device." -#: src/views/Edit/Wizard/index.js:865 +#: src/views/Edit/Wizard/index.js:880 msgid "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." msgstr "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." -#: src/views/Edit/Wizard/index.js:603 +#: src/views/Edit/Wizard/index.js:618 msgid "The video source is compatible. Select the desired resolution:" msgstr "The video source is compatible. Select the desired resolution:" -#: src/views/Settings.js:1182 +#: src/views/Settings.js:1250 msgid "There are updates available. Here you get more information." msgstr "There are updates available. Here you get more information." -#: src/views/Settings.js:911 +#: src/views/Settings.js:978 msgid "There was a problem storing the settings. Settings not saved." msgstr "There was a problem storing the settings. Settings not saved." @@ -2297,15 +2530,15 @@ msgstr "There was an error connecting to Restreamer Core at {0}." #: src/views/Playersite.js:165 #: src/views/Playersite.js:240 -#: src/views/Publication/Player.js:202 +#: src/views/Publication/Player.js:199 msgid "There was an error during upload: {0}" msgstr "There was an error during upload: {0}" -#: src/views/Edit/Wizard/index.js:1123 +#: src/views/Edit/Wizard/index.js:1138 msgid "There was an error setting up the stream." msgstr "There was an error setting up the stream." -#: src/views/Settings.js:909 +#: src/views/Settings.js:976 msgid "There were some errors in the settings. Settings not saved." msgstr "There were some errors in the settings. Settings not saved." @@ -2349,7 +2582,11 @@ msgstr "This license allows reusers to distribute, remix, adapt, and build upon msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." msgstr "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." -#: src/views/Edit/index.js:585 +#: src/views/Edit/Sources/Network.js:435 +msgid "This protocol is unknown or not supported by the available FFmpeg binary." +msgstr "This protocol is unknown or not supported by the available FFmpeg binary." + +#: src/views/Edit/index.js:639 msgid "This source cannot be edited while it is in use. To continue, you have to disconnect the source." msgstr "This source cannot be edited while it is in use. To continue, you have to disconnect the source." @@ -2365,15 +2602,20 @@ msgstr "This version of the UI doesn't support the connected Core ({0}). The UI msgid "This version of the UI is compatible." msgstr "This version of the UI is compatible." -#: src/views/Settings.js:1550 +#: src/views/Settings.js:1620 msgid "Time until an inactive viewer connection is treated as closed." msgstr "Time until an inactive viewer connection is treated as closed." -#: src/views/Settings.js:1263 -#: src/views/Settings.js:1829 +#: src/views/Settings.js:1331 +#: src/views/Settings.js:1910 +#: src/views/Settings.js:1958 msgid "Token" msgstr "Token" +#: src/views/Publication/Services/Telegram.js:13 +msgid "Transmit a Livestream to a Telegram Channel." +msgstr "Transmit a Livestream to a Telegram Channel." + #: src/views/Publication/Services/Image2.js:25 msgid "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." msgstr "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." @@ -2430,7 +2672,7 @@ msgstr "Transmit the main source to an UDP Server. More details about the settin msgid "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." msgstr "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." -#: src/views/Publication/Services/Core.js:18 +#: src/views/Publication/Services/Core.js:19 msgid "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." msgstr "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." @@ -2450,6 +2692,18 @@ msgstr "Transmit the main source to the Bitmovin cloud encoding service, a power msgid "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." msgstr "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." +#: src/views/Publication/Services/Azure.js:17 +msgid "Transmit to a Azure Media Services. More details can be found <0>here." +msgstr "Transmit to a Azure Media Services. More details can be found <0>here." + +#: src/views/Publication/Services/Linkedin.js:16 +msgid "Transmit to linkedIn. More details can be found <0>here." +msgstr "Transmit to linkedIn. More details can be found <0>here." + +#: src/views/Publication/Services/Owncast.js:15 +msgid "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." +msgstr "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." + #: src/views/Publication/Services/Youtube.js:21 msgid "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." msgstr "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." @@ -2458,36 +2712,36 @@ msgstr "Transmits your video as an RTMP stream with the required key generated i msgid "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." msgstr "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." -#: src/misc/coders/Encoders/video/X264.js:83 -#: src/misc/coders/Encoders/video/X265.js:83 +#: src/misc/coders/Encoders/video/X264.js:93 +#: src/misc/coders/Encoders/video/X265.js:93 msgid "Tune" msgstr "Tune" -#: src/views/Edit/Sources/Network.js:409 +#: src/views/Edit/Sources/Network.js:488 #: src/views/Edit/Wizard/Sources/Network.js:77 msgid "UDP transport" msgstr "UDP transport" -#: src/views/Settings.js:1111 +#: src/views/Settings.js:1178 msgid "Unable to load the config." msgstr "Unable to load the config." -#: src/views/Settings.js:1245 +#: src/views/Settings.js:1313 msgid "Unique ident on the service." msgstr "Unique ident on the service." -#: src/views/Main/Egress.js:91 +#: src/views/Main/Egress.js:96 msgid "Unknown" msgstr "Unknown" -#: src/views/Playersite.js:597 +#: src/views/Playersite.js:613 msgid "Unselected" msgstr "Unselected" -#: src/views/Playersite.js:482 -#: src/views/Playersite.js:499 -#: src/views/Playersite.js:634 -#: src/views/Publication/Player.js:373 +#: src/views/Playersite.js:498 +#: src/views/Playersite.js:515 +#: src/views/Playersite.js:650 +#: src/views/Publication/Player.js:376 msgid "Upload" msgstr "Upload" @@ -2495,7 +2749,7 @@ msgstr "Upload" msgid "Uploading the file failed" msgstr "Uploading the file failed" -#: src/views/Publication/Player.js:232 +#: src/views/Publication/Player.js:229 msgid "Uploading the logo failed" msgstr "Uploading the logo failed" @@ -2509,15 +2763,15 @@ msgstr "Uptime" msgid "Use Auth0 for your running Restreamer Core. More <0>details." msgstr "Use Auth0 for your running Restreamer Core. More <0>details." -#: src/views/Edit/index.js:426 +#: src/views/Edit/index.js:438 msgid "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." msgstr "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." -#: src/views/Edit/Wizard/index.js:1068 +#: src/views/Edit/Wizard/index.js:1083 msgid "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." -#: src/views/Edit/index.js:530 +#: src/views/Edit/index.js:584 msgid "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." @@ -2525,8 +2779,8 @@ msgstr "Use your copyright and choose the right image licence. Whether free for msgid "User registration" msgstr "User registration" -#: src/views/Edit/Sources/Network.js:370 -#: src/views/Edit/Wizard/Sources/Network.js:81 +#: src/views/Edit/Sources/Network.js:448 +#: src/views/Edit/Wizard/Sources/Network.js:84 #: src/views/Login.js:272 #: src/views/Publication/Services/DASH.js:195 #: src/views/Publication/Services/DaCast.js:131 @@ -2534,18 +2788,18 @@ msgstr "User registration" #: src/views/Publication/Services/RTSP.js:153 #: src/views/Publication/Services/Red5.js:146 #: src/views/Publication/Services/WOWZA.js:168 -#: src/views/Settings.js:1440 -#: src/views/Settings.js:1598 +#: src/views/Settings.js:1510 +#: src/views/Settings.js:1668 msgid "Username" msgstr "Username" -#: src/views/Settings.js:1446 -#: src/views/Settings.js:1606 +#: src/views/Settings.js:1516 +#: src/views/Settings.js:1676 msgid "Username for authorization." msgstr "Username for authorization." -#: src/views/Edit/Sources/Network.js:375 -#: src/views/Edit/Wizard/Sources/Network.js:83 +#: src/views/Edit/Sources/Network.js:453 +#: src/views/Edit/Wizard/Sources/Network.js:90 msgid "Username for the device." msgstr "Username for the device." @@ -2553,28 +2807,32 @@ msgstr "Username for the device." msgid "VPU ID" msgstr "VPU ID" -#: src/views/Publication/Add.js:476 +#: src/misc/filters/video/VFlip.js:65 +msgid "Vertical Flip" +msgstr "Vertical Flip" + +#: src/views/Publication/Add.js:451 msgid "Video" msgstr "Video" #: src/views/Edit/Sources/AVFoundation.js:126 -#: src/views/Edit/Sources/Raspicam.js:89 -#: src/views/Edit/Sources/V4L.js:109 +#: src/views/Edit/Sources/Raspicam.js:92 +#: src/views/Edit/Sources/V4L.js:112 #: src/views/Edit/Wizard/Sources/AVFoundation.js:82 #: src/views/Edit/Wizard/Sources/Raspicam.js:86 #: src/views/Edit/Wizard/Sources/V4L.js:105 msgid "Video device" msgstr "Video device" -#: src/views/Edit/Profile.js:320 +#: src/views/Edit/Profile.js:333 #: src/views/Edit/ProfileSummary.js:66 -#: src/views/Publication/Edit.js:517 +#: src/views/Publication/Edit.js:490 msgid "Video settings" msgstr "Video settings" -#: src/views/Edit/Wizard/index.js:264 -#: src/views/Edit/Wizard/index.js:354 -#: src/views/Edit/Wizard/index.js:596 +#: src/views/Edit/Wizard/index.js:279 +#: src/views/Edit/Wizard/index.js:369 +#: src/views/Edit/Wizard/index.js:611 msgid "Video setup" msgstr "Video setup" @@ -2594,11 +2852,19 @@ msgstr "Viewer" msgid "Virtual source" msgstr "Virtual source" +#: src/misc/filters/audio/Volume.js:44 +msgid "Volume" +msgstr "Volume" + #: src/views/Welcome.js:27 msgid "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." msgstr "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." -#: src/views/Settings.js:1585 +#: src/misc/controls/HLS.js:74 +msgid "Where to store the HLS playlist and segments. In-Memory is recommended." +msgstr "Where to store the HLS playlist and segments. In-Memory is recommended." + +#: src/views/Settings.js:1655 msgid "Write protection" msgstr "Write protection" @@ -2606,32 +2872,32 @@ msgstr "Write protection" msgid "YUV test pattern" msgstr "YUV test pattern" -#: src/views/Edit/Wizard/index.js:1177 +#: src/views/Edit/Wizard/index.js:1192 msgid "Yes" msgstr "Yes" -#: src/views/Edit/Wizard/index.js:1159 +#: src/views/Edit/Wizard/index.js:1174 msgid "You can't abort the wizard because at least one input must be defined." msgstr "You can't abort the wizard because at least one input must be defined." -#: src/views/Settings.js:2041 +#: src/views/Settings.js:2192 msgid "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" msgstr "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" -#: src/views/Main/index.js:347 +#: src/views/Main/index.js:376 #: src/views/Publication/Process.js:73 msgid "You have to reconnect manually" msgstr "You have to reconnect manually" -#: src/views/Publication/Edit.js:456 +#: src/views/Publication/Edit.js:432 msgid "You have unsaved changes. Please save them before you can control the service again." msgstr "You have unsaved changes. Please save them before you can control the service again." -#: src/views/Edit/Wizard/index.js:616 +#: src/views/Edit/Wizard/index.js:631 msgid "Your stream needs to be encoded, but there's no suitable encoder available." msgstr "Your stream needs to be encoded, but there's no suitable encoder available." -#: src/views/Edit/Wizard/index.js:623 +#: src/views/Edit/Wizard/index.js:638 msgid "Your stream needs to be encoded. Choose the desired encoder:" msgstr "Your stream needs to be encoded. Choose the desired encoder:" @@ -2643,7 +2909,7 @@ msgstr "blue" msgid "brown" msgstr "brown" -#: src/views/Publication/Player.js:331 +#: src/views/Publication/Player.js:334 msgid "iframe code" msgstr "iframe code" diff --git a/src/locales/es/messages.js b/src/locales/es/messages.js index 2db13b6..ca84b98 100644 --- a/src/locales/es/messages.js +++ b/src/locales/es/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"<0>Compatibility list":"<0>Lista de compatibilidad","<0>Show probe details":"<0>Mostrar detalles de la sonda","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Punto final de la API no encontrado. La configuración no se ha guardado.","AVFoundation":"AVFoundation","Abort":"Abortar","About":"Acerca de","Add":"Añada","Add Publication":"Añadir publicación","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Añada widgets y estilos externos al sitio de publicación. Puede encontrar algunos ejemplos en la página de ayuda.","Add new channel":"Añadir un nuevo canal","Add: {0}":["Añadir: ",["0"]],"Address":"Dirección","Address for the background image.":"Dirección para la imagen de fondo.","Address to listen on for HTTP requests.":"Dirección de escucha para las peticiones HTTP.","Address to listen on for HTTPS requests.":"Dirección de escucha para las solicitudes HTTPS.","Adjust publication site colors and background as you like.":"Ajuste los colores del sitio de publicación y el fondo a su gusto.","Advanced monitoring":"Vigilancia avanzada","Advanced settings":"Ajustes avanzados","Advanced setup":"Configuración avanzada","Alerting by email":"Alerta por correo electrónico","All":"Todo","All important system settings.":"Todos los ajustes importantes del sistema.","Allow all referrer":"Permitir todos los remitentes","Allow counting how many viewers the stream has.":"Permite contar el número de espectadores que tiene el flujo.","Amplitude":"Amplitud","An environment variable sets this value.":"Una variable de entorno establece este valor.","App":"App","Application":"Aplicación","Are you sure you want to abort the wizard?":"¿Está seguro de que quiere abortar el asistente?","Audio":"Audio","Audio Device":"Dispositivo de audio","Audio device":"Dispositivo de audio","Audio from device":"Audio del dispositivo","Audio settings":"Ajustes de audio","Audio setup":"Configuración de audio","Auth0":"Auth0","Auth0 Tenant":"Auth0 Inquilino","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 no está disponible actualmente porque esta interfaz está cargada desde un origen inseguro.","Author":"Autor","Authorization":"Autorización","Automatic cleanup of all media data":"Limpieza automática de todos los datos de los medios de comunicación","Autoplay":"Reproducción automática","Available":"Disponible","Back":"Volver","Background colors":"Colores de fondo","Background image":"Imagen de fondo","Backup URL":"URL de respaldo","Backup server":"Servidor de respaldo","Backup stream":"Flujo de reserva","Backup stream key":"Clave de flujo de respaldo","Bandwidth":"Ancho de banda","Bandwidth control":"Control del ancho de banda","Banner":"Banner","Basic":"Básico","Beep factor":"Factor Bip","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Describa brevemente lo que el público verá durante la transmisión en directo.","Button color":"Color del botón","Cache for files on /data.":"Caché para archivos en /data.","Cache time (Seconds)":"Tiempo de caché (segundos)","Cache types":"Tipos de caché","Capture clicks":"Captura de clics","Capture cursor":"Cursor de captura","Channel \"{0}\" saved":["Canal \"",["0"],"\" guardado"],"Channels":"Canales","Check for updates":"Compruebe las actualizaciones","Check the requirements":"Compruebe los requisitos","Choose a video stream":"Elija un flujo de vídeo","Choose an audio stream":"Elija un flujo de audio","Choose an input device ...":"Elija un dispositivo de entrada ...","Choose codec ...":"Elija el códec ...","Choose tenant ...":"Elija al inquilino ...","Chunk":"Chunk","Close":"Cerrar","Code injection":"Inyección de código","Codec":"Códec","Color":"Color","Config":"Configurar","Confirm password":"Confirmar contraseña","Connect":"Conectar","Connected device":"Dispositivo conectado","Connected since <0/>":"Conectado desde <0/>","Connecting ...":"Conectando ...","Connecting to Restreamer Core ...":"Conexión al núcleo de Restreamer ...","Connecting to Restreamer Core failed probably because of mixed content.":"La conexión con Restreamer Core ha fallado probablemente debido a la mezcla de contenidos.","Content":"Contenido","Content URL":"Content URL","Cores":"Núcleos","Create user":"Crear usuario","Creative Commons":"Creative Commons","Custom ...":"A medida ...","Custom JSON config for datarhei Core.":"Configuración JSON personalizada para datarhei Core.","Custom audio device":"Dispositivo de audio personalizado","Custom audio index":"Índice de audio personalizado","Custom bitrate (kbit/s)":"Tasa de bits personalizada (kbit/s)","Custom code injection":"Inyección de código personalizado","Custom delay":"Retraso personalizado","Custom device":"Dispositivo personalizado","Custom format":"Formato personalizado","Custom framerate":"Velocidad de fotogramas personalizada","Custom keyframe interval":"Intervalo de fotogramas clave personalizado","Custom layout":"Diseño personalizado","Custom sampling (Hz)":"Muestreo personalizado (Hz)","Custom scale":"Escala personalizada","Custom size":"Tamaño personalizado","Custom video device":"Dispositivo de vídeo personalizado","Custom video index":"Índice de vídeo personalizado","Data copied to clipboard":"Datos copiados en el portapapeles","Death color":"Color de la muerte","Decoder":"Decodificador","Default":"Por defecto","Delay":"Retraso","Delay (ms)":"Retraso (ms)","Delete":"Borrar","Deleting a publication service cannot be reversed. The publication stops immediately.":"La eliminación de un servicio de publicación no se puede revertir. La publicación se detiene inmediatamente.","Delivering mode":"Modo de entrega","Description":"Descripción","Design":"Diseño","Device":"Dispositivo","Disconnect":"Desconectar","Disconnect & Continue":"Desconectar y continuar","Disconnecting ...":"Desconectando...","Disk":"Disco","Disk cache":"Caché de disco","Disk storage":"Almacenamiento en disco","Do you really want to restart the application now?":"¿Realmente quiere reiniciar la aplicación ahora?","Do you want to delete \"{0}\"?":["¿Quiere borrar \"",["0"],"\"?"],"Do you want to delete {title}?":["¿Desea eliminar ",["título"],"?"],"Do you want to disconnect \"{0}\"?":["¿Quiere desconectar \"",["0"],"\"?"],"Docs":"Docs","Documentation":"Documentación","Dup. frames":"Marcos Dup.","EDIT: Player":"EDIT: Jugador","EDIT: Publication Website":"EDIT: Página web de la publicación","Edit":"Editar","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Edite las fuentes de audio y vídeo para la transmisión en directo. Añada una descripción y establezca la licencia de contenido que desee.","Edit: {title}":["Editar: ",["título"]],"Embed":"Incrustar","Enable RTMP server ...":"Habilitar el servidor RTMP ...","Enable a periodic beep every second with this value times the carrier frequency":"Habilitar un pitido periódico cada segundo con este valor multiplicado por la frecuencia portadora","Enable backup stream":"Habilitar el flujo de respaldo","Enable nerd statistics":"Habilitar las estadísticas de los nerds","Enable primary stream":"Habilitar el flujo primario","Enable snapshots":"Habilitar las instantáneas","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Se recomienda encarecidamente habilitar la autorización. De lo contrario, cualquiera puede acceder a esta instancia.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Se recomienda encarecidamente habilitar la autentificación básica. De lo contrario, cualquiera podría escribir datos en /memfs.","Encoder":"Codificador","Encoding":"Codificación","Encryption":"Codificación","Enter a name for the new channel.":"Introduzca un nombre para el nuevo canal.","Enter password":"Introduzca la contraseña","Enter the address of your network source:":"Introduzca la dirección de su fuente de red:","Enter username":"Introduzca el nombre de usuario","Entropy coder":"Codificador de entropía","Error":"Error","Error while copying data to clipboard":"Error al copiar datos en el portapapeles","Error: {0}":["Error: ",["0"]],"Expands the area above the channel list (live chat).":"Amplía el área sobre la lista de canales (chat en vivo).","Expands the area under the channel description (comment boxes).":"Amplía el área bajo la descripción del canal (cuadros de comentarios).","Expert mode":"Modo experto","Extend channel list":"Ampliar la lista de canales","Extend content":"Ampliar el contenido","Extend footer":"Ampliar el pie de página","Extend header":"Ampliar la cabecera","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Fallo en la creación del servicio de publicación (",["0"],")"],"Failed to create publication website files.":"Fallo en la creación de los archivos del sitio web de la publicación.","Failed to probe the source. Please check the <0>probe details.":"No se ha podido sondear la fuente. Por favor, compruebe los <0>detalles de la sonda.","Failed to refresh token: {0}":["Fallo en la actualización de la ficha: ",["0"]],"Failed to save ingest metadata":"Fallo al guardar los metadatos de ingesta","Failed to stop process":"Fallo en la detención del proceso","Failed to store player size setting.":"Fallo al almacenar el ajuste del tamaño del reproductor.","Failed to store publication service ({0})":["Fallo en el almacenamiento del servicio de publicación (",["0"],")"],"Failed to update ingest process ({0})":["Fallo en la actualización del proceso de ingesta (",["0"],")"],"Failed to update the player":"Fallo en la actualización del reproductor","Failed to verify the source. Please check the address.":"No se ha podido verificar la fuente. Por favor, compruebe la dirección.","Finish":"Acabado","Flags":"Banderas","For Javascripts.":"Para Javascripts.","For Stylesheets.":"Para las hojas de estilo.","Force input framerate":"Forzar la velocidad de entrada de fotogramas","Format":"Formato","Frame drops":"Caída de cuadros","Framebuffer":"Buffer de imágenes","Framerate":"Framerate","Frequency (Hz)":"Frecuencia (Hz)","GET":"GET","General":"General","Google Analytics ID":"ID de Google Analytics","Google Analytics Tracker Name":"Nombre del rastreador de Google Analytics","HLS":"HLS","HLS statistic for the In-memory storage":"Estadística HLS para el almacenamiento en memoria","HTTP and HTTPS":"HTTP y HTTPS","HTTP port":"Puerto HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Puerto HTTPS","Hardware device":"Dispositivo de hardware","Header":"Cabecera","Headline":"Titular","Hosted Restreamer interface":"Interfaz de Restreamer alojado","Human readable name on the service.":"Nombre legible para el ser humano en el servicio.","IP address":"Dirección IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Si ha cambiado los puertos, puede ser que Restreamer Core ya se haya reiniciado, pero ahora está disponible en un puerto diferente.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Si ha habilitado Let's Encrypt TLS, puede tardar un poco en adquirir los certificados. Asegúrese de que Restreamer Core es accesible a través del puerto 80 desde Internet. Compruebe el registro de la consola de Restreamer Core.","Ignore IP ranges":"Ignorar los rangos de IP","Image URL":"URL de la imagen","Imprint":"Impresión","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Además del reproductor, el Restreamer ofrece una completa página de aterrizaje, con la que podrá presentar su transmisión en directo de forma fácil y rápida.","In-memory":"En memoria","In-memory storage":"Almacenamiento en memoria","Incompatible":"Incompatible","Inherit":"Heredar","Inject 1":"Inyectar 1","Inject 2":"Inyectar 2","Inject 3":"Inyectar 3","Inject 4":"Inyectar 4","Internal HLS server":"Servidor HLS interno","Internal RTMP server":"Servidor RTMP interno","Interval (seconds)":"Intervalo (segundos)","Issue alert":"Alerta de emisión","Keyframe interval (seconds)":"Intervalo de fotogramas clave (segundos)","Layout":"Disposición","Let's Encrypt certification":"Certificación Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt requiere uno o más nombres de dominio público y un puerto 80/TCP accesible.","Level":"Nivel","Level of system protocol.":"Nivel de protocolo del sistema.","License":"Licencia","Life color":"El color de la vida","Linecolor":"Linecolor","Link":"Enlace","Link, mouseover":"Enlace, ratón","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Lista de rangos de IP en notación CIDR, por ejemplo, 127.0.0.1/32, que las estadísticas no registrarán -un rango de IP por línea. Déjelo vacío para registrar todas las sesiones.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Lista de extensiones de archivos a almacenar en caché (por ejemplo, \".html\"), una por línea. Déjela vacía para almacenar en caché todos los tipos de archivos.","List size (segments)":"Tamaño de la lista (segmentos)","Live-Streaming to Facebook Live RTMP service":"Transmisión en directo al servicio RTMP de Facebook Live","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Transmisión en directo al servicio RTMP de Instagram Live. La clave del streaming requiere un servicio como <0>Pato Amarillo.","Live-Streaming to Twitch Live RTMP Service.":"Transmisión en directo al servicio RTMP de Twitch Live.","Live-Streaming to Vimeo Live RTMP Service":"Transmisión en directo al servicio Vimeo Live RTMP","Livesource ID":"Identificación de la fuente de vida","Log level":"Nivel de registro","Logging":"Registro","Login":"Acceda a","Login failed: Couldn't load API details":"El inicio de sesión ha fallado: No se han podido cargar los detalles de la API","Login failed: {0}":["El inicio de sesión ha fallado: ",["0"]],"Login/JWT authorization":"Autorización de inicio de sesión/JWT","Logo":"Logotipo","Logout":"Cierre de sesión","MB":"MB","Main Source":"Fuente principal","Main channel":"Canal principal","Main channel not found":"Canal principal no encontrado","Main channel saved":"Canal principal guardado","Main page channel (index.html).":"Canal de la página principal (index.html).","Maintainer:":"Mantenedor:","Maximum allowed cache size, 0 for unlimited.":"Tamaño máximo de caché permitido, 0 para ilimitado.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Máximo de megabytes de RAM permitidos para /memfs, 0 para ilimitado.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Máximo de megabytes permitidos a consumir del disco duro. 0 para ilimitado.","Maximum bandwidth Mbit/s":"Ancho de banda máximo Mbit/s","Maximum delay in milliseconds.":"Retraso máximo en milisegundos.","Maximum file size (Megabytes)":"Tamaño máximo del archivo (Megabytes)","Maximum file size to put in cache.":"Tamaño máximo del archivo a poner en la caché.","Maximum log histroy":"Máxima historia de registro","Maximum log lines":"Líneas de registro máximas","Maximum size (Megabytes)":"Tamaño máximo (Megabytes)","Maximum viewer idle time (Seconds)":"Tiempo máximo de inactividad del espectador (segundos)","Maximum viewers":"Máximos espectadores","Memory":"Memoria","Meta information":"Meta información","Metadata":"Metadatos","Mold":"Moho","More about Twitter's copyright <0>here.":"Más información sobre los derechos de autor de Twitter <0>aquí.","More about YouTube's copyright <0>here.":"Más información sobre los derechos de autor de YouTube <0>aquí.","More about licenses here":"Más información sobre las licencias aquí","More about the service":"Más información sobre el servicio","Mute":"Silencio","Name":"Nombre","Name for the template. If the name already exists, it will be overwritten.":"Nombre para la plantilla. Si el nombre ya existe, se sobrescribirá.","Network":"Red","Network source":"Fuente de la red","Next":"Siguiente","Next: Audio":"Siguiente: Audio","Next: Video setup":"Siguiente: Configuración del vídeo","No":"No","No audio":"Sin audio","No audio stream available":"No hay flujo de audio disponible","No input device available":"No hay dispositivo de entrada disponible","No live stream was detected. Please check the software that sends the stream.":"No se ha detectado ninguna transmisión en directo. Por favor, compruebe el software que envía el flujo.","No source selected":"No se ha seleccionado ninguna fuente","No sources available":"No hay fuentes disponibles","No suitable encoder found.":"No se ha encontrado un codificador adecuado.","No video":"No hay vídeo","No video stream available":"No hay flujo de vídeo disponible","Node ID":"ID de nodo","Noise":"Ruido","None":"Ninguno","Notes":"Notas","Number of log lines to keep.":"Número de líneas de registro a conservar.","Number of logs to keep for each process.":"Número de registros a mantener para cada proceso.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Un referente por línea, por ejemplo: http://www.example.com","Open":"Abrir","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"El passthrough (copia) sólo debe desactivarse si es necesario. Cada codificación requiere recursos adicionales de la CPU/GPU.","Password":"Contraseña","Password for authorization.":"Contraseña para la autorización.","Password for the device.":"Contraseña para el dispositivo.","Persist viewer statistics":"Persistir las estadísticas de los espectadores","Pixel format":"Formato de píxeles","Plan: <0>Starter":"Plan: <0>Inicio","Platforms":"Plataformas","Playback":"Reproducción","Player":"Jugador","Player URL":"URL del jugador","Player settings saved":"Ajustes del jugador guardados","Playersite":"Playersite","Playlist":"Lista de reproducción","Please check the <0>process log":"Por favor, compruebe el <0>registro del proceso","Please contact the operator of the service and check what happens.":"Póngase en contacto con el operador del servicio y compruebe lo que ocurre.","Please select a file to upload.":"Por favor, seleccione un archivo para cargar.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Por favor, utilice \"Passthrough (copia)\" si es posible. La codificación requiere recursos adicionales de la CPU/GPU.","Please wait. Probe stream data ...":"Por favor, espere. Datos del flujo de la sonda ...","Please wait. Setting up the stream ...":"Por favor, espere. Configurando el flujo ...","Port":"Puerto","Position":"Posición","Preset":"Preestablecido","Primary stream":"Corriente primaria","Primary stream key":"Clave de flujo primaria","Probe":"Sonda","Process":"Proceso","Process control":"Control de procesos","Process debug":"Depuración del proceso","Process debug report":"Informe de depuración del proceso","Process details":"Detalles del proceso","Process report":"Informe del proceso","Processing & Control":"Procesamiento y control","Profile":"Perfil","Protocol":"Protocolo","Protocols":"Protocolos","Public domain/s":"Dominio público","Publication service not found":"Servicio de publicación no encontrado","Publication website settings saved":"Se guarda la configuración del sitio web de la publicación","Publications":"Publicaciones","Pull Mode":"Modo de tirar","Pull or recieve the data:":"Tire o reciba los datos:","Quality":"Calidad","RGB test pattern":"Patrón de prueba RGB","RTMP app for publishing.":"Aplicación RTMP para la publicación.","RTMP server":"Servidor RTMP","RTMP server is not enabled":"El servidor RTMP no está habilitado","RTMP server listen address.":"Dirección de escucha del servidor RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Token RTMP para publicar y reproducir. El token es el valor del parámetro de consulta URL 'token'.","RTMP/S":"RTMP/S","RTMPS server":"Servidor RTMPS","RTSP":"RTSP","Raspberry Pi camera":"Cámara Raspberry Pi","Rate control":"Control de la tasa","Ratio":"Ratio","Read input at native speed":"Leer la entrada a velocidad nativa","Receive Mode":"Modo de recepción","Reconnect":"Conecte de nuevo","Reconnect delay (seconds)":"Retraso de reconexión (segundos)","Reconnecting in {0}s":["Reconexión en ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["La reconexión con Restreamer Core ha fallado durante los últimos ",["RETRIES"]," segundos."],"Reconnecting to Restreamer Core failed.":"Ha fallado la reconexión con Restreamer Core.","Refresh":"Actualización","Region":"Región","Reload":"Recargar","Remove the oldest entries if the /memfs is full":"Eliminar las entradas más antiguas si el /memfs está lleno","Requires activation":"Requiere activación","Restart":"Reinicie","Restart required":"Es necesario reiniciar","Restarting":"Reiniciando","Restarting Restreamer Core ...":"Reiniciando el núcleo de Restreamer ...","Restarting the application failed.":"El reinicio de la aplicación ha fallado.","Restreamer Service":"Servicio de resemantización","Retrieving stream data ...":"Recuperación de los datos del flujo ...","Retry":"Reintentar","Rule":"Regla","Sampling":"Muestreo","Save":"Guarde","Scale":"Escala","Seconds to keep files in cache.":"Segundos para mantener los archivos en la caché.","Seconds until a process is restarted.":"Segundos hasta que se reinicie un proceso.","Seconds until a staled process is terminated.":"Segundos hasta que se termina un proceso estancado.","Seconds until the snapshot/thumbnail of the video source is updated.":"Segundos hasta que se actualiza la instantánea/imagen de la fuente de vídeo.","Security":"Seguridad","Security token":"Ficha de seguridad","Seekbar color":"Color de la barra de herramientas","Segment length (seconds)":"Duración del segmento (segundos)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"El segmento se cortará en el siguiente fotograma clave una vez transcurrido este tiempo. Se recomienda 2.","Segmentation":"Segmentación","Select a device:":"Seleccione un dispositivo:","Select audio source:":"Seleccione la fuente de audio:","Select source ...":"Seleccione la fuente ...","Select video source:":"Seleccione la fuente de vídeo:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Seleccione si extrae el flujo de una <0>fuente de red (como una cámara de red) o del <1>servidor RTMP interno (por ejemplo, los flujos OBS al Restreamer).","Select your encoding setting:":"Seleccione su configuración de codificación:","Selected":"Seleccionado","Selected channel":"Canal seleccionado","Selection":"Selección","Send anonymous metrics (helps us for future development)":"Enviar métricas anónimas (nos ayuda para el desarrollo futuro)","Send stream to this address:":"Envíe la corriente a esta dirección:","Send video to Framebuffer":"Enviar vídeo a Framebuffer","Server":"Servidor","Service":"Servicio","Service name":"Nombre del servicio","Service token for monitoring.":"Ficha de servicio para la supervisión.","Sessions":"Sesiones","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Establece un límite de ancho de banda en Mbit por segundo para la transferencia de datos HLS salientes. Todos los servicios, como el RTMP y los procesos salientes, se incluyen en el cálculo. Si se supera el ancho de banda, los espectadores HLS reciben el código de estado HTTP 509 (Límite de ancho de banda superado). 0 es ilimitado.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Establece un límite de espectadores para las sesiones HLS. Si se supera el límite, los espectadores HLS reciben el código de estado HTTP 509 (Límite de ancho de banda superado). 0 es ilimitado.","Setting for connection to the service.":"Ajuste para la conexión al servicio.","Settings":"Ajustes","Settings (expert mode)":"Ajustes (modo experto)","Settings for /data path. The access is protected by":"Configuración de la ruta /data. El acceso está protegido por","Settings for /memfs path.":"Configuración de la ruta /memfs.","Settings saved. All changes will be applied after restarting the application.":"Ajustes guardados. Todos los cambios se aplicarán después de reiniciar la aplicación.","Share button":"Botón de compartir","Shows a reference to the project.":"Muestra una referencia al proyecto.","Sign up (free)":"Inscríbase (gratis)","Silence":"Silencio","Silence Audio":"Silencio Audio","Sine":"Sine","Sitename":"Nombre del sitio","Size":"Tamaño","Snapshot":"Instantánea","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Tiempo de espera del zócalo (microsegundos)","Software":"Software","Source":"Fuente","Speed":"Velocidad","Stale timeout (seconds)":"Tiempo de espera (segundos)","Statistics":"Estadísticas","Storage":"Almacenamiento","Stores the viewer statistics to the disk.":"Almacena las estadísticas del visor en el disco.","Stream":"Corriente","Stream URL":"URL de la corriente","Stream key":"Clave de flujo","Stream name":"Nombre de la corriente","Stream names":"Nombres de los arroyos","Support datarhei Restreamer":"Apoyo a datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Soporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT y más.","System":"Sistema","Template":"Plantilla","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Plantilla que se utilizará para crear la página web de la publicación. El botón de borrar elimina la selección del sistema.","Terms":"Términos","Test pattern":"Patrón de prueba","Test pattern (extended)":"Patrón de prueba (ampliado)","Text colors":"Colores del texto","The amplitude (0.0 - 1.0) of the generated audio stream":"La amplitud (0,0 - 1,0) del flujo de audio generado","The application is using an older version of the settings.":"La aplicación está utilizando una versión antigua de la configuración.","The bitrate of the audio stream.":"La tasa de bits del flujo de audio.","The carrier frequency":"La frecuencia de la portadora","The channel \"{0}\" could not be deleted":["El canal \"",["0"],"\" no pudo ser borrado"],"The channel \"{0}\" has been deleted":["El canal \"",["0"],"\" ha sido borrado"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"La eliminación de este canal no se puede recuperar. Todas las publicaciones de este canal serán eliminadas.","The input profile is not complete. Please define a video and audio source.":"El perfil de entrada no está completo. Por favor, defina una fuente de vídeo y audio.","The layout of the audio stream.":"La disposición del flujo de audio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"El número máximo de segmentos de la lista de reproducción. El 0 contendrá todos los segmentos. Se recomienda 6.","The noise color":"El color del ruido","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"La persona que asoció una obra con esta escritura ha dedicado la obra al dominio público renunciando a todos sus derechos sobre la obra en todo el mundo bajo la ley de derechos de autor, incluyendo todos los derechos conexos y vecinos, en la medida permitida por la ley. Puede copiar, modificar, distribuir y representar la obra, incluso con fines comerciales, todo ello sin pedir permiso.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"El nombre de dominio público alcanzable del host en el que se ejecuta este Restreamer. Separe los nombres de dominio múltiples con una coma.","The publication service \"{0}\" could not be deleted":["El servicio de publicación \"",["0"],"\" no ha podido ser eliminado"],"The publication service \"{0}\" has been created":["El servicio de publicación \"",["0"],"\" ha sido creado"],"The publication service \"{0}\" has been deleted":["El servicio de publicación \"",["0"],"\" ha sido eliminado"],"The publication service has been created":"Se ha creado el servicio de publicación","The sample rate of the audio stream.":"La frecuencia de muestreo del flujo de audio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["El archivo seleccionado es demasiado grande (",["0"]," bytes). Sólo se permiten ",["1"]," bytes."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["El tipo de archivo seleccionado (",["0"],") no está permitido. Los tipos de archivo permitidos son ",["types"]],"The settings for \"{0}\" have been saved":["Los ajustes de \"",["0"],"\" se han guardado"],"The source doesn't provide any audio streams.":"La fuente no proporciona ningún flujo de audio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"La fuente no proporciona ningún flujo de audio. Por favor, compruebe los <0>detalles de la sonda.","The source doesn't provide any compatible audio streams.":"La fuente no proporciona ningún flujo de audio compatible.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"La fuente no proporciona ningún flujo de vídeo compatible. Por favor, compruebe los <0>requisitos.","The source doesn't provide any video streams. Please check the <0>probe details.":"La fuente no proporciona ningún flujo de vídeo. Por favor, compruebe los <0>detalles de la sonda.","The source doesn't provide any video streams. Please check the device.":"La fuente no proporciona ningún flujo de vídeo. Por favor, compruebe el dispositivo.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"La fuente de vídeo no proporciona ningún flujo de audio compatible. Se recomienda <0>Audio silencioso. Los servicios, como YouTube, Facebook y otros, requieren un canal de audio.","The video source is compatible. Select the desired resolution:":"La fuente de vídeo es compatible. Seleccione la resolución deseada:","There are updates available. Here you get more information.":"Hay actualizaciones disponibles. Aquí tiene más información.","There was a problem storing the settings. Settings not saved.":"Hubo un problema al guardar los ajustes. Los ajustes no se han guardado.","There was an error connecting to Restreamer Core at {0}.":["Se ha producido un error de conexión con Restreamer Core en ",["0"],"."],"There was an error during upload: {0}":["Ha habido un error durante la carga: ",["0"]],"There was an error setting up the stream.":"Hubo un error al configurar el flujo.","There were some errors in the settings. Settings not saved.":"Hubo algunos errores en la configuración. Los ajustes no se han guardado.","There's no login method available.":"No hay ningún método de inicio de sesión disponible.","This is a dummy service that explains to you the concepts of service.":"Este es un servicio ficticio que le explica los conceptos del servicio.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Esto no es necesariamente un error. Sin embargo, es posible que Restreamer Core tarde un poco más en reiniciarse..","This is to mention the copyright regulations for the target of this service.":"Se trata de mencionar las normas de derechos de autor para el objetivo de este servicio.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Esta licencia permite a los reutilizadores copiar y distribuir el material en cualquier medio o formato sólo en forma no adaptada y siempre que se dé la atribución al creador. La licencia permite el uso comercial.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Esta licencia permite a los reutilizadores copiar y distribuir el material en cualquier medio o formato en forma no adaptada, sólo para fines no comerciales y siempre que se dé la atribución al creador.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir a partir del material en cualquier medio o formato sólo con fines no comerciales y siempre que se cite al creador.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir a partir del material en cualquier medio o formato sólo con fines no comerciales y siempre que se cite al creador. Si usted remezcla, adapta o construye sobre el material, debe licenciar el material modificado bajo idénticos términos.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir sobre el material en cualquier medio o formato, siempre y cuando se dé la atribución al creador. La licencia permite el uso comercial.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir sobre el material en cualquier medio o formato, siempre y cuando se dé la atribución al creador. La licencia permite el uso comercial. Si usted remezcla, adapta o construye sobre el material, debe licenciar el material modificado bajo idénticos términos.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Esta fuente no puede ser editada mientras esté en uso. Para continuar, tiene que desconectar la fuente.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Esta versión de la UI no es compatible con el binario FFmpeg disponible (",["0"],"). La UI requiere ",["1"],". Por favor, utilice un binario FFmpeg compatible."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Esta versión de la interfaz de usuario no es compatible con el núcleo conectado (",["0"],"). La UI requiere ",["1"],". Por favor, utilice una versión compatible de la UI."],"This version of the UI is compatible.":"Esta versión de la interfaz de usuario es compatible.","Time until an inactive viewer connection is treated as closed.":"Tiempo que transcurre hasta que una conexión de visor inactiva es tratada como cerrada.","Token":"Ficha","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmita instantáneas de la fuente principal a un servidor HTTP/S. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Transmite el canal de audio de la fuente principal a un servidor Icecast. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmita la fuente principal como HTTP-Live-Streaming (HLS) a un servidor HTTP/S. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmita la fuente principal como MPEG-DASH a un servidor HTTP/S. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Transmitir la fuente principal a un Servicio Live de Brightcove. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Transmita la fuente principal a un servicio RTMP de CDN77. Más información sobre la configuración <0>aquí.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Transmita la fuente principal a un servicio RTMP de DaCast. Más información sobre la configuración <0>aquí.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Transmita la fuente principal a un servicio MPEG-TS. Puede encontrar más detalles sobre los ajustes aquí <0>aquí.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor RTMP(e|s|t|te|ts). Puede encontrar más detalles sobre la configuración <0>aquí.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor RTSP. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor Red5/Pro. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor SRT. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor UDP. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor WOWZA. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Transmitir la fuente principal a un datarhei Core Ressource. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Transmita la fuente principal a una fuente de livespotting.com. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Transmita la fuente principal a los Servicios de Medios en Vivo de Akamai (MSL). Puede encontrar más detalles sobre la configuración del codificador MSL en <0>aquí.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Transmita la fuente principal al servicio de codificación en la nube de Bitmovin, una potente herramienta para la transmisión en directo. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Transmita la fuente principal al servicio Restream RTMP. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Transmite su vídeo como un flujo RTMP con la clave necesaria generada en YouTube Studio. Puede encontrar más información sobre la configuración de una transmisión en directo en la <0>Academia de Creadores de YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Transmite su flujo de vídeo con la clave requerida, generada en Twitter Producer. Puede encontrar más información sobre la configuración de una transmisión en directo en <0>Productor de Twitter.","Tune":"Sintonice","UDP transport":"Transporte UDP","Unable to load the config.":"No se puede cargar la configuración.","Unique ident on the service.":"Identificación única en el servicio.","Unknown":"Desconocido","Unselected":"No seleccionado","Upload":"Subir a","Uploading the file failed":"La carga del archivo ha fallado","Uploading the logo failed":"Falló la carga del logotipo","Uptime":"Tiempo de funcionamiento","Use Auth0 for your running Restreamer Core. More <0>details.":"Utilice Auth0 para su núcleo Restreamer en funcionamiento. Más <0>detalles.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Utilice el asistente (<0/>) para una configuración rápida y sencilla, o edite (<1/>) las fuentes directamente en el modo personalizado.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilice los derechos de autor y elija la licencia de imagen correcta. Ya sea libre para todos o muy restringida. Comente brevemente lo que otros pueden hacer con su imagen.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilice sus derechos de autor y elija la licencia de imagen adecuada. Ya sea libre para todos o muy restringida. Comente brevemente lo que otros pueden hacer con su imagen.","User registration":"Registro de usuarios","Username":"Nombre de usuario","Username for authorization.":"Nombre de usuario para la autorización.","Username for the device.":"Nombre de usuario del dispositivo.","VPU ID":"ID DE LA VPU","Video":"Vídeo","Video device":"Dispositivo de vídeo","Video settings":"Ajustes de vídeo","Video setup":"Configuración del vídeo","Video source":"Fuente de vídeo","Viewer":"Visor","Virtual source":"Fuente virtual","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Bienvenido a Restreamer v2, la solución para la publicación rápida y sencilla de vídeos. Gratis para uso privado y comercial. Más ayuda en los <0>docs.","Write protection":"Protección de la escritura","YUV test pattern":"Patrón de prueba YUV","Yes":"Sí","You can't abort the wizard because at least one input must be defined.":"No puede abortar el asistente porque al menos una entrada debe estar definida.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Ha cambiado la configuración. Para que los cambios surtan efecto, tiene que reiniciar la aplicación. ¿Quiere reiniciar ahora?","You have to reconnect manually":"Tiene que volver a conectarse manualmente","You have unsaved changes. Please save them before you can control the service again.":"Tiene cambios sin guardar. Por favor, guárdelos antes de poder controlar el servicio de nuevo.","Your stream needs to be encoded, but there's no suitable encoder available.":"Su flujo necesita ser codificado, pero no hay un codificador adecuado disponible.","Your stream needs to be encoded. Choose the desired encoder:":"Su flujo debe ser codificado. Elija el codificador deseado:","blue":"azul","brown":"marrón","iframe code":"código iframe","kbit/s":"kbit/s","pink":"rosa","velvet":"terciopelo","violet":"violeta","white":"blanco"}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"6 (+ guaranteed to start with a Key frame)":"6 (+ garantizado para empezar con un fotograma clave)","7 (+ fragmented MP4 format)":"7 (+ formato MP4 fragmentado)","<0>Compatibility list":"<0>Lista de compatibilidad","<0>Show probe details":"<0>Mostrar detalles de la sonda","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Punto final de la API no encontrado. La configuración no se ha guardado.","AVFoundation":"AVFoundation","Abort":"Abortar","About":"Acerca de","Add":"Añada","Add Publication":"Añadir publicación","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Añada widgets y estilos externos al sitio de publicación. Puede encontrar algunos ejemplos en la página de ayuda.","Add new channel":"Añadir un nuevo canal","Add: {0}":["Añadir: ",["0"]],"Address":"Dirección","Address for the background image.":"Dirección para la imagen de fondo.","Address to listen on for HTTP requests.":"Dirección de escucha para las peticiones HTTP.","Address to listen on for HTTPS requests.":"Dirección de escucha para las solicitudes HTTPS.","Adjust publication site colors and background as you like.":"Ajuste los colores del sitio de publicación y el fondo a su gusto.","Advanced monitoring":"Vigilancia avanzada","Advanced settings":"Ajustes avanzados","Advanced setup":"Configuración avanzada","AirPlay":"AirPlay","Alerting by email":"Alerta por correo electrónico","All":"Todo","All important system settings.":"Todos los ajustes importantes del sistema.","Allow all referrer":"Permitir todos los remitentes","Allow counting how many viewers the stream has.":"Permite contar el número de espectadores que tiene el flujo.","Amplitude":"Amplitud","An environment variable sets this value.":"Una variable de entorno establece este valor.","App":"App","Application":"Aplicación","Are you sure you want to abort the wizard?":"¿Está seguro de que quiere abortar el asistente?","Audio":"Audio","Audio Device":"Dispositivo de audio","Audio device":"Dispositivo de audio","Audio from device":"Audio del dispositivo","Audio settings":"Ajustes de audio","Audio setup":"Configuración de audio","Auth0":"Auth0","Auth0 Tenant":"Auth0 Inquilino","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 no está disponible actualmente porque esta interfaz está cargada desde un origen inseguro.","Author":"Autor","Authorization":"Autorización","Automatic cleanup of all media data":"Limpieza automática de todos los datos de los medios de comunicación","Autoplay":"Reproducción automática","Available":"Disponible","Back":"Volver","Background colors":"Colores de fondo","Background image":"Imagen de fondo","Backup URL":"URL de respaldo","Backup server":"Servidor de respaldo","Backup stream":"Flujo de reserva","Backup stream key":"Clave de flujo de respaldo","Bandwidth":"Ancho de banda","Bandwidth control":"Control del ancho de banda","Banner":"Banner","Basic":"Básico","Beep factor":"Factor Bip","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Describa brevemente lo que el público verá durante la transmisión en directo.","Button color":"Color del botón","Cache for files on /data.":"Caché para archivos en /data.","Cache time (Seconds)":"Tiempo de caché (segundos)","Cache types":"Tipos de caché","Capture clicks":"Captura de clics","Capture cursor":"Cursor de captura","Channel \"{0}\" saved":["Canal \"",["0"],"\" guardado"],"Channels":"Canales","Check for updates":"Compruebe las actualizaciones","Check the requirements":"Compruebe los requisitos","Choose a video stream":"Elija un flujo de vídeo","Choose an audio stream":"Elija un flujo de audio","Choose an input device ...":"Elija un dispositivo de entrada ...","Choose codec ...":"Elija el códec ...","Choose tenant ...":"Elija al inquilino ...","Chromecast":"Chromecast","Chunk":"Chunk","Close":"Cerrar","Code injection":"Inyección de código","Codec":"Códec","Color":"Color","Config":"Configurar","Confirm password":"Confirmar contraseña","Connect":"Conectar","Connected device":"Dispositivo conectado","Connected since <0/>":"Conectado desde <0/>","Connecting ...":"Conectando ...","Connecting to Restreamer Core ...":"Conexión al núcleo de Restreamer ...","Connecting to Restreamer Core failed probably because of mixed content.":"La conexión con Restreamer Core ha fallado probablemente debido a la mezcla de contenidos.","Content":"Contenido","Content URL":"Contenido URL","Cores":"Núcleos","Create user":"Crear usuario","Creative Commons":"Creative Commons","Custom ...":"A medida ...","Custom JSON config for datarhei Core.":"Configuración JSON personalizada para datarhei Core.","Custom audio device":"Dispositivo de audio personalizado","Custom audio index":"Índice de audio personalizado","Custom bitrate (kbit/s)":"Tasa de bits personalizada (kbit/s)","Custom code injection":"Inyección de código personalizado","Custom delay":"Retraso personalizado","Custom device":"Dispositivo personalizado","Custom format":"Formato personalizado","Custom framerate":"Velocidad de fotogramas personalizada","Custom keyframe interval":"Intervalo de fotogramas clave personalizado","Custom layout":"Diseño personalizado","Custom sampling (Hz)":"Muestreo personalizado (Hz)","Custom scale":"Escala personalizada","Custom size":"Tamaño personalizado","Custom video device":"Dispositivo de vídeo personalizado","Custom video index":"Índice de vídeo personalizado","Data copied to clipboard":"Datos copiados en el portapapeles","Death color":"Color de la muerte","Decibels (dB)":"Decibelios (dB)","Decoder":"Decodificador","Default":"Por defecto","Delay":"Retraso","Delay (ms)":"Retraso (ms)","Delete":"Borrar","Deleting a publication service cannot be reversed. The publication stops immediately.":"La eliminación de un servicio de publicación no se puede revertir. La publicación se detiene inmediatamente.","Delivering mode":"Modo de entrega","Description":"Descripción","Design":"Diseño","Device":"Dispositivo","Disconnect":"Desconectar","Disconnect & Continue":"Desconectar y continuar","Disconnecting ...":"Desconectando...","Disk":"Disco","Disk cache":"Caché de disco","Disk storage":"Almacenamiento en disco","Do you really want to restart the application now?":"¿Realmente quiere reiniciar la aplicación ahora?","Do you want to delete \"{0}\"?":["¿Quiere borrar \"",["0"],"\"?"],"Do you want to delete {title}?":["¿Desea eliminar ",["título"],"?"],"Do you want to disconnect \"{0}\"?":["¿Quiere desconectar \"",["0"],"\"?"],"Docs":"Docs","Documentation":"Documentación","Dup. frames":"Marcos Dup.","EDIT: Player":"EDIT: Jugador","EDIT: Publication Website":"EDIT: Página web de la publicación","EXT-X-VERSION":"EXT-X-VERSION","Edit":"Editar","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Edite las fuentes de audio y vídeo para la transmisión en directo. Añada una descripción y establezca la licencia de contenido que desee.","Edit: {title}":["Editar: ",["título"]],"Embed":"Incrustar","Enable":"Activar","Enable RTMP server ...":"Habilitar el servidor RTMP ...","Enable SRT server ...":"Habilitar el servidor SRT ...","Enable a periodic beep every second with this value times the carrier frequency":"Habilitar un pitido periódico cada segundo con este valor multiplicado por la frecuencia portadora","Enable backup stream":"Habilitar el flujo de respaldo","Enable nerd statistics":"Habilitar las estadísticas de los nerds","Enable now":"Habilitar ahora","Enable primary stream":"Habilitar el flujo primario","Enable snapshots":"Habilitar las instantáneas","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Se recomienda encarecidamente habilitar la autorización. De lo contrario, cualquiera puede acceder a esta instancia.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Se recomienda encarecidamente habilitar la autentificación básica. De lo contrario, cualquiera podría escribir datos en /memfs.","Encoder":"Codificador","Encoding":"Codificación","Encryption":"Codificación","Enter a name for the new channel.":"Introduzca un nombre para el nuevo canal.","Enter password":"Introduzca la contraseña","Enter the address of your network source:":"Introduzca la dirección de su fuente de red:","Enter username":"Introduzca el nombre de usuario","Entropy coder":"Codificador de entropía","Error":"Error","Error while copying data to clipboard":"Error al copiar datos en el portapapeles","Error: {0}":["Error: ",["0"]],"Expands the area above the channel list (live chat).":"Amplía el área sobre la lista de canales (chat en vivo).","Expands the area under the channel description (comment boxes).":"Amplía el área bajo la descripción del canal (cuadros de comentarios).","Expert mode":"Modo experto","Extend channel list":"Ampliar la lista de canales","Extend content":"Ampliar el contenido","Extend footer":"Ampliar el pie de página","Extend header":"Ampliar la cabecera","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Fallo en la creación del servicio de publicación (",["0"],")"],"Failed to create publication website files.":"Fallo en la creación de los archivos del sitio web de la publicación.","Failed to probe the source. Please check the <0>probe details.":"No se ha podido sondear la fuente. Por favor, compruebe los <0>detalles de la sonda.","Failed to refresh token: {0}":["Fallo en la actualización de la ficha: ",["0"]],"Failed to save ingest metadata":"Fallo al guardar los metadatos de ingesta","Failed to stop process":"Fallo en la detención del proceso","Failed to store player size setting.":"Fallo al almacenar el ajuste del tamaño del reproductor.","Failed to store publication service ({0})":["Fallo en el almacenamiento del servicio de publicación (",["0"],")"],"Failed to update ingest process ({0})":["Fallo en la actualización del proceso de ingesta (",["0"],")"],"Failed to update ingest snapshot process ({0})":["Fallo en la actualización del proceso de ingesta de instantáneas (",["0"],")"],"Failed to update the player":"Fallo en la actualización del reproductor","Failed to update the playersite":"No se ha podido actualizar el sitio de los jugadores","Failed to verify the source. Please check the address.":"No se ha podido verificar la fuente. Por favor, compruebe la dirección.","Filter":"Filtro","Finish":"Acabado","Flags":"Banderas","For Javascripts.":"Para Javascripts.","For Stylesheets.":"Para las hojas de estilo.","Force input framerate":"Forzar la velocidad de entrada de fotogramas","Format":"Formato","Frame drops":"Caída de cuadros","Framebuffer":"Buffer de imágenes","Framerate":"Framerate","Frequency (Hz)":"Frecuencia (Hz)","GET":"GET","General":"General","Google Analytics ID":"ID de Google Analytics","Google Analytics Tracker Name":"Nombre del rastreador de Google Analytics","HLS":"HLS","HLS output":"Salida HLS","HLS server":"Servidor HLS","HLS statistic for the In-memory storage":"Estadística HLS para el almacenamiento en memoria","HTTP and HTTPS":"HTTP y HTTPS","HTTP port":"Puerto HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Puerto HTTPS","Hardware device":"Dispositivo de hardware","Header":"Cabecera","Headline":"Titular","Horizontal Flip":"Volteo horizontal","Hosted Restreamer interface":"Interfaz de Restreamer alojado","Human readable name on the service.":"Nombre legible para el ser humano en el servicio.","IP address":"Dirección IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Si ha cambiado los puertos, puede ser que Restreamer Core ya se haya reiniciado, pero ahora está disponible en un puerto diferente.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Si ha habilitado Let's Encrypt TLS, puede tardar un poco en adquirir los certificados. Asegúrese de que Restreamer Core es accesible a través del puerto 80 desde Internet. Compruebe el registro de la consola de Restreamer Core.","Ignore IP ranges":"Ignorar los rangos de IP","Image URL":"URL de la imagen","Imprint":"Impresión","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Además del reproductor, el Restreamer ofrece una completa página de aterrizaje, con la que podrá presentar su transmisión en directo de forma fácil y rápida.","In-memory":"En memoria","In-memory storage":"Almacenamiento en memoria","Incompatible":"Incompatible","Inherit":"Heredar","Inject 1":"Inyectar 1","Inject 2":"Inyectar 2","Inject 3":"Inyectar 3","Inject 4":"Inyectar 4","Interval (seconds)":"Intervalo (segundos)","Issue alert":"Alerta de emisión","Keyframe interval (seconds)":"Intervalo de fotogramas clave (segundos)","Layout":"Disposición","Let's Encrypt certification":"Certificación Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt requiere uno o más nombres de dominio público y un puerto 80/TCP accesible.","Level":"Nivel","Level of system protocol.":"Nivel de protocolo del sistema.","License":"Licencia","Life color":"El color de la vida","Linecolor":"Linecolor","Link":"Enlace","Link, mouseover":"Enlace, ratón","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Lista de rangos de IP en notación CIDR, por ejemplo, 127.0.0.1/32, que las estadísticas no registrarán -un rango de IP por línea. Déjelo vacío para registrar todas las sesiones.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Lista de extensiones de archivos a almacenar en caché (por ejemplo, \".html\"), una por línea. Déjela vacía para almacenar en caché todos los tipos de archivos.","List size (segments)":"Tamaño de la lista (segmentos)","Live-Streaming to Facebook Live RTMP service":"Transmisión en directo al servicio RTMP de Facebook Live","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Transmisión en directo al servicio RTMP de Instagram Live. La clave del streaming requiere un servicio como <0>Pato Amarillo.","Live-Streaming to Twitch Live RTMP Service.":"Transmisión en directo al servicio RTMP de Twitch Live.","Live-Streaming to Vimeo Live RTMP Service":"Transmisión en directo al servicio Vimeo Live RTMP","Livesource ID":"Identificación de la fuente de vida","Log level":"Nivel de registro","Logging":"Registro","Login":"Acceda a","Login failed: Couldn't load API details":"El inicio de sesión ha fallado: No se han podido cargar los detalles de la API","Login failed: {0}":["El inicio de sesión ha fallado: ",["0"]],"Login/JWT authorization":"Autorización de inicio de sesión/JWT","Logo":"Logotipo","Logout":"Cierre de sesión","Loudness Normalization":"Normalización de la sonoridad","MB":"MB","Main Source":"Fuente principal","Main channel":"Canal principal","Main channel not found":"Canal principal no encontrado","Main channel saved":"Canal principal guardado","Main page channel (index.html).":"Canal de la página principal (index.html).","Maintainer:":"Mantenedor:","Make the channel available as an RTMP stream (experimental).":"Hacer que el canal esté disponible como un flujo RTMP (experimental).","Make the channel available as an SRT stream (experimental).":"Hacer que el canal esté disponible como un flujo SRT (experimental).","Master playlist (increases browser/client compatibility)":"Lista de reproducción maestra (aumenta la compatibilidad con el navegador/cliente)","Maximum allowed cache size, 0 for unlimited.":"Tamaño máximo de caché permitido, 0 para ilimitado.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Máximo de megabytes de RAM permitidos para /memfs, 0 para ilimitado.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Máximo de megabytes permitidos a consumir del disco duro. 0 para ilimitado.","Maximum bandwidth Mbit/s":"Ancho de banda máximo Mbit/s","Maximum delay in milliseconds.":"Retraso máximo en milisegundos.","Maximum file size (Megabytes)":"Tamaño máximo del archivo (Megabytes)","Maximum file size to put in cache.":"Tamaño máximo del archivo a poner en la caché.","Maximum log histroy":"Máxima historia de registro","Maximum log lines":"Líneas de registro máximas","Maximum size (Megabytes)":"Tamaño máximo (Megabytes)","Maximum viewer idle time (Seconds)":"Tiempo máximo de inactividad del espectador (segundos)","Maximum viewers":"Máximos espectadores","Memory":"Memoria","Meta information":"Meta información","Metadata":"Metadatos","Mold":"Moho","More about Twitter's copyright <0>here.":"Más información sobre los derechos de autor de Twitter <0>aquí.","More about YouTube's copyright <0>here.":"Más información sobre los derechos de autor de YouTube <0>aquí.","More about licenses here":"Más información sobre las licencias aquí","More about the service":"Más información sobre el servicio","Mute":"Silencio","Mute a channel.":"Silenciar un canal.","Mute left":"Silencio a la izquierda","Mute right":"Silencio a la derecha","Name":"Nombre","Name for the template. If the name already exists, it will be overwritten.":"Nombre para la plantilla. Si el nombre ya existe, se sobrescribirá.","Network":"Red","Network source":"Fuente de la red","Next":"Siguiente","Next: Audio":"Siguiente: Audio","Next: Video setup":"Siguiente: Configuración del vídeo","No":"No","No audio":"Sin audio","No audio stream available":"No hay flujo de audio disponible","No input device available":"No hay dispositivo de entrada disponible","No live stream was detected. Please check the software that sends the stream.":"No se ha detectado ninguna transmisión en directo. Por favor, compruebe el software que envía el flujo.","No source selected":"No se ha seleccionado ninguna fuente","No sources available":"No hay fuentes disponibles","No suitable encoder found.":"No se ha encontrado un codificador adecuado.","No suitable filter found.":"No se ha encontrado ningún filtro adecuado.","No video":"No hay vídeo","No video stream available":"No hay flujo de vídeo disponible","Node ID":"ID de nodo","Noise":"Ruido","None":"Ninguno","Notes":"Notas","Number of log lines to keep.":"Número de líneas de registro a conservar.","Number of logs to keep for each process.":"Número de registros a mantener para cada proceso.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Un referente por línea, por ejemplo: http://www.example.com","Open":"Abrir","Pan":"Pan","Passphrase":"Frase de acceso","Passphrase for SRT encryption.":"Frase de paso para el cifrado SRT.","Passphrase must be between 10 and 79 characters long":"La frase de acceso debe tener entre 10 y 79 caracteres","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"El passthrough (copia) sólo debe desactivarse si es necesario. Cada codificación requiere recursos adicionales de la CPU/GPU.","Password":"Contraseña","Password for authorization.":"Contraseña para la autorización.","Password for the device.":"Contraseña para el dispositivo.","Persist viewer statistics":"Persistir las estadísticas de los espectadores","Pixel format":"Formato de píxeles","Plan: <0>Starter":"Plan: <0>Inicio","Platforms":"Plataformas","Playback":"Reproducción","Player":"Jugador","Player URL":"URL del jugador","Player settings saved":"Ajustes del jugador guardados","Playersite":"Playersite","Playlist":"Lista de reproducción","Playlist version (M3U8). Version 3 has the best browser/client compatibility.":"Versión de la lista de reproducción (M3U8). La versión 3 tiene la mejor compatibilidad con el navegador/cliente.","Please check the <0>process log":"Por favor, compruebe el <0>registro del proceso","Please contact the operator of the service and check what happens.":"Póngase en contacto con el operador del servicio y compruebe lo que ocurre.","Please get in touch with the operator of the service and check what happens.":"Ponte en contacto con el operador del servicio y comprueba lo que ocurre.","Please select a file to upload.":"Por favor, seleccione un archivo para cargar.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Por favor, utilice \"Passthrough (copia)\" si es posible. La codificación requiere recursos adicionales de la CPU/GPU.","Please wait. Probe stream data ...":"Por favor, espere. Datos del flujo de la sonda ...","Please wait. Setting up the stream ...":"Por favor, espere. Configurando el flujo ...","Port":"Puerto","Position":"Posición","Preset":"Preestablecido","Primary stream":"Corriente primaria","Primary stream key":"Clave de flujo primaria","Probe":"Sonda","Process":"Proceso","Process control":"Control de procesos","Process debug report":"Informe de depuración del proceso","Process details":"Detalles del proceso","Process report":"Informe del proceso","Processing & Control":"Procesamiento y control","Profile":"Perfil","Protocol":"Protocolo","Protocols":"Protocolos","Public domain/s":"Dominio público","Publication service not found":"Servicio de publicación no encontrado","Publication website settings saved":"Se guarda la configuración del sitio web de la publicación","Publications":"Publicaciones","Pull Mode":"Modo de tirar","Pull or recieve the data:":"Tire o reciba los datos:","Quality":"Calidad","RGB test pattern":"Patrón de prueba RGB","RTMP":"RTMP","RTMP Port":"Puerto RTMP","RTMP app for publishing.":"Aplicación RTMP para la publicación.","RTMP output":"Salida RTMP","RTMP server":"Servidor RTMP","RTMP server is not enabled":"El servidor RTMP no está habilitado","RTMP server listen address.":"Dirección de escucha del servidor RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Token RTMP para publicar y reproducir. El token es el valor del parámetro de consulta URL 'token'.","RTMPS Port":"Puerto RTMPS","RTMPS server":"Servidor RTMPS","RTMPS server listen address.":"Dirección de escucha del servidor RTMPS.","RTSP":"RTSP","Raspberry Pi camera":"Cámara Raspberry Pi","Rate control":"Control de la tasa","Ratio":"Ratio","Read input at native speed":"Leer la entrada a velocidad nativa","Receive Mode":"Modo de recepción","Reconnect":"Conecte de nuevo","Reconnect delay (seconds)":"Retraso de reconexión (segundos)","Reconnecting in {0}s":["Reconexión en ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["La reconexión con Restreamer Core ha fallado durante los últimos ",["RETRIES"]," segundos."],"Reconnecting to Restreamer Core failed.":"Ha fallado la reconexión con Restreamer Core.","Refresh":"Actualización","Region":"Región","Reload":"Recargar","Remove the oldest entries if the /memfs is full":"Eliminar las entradas más antiguas si el /memfs está lleno","Requires activation":"Requiere activación","Restart":"Reinicie","Restart required":"Es necesario reiniciar","Restarting":"Reiniciando","Restarting Restreamer Core ...":"Reiniciando el núcleo de Restreamer ...","Restarting the application failed.":"El reinicio de la aplicación ha fallado.","Restreamer Service":"Servicio de resemantización","Retrieving stream data ...":"Recuperación de los datos del flujo ...","Retry":"Reintentar","Rotate":"Girar","Rule":"Regla","SRT":"SRT","SRT output":"Salida SRT","SRT server":"Servidor SRT","SRT server is not enabled":"El servidor SRT no está habilitado","SRT server listen address.":"Dirección de escucha del servidor SRT.","SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'":"Token SRT para publicar y reproducir. El token es el valor del parámetro streamid 'token'.","Sampling":"Muestreo","Save":"Guarde","Scale":"Escala","Seconds to keep files in cache.":"Segundos para mantener los archivos en la caché.","Seconds until a process is restarted.":"Segundos hasta que se reinicie un proceso.","Seconds until a staled process is terminated.":"Segundos hasta que se termina un proceso estancado.","Seconds until the snapshot/thumbnail of the video source is updated.":"Segundos hasta que se actualiza la instantánea/imagen de la fuente de vídeo.","Security":"Seguridad","Security passphrase":"Frase de seguridad","Security token":"Ficha de seguridad","Seekbar color":"Color de la barra de herramientas","Segment length (seconds)":"Duración del segmento (segundos)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"El segmento se cortará en el siguiente fotograma clave una vez transcurrido este tiempo. Se recomienda 2.","Segmentation":"Segmentación","Select RTMP or SRT (if enabled) for less latency.":"Seleccione RTMP o SRT (si está activado) para una menor latencia.","Select a device:":"Seleccione un dispositivo:","Select audio source:":"Seleccione la fuente de audio:","Select source ...":"Seleccione la fuente ...","Select video source:":"Seleccione la fuente de vídeo:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Seleccione si extrae el flujo de una <0>fuente de red (como una cámara de red) o del <1>servidor RTMP interno (por ejemplo, los flujos OBS al Restreamer).","Select your encoding setting:":"Seleccione su configuración de codificación:","Select your filter settings (optional):":"Seleccione la configuración del filtro (opcional):","Selected":"Seleccionado","Selected channel":"Canal seleccionado","Selection":"Selección","Send anonymous metrics (helps us for future development)":"Enviar métricas anónimas (nos ayuda para el desarrollo futuro)","Send stream to this address:":"Envíe la corriente a esta dirección:","Send video to Framebuffer":"Enviar vídeo a Framebuffer","Server":"Servidor","Server URL":"URL del servidor","Service":"Servicio","Service name":"Nombre del servicio","Service token for monitoring.":"Ficha de servicio para la supervisión.","Sessions":"Sesiones","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Establece un límite de ancho de banda en Mbit por segundo para la transferencia de datos HLS salientes. Todos los servicios, como el RTMP y los procesos salientes, se incluyen en el cálculo. Si se supera el ancho de banda, los espectadores HLS reciben el código de estado HTTP 509 (Límite de ancho de banda superado). 0 es ilimitado.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Establece un límite de espectadores para las sesiones HLS. Si se supera el límite, los espectadores HLS reciben el código de estado HTTP 509 (Límite de ancho de banda superado). 0 es ilimitado.","Setting for connection to the service.":"Ajuste para la conexión al servicio.","Settings":"Ajustes","Settings (expert mode)":"Ajustes (modo experto)","Settings for /data path. The access is protected by":"Configuración de la ruta /data. El acceso está protegido por","Settings for /memfs path.":"Configuración de la ruta /memfs.","Settings saved. All changes will be applied after restarting the application.":"Ajustes guardados. Todos los cambios se aplicarán después de reiniciar la aplicación.","Share button":"Botón de compartir","Shows a reference to the project.":"Muestra una referencia al proyecto.","Sign up (free)":"Inscríbase (gratis)","Silence":"Silencio","Silence Audio":"Silencio Audio","Sine":"Sine","Sitename":"Nombre del sitio","Size":"Tamaño","Snapshot":"Instantánea","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Tiempo de espera del zócalo (microsegundos)","Software":"Software","Source":"Fuente","Source & Encoding":"Fuente y codificación","Speed":"Velocidad","Stale timeout (seconds)":"Tiempo de espera (segundos)","Statistics":"Estadísticas","Storage":"Almacenamiento","Stores the viewer statistics to the disk.":"Almacena las estadísticas del visor en el disco.","Stream":"Corriente","Stream URL":"URL de la corriente","Stream key":"Clave de flujo","Stream name":"Nombre de la corriente","Stream names":"Nombres de los arroyos","Stream source for publication service (experimental).":"Fuente de flujo para el servicio de publicación (experimental).","Support datarhei Restreamer":"Apoyo a datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Soporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT y más.","System":"Sistema","Template":"Plantilla","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Plantilla que se utilizará para crear la página web de la publicación. El botón de borrar elimina la selección del sistema.","Terms":"Términos","Test pattern":"Patrón de prueba","Test pattern (extended)":"Patrón de prueba (ampliado)","Text colors":"Colores del texto","The RTMP output requires the RTMP Server.":"La salida RTMP requiere el Servidor RTMP.","The SRT output requires the SRT Server.":"La salida de SRT requiere el Servidor SRT.","The amplitude (0.0 - 1.0) of the generated audio stream":"La amplitud (0,0 - 1,0) del flujo de audio generado","The application is using an older version of the settings.":"La aplicación está utilizando una versión antigua de la configuración.","The available FFmpeg binary doesn't support any of the required protocols.":"El binario disponible de FFmpeg no soporta ninguno de los protocolos requeridos.","The bitrate of the audio stream.":"La tasa de bits del flujo de audio.","The carrier frequency":"La frecuencia de la portadora","The channel \"{0}\" could not be deleted":["El canal \"",["0"],"\" no pudo ser borrado"],"The channel \"{0}\" has been deleted":["El canal \"",["0"],"\" ha sido borrado"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"La eliminación de este canal no se puede recuperar. Todas las publicaciones de este canal serán eliminadas.","The input profile is not complete. Please define a video and audio source.":"El perfil de entrada no está completo. Por favor, defina una fuente de vídeo y audio.","The layout of the audio stream.":"La disposición del flujo de audio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"El número máximo de segmentos de la lista de reproducción. El 0 contendrá todos los segmentos. Se recomienda 6.","The noise color":"El color del ruido","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"La persona que asoció una obra con esta escritura ha dedicado la obra al dominio público renunciando a todos sus derechos sobre la obra en todo el mundo bajo la ley de derechos de autor, incluyendo todos los derechos conexos y vecinos, en la medida permitida por la ley. Puede copiar, modificar, distribuir y representar la obra, incluso con fines comerciales, todo ello sin pedir permiso.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"El nombre de dominio público alcanzable del host en el que se ejecuta este Restreamer. Separe los nombres de dominio múltiples con una coma.","The publication service \"{0}\" could not be deleted":["El servicio de publicación \"",["0"],"\" no ha podido ser eliminado"],"The publication service \"{0}\" has been created":["El servicio de publicación \"",["0"],"\" ha sido creado"],"The publication service \"{0}\" has been deleted":["El servicio de publicación \"",["0"],"\" ha sido eliminado"],"The publication service has been created":"Se ha creado el servicio de publicación","The sample rate of the audio stream.":"La frecuencia de muestreo del flujo de audio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["El archivo seleccionado es demasiado grande (",["0"]," bytes). Sólo se permiten ",["1"]," bytes."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["El tipo de archivo seleccionado (",["0"],") no está permitido. Los tipos de archivo permitidos son ",["types"]],"The settings for \"{0}\" have been saved":["Los ajustes de \"",["0"],"\" se han guardado"],"The source doesn't provide any audio streams.":"La fuente no proporciona ningún flujo de audio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"La fuente no proporciona ningún flujo de audio. Por favor, compruebe los <0>detalles de la sonda.","The source doesn't provide any compatible audio streams.":"La fuente no proporciona ningún flujo de audio compatible.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"La fuente no proporciona ningún flujo de vídeo compatible. Por favor, compruebe los <0>requisitos.","The source doesn't provide any video streams. Please check the <0>probe details.":"La fuente no proporciona ningún flujo de vídeo. Por favor, compruebe los <0>detalles de la sonda.","The source doesn't provide any video streams. Please check the device.":"La fuente no proporciona ningún flujo de vídeo. Por favor, compruebe el dispositivo.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"La fuente de vídeo no proporciona ningún flujo de audio compatible. Se recomienda <0>Audio silencioso. Los servicios, como YouTube, Facebook y otros, requieren un canal de audio.","The video source is compatible. Select the desired resolution:":"La fuente de vídeo es compatible. Seleccione la resolución deseada:","There are updates available. Here you get more information.":"Hay actualizaciones disponibles. Aquí tiene más información.","There was a problem storing the settings. Settings not saved.":"Hubo un problema al guardar los ajustes. Los ajustes no se han guardado.","There was an error connecting to Restreamer Core at {0}.":["Se ha producido un error de conexión con Restreamer Core en ",["0"],"."],"There was an error during upload: {0}":["Ha habido un error durante la carga: ",["0"]],"There was an error setting up the stream.":"Hubo un error al configurar el flujo.","There were some errors in the settings. Settings not saved.":"Hubo algunos errores en la configuración. Los ajustes no se han guardado.","There's no login method available.":"No hay ningún método de inicio de sesión disponible.","This is a dummy service that explains to you the concepts of service.":"Este es un servicio ficticio que le explica los conceptos del servicio.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Esto no es necesariamente un error. Sin embargo, es posible que Restreamer Core tarde un poco más en reiniciarse..","This is to mention the copyright regulations for the target of this service.":"Se trata de mencionar las normas de derechos de autor para el objetivo de este servicio.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Esta licencia permite a los reutilizadores copiar y distribuir el material en cualquier medio o formato sólo en forma no adaptada y siempre que se dé la atribución al creador. La licencia permite el uso comercial.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Esta licencia permite a los reutilizadores copiar y distribuir el material en cualquier medio o formato en forma no adaptada, sólo para fines no comerciales y siempre que se dé la atribución al creador.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir a partir del material en cualquier medio o formato sólo con fines no comerciales y siempre que se cite al creador.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir a partir del material en cualquier medio o formato sólo con fines no comerciales y siempre que se cite al creador. Si usted remezcla, adapta o construye sobre el material, debe licenciar el material modificado bajo idénticos términos.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir sobre el material en cualquier medio o formato, siempre y cuando se dé la atribución al creador. La licencia permite el uso comercial.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir sobre el material en cualquier medio o formato, siempre y cuando se dé la atribución al creador. La licencia permite el uso comercial. Si usted remezcla, adapta o construye sobre el material, debe licenciar el material modificado bajo idénticos términos.","This protocol is unknown or not supported by the available FFmpeg binary.":"Este protocolo es desconocido o no está soportado por el binario disponible de FFmpeg.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Esta fuente no puede ser editada mientras esté en uso. Para continuar, tiene que desconectar la fuente.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Esta versión de la UI no es compatible con el binario FFmpeg disponible (",["0"],"). La UI requiere ",["1"],". Por favor, utilice un binario FFmpeg compatible."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Esta versión de la interfaz de usuario no es compatible con el núcleo conectado (",["0"],"). La UI requiere ",["1"],". Por favor, utilice una versión compatible de la UI."],"This version of the UI is compatible.":"Esta versión de la interfaz de usuario es compatible.","Time until an inactive viewer connection is treated as closed.":"Tiempo que transcurre hasta que una conexión de visor inactiva es tratada como cerrada.","Token":"Ficha","Transmit a Livestream to a Telegram Channel.":"Transmitir un Livestream a un canal de Telegram.","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmita instantáneas de la fuente principal a un servidor HTTP/S. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Transmite el canal de audio de la fuente principal a un servidor Icecast. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmita la fuente principal como HTTP-Live-Streaming (HLS) a un servidor HTTP/S. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmita la fuente principal como MPEG-DASH a un servidor HTTP/S. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Transmitir la fuente principal a un Servicio Live de Brightcove. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Transmita la fuente principal a un servicio RTMP de CDN77. Más información sobre la configuración <0>aquí.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Transmita la fuente principal a un servicio RTMP de DaCast. Más información sobre la configuración <0>aquí.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Transmita la fuente principal a un servicio MPEG-TS. Puede encontrar más detalles sobre los ajustes aquí <0>aquí.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor RTMP(e|s|t|te|ts). Puede encontrar más detalles sobre la configuración <0>aquí.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor RTSP. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor Red5/Pro. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor SRT. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor UDP. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Transmita la fuente principal a un servidor WOWZA. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Transmitir la fuente principal a un datarhei Core Ressource. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Transmita la fuente principal a una fuente de livespotting.com. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Transmita la fuente principal a los Servicios de Medios en Vivo de Akamai (MSL). Puede encontrar más detalles sobre la configuración del codificador MSL en <0>aquí.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Transmita la fuente principal al servicio de codificación en la nube de Bitmovin, una potente herramienta para la transmisión en directo. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Transmita la fuente principal al servicio Restream RTMP. Puede encontrar más detalles sobre los ajustes <0>aquí.","Transmit to a Azure Media Services. More details can be found <0>here.":"Transmitir a un servicio de medios Azure. Puede encontrar más detalles <0>aquí.","Transmit to linkedIn. More details can be found <0>here.":"Transmitir a linkedIn. Puede encontrar más detalles <0>aquí.","Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.":"Transmita su Livestream a un servidor Owncast. <0>Aquí puedes encontrar más detalles sobre la configuración.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Transmite su vídeo como un flujo RTMP con la clave necesaria generada en YouTube Studio. Puede encontrar más información sobre la configuración de una transmisión en directo en la <0>Academia de Creadores de YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Transmite su flujo de vídeo con la clave requerida, generada en Twitter Producer. Puede encontrar más información sobre la configuración de una transmisión en directo en <0>Productor de Twitter.","Tune":"Sintonice","UDP transport":"Transporte UDP","Unable to load the config.":"No se puede cargar la configuración.","Unique ident on the service.":"Identificación única en el servicio.","Unknown":"Desconocido","Unselected":"No seleccionado","Upload":"Subir a","Uploading the file failed":"La carga del archivo ha fallado","Uploading the logo failed":"Falló la carga del logotipo","Uptime":"Tiempo de funcionamiento","Use Auth0 for your running Restreamer Core. More <0>details.":"Utilice Auth0 para su núcleo Restreamer en funcionamiento. Más <0>detalles.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Utilice el asistente (<0/>) para una configuración rápida y sencilla, o edite (<1/>) las fuentes directamente en el modo personalizado.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilice los derechos de autor y elija la licencia de imagen correcta. Ya sea libre para todos o muy restringida. Comente brevemente lo que otros pueden hacer con su imagen.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilice sus derechos de autor y elija la licencia de imagen adecuada. Ya sea libre para todos o muy restringida. Comente brevemente lo que otros pueden hacer con su imagen.","User registration":"Registro de usuarios","Username":"Nombre de usuario","Username for authorization.":"Nombre de usuario para la autorización.","Username for the device.":"Nombre de usuario del dispositivo.","VPU ID":"ID DE LA VPU","Vertical Flip":"Volteo vertical","Video":"Vídeo","Video device":"Dispositivo de vídeo","Video settings":"Ajustes de vídeo","Video setup":"Configuración del vídeo","Video source":"Fuente de vídeo","Viewer":"Visor","Virtual source":"Fuente virtual","Volume":"Volumen","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Bienvenido a Restreamer v2, la solución para la publicación rápida y sencilla de vídeos. Gratis para uso privado y comercial. Más ayuda en los <0>docs.","Where to store the HLS playlist and segments. In-Memory is recommended.":"Dónde almacenar la lista de reproducción HLS y los segmentos. Se recomienda el almacenamiento en memoria.","Write protection":"Protección de la escritura","YUV test pattern":"Patrón de prueba YUV","Yes":"Sí","You can't abort the wizard because at least one input must be defined.":"No puede abortar el asistente porque al menos una entrada debe estar definida.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Ha cambiado la configuración. Para que los cambios surtan efecto, tiene que reiniciar la aplicación. ¿Quiere reiniciar ahora?","You have to reconnect manually":"Tiene que volver a conectarse manualmente","You have unsaved changes. Please save them before you can control the service again.":"Tiene cambios sin guardar. Por favor, guárdelos antes de poder controlar el servicio de nuevo.","Your stream needs to be encoded, but there's no suitable encoder available.":"Su flujo necesita ser codificado, pero no hay un codificador adecuado disponible.","Your stream needs to be encoded. Choose the desired encoder:":"Su flujo debe ser codificado. Elija el codificador deseado:","blue":"azul","brown":"marrón","iframe code":"código iframe","kbit/s":"kbit/s","pink":"rosa","velvet":"terciopelo","violet":"violeta","white":"blanco"}}; \ No newline at end of file diff --git a/src/locales/es/messages.po b/src/locales/es/messages.po index cbb38b6..df5cdca 100644 --- a/src/locales/es/messages.po +++ b/src/locales/es/messages.po @@ -13,12 +13,20 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: src/misc/controls/HLS.js:81 +msgid "6 (+ guaranteed to start with a Key frame)" +msgstr "6 (+ garantizado para empezar con un fotograma clave)" + +#: src/misc/controls/HLS.js:84 +msgid "7 (+ fragmented MP4 format)" +msgstr "7 (+ formato MP4 fragmentado)" + #: src/misc/EncodingSelect.js:224 msgid "<0>Compatibility list" msgstr "<0>Lista de compatibilidad" -#: src/views/Edit/Profile.js:380 -#: src/views/Edit/Profile.js:510 +#: src/views/Edit/Profile.js:393 +#: src/views/Edit/Profile.js:543 msgid "<0>Show probe details" msgstr "<0>Mostrar detalles de la sonda" @@ -26,7 +34,7 @@ msgstr "<0>Mostrar detalles de la sonda" msgid "ALSA" msgstr "ALSA" -#: src/views/Settings.js:907 +#: src/views/Settings.js:974 msgid "API endpoint not found. Settings not saved." msgstr "Punto final de la API no encontrado. La configuración no se ha guardado." @@ -35,16 +43,16 @@ msgid "AVFoundation" msgstr "AVFoundation" #: src/misc/ChannelList.js:356 -#: src/views/Edit/Profile.js:410 -#: src/views/Edit/Wizard/index.js:1153 -#: src/views/Edit/index.js:549 -#: src/views/Edit/index.js:575 -#: src/views/Edit/index.js:594 -#: src/views/Publication/Add.js:362 -#: src/views/Publication/Edit.js:601 -#: src/views/Settings.js:1972 -#: src/views/Settings.js:2031 -#: src/views/Settings.js:2053 +#: src/views/Edit/Profile.js:433 +#: src/views/Edit/Wizard/index.js:1168 +#: src/views/Edit/index.js:603 +#: src/views/Edit/index.js:629 +#: src/views/Edit/index.js:648 +#: src/views/Publication/Add.js:364 +#: src/views/Publication/Edit.js:563 +#: src/views/Settings.js:2123 +#: src/views/Settings.js:2182 +#: src/views/Settings.js:2204 msgid "Abort" msgstr "Abortar" @@ -57,11 +65,11 @@ msgstr "Acerca de" msgid "Add" msgstr "Añada" -#: src/views/Publication/Add.js:321 +#: src/views/Publication/Add.js:323 msgid "Add Publication" msgstr "Añadir publicación" -#: src/views/Playersite.js:692 +#: src/views/Playersite.js:708 msgid "Add external widgets and styles to the publication site. You can find some examples on the help page." msgstr "Añada widgets y estilos externos al sitio de publicación. Puede encontrar algunos ejemplos en la página de ayuda." @@ -69,18 +77,20 @@ msgstr "Añada widgets y estilos externos al sitio de publicación. Puede encont msgid "Add new channel" msgstr "Añadir un nuevo canal" -#: src/views/Publication/Add.js:324 +#: src/views/Publication/Add.js:326 msgid "Add: {0}" msgstr "Añadir: {0}" -#: src/views/Edit/Sources/Network.js:355 +#: src/views/Edit/Sources/Network.js:421 #: src/views/Edit/Wizard/Sources/Network.js:66 +#: src/views/Publication/Services/Azure.js:98 #: src/views/Publication/Services/Brightcove.js:95 -#: src/views/Publication/Services/Core.js:100 +#: src/views/Publication/Services/Core.js:116 #: src/views/Publication/Services/DASH.js:192 #: src/views/Publication/Services/HLS.js:181 #: src/views/Publication/Services/Icecast.js:160 #: src/views/Publication/Services/Image2.js:126 +#: src/views/Publication/Services/Linkedin.js:93 #: src/views/Publication/Services/MPEGTS.js:160 #: src/views/Publication/Services/RTMP.js:132 #: src/views/Publication/Services/RTSP.js:150 @@ -88,23 +98,23 @@ msgstr "Añadir: {0}" #: src/views/Publication/Services/SRT.js:161 #: src/views/Publication/Services/UDP.js:127 #: src/views/Publication/Services/WOWZA.js:132 -#: src/views/Settings.js:1302 +#: src/views/Settings.js:1370 msgid "Address" msgstr "Dirección" -#: src/views/Playersite.js:629 +#: src/views/Playersite.js:645 msgid "Address for the background image." msgstr "Dirección para la imagen de fondo." -#: src/views/Settings.js:1331 +#: src/views/Settings.js:1399 msgid "Address to listen on for HTTP requests." msgstr "Dirección de escucha para las peticiones HTTP." -#: src/views/Settings.js:1344 +#: src/views/Settings.js:1412 msgid "Address to listen on for HTTPS requests." msgstr "Dirección de escucha para las solicitudes HTTPS." -#: src/views/Playersite.js:514 +#: src/views/Playersite.js:530 msgid "Adjust publication site colors and background as you like." msgstr "Ajuste los colores del sitio de publicación y el fondo a su gusto." @@ -112,7 +122,7 @@ msgstr "Ajuste los colores del sitio de publicación y el fondo a su gusto." msgid "Advanced monitoring" msgstr "Vigilancia avanzada" -#: src/views/Edit/Sources/Network.js:396 +#: src/views/Edit/Sources/Network.js:474 #: src/views/Publication/Services/DASH.js:204 #: src/views/Publication/Services/HLS.js:193 #: src/views/Publication/Services/Icecast.js:170 @@ -125,27 +135,32 @@ msgstr "Vigilancia avanzada" msgid "Advanced settings" msgstr "Ajustes avanzados" -#: src/views/Edit/Wizard/index.js:287 +#: src/views/Edit/Wizard/index.js:302 msgid "Advanced setup" msgstr "Configuración avanzada" +#: src/views/Playersite.js:433 +#: src/views/Publication/Player.js:443 +msgid "AirPlay" +msgstr "AirPlay" + #: src/views/Login.js:325 msgid "Alerting by email" msgstr "Alerta por correo electrónico" -#: src/views/Publication/Add.js:344 +#: src/views/Publication/Add.js:346 msgid "All" msgstr "Todo" -#: src/views/Settings.js:1163 +#: src/views/Settings.js:1231 msgid "All important system settings." msgstr "Todos los ajustes importantes del sistema." -#: src/views/Settings.js:1478 +#: src/views/Settings.js:1548 msgid "Allow all referrer" msgstr "Permitir todos los remitentes" -#: src/views/Settings.js:1518 +#: src/views/Settings.js:1588 msgid "Allow counting how many viewers the stream has." msgstr "Permite contar el número de espectadores que tiene el flujo." @@ -157,8 +172,8 @@ msgstr "Amplitud" msgid "An environment variable sets this value." msgstr "Una variable de entorno establece este valor." -#: src/views/Publication/Services/Core.js:107 -#: src/views/Settings.js:1816 +#: src/views/Publication/Services/Core.js:124 +#: src/views/Settings.js:1897 msgid "App" msgstr "App" @@ -168,11 +183,11 @@ msgstr "App" msgid "Application" msgstr "Aplicación" -#: src/views/Edit/Wizard/index.js:1172 +#: src/views/Edit/Wizard/index.js:1187 msgid "Are you sure you want to abort the wizard?" msgstr "¿Está seguro de que quiere abortar el asistente?" -#: src/views/Publication/Add.js:492 +#: src/views/Publication/Add.js:467 msgid "Audio" msgstr "Audio" @@ -185,18 +200,18 @@ msgstr "Dispositivo de audio" msgid "Audio device" msgstr "Dispositivo de audio" -#: src/views/Edit/Wizard/index.js:875 -#: src/views/Edit/Wizard/index.js:887 +#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:902 msgid "Audio from device" msgstr "Audio del dispositivo" -#: src/views/Edit/Profile.js:425 +#: src/views/Edit/Profile.js:448 #: src/views/Edit/ProfileSummary.js:90 -#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Edit.js:506 msgid "Audio settings" msgstr "Ajustes de audio" -#: src/views/Edit/Wizard/index.js:828 +#: src/views/Edit/Wizard/index.js:843 msgid "Audio setup" msgstr "Configuración de audio" @@ -216,39 +231,39 @@ msgstr "Auth0 no está disponible actualmente porque esta interfaz está cargada msgid "Author" msgstr "Autor" -#: src/views/Settings.js:1143 -#: src/views/Settings.js:1415 +#: src/views/Settings.js:1210 +#: src/views/Settings.js:1483 msgid "Authorization" msgstr "Autorización" -#: src/misc/controls/HLS.js:83 +#: src/misc/controls/HLS.js:123 msgid "Automatic cleanup of all media data" msgstr "Limpieza automática de todos los datos de los medios de comunicación" -#: src/views/Publication/Player.js:437 +#: src/views/Publication/Player.js:440 msgid "Autoplay" msgstr "Reproducción automática" -#: src/views/Playersite.js:445 +#: src/views/Playersite.js:461 msgid "Available" msgstr "Disponible" -#: src/views/Edit/Profile.js:541 -#: src/views/Edit/Wizard/index.js:408 -#: src/views/Edit/Wizard/index.js:647 -#: src/views/Edit/Wizard/index.js:912 -#: src/views/Edit/Wizard/index.js:1024 -#: src/views/Edit/Wizard/index.js:1082 -#: src/views/Edit/Wizard/index.js:1164 -#: src/views/Publication/Add.js:528 +#: src/views/Edit/Profile.js:584 +#: src/views/Edit/Wizard/index.js:423 +#: src/views/Edit/Wizard/index.js:662 +#: src/views/Edit/Wizard/index.js:927 +#: src/views/Edit/Wizard/index.js:1039 +#: src/views/Edit/Wizard/index.js:1097 +#: src/views/Edit/Wizard/index.js:1179 +#: src/views/Publication/Add.js:492 msgid "Back" msgstr "Volver" -#: src/views/Playersite.js:563 +#: src/views/Playersite.js:579 msgid "Background colors" msgstr "Colores de fondo" -#: src/views/Playersite.js:616 +#: src/views/Playersite.js:632 msgid "Background image" msgstr "Imagen de fondo" @@ -273,7 +288,7 @@ msgstr "Clave de flujo de respaldo" msgid "Bandwidth" msgstr "Ancho de banda" -#: src/views/Settings.js:1373 +#: src/views/Settings.js:1441 msgid "Bandwidth control" msgstr "Control del ancho de banda" @@ -282,7 +297,7 @@ msgid "Banner" msgstr "Banner" #: src/views/Login.js:241 -#: src/views/Settings.js:1420 +#: src/views/Settings.js:1488 msgid "Basic" msgstr "Básico" @@ -295,24 +310,24 @@ msgstr "Factor Bip" msgid "Bitrate" msgstr "Bitrate" -#: src/views/Edit/Wizard/index.js:1013 -#: src/views/Edit/index.js:510 +#: src/views/Edit/Wizard/index.js:1028 +#: src/views/Edit/index.js:564 msgid "Briefly describe what the audience will see during the live stream." msgstr "Describa brevemente lo que el público verá durante la transmisión en directo." -#: src/views/Publication/Player.js:352 +#: src/views/Publication/Player.js:355 msgid "Button color" msgstr "Color del botón" -#: src/views/Settings.js:1687 +#: src/views/Settings.js:1757 msgid "Cache for files on /data." msgstr "Caché para archivos en /data." -#: src/views/Settings.js:1715 +#: src/views/Settings.js:1785 msgid "Cache time (Seconds)" msgstr "Tiempo de caché (segundos)" -#: src/views/Settings.js:1743 +#: src/views/Settings.js:1813 msgid "Cache types" msgstr "Tipos de caché" @@ -324,7 +339,7 @@ msgstr "Captura de clics" msgid "Capture cursor" msgstr "Cursor de captura" -#: src/views/Edit/index.js:327 +#: src/views/Edit/index.js:339 msgid "Channel \"{0}\" saved" msgstr "Canal \"{0}\" guardado" @@ -332,11 +347,11 @@ msgstr "Canal \"{0}\" guardado" msgid "Channels" msgstr "Canales" -#: src/views/Settings.js:1172 +#: src/views/Settings.js:1240 msgid "Check for updates" msgstr "Compruebe las actualizaciones" -#: src/views/Publication/Add.js:272 +#: src/views/Publication/Add.js:276 msgid "Check the requirements" msgstr "Compruebe los requisitos" @@ -350,8 +365,8 @@ msgstr "Elija un flujo de audio" #: src/views/Edit/Sources/ALSA.js:96 #: src/views/Edit/Sources/Framebuffer.js:80 -#: src/views/Edit/Sources/Raspicam.js:84 -#: src/views/Edit/Sources/V4L.js:90 +#: src/views/Edit/Sources/Raspicam.js:87 +#: src/views/Edit/Sources/V4L.js:93 msgid "Choose an input device ..." msgstr "Elija un dispositivo de entrada ..." @@ -363,16 +378,21 @@ msgstr "Elija el códec ..." msgid "Choose tenant ..." msgstr "Elija al inquilino ..." +#: src/views/Playersite.js:425 +#: src/views/Publication/Player.js:442 +msgid "Chromecast" +msgstr "Chromecast" + #: src/views/Publication/Services/DASH.js:309 #: src/views/Publication/Services/HLS.js:249 msgid "Chunk" msgstr "Chunk" #: src/misc/ModalContent.js:77 -#: src/views/Playersite.js:782 -#: src/views/Publication/Add.js:525 -#: src/views/Publication/Edit.js:565 -#: src/views/Publication/Player.js:447 +#: src/views/Playersite.js:798 +#: src/views/Publication/Add.js:489 +#: src/views/Publication/Edit.js:527 +#: src/views/Publication/Player.js:452 msgid "Close" msgstr "Cerrar" @@ -385,11 +405,11 @@ msgid "Codec" msgstr "Códec" #: src/views/Edit/Sources/VirtualAudio.js:110 -#: src/views/Publication/Player.js:320 +#: src/views/Publication/Player.js:323 msgid "Color" msgstr "Color" -#: src/views/Settings.js:1282 +#: src/views/Settings.js:1350 msgid "Config" msgstr "Configurar" @@ -410,7 +430,7 @@ msgid "Connected since <0/>" msgstr "Conectado desde <0/>" #: src/misc/ActionButton.js:12 -#: src/views/Main/index.js:305 +#: src/views/Main/index.js:334 #: src/views/Publication/Process.js:40 msgid "Connecting ..." msgstr "Conectando ..." @@ -424,14 +444,14 @@ msgid "Connecting to Restreamer Core failed probably because of mixed content." msgstr "La conexión con Restreamer Core ha fallado probablemente debido a la mezcla de contenidos." #: src/misc/controls/Metadata.js:70 -#: src/views/Playersite.js:659 -#: src/views/Playersite.js:676 +#: src/views/Playersite.js:675 +#: src/views/Playersite.js:692 msgid "Content" msgstr "Contenido" -#: src/views/Main/index.js:365 +#: src/views/Main/index.js:394 msgid "Content URL" -msgstr "" +msgstr "Contenido URL" #: src/Footer.js:193 msgid "Cores" @@ -445,7 +465,7 @@ msgstr "Crear usuario" msgid "Creative Commons" msgstr "Creative Commons" -#: src/misc/coders/Encoders/audio/Opus.js:59 +#: src/misc/coders/Encoders/audio/Opus.js:61 #: src/misc/coders/settings/Audio.js:25 #: src/misc/coders/settings/Audio.js:71 #: src/misc/coders/settings/Audio.js:122 @@ -454,14 +474,17 @@ msgstr "Creative Commons" #: src/misc/coders/settings/Video.js:115 #: src/misc/coders/settings/Video.js:181 #: src/misc/coders/settings/Video.js:220 +#: src/misc/filters/audio/Resample.js:63 +#: src/misc/filters/audio/Resample.js:114 +#: src/misc/filters/audio/Volume.js:58 #: src/views/Edit/Sources/ALSA.js:101 #: src/views/Edit/Sources/AVFoundation.js:120 #: src/views/Edit/Sources/AVFoundation.js:153 -#: src/views/Edit/Sources/V4L.js:96 +#: src/views/Edit/Sources/V4L.js:99 msgid "Custom ..." msgstr "A medida ..." -#: src/views/Settings.js:1288 +#: src/views/Settings.js:1356 msgid "Custom JSON config for datarhei Core." msgstr "Configuración JSON personalizada para datarhei Core." @@ -478,11 +501,11 @@ msgstr "Índice de audio personalizado" msgid "Custom bitrate (kbit/s)" msgstr "Tasa de bits personalizada (kbit/s)" -#: src/views/Playersite.js:687 +#: src/views/Playersite.js:703 msgid "Custom code injection" msgstr "Inyección de código personalizado" -#: src/misc/coders/Encoders/audio/Opus.js:85 +#: src/misc/coders/Encoders/audio/Opus.js:87 msgid "Custom delay" msgstr "Retraso personalizado" @@ -503,10 +526,12 @@ msgid "Custom keyframe interval" msgstr "Intervalo de fotogramas clave personalizado" #: src/misc/coders/settings/Audio.js:98 +#: src/misc/filters/audio/Resample.js:90 msgid "Custom layout" msgstr "Diseño personalizado" #: src/misc/coders/settings/Audio.js:149 +#: src/misc/filters/audio/Resample.js:141 msgid "Custom sampling (Hz)" msgstr "Muestreo personalizado (Hz)" @@ -518,7 +543,7 @@ msgstr "Escala personalizada" msgid "Custom size" msgstr "Tamaño personalizado" -#: src/views/Edit/Sources/V4L.js:110 +#: src/views/Edit/Sources/V4L.js:113 msgid "Custom video device" msgstr "Dispositivo de vídeo personalizado" @@ -536,8 +561,12 @@ msgstr "Datos copiados en el portapapeles" msgid "Death color" msgstr "Color de la muerte" +#: src/misc/filters/audio/Volume.js:74 +msgid "Decibels (dB)" +msgstr "Decibelios (dB)" + #: src/misc/EncodingSelect.js:210 -#: src/views/Edit/Wizard/index.js:628 +#: src/views/Edit/Wizard/index.js:643 msgid "Decoder" msgstr "Decodificador" @@ -545,13 +574,13 @@ msgstr "Decodificador" #: src/views/Edit/Sources/AVFoundation.js:149 #: src/views/Edit/Wizard/Sources/AVFoundation.js:76 #: src/views/Edit/Wizard/Sources/AVFoundation.js:105 -#: src/views/Playersite.js:451 -#: src/views/Playersite.js:526 -#: src/views/Playersite.js:570 +#: src/views/Playersite.js:467 +#: src/views/Playersite.js:542 +#: src/views/Playersite.js:586 msgid "Default" msgstr "Por defecto" -#: src/misc/coders/Encoders/audio/Opus.js:84 +#: src/misc/coders/Encoders/audio/Opus.js:86 msgid "Delay" msgstr "Retraso" @@ -559,15 +588,15 @@ msgstr "Retraso" msgid "Delay (ms)" msgstr "Retraso (ms)" -#: src/views/Edit/index.js:563 -#: src/views/Edit/index.js:599 -#: src/views/Playersite.js:474 -#: src/views/Publication/Edit.js:574 -#: src/views/Publication/Edit.js:606 +#: src/views/Edit/index.js:617 +#: src/views/Edit/index.js:653 +#: src/views/Playersite.js:490 +#: src/views/Publication/Edit.js:536 +#: src/views/Publication/Edit.js:568 msgid "Delete" msgstr "Borrar" -#: src/views/Publication/Edit.js:611 +#: src/views/Publication/Edit.js:573 msgid "Deleting a publication service cannot be reversed. The publication stops immediately." msgstr "La eliminación de un servicio de publicación no se puede revertir. La publicación se detiene inmediatamente." @@ -582,12 +611,12 @@ msgid "Description" msgstr "Descripción" #: src/views/Playersite.js:352 -#: src/views/Playersite.js:509 +#: src/views/Playersite.js:525 msgid "Design" msgstr "Diseño" #: src/views/Edit/Sources/Framebuffer.js:87 -#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:905 #: src/views/Publication/Services/Framebuffer.js:93 msgid "Device" msgstr "Dispositivo" @@ -598,7 +627,7 @@ msgstr "Dispositivo" msgid "Disconnect" msgstr "Desconectar" -#: src/views/Edit/index.js:580 +#: src/views/Edit/index.js:634 msgid "Disconnect & Continue" msgstr "Desconectar y continuar" @@ -607,12 +636,13 @@ msgstr "Desconectar y continuar" msgid "Disconnecting ..." msgstr "Desconectando..." -#: src/views/Settings.js:1650 +#: src/misc/controls/HLS.js:70 +#: src/views/Settings.js:1720 msgid "Disk" msgstr "Disco" -#: src/views/Settings.js:1684 -#: src/views/Settings.js:1692 +#: src/views/Settings.js:1754 +#: src/views/Settings.js:1762 msgid "Disk cache" msgstr "Caché de disco" @@ -621,19 +651,19 @@ msgstr "Caché de disco" msgid "Disk storage" msgstr "Almacenamiento en disco" -#: src/views/Settings.js:2063 +#: src/views/Settings.js:2214 msgid "Do you really want to restart the application now?" msgstr "¿Realmente quiere reiniciar la aplicación ahora?" -#: src/views/Edit/index.js:591 +#: src/views/Edit/index.js:645 msgid "Do you want to delete \"{0}\"?" msgstr "¿Quiere borrar \"{0}\"?" -#: src/views/Publication/Edit.js:598 +#: src/views/Publication/Edit.js:560 msgid "Do you want to delete {title}?" msgstr "¿Desea eliminar {título}?" -#: src/views/Edit/index.js:572 +#: src/views/Edit/index.js:626 msgid "Do you want to disconnect \"{0}\"?" msgstr "¿Quiere desconectar \"{0}\"?" @@ -658,7 +688,7 @@ msgstr "Documentación" msgid "Dup. frames" msgstr "Marcos Dup." -#: src/views/Publication/Player.js:285 +#: src/views/Publication/Player.js:288 msgid "EDIT: Player" msgstr "EDIT: Jugador" @@ -666,27 +696,41 @@ msgstr "EDIT: Jugador" msgid "EDIT: Publication Website" msgstr "EDIT: Página web de la publicación" -#: src/views/Edit/index.js:391 +#: src/misc/controls/HLS.js:78 +msgid "EXT-X-VERSION" +msgstr "EXT-X-VERSION" + +#: src/views/Edit/index.js:403 msgid "Edit" msgstr "Editar" -#: src/views/Edit/index.js:417 +#: src/views/Edit/index.js:429 msgid "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." msgstr "Edite las fuentes de audio y vídeo para la transmisión en directo. Añada una descripción y establezca la licencia de contenido que desee." -#: src/views/Publication/Edit.js:377 +#: src/views/Publication/Edit.js:384 msgid "Edit: {title}" msgstr "Editar: {título}" -#: src/views/Publication/Player.js:319 +#: src/views/Publication/Player.js:322 msgid "Embed" msgstr "Incrustar" -#: src/views/Edit/Sources/Network.js:577 +#: src/misc/controls/RTMP.js:48 +#: src/misc/controls/SRT.js:48 +msgid "Enable" +msgstr "Activar" + +#: src/views/Edit/Sources/Network.js:684 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:55 msgid "Enable RTMP server ..." msgstr "Habilitar el servidor RTMP ..." +#: src/views/Edit/Sources/Network.js:733 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:55 +msgid "Enable SRT server ..." +msgstr "Habilitar el servidor SRT ..." + #: src/views/Edit/Sources/VirtualAudio.js:162 msgid "Enable a periodic beep every second with this value times the carrier frequency" msgstr "Habilitar un pitido periódico cada segundo con este valor multiplicado por la frecuencia portadora" @@ -696,10 +740,15 @@ msgstr "Habilitar un pitido periódico cada segundo con este valor multiplicado msgid "Enable backup stream" msgstr "Habilitar el flujo de respaldo" -#: src/views/Publication/Player.js:427 +#: src/views/Publication/Player.js:430 msgid "Enable nerd statistics" msgstr "Habilitar las estadísticas de los nerds" +#: src/misc/controls/RTMP.js:70 +#: src/misc/controls/SRT.js:70 +msgid "Enable now" +msgstr "Habilitar ahora" + #: src/views/Publication/Services/Dummy.js:277 #: src/views/Publication/Services/Facebook.js:138 msgid "Enable primary stream" @@ -709,23 +758,21 @@ msgstr "Habilitar el flujo primario" msgid "Enable snapshots" msgstr "Habilitar las instantáneas" -#: src/views/Settings.js:1433 +#: src/views/Settings.js:1503 msgid "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." msgstr "Se recomienda encarecidamente habilitar la autorización. De lo contrario, cualquiera puede acceder a esta instancia." -#: src/views/Settings.js:1593 +#: src/views/Settings.js:1663 msgid "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." msgstr "Se recomienda encarecidamente habilitar la autentificación básica. De lo contrario, cualquiera podría escribir datos en /memfs." -#: src/views/Edit/Wizard/index.js:634 +#: src/views/Edit/Wizard/index.js:649 msgid "Encoder" msgstr "Codificador" -#: src/views/Edit/Summary.js:66 -#: src/views/Publication/Add.js:374 -#: src/views/Publication/Add.js:466 -#: src/views/Publication/Edit.js:388 -#: src/views/Publication/Edit.js:505 +#: src/views/Edit/Summary.js:95 +#: src/views/Publication/Add.js:441 +#: src/views/Publication/Edit.js:478 msgid "Encoding" msgstr "Codificación" @@ -743,7 +790,7 @@ msgstr "Introduzca un nombre para el nuevo canal." msgid "Enter password" msgstr "Introduzca la contraseña" -#: src/views/Edit/Sources/Network.js:348 +#: src/views/Edit/Sources/Network.js:414 #: src/views/Edit/Wizard/Sources/Network.js:59 msgid "Enter the address of your network source:" msgstr "Introduzca la dirección de su fuente de red:" @@ -752,15 +799,15 @@ msgstr "Introduzca la dirección de su fuente de red:" msgid "Enter username" msgstr "Introduzca el nombre de usuario" -#: src/misc/coders/Encoders/video/H264VideoToolbox.js:61 +#: src/misc/coders/Encoders/video/H264VideoToolbox.js:64 msgid "Entropy coder" msgstr "Codificador de entropía" -#: src/views/Edit/Wizard/index.js:1118 +#: src/views/Edit/Wizard/index.js:1133 #: src/views/Incompatible.js:30 #: src/views/Invalid.js:29 #: src/views/Publication/Process.js:63 -#: src/views/Settings.js:1109 +#: src/views/Settings.js:1176 msgid "Error" msgstr "Error" @@ -770,40 +817,40 @@ msgstr "Error" msgid "Error while copying data to clipboard" msgstr "Error al copiar datos en el portapapeles" -#: src/views/Main/index.js:324 +#: src/views/Main/index.js:353 #: src/views/Publication/Process.js:64 msgid "Error: {0}" msgstr "Error: {0}" -#: src/views/Playersite.js:732 +#: src/views/Playersite.js:748 msgid "Expands the area above the channel list (live chat)." msgstr "Amplía el área sobre la lista de canales (chat en vivo)." -#: src/views/Playersite.js:752 +#: src/views/Playersite.js:768 msgid "Expands the area under the channel description (comment boxes)." msgstr "Amplía el área bajo la descripción del canal (cuadros de comentarios)." -#: src/views/Settings.js:1199 +#: src/views/Settings.js:1267 msgid "Expert mode" msgstr "Modo experto" -#: src/views/Playersite.js:717 +#: src/views/Playersite.js:733 msgid "Extend channel list" msgstr "Ampliar la lista de canales" -#: src/views/Playersite.js:737 +#: src/views/Playersite.js:753 msgid "Extend content" msgstr "Ampliar el contenido" -#: src/views/Playersite.js:757 +#: src/views/Playersite.js:773 msgid "Extend footer" msgstr "Ampliar el pie de página" -#: src/views/Playersite.js:697 +#: src/views/Playersite.js:713 msgid "Extend header" msgstr "Ampliar la cabecera" -#: src/views/Settings.js:1936 +#: src/views/Settings.js:2087 msgid "FFmpeg" msgstr "FFmpeg" @@ -812,7 +859,7 @@ msgstr "FFmpeg" msgid "FPS" msgstr "FPS" -#: src/views/Publication/Add.js:180 +#: src/views/Publication/Add.js:187 msgid "Failed to create publication service ({0})" msgstr "Fallo en la creación del servicio de publicación ({0})" @@ -820,12 +867,12 @@ msgstr "Fallo en la creación del servicio de publicación ({0})" msgid "Failed to create publication website files." msgstr "Fallo en la creación de los archivos del sitio web de la publicación." -#: src/views/Edit/Profile.js:341 -#: src/views/Edit/Profile.js:471 +#: src/views/Edit/Profile.js:354 +#: src/views/Edit/Profile.js:504 msgid "Failed to probe the source. Please check the <0>probe details." msgstr "No se ha podido sondear la fuente. Por favor, compruebe los <0>detalles de la sonda." -#: src/utils/restreamer.js:434 +#: src/utils/restreamer.js:446 msgid "Failed to refresh token: {0}" msgstr "Fallo en la actualización de la ficha: {0}" @@ -841,7 +888,7 @@ msgstr "Fallo en la detención del proceso" msgid "Failed to store player size setting." msgstr "Fallo al almacenar el ajuste del tamaño del reproductor." -#: src/views/Publication/Edit.js:222 +#: src/views/Publication/Edit.js:230 msgid "Failed to store publication service ({0})" msgstr "Fallo en el almacenamiento del servicio de publicación ({0})" @@ -850,15 +897,27 @@ msgid "Failed to update ingest process ({0})" msgstr "Fallo en la actualización del proceso de ingesta ({0})" #: src/views/Edit/index.js:310 +msgid "Failed to update ingest snapshot process ({0})" +msgstr "Fallo en la actualización del proceso de ingesta de instantáneas ({0})" + +#: src/views/Edit/index.js:316 msgid "Failed to update the player" msgstr "Fallo en la actualización del reproductor" -#: src/views/Edit/Wizard/index.js:375 -#: src/views/Edit/Wizard/index.js:838 +#: src/views/Edit/index.js:322 +msgid "Failed to update the playersite" +msgstr "No se ha podido actualizar el sitio de los jugadores" + +#: src/views/Edit/Wizard/index.js:390 +#: src/views/Edit/Wizard/index.js:853 msgid "Failed to verify the source. Please check the address." msgstr "No se ha podido verificar la fuente. Por favor, compruebe la dirección." -#: src/views/Edit/Profile.js:549 +#: src/views/Edit/Summary.js:101 +msgid "Filter" +msgstr "Filtro" + +#: src/views/Edit/Profile.js:592 msgid "Finish" msgstr "Acabado" @@ -866,15 +925,15 @@ msgstr "Acabado" msgid "Flags" msgstr "Banderas" -#: src/views/Playersite.js:772 +#: src/views/Playersite.js:788 msgid "For Javascripts." msgstr "Para Javascripts." -#: src/views/Playersite.js:712 +#: src/views/Playersite.js:728 msgid "For Stylesheets." msgstr "Para las hojas de estilo." -#: src/views/Edit/Sources/Network.js:439 +#: src/views/Edit/Sources/Network.js:521 msgid "Force input framerate" msgstr "Forzar la velocidad de entrada de fotogramas" @@ -891,7 +950,7 @@ msgid "Framebuffer" msgstr "Buffer de imágenes" #: src/misc/coders/settings/Video.js:135 -#: src/views/Edit/Sources/Network.js:452 +#: src/views/Edit/Sources/Network.js:534 msgid "Framerate" msgstr "Framerate" @@ -899,7 +958,7 @@ msgstr "Framerate" msgid "Frequency (Hz)" msgstr "Frecuencia (Hz)" -#: src/views/Publication/Services/Core.js:129 +#: src/views/Publication/Services/Core.js:154 #: src/views/Publication/Services/Facebook.js:115 #: src/views/Publication/Services/Facebook.js:133 #: src/views/Publication/Services/Instagram.js:88 @@ -910,13 +969,13 @@ msgstr "Frecuencia (Hz)" msgid "GET" msgstr "GET" -#: src/views/Edit/Sources/Network.js:471 -#: src/views/Edit/index.js:400 +#: src/views/Edit/Sources/Network.js:553 #: src/views/Edit/index.js:412 +#: src/views/Edit/index.js:424 #: src/views/Playersite.js:350 #: src/views/Playersite.js:363 -#: src/views/Publication/Add.js:372 -#: src/views/Publication/Edit.js:386 +#: src/views/Publication/Add.js:374 +#: src/views/Publication/Edit.js:393 #: src/views/Publication/Services/DASH.js:211 #: src/views/Publication/Services/HLS.js:200 #: src/views/Publication/Services/Icecast.js:177 @@ -924,62 +983,73 @@ msgstr "GET" #: src/views/Publication/Services/RTMP.js:145 #: src/views/Publication/Services/RTSP.js:169 #: src/views/Publication/Services/SRT.js:177 -#: src/views/Settings.js:1138 -#: src/views/Settings.js:1158 +#: src/views/Settings.js:1205 +#: src/views/Settings.js:1226 msgid "General" msgstr "General" -#: src/views/Publication/Player.js:410 +#: src/views/Publication/Player.js:413 msgid "Google Analytics ID" msgstr "ID de Google Analytics" -#: src/views/Publication/Player.js:420 +#: src/views/Publication/Player.js:423 msgid "Google Analytics Tracker Name" msgstr "Nombre del rastreador de Google Analytics" -#: src/views/Edit/index.js:471 -#: src/views/Main/index.js:369 +#: src/views/Main/index.js:403 msgid "HLS" msgstr "HLS" -#: src/views/Settings.js:1510 +#: src/views/Edit/index.js:483 +msgid "HLS output" +msgstr "Salida HLS" + +#: src/views/Edit/Wizard/Sources/InternalHLS.js:73 +msgid "HLS server" +msgstr "Servidor HLS" + +#: src/views/Settings.js:1580 msgid "HLS statistic for the In-memory storage" msgstr "Estadística HLS para el almacenamiento en memoria" -#: src/views/Edit/Sources/Network.js:429 +#: src/views/Edit/Sources/Network.js:511 msgid "HTTP and HTTPS" msgstr "HTTP y HTTPS" -#: src/views/Settings.js:1323 +#: src/views/Settings.js:1391 msgid "HTTP port" msgstr "Puerto HTTP" -#: src/views/Settings.js:1352 +#: src/views/Settings.js:1420 msgid "HTTPS (SSL/TLS)" msgstr "HTTPS (SSL/TLS)" -#: src/views/Settings.js:1336 +#: src/views/Settings.js:1404 msgid "HTTPS port" msgstr "Puerto HTTPS" -#: src/views/Edit/Sources/V4L.js:151 +#: src/views/Edit/Sources/V4L.js:154 #: src/views/Edit/Wizard/Sources/V4L.js:140 msgid "Hardware device" msgstr "Dispositivo de hardware" -#: src/views/Playersite.js:579 +#: src/views/Playersite.js:595 msgid "Header" msgstr "Cabecera" -#: src/views/Playersite.js:535 +#: src/views/Playersite.js:551 msgid "Headline" msgstr "Titular" +#: src/misc/filters/video/HFlip.js:65 +msgid "Horizontal Flip" +msgstr "Volteo horizontal" + #: src/views/Login.js:319 msgid "Hosted Restreamer interface" msgstr "Interfaz de Restreamer alojado" -#: src/views/Settings.js:1258 +#: src/views/Settings.js:1326 msgid "Human readable name on the service." msgstr "Nombre legible para el ser humano en el servicio." @@ -987,24 +1057,24 @@ msgstr "Nombre legible para el ser humano en el servicio." msgid "IP address" msgstr "Dirección IP" -#: src/views/Settings.js:2008 +#: src/views/Settings.js:2159 msgid "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." msgstr "Si ha cambiado los puertos, puede ser que Restreamer Core ya se haya reiniciado, pero ahora está disponible en un puerto diferente." -#: src/views/Settings.js:2002 +#: src/views/Settings.js:2153 msgid "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." msgstr "Si ha habilitado Let's Encrypt TLS, puede tardar un poco en adquirir los certificados. Asegúrese de que Restreamer Core es accesible a través del puerto 80 desde Internet. Compruebe el registro de la consola de Restreamer Core." -#: src/views/Settings.js:1525 +#: src/views/Settings.js:1595 msgid "Ignore IP ranges" msgstr "Ignorar los rangos de IP" -#: src/views/Playersite.js:624 -#: src/views/Publication/Player.js:366 +#: src/views/Playersite.js:640 +#: src/views/Publication/Player.js:369 msgid "Image URL" msgstr "URL de la imagen" -#: src/views/Playersite.js:649 +#: src/views/Playersite.js:665 msgid "Imprint" msgstr "Impresión" @@ -1012,7 +1082,8 @@ msgstr "Impresión" msgid "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." msgstr "Además del reproductor, el Restreamer ofrece una completa página de aterrizaje, con la que podrá presentar su transmisión en directo de forma fácil y rápida." -#: src/views/Settings.js:1577 +#: src/misc/controls/HLS.js:67 +#: src/views/Settings.js:1647 msgid "In-memory" msgstr "En memoria" @@ -1021,39 +1092,35 @@ msgstr "En memoria" msgid "In-memory storage" msgstr "Almacenamiento en memoria" -#: src/views/Publication/Add.js:269 +#: src/views/Publication/Add.js:273 msgid "Incompatible" msgstr "Incompatible" #: src/misc/coders/settings/Audio.js:67 #: src/misc/coders/settings/Audio.js:118 +#: src/misc/filters/audio/Pan.js:47 +#: src/misc/filters/audio/Resample.js:59 +#: src/misc/filters/audio/Resample.js:110 +#: src/misc/filters/audio/Volume.js:46 msgid "Inherit" msgstr "Heredar" -#: src/views/Playersite.js:707 +#: src/views/Playersite.js:723 msgid "Inject 1" msgstr "Inyectar 1" -#: src/views/Playersite.js:727 +#: src/views/Playersite.js:743 msgid "Inject 2" msgstr "Inyectar 2" -#: src/views/Playersite.js:747 +#: src/views/Playersite.js:763 msgid "Inject 3" msgstr "Inyectar 3" -#: src/views/Playersite.js:767 +#: src/views/Playersite.js:783 msgid "Inject 4" msgstr "Inyectar 4" -#: src/views/Edit/Wizard/Sources/InternalHLS.js:75 -msgid "Internal HLS server" -msgstr "Servidor HLS interno" - -#: src/views/Edit/Wizard/Sources/InternalRTMP.js:95 -msgid "Internal RTMP server" -msgstr "Servidor RTMP interno" - #: src/misc/controls/Snapshot.js:50 msgid "Interval (seconds)" msgstr "Intervalo (segundos)" @@ -1068,28 +1135,29 @@ msgid "Keyframe interval (seconds)" msgstr "Intervalo de fotogramas clave (segundos)" #: src/misc/coders/settings/Audio.js:97 +#: src/misc/filters/audio/Resample.js:89 msgid "Layout" msgstr "Disposición" -#: src/views/Settings.js:1357 +#: src/views/Settings.js:1425 msgid "Let's Encrypt certification" msgstr "Certificación Let's Encrypt" -#: src/views/Settings.js:1365 +#: src/views/Settings.js:1433 msgid "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." msgstr "Let's Encrypt requiere uno o más nombres de dominio público y un puerto 80/TCP accesible." -#: src/misc/coders/Encoders/video/H264NVENC.js:109 +#: src/misc/coders/Encoders/video/H264NVENC.js:112 msgid "Level" msgstr "Nivel" -#: src/views/Settings.js:1918 +#: src/views/Settings.js:2069 msgid "Level of system protocol." msgstr "Nivel de protocolo del sistema." -#: src/views/Edit/Wizard/index.js:1061 -#: src/views/Edit/index.js:403 -#: src/views/Edit/index.js:525 +#: src/views/Edit/Wizard/index.js:1076 +#: src/views/Edit/index.js:415 +#: src/views/Edit/index.js:579 msgid "License" msgstr "Licencia" @@ -1097,28 +1165,28 @@ msgstr "Licencia" msgid "Life color" msgstr "El color de la vida" -#: src/views/Playersite.js:606 +#: src/views/Playersite.js:622 msgid "Linecolor" msgstr "Linecolor" -#: src/views/Playersite.js:544 -#: src/views/Publication/Player.js:396 +#: src/views/Playersite.js:560 +#: src/views/Publication/Player.js:399 msgid "Link" msgstr "Enlace" -#: src/views/Playersite.js:553 +#: src/views/Playersite.js:569 msgid "Link, mouseover" msgstr "Enlace, ratón" -#: src/views/Settings.js:1533 +#: src/views/Settings.js:1603 msgid "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." msgstr "Lista de rangos de IP en notación CIDR, por ejemplo, 127.0.0.1/32, que las estadísticas no registrarán -un rango de IP por línea. Déjelo vacío para registrar todas las sesiones." -#: src/views/Settings.js:1751 +#: src/views/Settings.js:1821 msgid "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." msgstr "Lista de extensiones de archivos a almacenar en caché (por ejemplo, \".html\"), una por línea. Déjela vacía para almacenar en caché todos los tipos de archivos." -#: src/misc/controls/HLS.js:74 +#: src/misc/controls/HLS.js:107 msgid "List size (segments)" msgstr "Tamaño de la lista (segmentos)" @@ -1142,13 +1210,13 @@ msgstr "Transmisión en directo al servicio Vimeo Live RTMP" msgid "Livesource ID" msgstr "Identificación de la fuente de vida" -#: src/views/Settings.js:1870 +#: src/views/Settings.js:2021 msgid "Log level" msgstr "Nivel de registro" #: src/misc/modals/Process.js:90 -#: src/views/Settings.js:1147 -#: src/views/Settings.js:1846 +#: src/views/Settings.js:1215 +#: src/views/Settings.js:1997 msgid "Logging" msgstr "Registro" @@ -1159,23 +1227,23 @@ msgstr "Registro" msgid "Login" msgstr "Acceda a" -#: src/utils/restreamer.js:263 #: src/utils/restreamer.js:268 -#: src/utils/restreamer.js:297 +#: src/utils/restreamer.js:273 #: src/utils/restreamer.js:302 +#: src/utils/restreamer.js:307 msgid "Login failed: Couldn't load API details" msgstr "El inicio de sesión ha fallado: No se han podido cargar los detalles de la API" -#: src/utils/restreamer.js:254 -#: src/utils/restreamer.js:288 +#: src/utils/restreamer.js:259 +#: src/utils/restreamer.js:293 msgid "Login failed: {0}" msgstr "El inicio de sesión ha fallado: {0}" -#: src/views/Settings.js:1425 +#: src/views/Settings.js:1493 msgid "Login/JWT authorization" msgstr "Autorización de inicio de sesión/JWT" -#: src/views/Publication/Player.js:321 +#: src/views/Publication/Player.js:324 msgid "Logo" msgstr "Logotipo" @@ -1183,24 +1251,28 @@ msgstr "Logotipo" msgid "Logout" msgstr "Cierre de sesión" +#: src/misc/filters/audio/Loudnorm.js:66 +msgid "Loudness Normalization" +msgstr "Normalización de la sonoridad" + #: src/Footer.js:208 msgid "MB" msgstr "MB" -#: src/views/Edit/index.js:380 +#: src/views/Edit/index.js:392 msgid "Main Source" msgstr "Fuente principal" -#: src/views/Main/index.js:260 +#: src/views/Main/index.js:289 #: src/views/Playersite.js:389 msgid "Main channel" msgstr "Canal principal" -#: src/views/Publication/Player.js:102 +#: src/views/Publication/Player.js:99 msgid "Main channel not found" msgstr "Canal principal no encontrado" -#: src/views/Edit/Wizard/index.js:188 +#: src/views/Edit/Wizard/index.js:194 msgid "Main channel saved" msgstr "Canal principal guardado" @@ -1208,63 +1280,70 @@ msgstr "Canal principal guardado" msgid "Main page channel (index.html)." msgstr "Canal de la página principal (index.html)." -#: src/views/Publication/Add.js:411 -#: src/views/Publication/Add.js:444 -#: src/views/Publication/Add.js:511 -#: src/views/Publication/Edit.js:419 -#: src/views/Publication/Edit.js:483 -#: src/views/Publication/Edit.js:552 +#: src/views/Publication/TabContent.js:49 msgid "Maintainer:" msgstr "Mantenedor:" -#: src/views/Settings.js:1710 +#: src/misc/controls/RTMP.js:54 +msgid "Make the channel available as an RTMP stream (experimental)." +msgstr "Hacer que el canal esté disponible como un flujo RTMP (experimental)." + +#: src/misc/controls/SRT.js:54 +msgid "Make the channel available as an SRT stream (experimental)." +msgstr "Hacer que el canal esté disponible como un flujo SRT (experimental)." + +#: src/misc/controls/HLS.js:117 +msgid "Master playlist (increases browser/client compatibility)" +msgstr "Lista de reproducción maestra (aumenta la compatibilidad con el navegador/cliente)" + +#: src/views/Settings.js:1780 msgid "Maximum allowed cache size, 0 for unlimited." msgstr "Tamaño máximo de caché permitido, 0 para ilimitado." -#: src/views/Settings.js:1632 +#: src/views/Settings.js:1702 msgid "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." msgstr "Máximo de megabytes de RAM permitidos para /memfs, 0 para ilimitado." -#: src/views/Settings.js:1676 +#: src/views/Settings.js:1746 msgid "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." msgstr "Máximo de megabytes permitidos a consumir del disco duro. 0 para ilimitado." -#: src/views/Settings.js:1394 +#: src/views/Settings.js:1462 msgid "Maximum bandwidth Mbit/s" msgstr "Ancho de banda máximo Mbit/s" -#: src/misc/coders/Encoders/audio/Opus.js:74 +#: src/misc/coders/Encoders/audio/Opus.js:76 msgid "Maximum delay in milliseconds." msgstr "Retraso máximo en milisegundos." -#: src/views/Settings.js:1728 +#: src/views/Settings.js:1798 msgid "Maximum file size (Megabytes)" msgstr "Tamaño máximo del archivo (Megabytes)" -#: src/views/Settings.js:1736 +#: src/views/Settings.js:1806 msgid "Maximum file size to put in cache." msgstr "Tamaño máximo del archivo a poner en la caché." -#: src/views/Settings.js:1954 +#: src/views/Settings.js:2105 msgid "Maximum log histroy" msgstr "Máxima historia de registro" -#: src/views/Settings.js:1923 -#: src/views/Settings.js:1941 +#: src/views/Settings.js:2074 +#: src/views/Settings.js:2092 msgid "Maximum log lines" msgstr "Líneas de registro máximas" -#: src/views/Settings.js:1624 -#: src/views/Settings.js:1668 -#: src/views/Settings.js:1702 +#: src/views/Settings.js:1694 +#: src/views/Settings.js:1738 +#: src/views/Settings.js:1772 msgid "Maximum size (Megabytes)" msgstr "Tamaño máximo (Megabytes)" -#: src/views/Settings.js:1542 +#: src/views/Settings.js:1612 msgid "Maximum viewer idle time (Seconds)" msgstr "Tiempo máximo de inactividad del espectador (segundos)" -#: src/views/Settings.js:1378 +#: src/views/Settings.js:1446 msgid "Maximum viewers" msgstr "Máximos espectadores" @@ -1272,12 +1351,12 @@ msgstr "Máximos espectadores" msgid "Memory" msgstr "Memoria" -#: src/views/Edit/index.js:402 +#: src/views/Edit/index.js:414 msgid "Meta information" msgstr "Meta información" -#: src/views/Edit/Wizard/index.js:1006 -#: src/views/Edit/index.js:505 +#: src/views/Edit/Wizard/index.js:1021 +#: src/views/Edit/index.js:559 msgid "Metadata" msgstr "Metadatos" @@ -1299,44 +1378,56 @@ msgstr "Más información sobre los derechos de autor de YouTube <0>aquí." msgid "More about licenses here" msgstr "Más información sobre las licencias aquí" -#: src/views/Settings.js:1227 +#: src/views/Settings.js:1295 msgid "More about the service" msgstr "Más información sobre el servicio" -#: src/views/Publication/Player.js:438 +#: src/views/Publication/Player.js:441 msgid "Mute" msgstr "Silencio" +#: src/misc/filters/audio/Pan.js:57 +msgid "Mute a channel." +msgstr "Silenciar un canal." + +#: src/misc/filters/audio/Pan.js:50 +msgid "Mute left" +msgstr "Silencio a la izquierda" + +#: src/misc/filters/audio/Pan.js:53 +msgid "Mute right" +msgstr "Silencio a la derecha" + #: src/misc/ChannelList.js:380 #: src/misc/controls/Metadata.js:76 #: src/misc/controls/Metadata.js:98 -#: src/views/Playersite.js:489 -#: src/views/Settings.js:1250 +#: src/views/Playersite.js:505 +#: src/views/Settings.js:1318 msgid "Name" msgstr "Nombre" -#: src/views/Playersite.js:494 +#: src/views/Playersite.js:510 msgid "Name for the template. If the name already exists, it will be overwritten." msgstr "Nombre para la plantilla. Si el nombre ya existe, se sobrescribirá." -#: src/views/Settings.js:1142 -#: src/views/Settings.js:1297 +#: src/views/Settings.js:1209 +#: src/views/Settings.js:1365 msgid "Network" msgstr "Red" -#: src/views/Edit/Sources/Network.js:684 -#: src/views/Edit/Wizard/Sources/Network.js:110 +#: src/views/Edit/Sources/Network.js:840 +#: src/views/Edit/Wizard/Sources/Network.js:123 msgid "Network source" msgstr "Fuente de la red" -#: src/views/Edit/Wizard/index.js:413 -#: src/views/Edit/Wizard/index.js:652 -#: src/views/Edit/Wizard/index.js:917 -#: src/views/Edit/Wizard/index.js:1029 +#: src/views/Edit/Wizard/index.js:428 +#: src/views/Edit/Wizard/index.js:667 +#: src/views/Edit/Wizard/index.js:932 +#: src/views/Edit/Wizard/index.js:1044 msgid "Next" msgstr "Siguiente" -#: src/views/Edit/Profile.js:413 +#: src/views/Edit/Profile.js:436 msgid "Next: Audio" msgstr "Siguiente: Audio" @@ -1344,12 +1435,12 @@ msgstr "Siguiente: Audio" msgid "Next: Video setup" msgstr "Siguiente: Configuración del vídeo" -#: src/views/Edit/Wizard/index.js:1182 +#: src/views/Edit/Wizard/index.js:1197 msgid "No" msgstr "No" #: src/views/Edit/Sources/NoAudio.js:45 -#: src/views/Edit/Wizard/index.js:901 +#: src/views/Edit/Wizard/index.js:916 msgid "No audio" msgstr "Sin audio" @@ -1362,11 +1453,11 @@ msgstr "No hay flujo de audio disponible" msgid "No input device available" msgstr "No hay dispositivo de entrada disponible" -#: src/views/Edit/Wizard/index.js:373 +#: src/views/Edit/Wizard/index.js:388 msgid "No live stream was detected. Please check the software that sends the stream." msgstr "No se ha detectado ninguna transmisión en directo. Por favor, compruebe el software que envía el flujo." -#: src/views/Edit/Summary.js:28 +#: src/views/Edit/Summary.js:29 msgid "No source selected" msgstr "No se ha seleccionado ninguna fuente" @@ -1378,8 +1469,12 @@ msgstr "No hay fuentes disponibles" msgid "No suitable encoder found." msgstr "No se ha encontrado un codificador adecuado." -#: src/views/Main/index.js:286 -#: src/views/Publication/Player.js:294 +#: src/misc/FilterSelect.js:106 +msgid "No suitable filter found." +msgstr "No se ha encontrado ningún filtro adecuado." + +#: src/views/Main/index.js:315 +#: src/views/Publication/Player.js:297 msgid "No video" msgstr "No hay vídeo" @@ -1387,7 +1482,7 @@ msgstr "No hay vídeo" msgid "No video stream available" msgstr "No hay flujo de vídeo disponible" -#: src/views/Settings.js:1243 +#: src/views/Settings.js:1311 msgid "Node ID" msgstr "ID de nodo" @@ -1396,44 +1491,61 @@ msgid "Noise" msgstr "Ruido" #: src/views/Edit/Sources/AVFoundation.js:145 -#: src/views/Edit/Summary.js:30 +#: src/views/Edit/Summary.js:31 +#: src/views/Edit/Summary.js:107 #: src/views/Edit/Wizard/Sources/AVFoundation.js:98 msgid "None" msgstr "Ninguno" #: src/views/Playersite.js:353 -#: src/views/Playersite.js:644 +#: src/views/Playersite.js:660 msgid "Notes" msgstr "Notas" -#: src/views/Settings.js:1931 -#: src/views/Settings.js:1949 +#: src/views/Settings.js:2082 +#: src/views/Settings.js:2100 msgid "Number of log lines to keep." msgstr "Número de líneas de registro a conservar." -#: src/views/Settings.js:1962 +#: src/views/Settings.js:2113 msgid "Number of logs to keep for each process." msgstr "Número de registros a mantener para cada proceso." -#: src/views/Playersite.js:813 -#: src/views/Publication/Player.js:466 +#: src/views/Playersite.js:829 +#: src/views/Publication/Player.js:471 msgid "OK" msgstr "OK" -#: src/views/Settings.js:1497 +#: src/views/Settings.js:1567 msgid "One referrer per line, e.g. http://www.example.com" msgstr "Un referente por línea, por ejemplo: http://www.example.com" -#: src/views/Playersite.js:798 +#: src/views/Playersite.js:814 msgid "Open" msgstr "Abrir" -#: src/views/Publication/Edit.js:510 +#: src/misc/filters/audio/Pan.js:45 +msgid "Pan" +msgstr "Pan" + +#: src/views/Settings.js:1971 +msgid "Passphrase" +msgstr "Frase de acceso" + +#: src/views/Settings.js:1988 +msgid "Passphrase for SRT encryption." +msgstr "Frase de paso para el cifrado SRT." + +#: src/views/Settings.js:1980 +msgid "Passphrase must be between 10 and 79 characters long" +msgstr "La frase de acceso debe tener entre 10 y 79 caracteres" + +#: src/views/Publication/Edit.js:483 msgid "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." msgstr "El passthrough (copia) sólo debe desactivarse si es necesario. Cada codificación requiere recursos adicionales de la CPU/GPU." -#: src/views/Edit/Sources/Network.js:382 -#: src/views/Edit/Wizard/Sources/Network.js:88 +#: src/views/Edit/Sources/Network.js:460 +#: src/views/Edit/Wizard/Sources/Network.js:97 #: src/views/Login.js:282 #: src/views/Publication/Services/Akamai.js:134 #: src/views/Publication/Services/DASH.js:198 @@ -1442,22 +1554,22 @@ msgstr "El passthrough (copia) sólo debe desactivarse si es necesario. Cada cod #: src/views/Publication/Services/RTSP.js:156 #: src/views/Publication/Services/Red5.js:157 #: src/views/Publication/Services/WOWZA.js:178 -#: src/views/Settings.js:1453 -#: src/views/Settings.js:1611 +#: src/views/Settings.js:1523 +#: src/views/Settings.js:1681 msgid "Password" msgstr "Contraseña" -#: src/views/Settings.js:1459 -#: src/views/Settings.js:1619 +#: src/views/Settings.js:1529 +#: src/views/Settings.js:1689 msgid "Password for authorization." msgstr "Contraseña para la autorización." -#: src/views/Edit/Sources/Network.js:387 -#: src/views/Edit/Wizard/Sources/Network.js:90 +#: src/views/Edit/Sources/Network.js:465 +#: src/views/Edit/Wizard/Sources/Network.js:103 msgid "Password for the device." msgstr "Contraseña para el dispositivo." -#: src/views/Settings.js:1555 +#: src/views/Settings.js:1625 msgid "Persist viewer statistics" msgstr "Persistir las estadísticas de los espectadores" @@ -1469,25 +1581,25 @@ msgstr "Formato de píxeles" msgid "Plan: <0>Starter" msgstr "Plan: <0>Inicio" -#: src/views/Publication/Add.js:347 +#: src/views/Publication/Add.js:349 msgid "Platforms" msgstr "Plataformas" -#: src/views/Publication/Player.js:323 -#: src/views/Settings.js:1144 -#: src/views/Settings.js:1468 +#: src/views/Publication/Player.js:326 +#: src/views/Settings.js:1211 +#: src/views/Settings.js:1538 msgid "Playback" msgstr "Reproducción" -#: src/views/Main/Egress.js:95 +#: src/views/Main/Egress.js:100 msgid "Player" msgstr "Jugador" -#: src/views/Publication/Player.js:328 +#: src/views/Publication/Player.js:331 msgid "Player URL" msgstr "URL del jugador" -#: src/views/Publication/Player.js:257 +#: src/views/Publication/Player.js:254 msgid "Player settings saved" msgstr "Ajustes del jugador guardados" @@ -1501,20 +1613,26 @@ msgstr "Playersite" msgid "Playlist" msgstr "Lista de reproducción" -#: src/views/Main/index.js:329 +#: src/misc/controls/HLS.js:88 +msgid "Playlist version (M3U8). Version 3 has the best browser/client compatibility." +msgstr "Versión de la lista de reproducción (M3U8). La versión 3 tiene la mejor compatibilidad con el navegador/cliente." + +#: src/views/Main/index.js:358 msgid "Please check the <0>process log" msgstr "Por favor, compruebe el <0>registro del proceso" #: src/views/Publication/Services/Akamai.js:29 +#: src/views/Publication/Services/Azure.js:29 #: src/views/Publication/Services/Bitmovin.js:23 #: src/views/Publication/Services/Brightcove.js:23 #: src/views/Publication/Services/CDN77.js:23 -#: src/views/Publication/Services/Core.js:26 +#: src/views/Publication/Services/Core.js:27 #: src/views/Publication/Services/DASH.js:35 #: src/views/Publication/Services/DaCast.js:26 #: src/views/Publication/Services/HLS.js:37 #: src/views/Publication/Services/Icecast.js:29 #: src/views/Publication/Services/Image2.js:33 +#: src/views/Publication/Services/Linkedin.js:24 #: src/views/Publication/Services/Livespotting.js:23 #: src/views/Publication/Services/MPEGTS.js:35 #: src/views/Publication/Services/RTMP.js:32 @@ -1527,37 +1645,42 @@ msgstr "Por favor, compruebe el <0>registro del proceso" msgid "Please contact the operator of the service and check what happens." msgstr "Póngase en contacto con el operador del servicio y compruebe lo que ocurre." +#: src/views/Publication/Services/Owncast.js:23 +#: src/views/Publication/Services/Telegram.js:14 +msgid "Please get in touch with the operator of the service and check what happens." +msgstr "Ponte en contacto con el operador del servicio y comprueba lo que ocurre." + #: src/views/Playersite.js:122 #: src/views/Playersite.js:197 -#: src/views/Publication/Player.js:159 +#: src/views/Publication/Player.js:156 msgid "Please select a file to upload." msgstr "Por favor, seleccione un archivo para cargar." -#: src/views/Publication/Add.js:471 +#: src/views/Publication/Add.js:446 msgid "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." msgstr "Por favor, utilice \"Passthrough (copia)\" si es posible. La codificación requiere recursos adicionales de la CPU/GPU." -#: src/views/Edit/Wizard/index.js:435 -#: src/views/Edit/Wizard/index.js:933 +#: src/views/Edit/Wizard/index.js:450 +#: src/views/Edit/Wizard/index.js:948 msgid "Please wait. Probe stream data ..." msgstr "Por favor, espere. Datos del flujo de la sonda ..." -#: src/views/Edit/Wizard/index.js:1103 +#: src/views/Edit/Wizard/index.js:1118 msgid "Please wait. Setting up the stream ..." msgstr "Por favor, espere. Configurando el flujo ..." #: src/views/Publication/Services/Bitmovin.js:92 -#: src/views/Settings.js:1803 +#: src/views/Settings.js:1945 msgid "Port" msgstr "Puerto" -#: src/views/Publication/Player.js:381 +#: src/views/Publication/Player.js:384 msgid "Position" msgstr "Posición" -#: src/misc/coders/Encoders/video/H264NVENC.js:67 -#: src/misc/coders/Encoders/video/X264.js:62 -#: src/misc/coders/Encoders/video/X265.js:62 +#: src/misc/coders/Encoders/video/H264NVENC.js:70 +#: src/misc/coders/Encoders/video/X264.js:72 +#: src/misc/coders/Encoders/video/X265.js:72 msgid "Preset" msgstr "Preestablecido" @@ -1572,92 +1695,96 @@ msgstr "Clave de flujo primaria" #: src/views/Edit/Sources/ALSA.js:136 #: src/views/Edit/Sources/AVFoundation.js:201 #: src/views/Edit/Sources/Framebuffer.js:110 -#: src/views/Edit/Sources/Network.js:505 -#: src/views/Edit/Sources/Network.js:552 -#: src/views/Edit/Sources/Network.js:599 -#: src/views/Edit/Sources/Raspicam.js:113 -#: src/views/Edit/Sources/V4L.js:131 +#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:660 +#: src/views/Edit/Sources/Network.js:706 +#: src/views/Edit/Sources/Network.js:755 +#: src/views/Edit/Sources/Raspicam.js:116 +#: src/views/Edit/Sources/V4L.js:134 #: src/views/Edit/Sources/VirtualAudio.js:169 #: src/views/Edit/Sources/VirtualVideo.js:188 msgid "Probe" msgstr "Sonda" -#: src/views/Edit/index.js:493 -#: src/views/Publication/Add.js:433 -#: src/views/Publication/Edit.js:441 +#: src/views/Edit/index.js:547 +#: src/views/Publication/Add.js:407 +#: src/views/Publication/Edit.js:420 msgid "Process" msgstr "Proceso" -#: src/views/Publication/Add.js:373 -#: src/views/Publication/Edit.js:387 +#: src/views/Publication/Add.js:376 +#: src/views/Publication/Edit.js:395 msgid "Process control" msgstr "Control de procesos" -#: src/views/Publication/Edit.js:471 -msgid "Process debug" -msgstr "Depuración del proceso" - -#: src/views/Main/index.js:413 -#: src/views/Publication/Edit.js:591 +#: src/views/Main/index.js:472 +#: src/views/Publication/Edit.js:553 msgid "Process debug report" msgstr "Informe de depuración del proceso" -#: src/views/Main/index.js:389 -#: src/views/Main/index.js:405 -#: src/views/Publication/Edit.js:468 -#: src/views/Publication/Edit.js:583 +#: src/views/Main/index.js:448 +#: src/views/Main/index.js:464 +#: src/views/Publication/Edit.js:444 +#: src/views/Publication/Edit.js:545 msgid "Process details" msgstr "Detalles del proceso" -#: src/views/Main/index.js:392 +#: src/views/Main/index.js:451 +#: src/views/Publication/Edit.js:447 msgid "Process report" msgstr "Informe del proceso" -#: src/views/Edit/index.js:401 -#: src/views/Edit/index.js:463 +#: src/views/Edit/index.js:413 +#: src/views/Edit/index.js:475 msgid "Processing & Control" msgstr "Procesamiento y control" -#: src/misc/coders/Encoders/video/H264NVENC.js:92 -#: src/misc/coders/Encoders/video/H264VAAPI.js:82 +#: src/misc/coders/Encoders/video/H264NVENC.js:95 +#: src/misc/coders/Encoders/video/H264VAAPI.js:85 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:85 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:85 #: src/misc/coders/settings/Video.js:142 -#: src/views/Edit/Wizard/index.js:607 +#: src/views/Edit/Wizard/index.js:622 msgid "Profile" msgstr "Perfil" -#: src/views/Edit/Sources/Network.js:520 +#: src/views/Edit/Sources/Network.js:623 #: src/views/Publication/Services/Akamai.js:144 #: src/views/Publication/Services/Akamai.js:182 +#: src/views/Publication/Services/Azure.js:89 #: src/views/Publication/Services/Bitmovin.js:86 #: src/views/Publication/Services/Brightcove.js:87 #: src/views/Publication/Services/CDN77.js:90 -#: src/views/Publication/Services/Core.js:91 +#: src/views/Publication/Services/Core.js:106 #: src/views/Publication/Services/DASH.js:186 #: src/views/Publication/Services/DaCast.js:110 #: src/views/Publication/Services/DaCast.js:168 #: src/views/Publication/Services/HLS.js:175 #: src/views/Publication/Services/Icecast.js:154 #: src/views/Publication/Services/Image2.js:120 +#: src/views/Publication/Services/Linkedin.js:84 #: src/views/Publication/Services/MPEGTS.js:154 +#: src/views/Publication/Services/Owncast.js:88 #: src/views/Publication/Services/RTMP.js:122 #: src/views/Publication/Services/RTSP.js:144 #: src/views/Publication/Services/Red5.js:105 #: src/views/Publication/Services/SRT.js:158 +#: src/views/Publication/Services/Telegram.js:79 #: src/views/Publication/Services/UDP.js:124 #: src/views/Publication/Services/WOWZA.js:122 msgid "Protocol" msgstr "Protocolo" -#: src/views/Publication/Add.js:353 +#: src/views/Publication/Add.js:355 msgid "Protocols" msgstr "Protocolos" -#: src/views/Settings.js:1307 +#: src/views/Settings.js:1375 msgid "Public domain/s" msgstr "Dominio público" -#: src/views/Publication/Edit.js:113 -#: src/views/Publication/Edit.js:123 +#: src/views/Publication/Edit.js:107 +#: src/views/Publication/Edit.js:117 msgid "Publication service not found" msgstr "Servicio de publicación no encontrado" @@ -1669,16 +1796,18 @@ msgstr "Se guarda la configuración del sitio web de la publicación" msgid "Publications" msgstr "Publicaciones" -#: src/views/Edit/Sources/Network.js:657 +#: src/views/Edit/Sources/Network.js:813 msgid "Pull Mode" msgstr "Modo de tirar" -#: src/views/Edit/Sources/Network.js:656 +#: src/views/Edit/Sources/Network.js:812 msgid "Pull or recieve the data:" msgstr "Tire o reciba los datos:" #: src/misc/Progress.js:90 -#: src/misc/coders/Encoders/video/H264VAAPI.js:137 +#: src/misc/coders/Encoders/video/H264VAAPI.js:140 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:140 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:140 msgid "Quality" msgstr "Calidad" @@ -1686,47 +1815,67 @@ msgstr "Calidad" msgid "RGB test pattern" msgstr "Patrón de prueba RGB" -#: src/views/Settings.js:1824 +#: src/views/Main/index.js:412 +#: src/views/Settings.js:1213 +#: src/views/Settings.js:1830 +msgid "RTMP" +msgstr "RTMP" + +#: src/views/Settings.js:1871 +msgid "RTMP Port" +msgstr "Puerto RTMP" + +#: src/views/Settings.js:1905 msgid "RTMP app for publishing." msgstr "Aplicación RTMP para la publicación." -#: src/views/Settings.js:1765 +#: src/views/Edit/index.js:498 +msgid "RTMP output" +msgstr "Salida RTMP" + +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:93 +#: src/views/Settings.js:1835 msgid "RTMP server" msgstr "Servidor RTMP" -#: src/views/Edit/Sources/Network.js:572 +#: src/views/Edit/Sources/Network.js:679 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:50 msgid "RTMP server is not enabled" msgstr "El servidor RTMP no está habilitado" -#: src/views/Settings.js:1811 +#: src/views/Settings.js:1879 msgid "RTMP server listen address." msgstr "Dirección de escucha del servidor RTMP." -#: src/views/Settings.js:1837 +#: src/views/Settings.js:1918 msgid "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" msgstr "Token RTMP para publicar y reproducir. El token es el valor del parámetro de consulta URL 'token'." -#: src/views/Settings.js:1146 -#: src/views/Settings.js:1760 -msgid "RTMP/S" -msgstr "RTMP/S" +#: src/views/Settings.js:1884 +msgid "RTMPS Port" +msgstr "Puerto RTMPS" -#: src/views/Settings.js:1772 +#: src/views/Settings.js:1843 msgid "RTMPS server" msgstr "Servidor RTMPS" -#: src/views/Edit/Sources/Network.js:405 +#: src/views/Settings.js:1892 +msgid "RTMPS server listen address." +msgstr "Dirección de escucha del servidor RTMPS." + +#: src/views/Edit/Sources/Network.js:483 msgid "RTSP" msgstr "RTSP" -#: src/views/Edit/Sources/Raspicam.js:132 +#: src/views/Edit/Sources/Raspicam.js:135 #: src/views/Edit/Wizard/Sources/Raspicam.js:117 msgid "Raspberry Pi camera" msgstr "Cámara Raspberry Pi" -#: src/misc/coders/Encoders/video/H264NVENC.js:144 -#: src/misc/coders/Encoders/video/H264VAAPI.js:63 +#: src/misc/coders/Encoders/video/H264NVENC.js:147 +#: src/misc/coders/Encoders/video/H264VAAPI.js:66 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:66 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:66 msgid "Rate control" msgstr "Control de la tasa" @@ -1734,11 +1883,11 @@ msgstr "Control de la tasa" msgid "Ratio" msgstr "Ratio" -#: src/views/Edit/Sources/Network.js:434 +#: src/views/Edit/Sources/Network.js:516 msgid "Read input at native speed" msgstr "Leer la entrada a velocidad nativa" -#: src/views/Edit/Sources/Network.js:658 +#: src/views/Edit/Sources/Network.js:814 msgid "Receive Mode" msgstr "Modo de recepción" @@ -1752,13 +1901,13 @@ msgstr "Conecte de nuevo" msgid "Reconnect delay (seconds)" msgstr "Retraso de reconexión (segundos)" -#: src/views/Main/index.js:340 +#: src/views/Main/index.js:369 #: src/views/Publication/Process.js:68 #: src/views/Publication/Process.js:81 msgid "Reconnecting in {0}s" msgstr "Reconexión en {0}s" -#: src/views/Settings.js:1999 +#: src/views/Settings.js:2150 msgid "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." msgstr "La reconexión con Restreamer Core ha fallado durante los últimos {RETRIES} segundos." @@ -1768,7 +1917,7 @@ msgstr "Ha fallado la reconexión con Restreamer Core." #: src/views/Edit/Sources/ALSA.js:122 #: src/views/Edit/Sources/AVFoundation.js:181 -#: src/views/Edit/Sources/V4L.js:117 +#: src/views/Edit/Sources/V4L.js:120 #: src/views/Edit/Wizard/Sources/AVFoundation.js:135 #: src/views/Edit/Wizard/Sources/V4L.js:120 msgid "Refresh" @@ -1782,72 +1931,105 @@ msgid "Region" msgstr "Región" #: src/views/Password.js:159 -#: src/views/Settings.js:2019 +#: src/views/Settings.js:2170 msgid "Reload" msgstr "Recargar" -#: src/views/Settings.js:1637 +#: src/views/Settings.js:1707 msgid "Remove the oldest entries if the /memfs is full" msgstr "Eliminar las entradas más antiguas si el /memfs está lleno" -#: src/views/Settings.js:1784 +#: src/views/Settings.js:1852 msgid "Requires activation" msgstr "Requiere activación" -#: src/views/Settings.js:1206 -#: src/views/Settings.js:2036 -#: src/views/Settings.js:2049 -#: src/views/Settings.js:2058 +#: src/views/Settings.js:1274 +#: src/views/Settings.js:2187 +#: src/views/Settings.js:2200 +#: src/views/Settings.js:2209 msgid "Restart" msgstr "Reinicie" -#: src/views/Settings.js:2027 +#: src/views/Settings.js:2178 msgid "Restart required" msgstr "Es necesario reiniciar" #: src/views/Password.js:136 -#: src/views/Settings.js:1987 +#: src/views/Settings.js:2138 msgid "Restarting" msgstr "Reiniciando" #: src/views/Password.js:141 -#: src/views/Settings.js:1992 +#: src/views/Settings.js:2143 msgid "Restarting Restreamer Core ..." msgstr "Reiniciando el núcleo de Restreamer ..." -#: src/views/Settings.js:1015 +#: src/views/Settings.js:1082 msgid "Restarting the application failed." msgstr "El reinicio de la aplicación ha fallado." -#: src/views/Settings.js:1234 +#: src/views/Settings.js:1302 msgid "Restreamer Service" msgstr "Servicio de resemantización" -#: src/views/Main/index.js:239 +#: src/views/Main/index.js:267 msgid "Retrieving stream data ..." msgstr "Recuperación de los datos del flujo ..." -#: src/views/Edit/Wizard/index.js:1128 +#: src/views/Edit/Wizard/index.js:1143 #: src/views/Invalid.js:43 -#: src/views/Settings.js:1116 +#: src/views/Settings.js:1183 msgid "Retry" msgstr "Reintentar" +#: src/misc/filters/video/Transpose.js:46 +msgid "Rotate" +msgstr "Girar" + #: src/views/Edit/Sources/VirtualVideo.js:155 msgid "Rule" msgstr "Regla" +#: src/views/Main/index.js:422 +#: src/views/Settings.js:1214 +#: src/views/Settings.js:1927 +msgid "SRT" +msgstr "SRT" + +#: src/views/Edit/index.js:517 +msgid "SRT output" +msgstr "Salida SRT" + +#: src/views/Edit/Wizard/Sources/InternalSRT.js:93 +#: src/views/Settings.js:1932 +msgid "SRT server" +msgstr "Servidor SRT" + +#: src/views/Edit/Sources/Network.js:728 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:50 +msgid "SRT server is not enabled" +msgstr "El servidor SRT no está habilitado" + +#: src/views/Settings.js:1953 +msgid "SRT server listen address." +msgstr "Dirección de escucha del servidor SRT." + +#: src/views/Settings.js:1966 +msgid "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" +msgstr "Token SRT para publicar y reproducir. El token es el valor del parámetro streamid 'token'." + #: src/misc/coders/settings/Audio.js:148 +#: src/misc/filters/audio/Resample.js:140 msgid "Sampling" msgstr "Muestreo" -#: src/views/Edit/Wizard/index.js:1087 -#: src/views/Edit/index.js:560 -#: src/views/Playersite.js:788 -#: src/views/Publication/Add.js:534 -#: src/views/Publication/Edit.js:571 -#: src/views/Publication/Player.js:452 -#: src/views/Settings.js:1977 +#: src/views/Edit/Wizard/index.js:1102 +#: src/views/Edit/index.js:614 +#: src/views/Playersite.js:804 +#: src/views/Publication/Add.js:498 +#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Player.js:457 +#: src/views/Settings.js:2128 msgid "Save" msgstr "Guarde" @@ -1855,7 +2037,7 @@ msgstr "Guarde" msgid "Scale" msgstr "Escala" -#: src/views/Settings.js:1723 +#: src/views/Settings.js:1793 msgid "Seconds to keep files in cache." msgstr "Segundos para mantener los archivos en la caché." @@ -1871,24 +2053,28 @@ msgstr "Segundos hasta que se termina un proceso estancado." msgid "Seconds until the snapshot/thumbnail of the video source is updated." msgstr "Segundos hasta que se actualiza la instantánea/imagen de la fuente de vídeo." -#: src/views/Settings.js:1473 +#: src/views/Settings.js:1543 msgid "Security" msgstr "Seguridad" -#: src/views/Publication/Services/Core.js:122 +#: src/views/Publication/Services/Core.js:145 +msgid "Security passphrase" +msgstr "Frase de seguridad" + +#: src/views/Publication/Services/Core.js:138 #: src/views/Publication/Services/Livespotting.js:103 msgid "Security token" msgstr "Ficha de seguridad" -#: src/views/Publication/Player.js:342 +#: src/views/Publication/Player.js:345 msgid "Seekbar color" msgstr "Color de la barra de herramientas" -#: src/misc/controls/HLS.js:62 +#: src/misc/controls/HLS.js:95 msgid "Segment length (seconds)" msgstr "Duración del segmento (segundos)" -#: src/misc/controls/HLS.js:67 +#: src/misc/controls/HLS.js:100 msgid "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." msgstr "El segmento se cortará en el siguiente fotograma clave una vez transcurrido este tiempo. Se recomienda 2." @@ -1897,11 +2083,16 @@ msgstr "El segmento se cortará en el siguiente fotograma clave una vez transcur msgid "Segmentation" msgstr "Segmentación" +#: src/views/Publication/Add.js:429 +#: src/views/Publication/Edit.js:470 +msgid "Select RTMP or SRT (if enabled) for less latency." +msgstr "Seleccione RTMP o SRT (si está activado) para una menor latencia." + #: src/views/Edit/Sources/ALSA.js:108 #: src/views/Edit/Sources/AVFoundation.js:172 #: src/views/Edit/Sources/Framebuffer.js:99 -#: src/views/Edit/Sources/Raspicam.js:96 -#: src/views/Edit/Sources/V4L.js:103 +#: src/views/Edit/Sources/Raspicam.js:99 +#: src/views/Edit/Sources/V4L.js:106 #: src/views/Edit/Wizard/Sources/AVFoundation.js:120 #: src/views/Edit/Wizard/Sources/Raspicam.js:95 #: src/views/Edit/Wizard/Sources/V4L.js:114 @@ -1920,7 +2111,7 @@ msgstr "Seleccione la fuente ..." msgid "Select video source:" msgstr "Seleccione la fuente de vídeo:" -#: src/views/Edit/Wizard/index.js:268 +#: src/views/Edit/Wizard/index.js:283 msgid "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." msgstr "Seleccione si extrae el flujo de una <0>fuente de red (como una cámara de red) o del <1>servidor RTMP interno (por ejemplo, los flujos OBS al Restreamer)." @@ -1928,7 +2119,11 @@ msgstr "Seleccione si extrae el flujo de una <0>fuente de red (como una cám msgid "Select your encoding setting:" msgstr "Seleccione su configuración de codificación:" -#: src/views/Playersite.js:588 +#: src/misc/FilterSelect.js:121 +msgid "Select your filter settings (optional):" +msgstr "Seleccione la configuración del filtro (opcional):" + +#: src/views/Playersite.js:604 msgid "Selected" msgstr "Seleccionado" @@ -1936,18 +2131,20 @@ msgstr "Seleccionado" msgid "Selected channel" msgstr "Canal seleccionado" -#: src/views/Playersite.js:449 +#: src/views/Playersite.js:465 msgid "Selection" msgstr "Selección" -#: src/views/Settings.js:1190 +#: src/views/Settings.js:1258 msgid "Send anonymous metrics (helps us for future development)" msgstr "Enviar métricas anónimas (nos ayuda para el desarrollo futuro)" -#: src/views/Edit/Sources/Network.js:542 -#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:650 +#: src/views/Edit/Sources/Network.js:696 +#: src/views/Edit/Sources/Network.js:745 #: src/views/Edit/Wizard/Sources/InternalHLS.js:48 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:68 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:68 msgid "Send stream to this address:" msgstr "Envíe la corriente a esta dirección:" @@ -1959,19 +2156,24 @@ msgstr "Enviar vídeo a Framebuffer" msgid "Server" msgstr "Servidor" +#: src/views/Publication/Services/Owncast.js:100 +#: src/views/Publication/Services/Telegram.js:91 +msgid "Server URL" +msgstr "URL del servidor" + #: src/Header.js:257 #: src/views/Login.js:246 -#: src/views/Settings.js:1140 -#: src/views/Settings.js:1220 +#: src/views/Settings.js:1207 +#: src/views/Settings.js:1288 msgid "Service" msgstr "Servicio" -#: src/views/Publication/Add.js:392 +#: src/views/Publication/Add.js:387 #: src/views/Publication/Edit.js:406 msgid "Service name" msgstr "Nombre del servicio" -#: src/views/Settings.js:1271 +#: src/views/Settings.js:1339 msgid "Service token for monitoring." msgstr "Ficha de servicio para la supervisión." @@ -1979,35 +2181,35 @@ msgstr "Ficha de servicio para la supervisión." msgid "Sessions" msgstr "Sesiones" -#: src/views/Settings.js:1402 +#: src/views/Settings.js:1470 msgid "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Establece un límite de ancho de banda en Mbit por segundo para la transferencia de datos HLS salientes. Todos los servicios, como el RTMP y los procesos salientes, se incluyen en el cálculo. Si se supera el ancho de banda, los espectadores HLS reciben el código de estado HTTP 509 (Límite de ancho de banda superado). 0 es ilimitado." -#: src/views/Settings.js:1386 +#: src/views/Settings.js:1454 msgid "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Establece un límite de espectadores para las sesiones HLS. Si se supera el límite, los espectadores HLS reciben el código de estado HTTP 509 (Límite de ancho de banda superado). 0 es ilimitado." -#: src/views/Settings.js:1225 +#: src/views/Settings.js:1293 msgid "Setting for connection to the service." msgstr "Ajuste para la conexión al servicio." -#: src/views/Settings.js:1126 +#: src/views/Settings.js:1193 msgid "Settings" msgstr "Ajustes" -#: src/views/Settings.js:1128 +#: src/views/Settings.js:1195 msgid "Settings (expert mode)" msgstr "Ajustes (modo experto)" -#: src/views/Settings.js:1653 +#: src/views/Settings.js:1723 msgid "Settings for /data path. The access is protected by" msgstr "Configuración de la ruta /data. El acceso está protegido por" -#: src/views/Settings.js:1580 +#: src/views/Settings.js:1650 msgid "Settings for /memfs path." msgstr "Configuración de la ruta /memfs." -#: src/views/Settings.js:958 +#: src/views/Settings.js:1025 msgid "Settings saved. All changes will be applied after restarting the application." msgstr "Ajustes guardados. Todos los cambios se aplicarán después de reiniciar la aplicación." @@ -2015,7 +2217,7 @@ msgstr "Ajustes guardados. Todos los cambios se aplicarán después de reiniciar msgid "Share button" msgstr "Botón de compartir" -#: src/views/Playersite.js:431 +#: src/views/Playersite.js:447 msgid "Shows a reference to the project." msgstr "Muestra una referencia al proyecto." @@ -2027,7 +2229,7 @@ msgstr "Inscríbase (gratis)" msgid "Silence" msgstr "Silencio" -#: src/views/Edit/Wizard/index.js:898 +#: src/views/Edit/Wizard/index.js:913 msgid "Silence Audio" msgstr "Silencio Audio" @@ -2043,8 +2245,8 @@ msgstr "Nombre del sitio" msgid "Size" msgstr "Tamaño" -#: src/views/Edit/index.js:482 -#: src/views/Main/index.js:372 +#: src/views/Edit/index.js:536 +#: src/views/Main/index.js:431 msgid "Snapshot" msgstr "Instantánea" @@ -2052,19 +2254,29 @@ msgstr "Instantánea" msgid "Social-login (OAuth2, 2FA)" msgstr "Social-login (OAuth2, 2FA)" -#: src/views/Edit/Sources/Network.js:418 +#: src/views/Edit/Sources/Network.js:500 msgid "Socket timeout (microseconds)" msgstr "Tiempo de espera del zócalo (microsegundos)" -#: src/views/Publication/Add.js:350 +#: src/views/Publication/Add.js:352 msgid "Software" msgstr "Software" +#: src/misc/controls/Source.js:74 #: src/views/Edit/Sources/VirtualAudio.js:88 #: src/views/Edit/Sources/VirtualVideo.js:112 +#: src/views/Publication/Add.js:424 +#: src/views/Publication/Edit.js:465 msgid "Source" msgstr "Fuente" +#: src/views/Publication/Add.js:375 +#: src/views/Publication/Add.js:419 +#: src/views/Publication/Edit.js:394 +#: src/views/Publication/Edit.js:460 +msgid "Source & Encoding" +msgstr "Fuente y codificación" + #: src/misc/Progress.js:103 msgid "Speed" msgstr "Velocidad" @@ -2073,24 +2285,25 @@ msgstr "Velocidad" msgid "Stale timeout (seconds)" msgstr "Tiempo de espera (segundos)" -#: src/views/Publication/Player.js:322 -#: src/views/Settings.js:1505 +#: src/views/Publication/Player.js:325 +#: src/views/Settings.js:1575 msgid "Statistics" msgstr "Estadísticas" -#: src/views/Settings.js:1145 -#: src/views/Settings.js:1572 +#: src/misc/controls/HLS.js:65 +#: src/views/Settings.js:1212 +#: src/views/Settings.js:1642 msgid "Storage" msgstr "Almacenamiento" -#: src/views/Settings.js:1563 +#: src/views/Settings.js:1633 msgid "Stores the viewer statistics to the disk." msgstr "Almacena las estadísticas del visor en el disco." #: src/views/Edit/StreamSelect.js:30 #: src/views/Edit/StreamSelect.js:36 #: src/views/Edit/StreamSelect.js:81 -#: src/views/Edit/Wizard/index.js:878 +#: src/views/Edit/Wizard/index.js:893 msgid "Stream" msgstr "Corriente" @@ -2103,7 +2316,9 @@ msgstr "URL de la corriente" #: src/views/Publication/Services/DaCast.js:153 #: src/views/Publication/Services/Dummy.js:274 #: src/views/Publication/Services/Instagram.js:84 +#: src/views/Publication/Services/Owncast.js:110 #: src/views/Publication/Services/Restream.js:116 +#: src/views/Publication/Services/Telegram.js:101 #: src/views/Publication/Services/Twitch.js:129 #: src/views/Publication/Services/Twitter.js:175 #: src/views/Publication/Services/Vimeo.js:73 @@ -2112,7 +2327,7 @@ msgid "Stream key" msgstr "Clave de flujo" #: src/views/Publication/Services/Brightcove.js:101 -#: src/views/Publication/Services/Core.js:113 +#: src/views/Publication/Services/Core.js:131 #: src/views/Publication/Services/Red5.js:136 #: src/views/Publication/Services/WOWZA.js:158 msgid "Stream name" @@ -2122,31 +2337,35 @@ msgstr "Nombre de la corriente" msgid "Stream names" msgstr "Nombres de los arroyos" -#: src/views/Playersite.js:425 +#: src/misc/controls/Source.js:78 +msgid "Stream source for publication service (experimental)." +msgstr "Fuente de flujo para el servicio de publicación (experimental)." + +#: src/views/Playersite.js:441 msgid "Support datarhei Restreamer" msgstr "Apoyo a datarhei Restreamer" -#: src/views/Edit/Sources/Network.js:361 +#: src/views/Edit/Sources/Network.js:427 #: src/views/Edit/Wizard/Sources/Network.js:72 msgid "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." msgstr "Soporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT y más." #: src/Footer.js:184 #: src/Header.js:275 -#: src/views/Settings.js:1851 +#: src/views/Settings.js:2002 msgid "System" msgstr "Sistema" #: src/views/Playersite.js:351 -#: src/views/Playersite.js:440 +#: src/views/Playersite.js:456 msgid "Template" msgstr "Plantilla" -#: src/views/Playersite.js:462 +#: src/views/Playersite.js:478 msgid "Template to be used for creating the publication website. The delete button removes the selection from the system." msgstr "Plantilla que se utilizará para crear la página web de la publicación. El botón de borrar elimina la selección del sistema." -#: src/views/Playersite.js:666 +#: src/views/Playersite.js:682 msgid "Terms" msgstr "Términos" @@ -2158,18 +2377,30 @@ msgstr "Patrón de prueba" msgid "Test pattern (extended)" msgstr "Patrón de prueba (ampliado)" -#: src/views/Playersite.js:519 +#: src/views/Playersite.js:535 msgid "Text colors" msgstr "Colores del texto" +#: src/misc/controls/RTMP.js:61 +msgid "The RTMP output requires the RTMP Server." +msgstr "La salida RTMP requiere el Servidor RTMP." + +#: src/misc/controls/SRT.js:61 +msgid "The SRT output requires the SRT Server." +msgstr "La salida de SRT requiere el Servidor SRT." + #: src/views/Edit/Sources/VirtualAudio.js:131 msgid "The amplitude (0.0 - 1.0) of the generated audio stream" msgstr "La amplitud (0,0 - 1,0) del flujo de audio generado" -#: src/views/Settings.js:1210 +#: src/views/Settings.js:1278 msgid "The application is using an older version of the settings." msgstr "La aplicación está utilizando una versión antigua de la configuración." +#: src/views/Edit/Sources/Network.js:611 +msgid "The available FFmpeg binary doesn't support any of the required protocols." +msgstr "El binario disponible de FFmpeg no soporta ninguno de los protocolos requeridos." + #: src/misc/coders/settings/Audio.js:40 msgid "The bitrate of the audio stream." msgstr "La tasa de bits del flujo de audio." @@ -2178,15 +2409,15 @@ msgstr "La tasa de bits del flujo de audio." msgid "The carrier frequency" msgstr "La frecuencia de la portadora" -#: src/views/Edit/index.js:352 +#: src/views/Edit/index.js:364 msgid "The channel \"{0}\" could not be deleted" msgstr "El canal \"{0}\" no pudo ser borrado" -#: src/views/Edit/index.js:361 +#: src/views/Edit/index.js:373 msgid "The channel \"{0}\" has been deleted" msgstr "El canal \"{0}\" ha sido borrado" -#: src/views/Edit/index.js:604 +#: src/views/Edit/index.js:658 msgid "The deletion of this channel can not be recovered. All publications of this channel will be removed." msgstr "La eliminación de este canal no se puede recuperar. Todas las publicaciones de este canal serán eliminadas." @@ -2196,10 +2427,11 @@ msgid "The input profile is not complete. Please define a video and audio source msgstr "El perfil de entrada no está completo. Por favor, defina una fuente de vídeo y audio." #: src/misc/coders/settings/Audio.js:86 +#: src/misc/filters/audio/Resample.js:78 msgid "The layout of the audio stream." msgstr "La disposición del flujo de audio." -#: src/misc/controls/HLS.js:79 +#: src/misc/controls/HLS.js:112 msgid "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." msgstr "El número máximo de segmentos de la lista de reproducción. El 0 contendrá todos los segmentos. Se recomienda 6." @@ -2211,83 +2443,84 @@ msgstr "El color del ruido" msgid "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." msgstr "La persona que asoció una obra con esta escritura ha dedicado la obra al dominio público renunciando a todos sus derechos sobre la obra en todo el mundo bajo la ley de derechos de autor, incluyendo todos los derechos conexos y vecinos, en la medida permitida por la ley. Puede copiar, modificar, distribuir y representar la obra, incluso con fines comerciales, todo ello sin pedir permiso." -#: src/views/Settings.js:1315 +#: src/views/Settings.js:1383 msgid "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." msgstr "El nombre de dominio público alcanzable del host en el que se ejecuta este Restreamer. Separe los nombres de dominio múltiples con una coma." -#: src/views/Publication/Edit.js:270 +#: src/views/Publication/Edit.js:278 msgid "The publication service \"{0}\" could not be deleted" msgstr "El servicio de publicación \"{0}\" no ha podido ser eliminado" -#: src/views/Publication/Add.js:188 +#: src/views/Publication/Add.js:195 msgid "The publication service \"{0}\" has been created" msgstr "El servicio de publicación \"{0}\" ha sido creado" -#: src/views/Publication/Edit.js:276 +#: src/views/Publication/Edit.js:284 msgid "The publication service \"{0}\" has been deleted" msgstr "El servicio de publicación \"{0}\" ha sido eliminado" -#: src/views/Publication/Add.js:186 +#: src/views/Publication/Add.js:193 msgid "The publication service has been created" msgstr "Se ha creado el servicio de publicación" #: src/misc/coders/settings/Audio.js:137 +#: src/misc/filters/audio/Resample.js:129 msgid "The sample rate of the audio stream." msgstr "La frecuencia de muestreo del flujo de audio." #: src/views/Playersite.js:152 #: src/views/Playersite.js:227 -#: src/views/Publication/Player.js:189 +#: src/views/Publication/Player.js:186 msgid "The selected file is too big ({0} bytes). Only {1} bytes are allowed." msgstr "El archivo seleccionado es demasiado grande ({0} bytes). Sólo se permiten {1} bytes." #: src/views/Playersite.js:141 #: src/views/Playersite.js:216 -#: src/views/Publication/Player.js:178 +#: src/views/Publication/Player.js:175 msgid "The selected file type ({0}) is not allowed. Allowed file types are {types}" msgstr "El tipo de archivo seleccionado ({0}) no está permitido. Los tipos de archivo permitidos son {types}" -#: src/views/Publication/Edit.js:230 +#: src/views/Publication/Edit.js:238 msgid "The settings for \"{0}\" have been saved" msgstr "Los ajustes de \"{0}\" se han guardado" -#: src/views/Edit/Wizard/index.js:846 +#: src/views/Edit/Wizard/index.js:861 msgid "The source doesn't provide any audio streams." msgstr "La fuente no proporciona ningún flujo de audio." -#: src/views/Edit/Profile.js:487 +#: src/views/Edit/Profile.js:520 msgid "The source doesn't provide any audio streams. Please check the <0>probe details." msgstr "La fuente no proporciona ningún flujo de audio. Por favor, compruebe los <0>detalles de la sonda." -#: src/views/Edit/Wizard/index.js:854 +#: src/views/Edit/Wizard/index.js:869 msgid "The source doesn't provide any compatible audio streams." msgstr "La fuente no proporciona ningún flujo de audio compatible." -#: src/views/Edit/Wizard/index.js:392 +#: src/views/Edit/Wizard/index.js:407 msgid "The source doesn't provide any compatible video streams. Please check the <0>requirements." msgstr "La fuente no proporciona ningún flujo de vídeo compatible. Por favor, compruebe los <0>requisitos." -#: src/views/Edit/Profile.js:357 +#: src/views/Edit/Profile.js:370 msgid "The source doesn't provide any video streams. Please check the <0>probe details." msgstr "La fuente no proporciona ningún flujo de vídeo. Por favor, compruebe los <0>detalles de la sonda." -#: src/views/Edit/Wizard/index.js:384 +#: src/views/Edit/Wizard/index.js:399 msgid "The source doesn't provide any video streams. Please check the device." msgstr "La fuente no proporciona ningún flujo de vídeo. Por favor, compruebe el dispositivo." -#: src/views/Edit/Wizard/index.js:865 +#: src/views/Edit/Wizard/index.js:880 msgid "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." msgstr "La fuente de vídeo no proporciona ningún flujo de audio compatible. Se recomienda <0>Audio silencioso. Los servicios, como YouTube, Facebook y otros, requieren un canal de audio." -#: src/views/Edit/Wizard/index.js:603 +#: src/views/Edit/Wizard/index.js:618 msgid "The video source is compatible. Select the desired resolution:" msgstr "La fuente de vídeo es compatible. Seleccione la resolución deseada:" -#: src/views/Settings.js:1182 +#: src/views/Settings.js:1250 msgid "There are updates available. Here you get more information." msgstr "Hay actualizaciones disponibles. Aquí tiene más información." -#: src/views/Settings.js:911 +#: src/views/Settings.js:978 msgid "There was a problem storing the settings. Settings not saved." msgstr "Hubo un problema al guardar los ajustes. Los ajustes no se han guardado." @@ -2297,15 +2530,15 @@ msgstr "Se ha producido un error de conexión con Restreamer Core en {0}." #: src/views/Playersite.js:165 #: src/views/Playersite.js:240 -#: src/views/Publication/Player.js:202 +#: src/views/Publication/Player.js:199 msgid "There was an error during upload: {0}" msgstr "Ha habido un error durante la carga: {0}" -#: src/views/Edit/Wizard/index.js:1123 +#: src/views/Edit/Wizard/index.js:1138 msgid "There was an error setting up the stream." msgstr "Hubo un error al configurar el flujo." -#: src/views/Settings.js:909 +#: src/views/Settings.js:976 msgid "There were some errors in the settings. Settings not saved." msgstr "Hubo algunos errores en la configuración. Los ajustes no se han guardado." @@ -2349,7 +2582,11 @@ msgstr "Esta licencia permite a los reutilizadores distribuir, remezclar, adapta msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." msgstr "Esta licencia permite a los reutilizadores distribuir, remezclar, adaptar y construir sobre el material en cualquier medio o formato, siempre y cuando se dé la atribución al creador. La licencia permite el uso comercial. Si usted remezcla, adapta o construye sobre el material, debe licenciar el material modificado bajo idénticos términos." -#: src/views/Edit/index.js:585 +#: src/views/Edit/Sources/Network.js:435 +msgid "This protocol is unknown or not supported by the available FFmpeg binary." +msgstr "Este protocolo es desconocido o no está soportado por el binario disponible de FFmpeg." + +#: src/views/Edit/index.js:639 msgid "This source cannot be edited while it is in use. To continue, you have to disconnect the source." msgstr "Esta fuente no puede ser editada mientras esté en uso. Para continuar, tiene que desconectar la fuente." @@ -2365,15 +2602,20 @@ msgstr "Esta versión de la interfaz de usuario no es compatible con el núcleo msgid "This version of the UI is compatible." msgstr "Esta versión de la interfaz de usuario es compatible." -#: src/views/Settings.js:1550 +#: src/views/Settings.js:1620 msgid "Time until an inactive viewer connection is treated as closed." msgstr "Tiempo que transcurre hasta que una conexión de visor inactiva es tratada como cerrada." -#: src/views/Settings.js:1263 -#: src/views/Settings.js:1829 +#: src/views/Settings.js:1331 +#: src/views/Settings.js:1910 +#: src/views/Settings.js:1958 msgid "Token" msgstr "Ficha" +#: src/views/Publication/Services/Telegram.js:13 +msgid "Transmit a Livestream to a Telegram Channel." +msgstr "Transmitir un Livestream a un canal de Telegram." + #: src/views/Publication/Services/Image2.js:25 msgid "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." msgstr "Transmita instantáneas de la fuente principal a un servidor HTTP/S. Puede encontrar más detalles sobre los ajustes <0>aquí." @@ -2430,7 +2672,7 @@ msgstr "Transmita la fuente principal a un servidor UDP. Puede encontrar más de msgid "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." msgstr "Transmita la fuente principal a un servidor WOWZA. Puede encontrar más detalles sobre los ajustes <0>aquí." -#: src/views/Publication/Services/Core.js:18 +#: src/views/Publication/Services/Core.js:19 msgid "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." msgstr "Transmitir la fuente principal a un datarhei Core Ressource. Puede encontrar más detalles sobre los ajustes <0>aquí." @@ -2450,6 +2692,18 @@ msgstr "Transmita la fuente principal al servicio de codificación en la nube de msgid "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." msgstr "Transmita la fuente principal al servicio Restream RTMP. Puede encontrar más detalles sobre los ajustes <0>aquí." +#: src/views/Publication/Services/Azure.js:17 +msgid "Transmit to a Azure Media Services. More details can be found <0>here." +msgstr "Transmitir a un servicio de medios Azure. Puede encontrar más detalles <0>aquí." + +#: src/views/Publication/Services/Linkedin.js:16 +msgid "Transmit to linkedIn. More details can be found <0>here." +msgstr "Transmitir a linkedIn. Puede encontrar más detalles <0>aquí." + +#: src/views/Publication/Services/Owncast.js:15 +msgid "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." +msgstr "Transmita su Livestream a un servidor Owncast. <0>Aquí puedes encontrar más detalles sobre la configuración." + #: src/views/Publication/Services/Youtube.js:21 msgid "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." msgstr "Transmite su vídeo como un flujo RTMP con la clave necesaria generada en YouTube Studio. Puede encontrar más información sobre la configuración de una transmisión en directo en la <0>Academia de Creadores de YouTube." @@ -2458,36 +2712,36 @@ msgstr "Transmite su vídeo como un flujo RTMP con la clave necesaria generada e msgid "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." msgstr "Transmite su flujo de vídeo con la clave requerida, generada en Twitter Producer. Puede encontrar más información sobre la configuración de una transmisión en directo en <0>Productor de Twitter." -#: src/misc/coders/Encoders/video/X264.js:83 -#: src/misc/coders/Encoders/video/X265.js:83 +#: src/misc/coders/Encoders/video/X264.js:93 +#: src/misc/coders/Encoders/video/X265.js:93 msgid "Tune" msgstr "Sintonice" -#: src/views/Edit/Sources/Network.js:409 +#: src/views/Edit/Sources/Network.js:488 #: src/views/Edit/Wizard/Sources/Network.js:77 msgid "UDP transport" msgstr "Transporte UDP" -#: src/views/Settings.js:1111 +#: src/views/Settings.js:1178 msgid "Unable to load the config." msgstr "No se puede cargar la configuración." -#: src/views/Settings.js:1245 +#: src/views/Settings.js:1313 msgid "Unique ident on the service." msgstr "Identificación única en el servicio." -#: src/views/Main/Egress.js:91 +#: src/views/Main/Egress.js:96 msgid "Unknown" msgstr "Desconocido" -#: src/views/Playersite.js:597 +#: src/views/Playersite.js:613 msgid "Unselected" msgstr "No seleccionado" -#: src/views/Playersite.js:482 -#: src/views/Playersite.js:499 -#: src/views/Playersite.js:634 -#: src/views/Publication/Player.js:373 +#: src/views/Playersite.js:498 +#: src/views/Playersite.js:515 +#: src/views/Playersite.js:650 +#: src/views/Publication/Player.js:376 msgid "Upload" msgstr "Subir a" @@ -2495,7 +2749,7 @@ msgstr "Subir a" msgid "Uploading the file failed" msgstr "La carga del archivo ha fallado" -#: src/views/Publication/Player.js:232 +#: src/views/Publication/Player.js:229 msgid "Uploading the logo failed" msgstr "Falló la carga del logotipo" @@ -2509,15 +2763,15 @@ msgstr "Tiempo de funcionamiento" msgid "Use Auth0 for your running Restreamer Core. More <0>details." msgstr "Utilice Auth0 para su núcleo Restreamer en funcionamiento. Más <0>detalles." -#: src/views/Edit/index.js:426 +#: src/views/Edit/index.js:438 msgid "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." msgstr "Utilice el asistente (<0/>) para una configuración rápida y sencilla, o edite (<1/>) las fuentes directamente en el modo personalizado." -#: src/views/Edit/Wizard/index.js:1068 +#: src/views/Edit/Wizard/index.js:1083 msgid "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Utilice los derechos de autor y elija la licencia de imagen correcta. Ya sea libre para todos o muy restringida. Comente brevemente lo que otros pueden hacer con su imagen." -#: src/views/Edit/index.js:530 +#: src/views/Edit/index.js:584 msgid "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Utilice sus derechos de autor y elija la licencia de imagen adecuada. Ya sea libre para todos o muy restringida. Comente brevemente lo que otros pueden hacer con su imagen." @@ -2525,8 +2779,8 @@ msgstr "Utilice sus derechos de autor y elija la licencia de imagen adecuada. Ya msgid "User registration" msgstr "Registro de usuarios" -#: src/views/Edit/Sources/Network.js:370 -#: src/views/Edit/Wizard/Sources/Network.js:81 +#: src/views/Edit/Sources/Network.js:448 +#: src/views/Edit/Wizard/Sources/Network.js:84 #: src/views/Login.js:272 #: src/views/Publication/Services/DASH.js:195 #: src/views/Publication/Services/DaCast.js:131 @@ -2534,18 +2788,18 @@ msgstr "Registro de usuarios" #: src/views/Publication/Services/RTSP.js:153 #: src/views/Publication/Services/Red5.js:146 #: src/views/Publication/Services/WOWZA.js:168 -#: src/views/Settings.js:1440 -#: src/views/Settings.js:1598 +#: src/views/Settings.js:1510 +#: src/views/Settings.js:1668 msgid "Username" msgstr "Nombre de usuario" -#: src/views/Settings.js:1446 -#: src/views/Settings.js:1606 +#: src/views/Settings.js:1516 +#: src/views/Settings.js:1676 msgid "Username for authorization." msgstr "Nombre de usuario para la autorización." -#: src/views/Edit/Sources/Network.js:375 -#: src/views/Edit/Wizard/Sources/Network.js:83 +#: src/views/Edit/Sources/Network.js:453 +#: src/views/Edit/Wizard/Sources/Network.js:90 msgid "Username for the device." msgstr "Nombre de usuario del dispositivo." @@ -2553,28 +2807,32 @@ msgstr "Nombre de usuario del dispositivo." msgid "VPU ID" msgstr "ID DE LA VPU" -#: src/views/Publication/Add.js:476 +#: src/misc/filters/video/VFlip.js:65 +msgid "Vertical Flip" +msgstr "Volteo vertical" + +#: src/views/Publication/Add.js:451 msgid "Video" msgstr "Vídeo" #: src/views/Edit/Sources/AVFoundation.js:126 -#: src/views/Edit/Sources/Raspicam.js:89 -#: src/views/Edit/Sources/V4L.js:109 +#: src/views/Edit/Sources/Raspicam.js:92 +#: src/views/Edit/Sources/V4L.js:112 #: src/views/Edit/Wizard/Sources/AVFoundation.js:82 #: src/views/Edit/Wizard/Sources/Raspicam.js:86 #: src/views/Edit/Wizard/Sources/V4L.js:105 msgid "Video device" msgstr "Dispositivo de vídeo" -#: src/views/Edit/Profile.js:320 +#: src/views/Edit/Profile.js:333 #: src/views/Edit/ProfileSummary.js:66 -#: src/views/Publication/Edit.js:517 +#: src/views/Publication/Edit.js:490 msgid "Video settings" msgstr "Ajustes de vídeo" -#: src/views/Edit/Wizard/index.js:264 -#: src/views/Edit/Wizard/index.js:354 -#: src/views/Edit/Wizard/index.js:596 +#: src/views/Edit/Wizard/index.js:279 +#: src/views/Edit/Wizard/index.js:369 +#: src/views/Edit/Wizard/index.js:611 msgid "Video setup" msgstr "Configuración del vídeo" @@ -2594,11 +2852,19 @@ msgstr "Visor" msgid "Virtual source" msgstr "Fuente virtual" +#: src/misc/filters/audio/Volume.js:44 +msgid "Volume" +msgstr "Volumen" + #: src/views/Welcome.js:27 msgid "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." msgstr "Bienvenido a Restreamer v2, la solución para la publicación rápida y sencilla de vídeos. Gratis para uso privado y comercial. Más ayuda en los <0>docs." -#: src/views/Settings.js:1585 +#: src/misc/controls/HLS.js:74 +msgid "Where to store the HLS playlist and segments. In-Memory is recommended." +msgstr "Dónde almacenar la lista de reproducción HLS y los segmentos. Se recomienda el almacenamiento en memoria." + +#: src/views/Settings.js:1655 msgid "Write protection" msgstr "Protección de la escritura" @@ -2606,32 +2872,32 @@ msgstr "Protección de la escritura" msgid "YUV test pattern" msgstr "Patrón de prueba YUV" -#: src/views/Edit/Wizard/index.js:1177 +#: src/views/Edit/Wizard/index.js:1192 msgid "Yes" msgstr "Sí" -#: src/views/Edit/Wizard/index.js:1159 +#: src/views/Edit/Wizard/index.js:1174 msgid "You can't abort the wizard because at least one input must be defined." msgstr "No puede abortar el asistente porque al menos una entrada debe estar definida." -#: src/views/Settings.js:2041 +#: src/views/Settings.js:2192 msgid "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" msgstr "Ha cambiado la configuración. Para que los cambios surtan efecto, tiene que reiniciar la aplicación. ¿Quiere reiniciar ahora?" -#: src/views/Main/index.js:347 +#: src/views/Main/index.js:376 #: src/views/Publication/Process.js:73 msgid "You have to reconnect manually" msgstr "Tiene que volver a conectarse manualmente" -#: src/views/Publication/Edit.js:456 +#: src/views/Publication/Edit.js:432 msgid "You have unsaved changes. Please save them before you can control the service again." msgstr "Tiene cambios sin guardar. Por favor, guárdelos antes de poder controlar el servicio de nuevo." -#: src/views/Edit/Wizard/index.js:616 +#: src/views/Edit/Wizard/index.js:631 msgid "Your stream needs to be encoded, but there's no suitable encoder available." msgstr "Su flujo necesita ser codificado, pero no hay un codificador adecuado disponible." -#: src/views/Edit/Wizard/index.js:623 +#: src/views/Edit/Wizard/index.js:638 msgid "Your stream needs to be encoded. Choose the desired encoder:" msgstr "Su flujo debe ser codificado. Elija el codificador deseado:" @@ -2643,7 +2909,7 @@ msgstr "azul" msgid "brown" msgstr "marrón" -#: src/views/Publication/Player.js:331 +#: src/views/Publication/Player.js:334 msgid "iframe code" msgstr "código iframe" diff --git a/src/locales/fr/messages.js b/src/locales/fr/messages.js index c6673b1..5ac1d45 100644 --- a/src/locales/fr/messages.js +++ b/src/locales/fr/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"<0>Compatibility list":"<0>Liste des compatibilités","<0>Show probe details":"<0>Montrer les détails de la sonde.","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Le point de terminaison de l'API n'a pas été trouvé. Paramètres non sauvegardés.","AVFoundation":"AVFoundation","Abort":"Abandonner","About":"À propos de","Add":"Ajouter","Add Publication":"Ajouter une publication","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Ajoutez des widgets et des styles externes au site de publication. Vous pouvez trouver quelques exemples sur la page d'aide.","Add new channel":"Ajouter un nouveau canal","Add: {0}":["Ajouter : ",["0"]],"Address":"Adresse","Address for the background image.":"Adresse pour l'image de fond.","Address to listen on for HTTP requests.":"Adresse d'écoute pour les demandes HTTP.","Address to listen on for HTTPS requests.":"Adresse à écouter pour les demandes HTTPS.","Adjust publication site colors and background as you like.":"Ajustez les couleurs et le fond du site de publication comme vous le souhaitez.","Advanced monitoring":"Surveillance avancée","Advanced settings":"Paramètres avancés","Advanced setup":"Configuration avancée","Alerting by email":"Alerte par e-mail","All":"Tous","All important system settings.":"Tous les paramètres importants du système.","Allow all referrer":"Autoriser tous les référents","Allow counting how many viewers the stream has.":"Permet de compter le nombre de spectateurs du flux.","Amplitude":"Amplitude","An environment variable sets this value.":"Une variable d'environnement définit cette valeur.","App":"App","Application":"Application","Are you sure you want to abort the wizard?":"Êtes-vous sûr de vouloir interrompre l'assistant ?","Audio":"Audio","Audio Device":"Dispositif audio","Audio device":"Dispositif audio","Audio from device":"Audio de l'appareil","Audio settings":"Paramètres audio","Audio setup":"Configuration audio","Auth0":"Auth0","Auth0 Tenant":"Auth0 Locataire","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 n'est actuellement pas disponible car cette interface est chargée depuis une origine non sécurisée.","Author":"Auteur","Authorization":"Autorisation","Automatic cleanup of all media data":"Nettoyage automatique de toutes les données des médias","Autoplay":"Jeu automatique","Available":"Disponible sur","Back":"Dos","Background colors":"Couleurs d'arrière-plan","Background image":"Image de fond","Backup URL":"URL de sauvegarde","Backup server":"Serveur de sauvegarde","Backup stream":"Flux de sauvegarde","Backup stream key":"Clé du flux de sauvegarde","Bandwidth":"Bande passante","Bandwidth control":"Contrôle de la bande passante","Banner":"Bannière","Basic":"Base","Beep factor":"Facteur Bip","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Décrivez brièvement ce que le public verra pendant le streaming en direct.","Button color":"Couleur du bouton","Cache for files on /data.":"Cache pour les fichiers sur /data.","Cache time (Seconds)":"Temps de cache (Secondes)","Cache types":"Types de caches","Capture clicks":"Capture des clics","Capture cursor":"Curseur de capture","Channel \"{0}\" saved":["Canal \"",["0"],"\" sauvegardé"],"Channels":"Chaînes","Check for updates":"Vérifier les mises à jour","Check the requirements":"Vérifiez les exigences","Choose a video stream":"Choisissez un flux vidéo","Choose an audio stream":"Choisissez un flux audio","Choose an input device ...":"Choisissez un périphérique d'entrée ...","Choose codec ...":"Choisissez le codec ...","Choose tenant ...":"Choisir le locataire ...","Chunk":"Chunk","Close":"Fermer","Code injection":"Injection de code","Codec":"Codec","Color":"Couleur","Config":"Config","Confirm password":"Conf confirmer le mot de passe","Connect":"Connectez-vous à","Connected device":"Appareil connecté","Connected since <0/>":"Connecté depuis <0/>","Connecting ...":"Connecter ...","Connecting to Restreamer Core ...":"Connexion à Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"La connexion à Restreamer Core a échoué, probablement en raison d'un contenu mixte.","Content":"Contenu","Content URL":"Content URL","Cores":"Cœurs","Create user":"Créer un utilisateur","Creative Commons":"Creative Commons","Custom ...":"Personnalisé...","Custom JSON config for datarhei Core.":"Configuration JSON personnalisée pour le noyau datarhei.","Custom audio device":"Dispositif audio personnalisé","Custom audio index":"Index audio personnalisé","Custom bitrate (kbit/s)":"Débit binaire personnalisé (kbit/s)","Custom code injection":"Injection de code personnalisé","Custom delay":"Délai personnalisé","Custom device":"Dispositif personnalisé","Custom format":"Format personnalisé","Custom framerate":"Taux de rafraîchissement personnalisé","Custom keyframe interval":"Intervalle d'images clés personnalisé","Custom layout":"Mise en page personnalisée","Custom sampling (Hz)":"Échantillonnage personnalisé (Hz)","Custom scale":"Échelle personnalisée","Custom size":"Taille personnalisée","Custom video device":"Dispositif vidéo personnalisé","Custom video index":"Index vidéo personnalisé","Data copied to clipboard":"Données copiées dans le presse-papiers","Death color":"Couleur de la mort","Decoder":"Décodeur","Default":"Défaut","Delay":"Délai","Delay (ms)":"Délai (ms)","Delete":"Supprimer","Deleting a publication service cannot be reversed. The publication stops immediately.":"La suppression d'un service de publication ne peut pas être annulée. La publication s'arrête immédiatement.","Delivering mode":"Mode de livraison","Description":"Description","Design":"Design","Device":"Dispositif","Disconnect":"Déconnexion","Disconnect & Continue":"Déconnecter et continuer","Disconnecting ...":"Déconnexion ...","Disk":"Disque","Disk cache":"Cache disque","Disk storage":"Stockage sur disque","Do you really want to restart the application now?":"Voulez-vous vraiment redémarrer l'application maintenant ?","Do you want to delete \"{0}\"?":["Voulez-vous supprimer \"",["0"],"\" ?"],"Do you want to delete {title}?":["Voulez-vous supprimer ",["titre"]," ?"],"Do you want to disconnect \"{0}\"?":["Voulez-vous déconnecter \"",["0"],"\" ?"],"Docs":"Docs","Documentation":"Documentation","Dup. frames":"Cadres de duplication","EDIT: Player":"EDIT : Joueur","EDIT: Publication Website":"EDIT : Site de la publication","Edit":"Modifier","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Modifiez les sources audio et vidéo pour le flux en direct. Ajoutez une description, et définissez la licence de votre contenu souhaité.","Edit: {title}":["Edit : ",["title"]],"Embed":"Intégrer","Enable RTMP server ...":"Activer le serveur RTMP ...","Enable a periodic beep every second with this value times the carrier frequency":"Active un bip périodique toutes les secondes avec cette valeur multipliée par la fréquence porteuse","Enable backup stream":"Activer le flux de sauvegarde","Enable nerd statistics":"Activer les statistiques des nerds","Enable primary stream":"Activer le flux primaire","Enable snapshots":"Activer les instantanés","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Il est fortement conseillé d'activer l'autorisation. Sinon, n'importe qui peut accéder à cette instance.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"L'activation de l'authentification de base est fortement conseillée. Sinon, n'importe qui pourrait écrire des données sur /memfs.","Encoder":"Codeur","Encoding":"Encodage","Encryption":"Cryptage","Enter a name for the new channel.":"Saisissez un nom pour le nouveau canal.","Enter password":"Entrez le mot de passe","Enter the address of your network source:":"Saisissez l'adresse de votre source réseau :","Enter username":"Entrez le nom d'utilisateur","Entropy coder":"Codeur d'entropie","Error":"Erreur","Error while copying data to clipboard":"Erreur lors de la copie de données dans le presse-papiers","Error: {0}":["Erreur : ",["0"]],"Expands the area above the channel list (live chat).":"Agrandit la zone au-dessus de la liste des chaînes (chat en direct).","Expands the area under the channel description (comment boxes).":"Agrandit la zone située sous la description du canal (cases de commentaires).","Expert mode":"Mode expert","Extend channel list":"Étendre la liste des canaux","Extend content":"Étendre le contenu","Extend footer":"Étendre le pied de page","Extend header":"Prolonger l'en-tête","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Échec de la création du service de publication (",["0"],")"],"Failed to create publication website files.":"Échec de la création des fichiers du site Web de publication.","Failed to probe the source. Please check the <0>probe details.":"Impossible de sonder la source. Veuillez vérifier les <0>détails de la sonde.","Failed to refresh token: {0}":["Échec du rafraîchissement du jeton : ",["0"]],"Failed to save ingest metadata":"Échec de la sauvegarde des métadonnées d'ingestion","Failed to stop process":"Échec de l'arrêt du processus","Failed to store player size setting.":"Échec de l'enregistrement du paramètre de taille du lecteur.","Failed to store publication service ({0})":["Échec du stockage du service de publication (",["0"],")"],"Failed to update ingest process ({0})":["Échec de la mise à jour du processus d'ingestion (",["0"],")"],"Failed to update the player":"Échec de la mise à jour du lecteur","Failed to verify the source. Please check the address.":"Impossible de vérifier la source. Veuillez vérifier l'adresse.","Finish":"Finition","Flags":"Drapeaux","For Javascripts.":"Pour les Javascripts.","For Stylesheets.":"Pour les feuilles de style.","Force input framerate":"Forcer le taux de rafraîchissement de l'entrée","Format":"Format","Frame drops":"Baisse du cadre","Framebuffer":"Framebuffer","Framerate":"Fréquence d'images","Frequency (Hz)":"Fréquence (Hz)","GET":"GET","General":"Général","Google Analytics ID":"ID Google Analytics","Google Analytics Tracker Name":"Nom du tracker Google Analytics","HLS":"HLS","HLS statistic for the In-memory storage":"Statistique HLS pour le stockage en mémoire","HTTP and HTTPS":"HTTP et HTTPS","HTTP port":"Port HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Port HTTPS","Hardware device":"Dispositif matériel","Header":"En-tête","Headline":"A la une","Hosted Restreamer interface":"Interface hébergée de Restreamer","Human readable name on the service.":"Nom lisible par l'homme sur le service.","IP address":"Adresse IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Si vous avez changé les ports, il se peut que Restreamer Core ait déjà redémarré, mais qu'il soit maintenant disponible sur un port différent.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Si vous avez activé Let's Encrypt TLS, l'acquisition des certificats peut prendre un certain temps. Assurez-vous que Restreamer Core est joignable via le port 80 depuis Internet. Veuillez vérifier le journal de la console de Restreamer Core.","Ignore IP ranges":"Ignorer les plages IP","Image URL":"URL de l'image","Imprint":"Impression","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"En plus du lecteur, le Restreamer offre une page d'accueil complète, que vous pouvez utiliser pour présenter votre flux en direct facilement et rapidement.","In-memory":"En mémoire","In-memory storage":"Stockage en mémoire","Incompatible":"Incompatibilité","Inherit":"Hériter de","Inject 1":"Injecter 1","Inject 2":"Injecter 2","Inject 3":"Injecter 3","Inject 4":"Injecter 4","Internal HLS server":"Serveur HLS interne","Internal RTMP server":"Serveur RTMP interne","Interval (seconds)":"Intervalle (secondes)","Issue alert":"Alerte aux problèmes","Keyframe interval (seconds)":"Intervalle entre les images clés (secondes)","Layout":"Mise en page","Let's Encrypt certification":"Certification Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt requiert un ou plusieurs noms de domaine publics et un port 80/TCP accessible.","Level":"Niveau","Level of system protocol.":"Niveau du protocole du système.","License":"Licence","Life color":"Couleur de la vie","Linecolor":"Linecolor","Link":"Lien","Link, mouseover":"Lien, survol de la souris","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Liste des plages IP en notation CIDR, par exemple, 127.0.0.1/32, que les statistiques n'enregistreront pas - une plage IP par ligne. Laissez vide pour enregistrer toutes les sessions.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Liste des extensions de fichiers à mettre en cache (par exemple, \".html\"), une par ligne. Laissez vide pour mettre en cache tous les types de fichiers.","List size (segments)":"Taille de la liste (segments)","Live-Streaming to Facebook Live RTMP service":"Diffusion en direct vers le service RTMP de Facebook Live","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Service RTMP de diffusion en direct sur Instagram Live. La clé du streaming nécessite un service tel que <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Diffusion en direct sur le service RTMP de Twitch Live.","Live-Streaming to Vimeo Live RTMP Service":"Diffusion en direct sur le service RTMP Live de Vimeos","Livesource ID":"Livesource ID","Log level":"Niveau du journal","Logging":"Enregistrement","Login":"Connexion","Login failed: Couldn't load API details":"La connexion a échoué : Impossible de charger les détails de l'API","Login failed: {0}":["La connexion a échoué : ",["0"]],"Login/JWT authorization":"Autorisation de connexion/JWT","Logo":"Logo","Logout":"Déconnexion","MB":"MB","Main Source":"Source principale","Main channel":"Canal principal","Main channel not found":"Canal principal non trouvé","Main channel saved":"Canal principal sauvegardé","Main page channel (index.html).":"Canal de la page principale (index.html).","Maintainer:":"Mainteneur :","Maximum allowed cache size, 0 for unlimited.":"Taille maximale autorisée du cache, 0 pour illimité.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Mégaoctets de RAM maximum autorisés pour /memfs, 0 pour illimité.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Maximum de mégaoctets autorisés à consommer du disque dur. 0 pour illimité.","Maximum bandwidth Mbit/s":"Bande passante maximale Mbit/s","Maximum delay in milliseconds.":"Délai maximal en millisecondes.","Maximum file size (Megabytes)":"Taille maximale du fichier (mégaoctets)","Maximum file size to put in cache.":"Taille maximale du fichier à mettre dans le cache.","Maximum log histroy":"Histroy log maximum","Maximum log lines":"Lignes de journal maximum","Maximum size (Megabytes)":"Taille maximale (mégaoctets)","Maximum viewer idle time (Seconds)":"Temps d'inactivité maximum du téléspectateur (Secondes)","Maximum viewers":"Nombre maximum de téléspectateurs","Memory":"Mémoire","Meta information":"Méta-information","Metadata":"Métadonnées","Mold":"Moisissure","More about Twitter's copyright <0>here.":"Plus d'informations sur les droits d'auteur de Twitter <0>ici.","More about YouTube's copyright <0>here.":"Plus d'informations sur les droits d'auteur de YouTube <0>ici.","More about licenses here":"Plus d'informations sur les licences ici","More about the service":"En savoir plus sur le service","Mute":"Mute","Name":"Nom","Name for the template. If the name already exists, it will be overwritten.":"Nom du modèle. Si le nom existe déjà, il sera écrasé.","Network":"Réseau","Network source":"Source du réseau","Next":"Suivant","Next: Audio":"Suivant : Audio","Next: Video setup":"Suivant : Configuration de la vidéo","No":"Non","No audio":"Pas d'audio","No audio stream available":"Aucun flux audio disponible","No input device available":"Aucun dispositif d'entrée disponible","No live stream was detected. Please check the software that sends the stream.":"Aucun flux en direct n'a été détecté. Veuillez vérifier le logiciel qui envoie le flux.","No source selected":"Pas de source sélectionnée","No sources available":"Aucune source disponible","No suitable encoder found.":"Aucun codeur approprié n'a été trouvé.","No video":"Pas de vidéo","No video stream available":"Aucun flux vidéo disponible","Node ID":"ID du nœud","Noise":"Bruit","None":"Aucun","Notes":"Notes","Number of log lines to keep.":"Nombre de lignes de journal à conserver.","Number of logs to keep for each process.":"Nombre de journaux à conserver pour chaque processus.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Un référent par ligne, par exemple http://www.example.com.","Open":"Ouvrir","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Le Passthrough (copie) ne doit être désactivé que si nécessaire. Chaque encodage nécessite des ressources CPU/GPU supplémentaires.","Password":"Mot de passe","Password for authorization.":"Mot de passe pour l'autorisation.","Password for the device.":"Mot de passe pour l'appareil.","Persist viewer statistics":"Persistance des statistiques des téléspectateurs","Pixel format":"Format des pixels","Plan: <0>Starter":"Plan : <0>Démarreur","Platforms":"Plateformes","Playback":"Lecture","Player":"Joueur","Player URL":"URL du joueur","Player settings saved":"Sauvegarde des paramètres du lecteur","Playersite":"Site des joueurs","Playlist":"Liste de lecture","Please check the <0>process log":"Veuillez vérifier le <0>Journal du processus.","Please contact the operator of the service and check what happens.":"Veuillez contacter l'opérateur du service et vérifier ce qui se passe.","Please select a file to upload.":"Veuillez sélectionner un fichier à télécharger.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Veuillez utiliser \"Passthrough (copie)\" si possible. L'encodage nécessite des ressources CPU/GPU supplémentaires.","Please wait. Probe stream data ...":"Veuillez patienter. Données du flux de sondes ...","Please wait. Setting up the stream ...":"Veuillez patienter. Configuration du flux ...","Port":"Port","Position":"Position","Preset":"Préréglage","Primary stream":"Flux primaire","Primary stream key":"Clé de flux primaire","Probe":"Sonde","Process":"Processus","Process control":"Contrôle du processus","Process debug":"Débogage du processus","Process debug report":"Rapport de débogage du processus","Process details":"Détails du processus","Process report":"Rapport de processus","Processing & Control":"Traitement et contrôle","Profile":"Profil","Protocol":"Protocole","Protocols":"Protocoles","Public domain/s":"Domaine public/s","Publication service not found":"Service de publication non trouvé","Publication website settings saved":"Sauvegarde des paramètres du site Web de la publication","Publications":"Publications","Pull Mode":"Mode de traction","Pull or recieve the data:":"Tirer ou recevoir les données :","Quality":"Qualité","RGB test pattern":"Mire de test RVB","RTMP app for publishing.":"Application RTMP pour la publication.","RTMP server":"Serveur RTMP","RTMP server is not enabled":"Le serveur RTMP n'est pas activé","RTMP server listen address.":"Adresse d'écoute du serveur RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Jeton RTMP pour la publication et la lecture. Le jeton est la valeur du paramètre de requête de l'URL \"token\".","RTMP/S":"RTMP/S","RTMPS server":"Serveur RTMPS","RTSP":"RTSP","Raspberry Pi camera":"Caméra Raspberry Pi","Rate control":"Contrôle du taux","Ratio":"Ratio","Read input at native speed":"Lecture de l'entrée à la vitesse native","Receive Mode":"Mode de réception","Reconnect":"Reconnecter","Reconnect delay (seconds)":"Délai de reconnexion (secondes)","Reconnecting in {0}s":["Reconnexion en ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["La reconnexion au Restreamer Core a échoué au cours des ",["RETRIES"]," dernières secondes."],"Reconnecting to Restreamer Core failed.":"La reconnexion à Restreamer Core a échoué.","Refresh":"Rafraîchir","Region":"Région","Reload":"Rechargez","Remove the oldest entries if the /memfs is full":"Supprimer les entrées les plus anciennes si le /memfs est plein","Requires activation":"Nécessite une activation","Restart":"Redémarrer","Restart required":"Redémarrage nécessaire","Restarting":"Redémarrage de","Restarting Restreamer Core ...":"Redémarrage de Restreamer Core ...","Restarting the application failed.":"Le redémarrage de l'application a échoué.","Restreamer Service":"Service Restreamer","Retrieving stream data ...":"Récupération des données de flux ...","Retry":"Réessayer","Rule":"Règle","Sampling":"Échantillonnage","Save":"Sauvez","Scale":"Échelle","Seconds to keep files in cache.":"Secondes pour garder les fichiers dans le cache.","Seconds until a process is restarted.":"Secondes jusqu'à ce qu'un processus soit redémarré.","Seconds until a staled process is terminated.":"Secondes jusqu'à ce qu'un processus bloqué soit terminé.","Seconds until the snapshot/thumbnail of the video source is updated.":"Secondes jusqu'à ce que l'instantané/la vignette de la source vidéo soit mis à jour.","Security":"Sécurité","Security token":"Jeton de sécurité","Seekbar color":"Couleur du Seekbar","Segment length (seconds)":"Longueur du segment (secondes)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Une fois ce délai écoulé, le segment sera coupé sur l'image clé suivante. Une valeur de 2 est recommandée.","Segmentation":"Segmentation","Select a device:":"Sélectionnez un appareil :","Select audio source:":"Sélectionnez la source audio :","Select source ...":"Sélectionnez la source ...","Select video source:":"Sélectionnez la source vidéo :","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Choisissez si vous tirez le flux d'une <0>source réseau (comme une caméra réseau) ou du <1>serveur RTMP interne (par exemple, les flux OBS vers le Restreamer).","Select your encoding setting:":"Sélectionnez votre paramètre de codage :","Selected":"Sélectionné","Selected channel":"Canal sélectionné","Selection":"Sélection","Send anonymous metrics (helps us for future development)":"Envoyez des métriques anonymes (nous aide pour le développement futur)","Send stream to this address:":"Envoyez le flux à cette adresse :","Send video to Framebuffer":"Envoyer la vidéo au Framebuffer","Server":"Serveur","Service":"Service","Service name":"Nom du service","Service token for monitoring.":"Jeton de service pour la surveillance.","Sessions":"Sessions","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Définit une limite de bande passante en Mbit par seconde pour le transfert des données HLS sortantes. Tous les services, tels que RTMP et les processus sortants, sont inclus dans le calcul. Si la bande passante est dépassée, les spectateurs HLS reçoivent le code d'état HTTP 509 (Bandwidth Limit Exceeded). 0 est illimité.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Définit une limite de visualisation pour les sessions HLS. Si la limite est dépassée, les spectateurs HLS reçoivent le code d'état HTTP 509 (limite de bande passante dépassée). La valeur 0 est illimitée.","Setting for connection to the service.":"Paramètre pour la connexion au service.","Settings":"Paramètres","Settings (expert mode)":"Paramètres (mode expert)","Settings for /data path. The access is protected by":"Paramètres pour le chemin /data. L'accès est protégé par","Settings for /memfs path.":"Paramètres pour le chemin /memfs.","Settings saved. All changes will be applied after restarting the application.":"Les paramètres sont enregistrés. Toutes les modifications seront appliquées après le redémarrage de l'application.","Share button":"Bouton partager","Shows a reference to the project.":"Affiche une référence au projet.","Sign up (free)":"S'inscrire (gratuit)","Silence":"Silence","Silence Audio":"Silence Audio","Sine":"Sine","Sitename":"Nom de site","Size":"Taille","Snapshot":"Instantané","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Délai d'attente pour les sockets (microsecondes)","Software":"Logiciel","Source":"Source :","Speed":"Vitesse","Stale timeout (seconds)":"Délai d'expiration (secondes)","Statistics":"Statistiques","Storage":"Stockage","Stores the viewer statistics to the disk.":"Stocke les statistiques du visualiseur sur le disque.","Stream":"Stream","Stream URL":"URL du flux","Stream key":"Clé de flux","Stream name":"Nom du cours d'eau","Stream names":"Noms des cours d'eau","Support datarhei Restreamer":"Support datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Prend en charge HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT et plus encore.","System":"Système","Template":"Modèle","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Modèle à utiliser pour créer le site Web de la publication. Le bouton de suppression supprime la sélection du système.","Terms":"Conditions","Test pattern":"Modèle de test","Test pattern (extended)":"Mire (étendue)","Text colors":"Couleurs du texte","The amplitude (0.0 - 1.0) of the generated audio stream":"L'amplitude (0,0 - 1,0) du flux audio généré","The application is using an older version of the settings.":"L'application utilise une ancienne version des paramètres.","The bitrate of the audio stream.":"Le débit binaire du flux audio.","The carrier frequency":"La fréquence porteuse","The channel \"{0}\" could not be deleted":["Le canal \"",["0"],"\" n'a pas pu être supprimé"],"The channel \"{0}\" has been deleted":["Le canal \"",["0"],"\" a été supprimé"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"La suppression de ce canal ne peut pas être récupérée. Toutes les publications de ce canal seront supprimées.","The input profile is not complete. Please define a video and audio source.":"Le profil d'entrée n'est pas complet. Veuillez définir une source vidéo et audio.","The layout of the audio stream.":"La mise en page du flux audio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Le nombre maximum de segments de la liste de lecture. 0 contiendra tous les segments. 6 est recommandé.","The noise color":"La couleur du bruit","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"La personne qui a associé une œuvre à cet acte a dédié l'œuvre au domaine public en renonçant à tous ses droits sur l'œuvre dans le monde entier en vertu de la loi sur le droit d'auteur, y compris tous les droits connexes et voisins, dans la mesure autorisée par la loi. Vous pouvez copier, modifier, distribuer et exécuter l'œuvre, même à des fins commerciales, le tout sans demander la permission.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Le nom de domaine public joignable de l'hôte sur lequel ce Restreamer est exécuté. Séparez les noms de domaine multiples par une virgule.","The publication service \"{0}\" could not be deleted":["Le service de publication \"",["0"],"\" n'a pas pu être supprimé."],"The publication service \"{0}\" has been created":["Le service de publication \"",["0"],"\" a été créé."],"The publication service \"{0}\" has been deleted":["Le service de publication \"",["0"],"\" a été supprimé."],"The publication service has been created":"Le service de publication a été créé","The sample rate of the audio stream.":"La fréquence d'échantillonnage du flux audio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Le fichier sélectionné est trop gros (",["0"]," octets). Seuls les ",["1"]," octets sont autorisés."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Le type de fichier sélectionné (",["0"],") n'est pas autorisé. Les types de fichiers autorisés sont ",["types"]],"The settings for \"{0}\" have been saved":["Les paramètres de \"",["0"],"\" ont été sauvegardés."],"The source doesn't provide any audio streams.":"La source ne fournit pas de flux audio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"La source ne fournit pas de flux audio. Veuillez vérifier les <0>détails de la sonde.","The source doesn't provide any compatible audio streams.":"La source ne fournit pas de flux audio compatible.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"La source ne fournit pas de flux vidéo compatible. Veuillez vérifier les <0>exigences.","The source doesn't provide any video streams. Please check the <0>probe details.":"La source ne fournit pas de flux vidéo. Veuillez vérifier les <0>détails de la sonde.","The source doesn't provide any video streams. Please check the device.":"La source ne fournit pas de flux vidéo. Veuillez vérifier l'appareil.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"La source vidéo ne fournit pas de flux audio compatible. <0>Silence audio est recommandé. Les services tels que YouTube, Facebook & Co. nécessitent un canal audio.","The video source is compatible. Select the desired resolution:":"La source vidéo est compatible. Sélectionnez la résolution souhaitée :","There are updates available. Here you get more information.":"Il y a des mises à jour disponibles. Ici vous obtenez plus d'informations.","There was a problem storing the settings. Settings not saved.":"Il y a eu un problème pour enregistrer les paramètres. Paramètres non sauvegardés.","There was an error connecting to Restreamer Core at {0}.":["Il y a eu une erreur de connexion à Restreamer Core à ",["0"],"."],"There was an error during upload: {0}":["Il y a eu une erreur pendant le téléchargement : ",["0"]],"There was an error setting up the stream.":"Il y a eu une erreur dans la configuration du flux.","There were some errors in the settings. Settings not saved.":"Il y avait des erreurs dans les paramètres. Les paramètres n'ont pas été sauvegardés.","There's no login method available.":"Il n'y a pas de méthode de connexion disponible.","This is a dummy service that explains to you the concepts of service.":"Il s'agit d'un service factice qui vous explique les concepts du service.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Il ne s'agit pas nécessairement d'une erreur. Cependant, le redémarrage de Restreamer Core peut prendre un peu plus de temps...","This is to mention the copyright regulations for the target of this service.":"Il s'agit de mentionner les règles de copyright pour la cible de ce service.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Cette licence permet aux réutilisateurs de copier et de distribuer le matériel sur n'importe quel support ou dans n'importe quel format, sous une forme non adaptée uniquement, et à condition que le créateur soit mentionné. La licence autorise l'utilisation commerciale.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Cette licence permet aux réutilisateurs de copier et de distribuer le matériel sur n'importe quel support ou dans n'importe quel format, sous une forme non adaptée uniquement, à des fins non commerciales et à condition que le créateur soit mentionné.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou dans n'importe quel format à des fins non commerciales uniquement, et à condition que le créateur soit mentionné.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou dans n'importe quel format à des fins non commerciales uniquement, et à condition que le créateur soit mentionné. Si vous remixez, adaptez ou développez le matériel, vous devez accorder une licence au matériel modifié selon des conditions identiques.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou format, à condition que le créateur soit mentionné. La licence autorise l'utilisation commerciale.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou format, à condition que le créateur soit mentionné. La licence autorise l'utilisation commerciale. Si vous remixez, adaptez ou développez le matériel, vous devez accorder une licence au matériel modifié selon des conditions identiques.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Cette source ne peut pas être éditée lorsqu'elle est en cours d'utilisation. Pour continuer, vous devez déconnecter la source.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Cette version de l'interface utilisateur ne prend pas en charge le binaire FFmpeg disponible (",["0"],"). L'interface utilisateur requiert ",["1"],". Veuillez utiliser un binaire FFmpeg supporté."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Cette version de l'IU ne prend pas en charge le Core connecté (",["0"],"). L'IU requiert ",["1"],". Veuillez utiliser une version compatible de l'IU."],"This version of the UI is compatible.":"Cette version de l'interface utilisateur est compatible.","Time until an inactive viewer connection is treated as closed.":"Temps jusqu'à ce qu'une connexion de téléspectateur inactive soit traitée comme fermée.","Token":"Token","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmettre des instantanés de la source principale à un serveur HTTP/S. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Transmet le canal audio de la source principale à un serveur Icecast. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmettre la source principale en tant que HTTP-Live-Streaming (HLS) à un serveur HTTP/S. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmettre la source principale en MPEG-DASH à un serveur HTTP/S. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Transmettre la source principale à un service Live de Brightcove. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Transmettre la source principale à un service CDN77 RTMP. Plus d'informations sur la configuration <0>ici.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Transmettre la source principale à un service DaCast RTMP. Plus d'informations sur la configuration <0>ici.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Transmettre la source principale à un service MPEG-TS. Vous trouverez plus de détails sur les réglages ici <0>ici.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur RTMP(e|s|t|te|ts). Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur RTSP. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur Red5/Pro. Vous trouverez plus de détails sur les réglages <0>ici.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur SRT. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur UDP. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur WOWZA. Vous trouverez plus de détails sur les réglages <0>ici.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Transmettre la source principale à un datarhei Core Ressource. Plus de détails sur les paramètres peuvent être trouvés <0>ici.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Transmettre la source principale à une Ressource livespotting.com. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Transmettre la source principale à l'Akamai (MSL) Media Services Live. Vous trouverez plus de détails sur les paramètres de l'encodeur MSL sur <0>ici.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Transmettez la source principale au service d'encodage en nuage Bitmovin, un outil puissant pour le streaming en direct. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Transmettre la source principale au service RTMP de Restream. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Transmet votre vidéo sous forme de flux RTMP avec la clé requise générée dans YouTube Studio. Vous pouvez trouver plus d'informations sur la configuration d'un flux en direct sur le site de la <0>Creator Academy de YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Transmet votre flux vidéo avec la clé requise, qui a été générée dans Twitter Producer. Vous trouverez plus d'informations sur la configuration d'un flux en direct sur le site <0>Producteur de Twitter.","Tune":"Tune","UDP transport":"Transport UDP","Unable to load the config.":"Impossible de charger la configuration.","Unique ident on the service.":"Identifiant unique sur le service.","Unknown":"Inconnu","Unselected":"Non sélectionné","Upload":"Télécharger","Uploading the file failed":"Le téléchargement du fichier a échoué","Uploading the logo failed":"Le téléchargement du logo a échoué","Uptime":"Temps de fonctionnement","Use Auth0 for your running Restreamer Core. More <0>details.":"Utilisez Auth0 pour votre noyau Restreamer en cours d'exécution. Plus de <0>détails.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Utilisez l'assistant (<0/>) pour une configuration rapide et facile, ou éditez (<1/>) les sources directement en mode personnalisé.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilisez vos droits d'auteur et choisissez la bonne licence d'image. Qu'elle soit libre pour tous ou fortement restreinte. Discutez brièvement de ce que les autres sont autorisés à faire avec votre image.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilisez vos droits d'auteur et choisissez la bonne licence d'image. Qu'il s'agisse d'une licence gratuite pour tous ou d'une licence très restreinte. Discutez brièvement de ce que les autres sont autorisés à faire avec votre image.","User registration":"Enregistrement de l'utilisateur","Username":"Nom d'utilisateur :","Username for authorization.":"Nom d'utilisateur pour l'autorisation.","Username for the device.":"Nom d'utilisateur pour l'appareil.","VPU ID":"ID VPU","Video":"Vidéo","Video device":"Appareil vidéo","Video settings":"Paramètres vidéo","Video setup":"Configuration vidéo","Video source":"Source vidéo","Viewer":"Visionneuse","Virtual source":"Source virtuelle","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Bienvenue à Restreamer v2, la solution pour la publication rapide et facile de vidéos. Gratuit pour une utilisation privée et commerciale. Plus d'aide dans les <0>docs.","Write protection":"Protection de l'écriture","YUV test pattern":"Mire de test YUV","Yes":"Oui","You can't abort the wizard because at least one input must be defined.":"Vous ne pouvez pas interrompre l'assistant car au moins une entrée doit être définie.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Vous avez modifié la configuration. Pour que les changements prennent effet, vous devez redémarrer l'application. Voulez-vous redémarrer maintenant ?","You have to reconnect manually":"Vous devez vous reconnecter manuellement","You have unsaved changes. Please save them before you can control the service again.":"Vous avez des modifications non sauvegardées. Veuillez les sauvegarder avant de pouvoir contrôler à nouveau le service.","Your stream needs to be encoded, but there's no suitable encoder available.":"Votre flux doit être encodé, mais aucun encodeur approprié n'est disponible.","Your stream needs to be encoded. Choose the desired encoder:":"Votre flux doit être encodé. Choisissez l'encodeur souhaité :","blue":"bleu","brown":"brun","iframe code":"code iframe","kbit/s":"kbit/s","pink":"rose","velvet":"velours","violet":"violet","white":"blanc"}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"6 (+ guaranteed to start with a Key frame)":"6 (+ garantie de commencer par un Key frame)","7 (+ fragmented MP4 format)":"7 (+ format MP4 fragmenté)","<0>Compatibility list":"<0>Liste des compatibilités","<0>Show probe details":"<0>Montrer les détails de la sonde.","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Le point de terminaison de l'API n'a pas été trouvé. Paramètres non sauvegardés.","AVFoundation":"AVFoundation","Abort":"Abandonner","About":"À propos de","Add":"Ajouter","Add Publication":"Ajouter une publication","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Ajoutez des widgets et des styles externes au site de publication. Vous pouvez trouver quelques exemples sur la page d'aide.","Add new channel":"Ajouter un nouveau canal","Add: {0}":["Ajouter : ",["0"]],"Address":"Adresse","Address for the background image.":"Adresse pour l'image de fond.","Address to listen on for HTTP requests.":"Adresse d'écoute pour les demandes HTTP.","Address to listen on for HTTPS requests.":"Adresse à écouter pour les demandes HTTPS.","Adjust publication site colors and background as you like.":"Ajustez les couleurs et le fond du site de publication comme vous le souhaitez.","Advanced monitoring":"Surveillance avancée","Advanced settings":"Paramètres avancés","Advanced setup":"Configuration avancée","AirPlay":"AirPlay","Alerting by email":"Alerte par e-mail","All":"Tous","All important system settings.":"Tous les paramètres importants du système.","Allow all referrer":"Autoriser tous les référents","Allow counting how many viewers the stream has.":"Permet de compter le nombre de spectateurs du flux.","Amplitude":"Amplitude","An environment variable sets this value.":"Une variable d'environnement définit cette valeur.","App":"App","Application":"Application","Are you sure you want to abort the wizard?":"Êtes-vous sûr de vouloir interrompre l'assistant ?","Audio":"Audio","Audio Device":"Dispositif audio","Audio device":"Dispositif audio","Audio from device":"Audio de l'appareil","Audio settings":"Paramètres audio","Audio setup":"Configuration audio","Auth0":"Auth0","Auth0 Tenant":"Auth0 Locataire","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 n'est actuellement pas disponible car cette interface est chargée depuis une origine non sécurisée.","Author":"Auteur","Authorization":"Autorisation","Automatic cleanup of all media data":"Nettoyage automatique de toutes les données des médias","Autoplay":"Jeu automatique","Available":"Disponible sur","Back":"Retour","Background colors":"Couleurs d'arrière-plan","Background image":"Image de fond","Backup URL":"URL de sauvegarde","Backup server":"Serveur de sauvegarde","Backup stream":"Flux de sauvegarde","Backup stream key":"Clé du flux de sauvegarde","Bandwidth":"Bande passante","Bandwidth control":"Contrôle de la bande passante","Banner":"Bannière","Basic":"Base","Beep factor":"Facteur Bip","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Décrivez brièvement ce que le public verra pendant le streaming en direct.","Button color":"Couleur du bouton","Cache for files on /data.":"Cache pour les fichiers sur /data.","Cache time (Seconds)":"Temps de cache (Secondes)","Cache types":"Types de caches","Capture clicks":"Capture des clics","Capture cursor":"Curseur de capture","Channel \"{0}\" saved":["Canal \"",["0"],"\" sauvegardé"],"Channels":"Chaînes","Check for updates":"Vérifier les mises à jour","Check the requirements":"Vérifiez les exigences","Choose a video stream":"Choisissez un flux vidéo","Choose an audio stream":"Choisissez un flux audio","Choose an input device ...":"Choisissez un périphérique d'entrée ...","Choose codec ...":"Choisissez le codec ...","Choose tenant ...":"Choisir le locataire ...","Chromecast":"Chromecast","Chunk":"Chunk","Close":"Fermer","Code injection":"Injection de code","Codec":"Codec","Color":"Couleur","Config":"Config","Confirm password":"Conf confirmer le mot de passe","Connect":"Connectez-vous à","Connected device":"Appareil connecté","Connected since <0/>":"Connecté depuis <0/>","Connecting ...":"Connecter ...","Connecting to Restreamer Core ...":"Connexion à Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"La connexion à Restreamer Core a échoué, probablement en raison d'un contenu mixte.","Content":"Contenu","Content URL":"URL du contenu","Cores":"Cœurs","Create user":"Créer un utilisateur","Creative Commons":"Creative Commons","Custom ...":"Personnalisé...","Custom JSON config for datarhei Core.":"Configuration JSON personnalisée pour le noyau datarhei.","Custom audio device":"Dispositif audio personnalisé","Custom audio index":"Index audio personnalisé","Custom bitrate (kbit/s)":"Débit binaire personnalisé (kbit/s)","Custom code injection":"Injection de code personnalisé","Custom delay":"Délai personnalisé","Custom device":"Dispositif personnalisé","Custom format":"Format personnalisé","Custom framerate":"Taux de rafraîchissement personnalisé","Custom keyframe interval":"Intervalle d'images clés personnalisé","Custom layout":"Mise en page personnalisée","Custom sampling (Hz)":"Échantillonnage personnalisé (Hz)","Custom scale":"Échelle personnalisée","Custom size":"Taille personnalisée","Custom video device":"Dispositif vidéo personnalisé","Custom video index":"Index vidéo personnalisé","Data copied to clipboard":"Données copiées dans le presse-papiers","Death color":"Couleur de la mort","Decibels (dB)":"Décibels (dB)","Decoder":"Décodeur","Default":"Défaut","Delay":"Délai","Delay (ms)":"Délai (ms)","Delete":"Supprimer","Deleting a publication service cannot be reversed. The publication stops immediately.":"La suppression d'un service de publication ne peut pas être annulée. La publication s'arrête immédiatement.","Delivering mode":"Mode de livraison","Description":"Description","Design":"Design","Device":"Dispositif","Disconnect":"Déconnexion","Disconnect & Continue":"Déconnecter et continuer","Disconnecting ...":"Déconnexion ...","Disk":"Disque","Disk cache":"Cache disque","Disk storage":"Stockage sur disque","Do you really want to restart the application now?":"Voulez-vous vraiment redémarrer l'application maintenant ?","Do you want to delete \"{0}\"?":["Voulez-vous supprimer \"",["0"],"\" ?"],"Do you want to delete {title}?":["Voulez-vous supprimer ",["titre"]," ?"],"Do you want to disconnect \"{0}\"?":["Voulez-vous déconnecter \"",["0"],"\" ?"],"Docs":"Docs","Documentation":"Documentation","Dup. frames":"Cadres de duplication","EDIT: Player":"EDIT : Joueur","EDIT: Publication Website":"EDIT : Site de la publication","EXT-X-VERSION":"EXT-X-VERSION","Edit":"Modifier","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Modifiez les sources audio et vidéo pour le flux en direct. Ajoutez une description, et définissez la licence de votre contenu souhaité.","Edit: {title}":["Edit : ",["title"]],"Embed":"Intégrer","Enable":"Activer","Enable RTMP server ...":"Activer le serveur RTMP ...","Enable SRT server ...":"Activer le serveur SRT ...","Enable a periodic beep every second with this value times the carrier frequency":"Active un bip périodique toutes les secondes avec cette valeur multipliée par la fréquence porteuse","Enable backup stream":"Activer le flux de sauvegarde","Enable nerd statistics":"Activer les statistiques des nerds","Enable now":"Activer maintenant","Enable primary stream":"Activer le flux primaire","Enable snapshots":"Activer les instantanés","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Il est fortement conseillé d'activer l'autorisation. Sinon, n'importe qui peut accéder à cette instance.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"L'activation de l'authentification de base est fortement conseillée. Sinon, n'importe qui pourrait écrire des données sur /memfs.","Encoder":"Codeur","Encoding":"Encodage","Encryption":"Cryptage","Enter a name for the new channel.":"Saisissez un nom pour le nouveau canal.","Enter password":"Entrez le mot de passe","Enter the address of your network source:":"Saisissez l'adresse de votre source réseau :","Enter username":"Entrez le nom d'utilisateur","Entropy coder":"Codeur d'entropie","Error":"Erreur","Error while copying data to clipboard":"Erreur lors de la copie de données dans le presse-papiers","Error: {0}":["Erreur : ",["0"]],"Expands the area above the channel list (live chat).":"Agrandit la zone au-dessus de la liste des chaînes (chat en direct).","Expands the area under the channel description (comment boxes).":"Agrandit la zone située sous la description du canal (cases de commentaires).","Expert mode":"Mode expert","Extend channel list":"Étendre la liste des canaux","Extend content":"Étendre le contenu","Extend footer":"Étendre le pied de page","Extend header":"Prolonger l'en-tête","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Échec de la création du service de publication (",["0"],")"],"Failed to create publication website files.":"Échec de la création des fichiers du site Web de publication.","Failed to probe the source. Please check the <0>probe details.":"Impossible de sonder la source. Veuillez vérifier les <0>détails de la sonde.","Failed to refresh token: {0}":["Échec du rafraîchissement du jeton : ",["0"]],"Failed to save ingest metadata":"Échec de la sauvegarde des métadonnées d'ingestion","Failed to stop process":"Échec de l'arrêt du processus","Failed to store player size setting.":"Échec de l'enregistrement du paramètre de taille du lecteur.","Failed to store publication service ({0})":["Échec du stockage du service de publication (",["0"],")"],"Failed to update ingest process ({0})":["Échec de la mise à jour du processus d'ingestion (",["0"],")"],"Failed to update ingest snapshot process ({0})":["Échec de la mise à jour du processus d'acquisition des instantanés (",["0"],")"],"Failed to update the player":"Échec de la mise à jour du lecteur","Failed to update the playersite":"Échec de la mise à jour du site des joueurs","Failed to verify the source. Please check the address.":"Impossible de vérifier la source. Veuillez vérifier l'adresse.","Filter":"Filtre","Finish":"Finition","Flags":"Drapeaux","For Javascripts.":"Pour les Javascripts.","For Stylesheets.":"Pour les feuilles de style.","Force input framerate":"Forcer le taux de rafraîchissement de l'entrée","Format":"Format","Frame drops":"Baisse du cadre","Framebuffer":"Framebuffer","Framerate":"Fréquence d'images","Frequency (Hz)":"Fréquence (Hz)","GET":"GET","General":"Général","Google Analytics ID":"ID Google Analytics","Google Analytics Tracker Name":"Nom du tracker Google Analytics","HLS":"HLS","HLS output":"Sortie HLS","HLS server":"Serveur HLS","HLS statistic for the In-memory storage":"Statistique HLS pour le stockage en mémoire","HTTP and HTTPS":"HTTP et HTTPS","HTTP port":"Port HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Port HTTPS","Hardware device":"Dispositif matériel","Header":"En-tête","Headline":"A la une","Horizontal Flip":"Retournement horizontal","Hosted Restreamer interface":"Interface hébergée de Restreamer","Human readable name on the service.":"Nom lisible par l'homme sur le service.","IP address":"Adresse IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Si vous avez changé les ports, il se peut que Restreamer Core ait déjà redémarré, mais qu'il soit maintenant disponible sur un port différent.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Si vous avez activé Let's Encrypt TLS, l'acquisition des certificats peut prendre un certain temps. Assurez-vous que Restreamer Core est joignable via le port 80 depuis Internet. Veuillez vérifier le journal de la console de Restreamer Core.","Ignore IP ranges":"Ignorer les plages IP","Image URL":"URL de l'image","Imprint":"Impression","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"En plus du lecteur, le Restreamer offre une page d'accueil complète, que vous pouvez utiliser pour présenter votre flux en direct facilement et rapidement.","In-memory":"En mémoire","In-memory storage":"Stockage en mémoire","Incompatible":"Incompatibilité","Inherit":"Hériter de","Inject 1":"Injecter 1","Inject 2":"Injecter 2","Inject 3":"Injecter 3","Inject 4":"Injecter 4","Interval (seconds)":"Intervalle (secondes)","Issue alert":"Alerte aux problèmes","Keyframe interval (seconds)":"Intervalle entre les images clés (secondes)","Layout":"Mise en page","Let's Encrypt certification":"Certification Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt requiert un ou plusieurs noms de domaine publics et un port 80/TCP accessible.","Level":"Niveau","Level of system protocol.":"Niveau du protocole du système.","License":"Licence","Life color":"Couleur de la vie","Linecolor":"Linecolor","Link":"Lien","Link, mouseover":"Lien, survol de la souris","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Liste des plages IP en notation CIDR, par exemple, 127.0.0.1/32, que les statistiques n'enregistreront pas - une plage IP par ligne. Laissez vide pour enregistrer toutes les sessions.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Liste des extensions de fichiers à mettre en cache (par exemple, \".html\"), une par ligne. Laissez vide pour mettre en cache tous les types de fichiers.","List size (segments)":"Taille de la liste (segments)","Live-Streaming to Facebook Live RTMP service":"Diffusion en direct vers le service RTMP de Facebook Live","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Service RTMP de diffusion en direct sur Instagram Live. La clé du streaming nécessite un service tel que <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Diffusion en direct sur le service RTMP de Twitch Live.","Live-Streaming to Vimeo Live RTMP Service":"Diffusion en direct sur le service RTMP Live de Vimeos","Livesource ID":"Livesource ID","Log level":"Niveau du journal","Logging":"Enregistrement","Login":"Connexion","Login failed: Couldn't load API details":"La connexion a échoué : Impossible de charger les détails de l'API","Login failed: {0}":["La connexion a échoué : ",["0"]],"Login/JWT authorization":"Autorisation de connexion/JWT","Logo":"Logo","Logout":"Déconnexion","Loudness Normalization":"Normalisation de la sonorité","MB":"MB","Main Source":"Source principale","Main channel":"Canal principal","Main channel not found":"Canal principal non trouvé","Main channel saved":"Canal principal sauvegardé","Main page channel (index.html).":"Canal de la page principale (index.html).","Maintainer:":"Mainteneur :","Make the channel available as an RTMP stream (experimental).":"Rendre la chaîne disponible en tant que flux RTMP (expérimental).","Make the channel available as an SRT stream (experimental).":"Rendre la chaîne disponible en tant que flux SRT (expérimental).","Master playlist (increases browser/client compatibility)":"Liste de lecture principale (améliore la compatibilité avec les navigateurs et les clients)","Maximum allowed cache size, 0 for unlimited.":"Taille maximale autorisée du cache, 0 pour illimité.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Mégaoctets de RAM maximum autorisés pour /memfs, 0 pour illimité.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Maximum de mégaoctets autorisés à consommer du disque dur. 0 pour illimité.","Maximum bandwidth Mbit/s":"Bande passante maximale Mbit/s","Maximum delay in milliseconds.":"Délai maximal en millisecondes.","Maximum file size (Megabytes)":"Taille maximale du fichier (mégaoctets)","Maximum file size to put in cache.":"Taille maximale du fichier à mettre dans le cache.","Maximum log histroy":"Histroy log maximum","Maximum log lines":"Lignes de journal maximum","Maximum size (Megabytes)":"Taille maximale (mégaoctets)","Maximum viewer idle time (Seconds)":"Temps d'inactivité maximum du téléspectateur (Secondes)","Maximum viewers":"Nombre maximum de téléspectateurs","Memory":"Mémoire","Meta information":"Méta-information","Metadata":"Métadonnées","Mold":"Moisissure","More about Twitter's copyright <0>here.":"Plus d'informations sur les droits d'auteur de Twitter <0>ici.","More about YouTube's copyright <0>here.":"Plus d'informations sur les droits d'auteur de YouTube <0>ici.","More about licenses here":"Plus d'informations sur les licences ici","More about the service":"En savoir plus sur le service","Mute":"Mute","Mute a channel.":"Coupez le son d'un canal.","Mute left":"Muet à gauche","Mute right":"Muet à droite","Name":"Nom","Name for the template. If the name already exists, it will be overwritten.":"Nom du modèle. Si le nom existe déjà, il sera écrasé.","Network":"Réseau","Network source":"Source du réseau","Next":"Suivant","Next: Audio":"Suivant : Audio","Next: Video setup":"Suivant : Configuration de la vidéo","No":"Non","No audio":"Pas d'audio","No audio stream available":"Aucun flux audio disponible","No input device available":"Aucun dispositif d'entrée disponible","No live stream was detected. Please check the software that sends the stream.":"Aucun flux en direct n'a été détecté. Veuillez vérifier le logiciel qui envoie le flux.","No source selected":"Pas de source sélectionnée","No sources available":"Aucune source disponible","No suitable encoder found.":"Aucun codeur approprié n'a été trouvé.","No suitable filter found.":"Aucun filtre approprié n'a été trouvé.","No video":"Pas de vidéo","No video stream available":"Aucun flux vidéo disponible","Node ID":"ID du nœud","Noise":"Bruit","None":"Aucun","Notes":"Notes","Number of log lines to keep.":"Nombre de lignes de journal à conserver.","Number of logs to keep for each process.":"Nombre de journaux à conserver pour chaque processus.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Un référent par ligne, par exemple http://www.example.com.","Open":"Ouvrir","Pan":"Pan","Passphrase":"Phrase de passe","Passphrase for SRT encryption.":"Phrase de passe pour le cryptage SRT.","Passphrase must be between 10 and 79 characters long":"La phrase de passe doit comporter entre 10 et 79 caractères.","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Le Passthrough (copie) ne doit être désactivé que si nécessaire. Chaque encodage nécessite des ressources CPU/GPU supplémentaires.","Password":"Mot de passe","Password for authorization.":"Mot de passe pour l'autorisation.","Password for the device.":"Mot de passe pour l'appareil.","Persist viewer statistics":"Persistance des statistiques des téléspectateurs","Pixel format":"Format des pixels","Plan: <0>Starter":"Plan : <0>Démarreur","Platforms":"Plateformes","Playback":"Lecture","Player":"Joueur","Player URL":"URL du joueur","Player settings saved":"Sauvegarde des paramètres du lecteur","Playersite":"Site des joueurs","Playlist":"Liste de lecture","Playlist version (M3U8). Version 3 has the best browser/client compatibility.":"Version de la liste de lecture (M3U8). La version 3 a la meilleure compatibilité navigateur/client.","Please check the <0>process log":"Veuillez vérifier le <0>Journal du processus.","Please contact the operator of the service and check what happens.":"Veuillez contacter l'opérateur du service et vérifier ce qui se passe.","Please get in touch with the operator of the service and check what happens.":"Veuillez prendre contact avec l'opérateur du service et vérifier ce qui se passe.","Please select a file to upload.":"Veuillez sélectionner un fichier à télécharger.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Veuillez utiliser \"Passthrough (copie)\" si possible. L'encodage nécessite des ressources CPU/GPU supplémentaires.","Please wait. Probe stream data ...":"Veuillez patienter. Données du flux de sondes ...","Please wait. Setting up the stream ...":"Veuillez patienter. Configuration du flux ...","Port":"Port","Position":"Position","Preset":"Préréglage","Primary stream":"Flux primaire","Primary stream key":"Clé de flux primaire","Probe":"Sonde","Process":"Processus","Process control":"Contrôle du processus","Process debug report":"Rapport de débogage du processus","Process details":"Détails du processus","Process report":"Rapport de processus","Processing & Control":"Traitement et contrôle","Profile":"Profil","Protocol":"Protocole","Protocols":"Protocoles","Public domain/s":"Domaine public/s","Publication service not found":"Service de publication non trouvé","Publication website settings saved":"Sauvegarde des paramètres du site Web de la publication","Publications":"Publications","Pull Mode":"Mode de traction","Pull or recieve the data:":"Tirer ou recevoir les données :","Quality":"Qualité","RGB test pattern":"Mire de test RVB","RTMP":"RTMP","RTMP Port":"Port RTMP","RTMP app for publishing.":"Application RTMP pour la publication.","RTMP output":"Sortie RTMP","RTMP server":"Serveur RTMP","RTMP server is not enabled":"Le serveur RTMP n'est pas activé","RTMP server listen address.":"Adresse d'écoute du serveur RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Jeton RTMP pour la publication et la lecture. Le jeton est la valeur du paramètre de requête de l'URL \"token\".","RTMPS Port":"Port RTMPS","RTMPS server":"Serveur RTMPS","RTMPS server listen address.":"Adresse d'écoute du serveur RTMPS.","RTSP":"RTSP","Raspberry Pi camera":"Caméra Raspberry Pi","Rate control":"Contrôle du taux","Ratio":"Ratio","Read input at native speed":"Lecture de l'entrée à la vitesse native","Receive Mode":"Mode de réception","Reconnect":"Reconnecter","Reconnect delay (seconds)":"Délai de reconnexion (secondes)","Reconnecting in {0}s":["Reconnexion en ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["La reconnexion au Restreamer Core a échoué au cours des ",["RETRIES"]," dernières secondes."],"Reconnecting to Restreamer Core failed.":"La reconnexion à Restreamer Core a échoué.","Refresh":"Rafraîchir","Region":"Région","Reload":"Rechargez","Remove the oldest entries if the /memfs is full":"Supprimer les entrées les plus anciennes si le /memfs est plein","Requires activation":"Nécessite une activation","Restart":"Redémarrer","Restart required":"Redémarrage nécessaire","Restarting":"Redémarrage de","Restarting Restreamer Core ...":"Redémarrage de Restreamer Core ...","Restarting the application failed.":"Le redémarrage de l'application a échoué.","Restreamer Service":"Service Restreamer","Retrieving stream data ...":"Récupération des données de flux ...","Retry":"Réessayer","Rotate":"Rotation","Rule":"Règle","SRT":"SRT","SRT output":"Sortie SRT","SRT server":"Serveur SRT","SRT server is not enabled":"Le serveur SRT n'est pas activé","SRT server listen address.":"Adresse d'écoute du serveur SRT.","SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'":"Jeton SRT pour la publication et la lecture. Le jeton est la valeur du paramètre streamid \"token\".","Sampling":"Échantillonnage","Save":"Sauvez","Scale":"Échelle","Seconds to keep files in cache.":"Secondes pour garder les fichiers dans le cache.","Seconds until a process is restarted.":"Secondes jusqu'à ce qu'un processus soit redémarré.","Seconds until a staled process is terminated.":"Secondes jusqu'à ce qu'un processus bloqué soit terminé.","Seconds until the snapshot/thumbnail of the video source is updated.":"Secondes jusqu'à ce que l'instantané/la vignette de la source vidéo soit mis à jour.","Security":"Sécurité","Security passphrase":"Phrase de sécurité","Security token":"Jeton de sécurité","Seekbar color":"Couleur du Seekbar","Segment length (seconds)":"Longueur du segment (secondes)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Une fois ce délai écoulé, le segment sera coupé sur l'image clé suivante. Une valeur de 2 est recommandée.","Segmentation":"Segmentation","Select RTMP or SRT (if enabled) for less latency.":"Sélectionnez RTMP ou SRT (si activé) pour une latence moindre.","Select a device:":"Sélectionnez un appareil :","Select audio source:":"Sélectionnez la source audio :","Select source ...":"Sélectionnez la source ...","Select video source:":"Sélectionnez la source vidéo :","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Choisissez si vous tirez le flux d'une <0>source réseau (comme une caméra réseau) ou du <1>serveur RTMP interne (par exemple, les flux OBS vers le Restreamer).","Select your encoding setting:":"Sélectionnez votre paramètre de codage :","Select your filter settings (optional):":"Sélectionnez les paramètres de votre filtre (facultatif) :","Selected":"Sélectionné","Selected channel":"Canal sélectionné","Selection":"Sélection","Send anonymous metrics (helps us for future development)":"Envoyez des métriques anonymes (nous aide pour le développement futur)","Send stream to this address:":"Envoyez le flux à cette adresse :","Send video to Framebuffer":"Envoyer la vidéo au Framebuffer","Server":"Serveur","Server URL":"URL du serveur","Service":"Service","Service name":"Nom du service","Service token for monitoring.":"Jeton de service pour la surveillance.","Sessions":"Sessions","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Définit une limite de bande passante en Mbit par seconde pour le transfert des données HLS sortantes. Tous les services, tels que RTMP et les processus sortants, sont inclus dans le calcul. Si la bande passante est dépassée, les spectateurs HLS reçoivent le code d'état HTTP 509 (Bandwidth Limit Exceeded). 0 est illimité.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Définit une limite de visualisation pour les sessions HLS. Si la limite est dépassée, les spectateurs HLS reçoivent le code d'état HTTP 509 (limite de bande passante dépassée). La valeur 0 est illimitée.","Setting for connection to the service.":"Paramètre pour la connexion au service.","Settings":"Paramètres","Settings (expert mode)":"Paramètres (mode expert)","Settings for /data path. The access is protected by":"Paramètres pour le chemin /data. L'accès est protégé par","Settings for /memfs path.":"Paramètres pour le chemin /memfs.","Settings saved. All changes will be applied after restarting the application.":"Les paramètres sont enregistrés. Toutes les modifications seront appliquées après le redémarrage de l'application.","Share button":"Bouton partager","Shows a reference to the project.":"Affiche une référence au projet.","Sign up (free)":"S'inscrire (gratuit)","Silence":"Silence","Silence Audio":"Silence Audio","Sine":"Sine","Sitename":"Nom de site","Size":"Taille","Snapshot":"Instantané","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Délai d'attente pour les sockets (microsecondes)","Software":"Logiciel","Source":"Source :","Source & Encoding":"Source et encodage","Speed":"Vitesse","Stale timeout (seconds)":"Délai d'expiration (secondes)","Statistics":"Statistiques","Storage":"Stockage","Stores the viewer statistics to the disk.":"Stocke les statistiques du visualiseur sur le disque.","Stream":"Stream","Stream URL":"URL du flux","Stream key":"Clé de flux","Stream name":"Nom du cours d'eau","Stream names":"Noms des cours d'eau","Stream source for publication service (experimental).":"Source de flux pour le service de publication (expérimental).","Support datarhei Restreamer":"Support datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Prend en charge HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT et plus encore.","System":"Système","Template":"Modèle","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Modèle à utiliser pour créer le site Web de la publication. Le bouton de suppression supprime la sélection du système.","Terms":"Conditions","Test pattern":"Modèle de test","Test pattern (extended)":"Mire (étendue)","Text colors":"Couleurs du texte","The RTMP output requires the RTMP Server.":"La sortie RTMP nécessite le serveur RTMP.","The SRT output requires the SRT Server.":"La sortie SRT nécessite le serveur SRT.","The amplitude (0.0 - 1.0) of the generated audio stream":"L'amplitude (0,0 - 1,0) du flux audio généré","The application is using an older version of the settings.":"L'application utilise une ancienne version des paramètres.","The available FFmpeg binary doesn't support any of the required protocols.":"Le binaire FFmpeg disponible ne supporte aucun des protocoles requis.","The bitrate of the audio stream.":"Le débit binaire du flux audio.","The carrier frequency":"La fréquence porteuse","The channel \"{0}\" could not be deleted":["Le canal \"",["0"],"\" n'a pas pu être supprimé"],"The channel \"{0}\" has been deleted":["Le canal \"",["0"],"\" a été supprimé"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"La suppression de ce canal ne peut pas être récupérée. Toutes les publications de ce canal seront supprimées.","The input profile is not complete. Please define a video and audio source.":"Le profil d'entrée n'est pas complet. Veuillez définir une source vidéo et audio.","The layout of the audio stream.":"La mise en page du flux audio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Le nombre maximum de segments de la liste de lecture. 0 contiendra tous les segments. 6 est recommandé.","The noise color":"La couleur du bruit","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"La personne qui a associé une œuvre à cet acte a dédié l'œuvre au domaine public en renonçant à tous ses droits sur l'œuvre dans le monde entier en vertu de la loi sur le droit d'auteur, y compris tous les droits connexes et voisins, dans la mesure autorisée par la loi. Vous pouvez copier, modifier, distribuer et exécuter l'œuvre, même à des fins commerciales, le tout sans demander la permission.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Le nom de domaine public joignable de l'hôte sur lequel ce Restreamer est exécuté. Séparez les noms de domaine multiples par une virgule.","The publication service \"{0}\" could not be deleted":["Le service de publication \"",["0"],"\" n'a pas pu être supprimé."],"The publication service \"{0}\" has been created":["Le service de publication \"",["0"],"\" a été créé."],"The publication service \"{0}\" has been deleted":["Le service de publication \"",["0"],"\" a été supprimé."],"The publication service has been created":"Le service de publication a été créé","The sample rate of the audio stream.":"La fréquence d'échantillonnage du flux audio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Le fichier sélectionné est trop gros (",["0"]," octets). Seuls les ",["1"]," octets sont autorisés."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Le type de fichier sélectionné (",["0"],") n'est pas autorisé. Les types de fichiers autorisés sont ",["types"]],"The settings for \"{0}\" have been saved":["Les paramètres de \"",["0"],"\" ont été sauvegardés."],"The source doesn't provide any audio streams.":"La source ne fournit pas de flux audio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"La source ne fournit pas de flux audio. Veuillez vérifier les <0>détails de la sonde.","The source doesn't provide any compatible audio streams.":"La source ne fournit pas de flux audio compatible.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"La source ne fournit pas de flux vidéo compatible. Veuillez vérifier les <0>exigences.","The source doesn't provide any video streams. Please check the <0>probe details.":"La source ne fournit pas de flux vidéo. Veuillez vérifier les <0>détails de la sonde.","The source doesn't provide any video streams. Please check the device.":"La source ne fournit pas de flux vidéo. Veuillez vérifier l'appareil.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"La source vidéo ne fournit pas de flux audio compatible. <0>Silence audio est recommandé. Les services tels que YouTube, Facebook & Co. nécessitent un canal audio.","The video source is compatible. Select the desired resolution:":"La source vidéo est compatible. Sélectionnez la résolution souhaitée :","There are updates available. Here you get more information.":"Il y a des mises à jour disponibles. Ici vous obtenez plus d'informations.","There was a problem storing the settings. Settings not saved.":"Il y a eu un problème pour enregistrer les paramètres. Paramètres non sauvegardés.","There was an error connecting to Restreamer Core at {0}.":["Il y a eu une erreur de connexion à Restreamer Core à ",["0"],"."],"There was an error during upload: {0}":["Il y a eu une erreur pendant le téléchargement : ",["0"]],"There was an error setting up the stream.":"Il y a eu une erreur dans la configuration du flux.","There were some errors in the settings. Settings not saved.":"Il y avait des erreurs dans les paramètres. Les paramètres n'ont pas été sauvegardés.","There's no login method available.":"Il n'y a pas de méthode de connexion disponible.","This is a dummy service that explains to you the concepts of service.":"Il s'agit d'un service factice qui vous explique les concepts du service.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Il ne s'agit pas nécessairement d'une erreur. Cependant, le redémarrage de Restreamer Core peut prendre un peu plus de temps...","This is to mention the copyright regulations for the target of this service.":"Il s'agit de mentionner les règles de copyright pour la cible de ce service.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Cette licence permet aux réutilisateurs de copier et de distribuer le matériel sur n'importe quel support ou dans n'importe quel format, sous une forme non adaptée uniquement, et à condition que le créateur soit mentionné. La licence autorise l'utilisation commerciale.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Cette licence permet aux réutilisateurs de copier et de distribuer le matériel sur n'importe quel support ou dans n'importe quel format, sous une forme non adaptée uniquement, à des fins non commerciales et à condition que le créateur soit mentionné.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou dans n'importe quel format à des fins non commerciales uniquement, et à condition que le créateur soit mentionné.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou dans n'importe quel format à des fins non commerciales uniquement, et à condition que le créateur soit mentionné. Si vous remixez, adaptez ou développez le matériel, vous devez accorder une licence au matériel modifié selon des conditions identiques.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou format, à condition que le créateur soit mentionné. La licence autorise l'utilisation commerciale.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou format, à condition que le créateur soit mentionné. La licence autorise l'utilisation commerciale. Si vous remixez, adaptez ou développez le matériel, vous devez accorder une licence au matériel modifié selon des conditions identiques.","This protocol is unknown or not supported by the available FFmpeg binary.":"Ce protocole est inconnu ou n'est pas supporté par le binaire FFmpeg disponible.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Cette source ne peut pas être éditée lorsqu'elle est en cours d'utilisation. Pour continuer, vous devez déconnecter la source.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Cette version de l'interface utilisateur ne prend pas en charge le binaire FFmpeg disponible (",["0"],"). L'interface utilisateur requiert ",["1"],". Veuillez utiliser un binaire FFmpeg supporté."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Cette version de l'IU ne prend pas en charge le Core connecté (",["0"],"). L'IU requiert ",["1"],". Veuillez utiliser une version compatible de l'IU."],"This version of the UI is compatible.":"Cette version de l'interface utilisateur est compatible.","Time until an inactive viewer connection is treated as closed.":"Temps jusqu'à ce qu'une connexion de téléspectateur inactive soit traitée comme fermée.","Token":"Token","Transmit a Livestream to a Telegram Channel.":"Transmettre un Livestream à une chaîne Telegram.","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmettre des instantanés de la source principale à un serveur HTTP/S. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Transmet le canal audio de la source principale à un serveur Icecast. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmettre la source principale en tant que HTTP-Live-Streaming (HLS) à un serveur HTTP/S. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmettre la source principale en MPEG-DASH à un serveur HTTP/S. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Transmettre la source principale à un service Live de Brightcove. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Transmettre la source principale à un service CDN77 RTMP. Plus d'informations sur la configuration <0>ici.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Transmettre la source principale à un service DaCast RTMP. Plus d'informations sur la configuration <0>ici.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Transmettre la source principale à un service MPEG-TS. Vous trouverez plus de détails sur les réglages ici <0>ici.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur RTMP(e|s|t|te|ts). Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur RTSP. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur Red5/Pro. Vous trouverez plus de détails sur les réglages <0>ici.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur SRT. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur UDP. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Transmettre la source principale à un serveur WOWZA. Vous trouverez plus de détails sur les réglages <0>ici.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Transmettre la source principale à un datarhei Core Ressource. Plus de détails sur les paramètres peuvent être trouvés <0>ici.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Transmettre la source principale à une Ressource livespotting.com. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Transmettre la source principale à l'Akamai (MSL) Media Services Live. Vous trouverez plus de détails sur les paramètres de l'encodeur MSL sur <0>ici.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Transmettez la source principale au service d'encodage en nuage Bitmovin, un outil puissant pour le streaming en direct. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Transmettre la source principale au service RTMP de Restream. Vous trouverez plus de détails sur les paramètres <0>ici.","Transmit to a Azure Media Services. More details can be found <0>here.":"Transmettre à un service de médias Azure. Plus de détails peuvent être trouvés <0>ici.","Transmit to linkedIn. More details can be found <0>here.":"Transmettre à linkedIn. Plus de détails peuvent être trouvés <0>ici.","Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.":"Transmettez votre livestream à un serveur Owncast. <0>Vous trouverez ici plus de détails sur les paramètres.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Transmet votre vidéo sous forme de flux RTMP avec la clé requise générée dans YouTube Studio. Vous pouvez trouver plus d'informations sur la configuration d'un flux en direct sur le site de la <0>Creator Academy de YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Transmet votre flux vidéo avec la clé requise, qui a été générée dans Twitter Producer. Vous trouverez plus d'informations sur la configuration d'un flux en direct sur le site <0>Producteur de Twitter.","Tune":"Tune","UDP transport":"Transport UDP","Unable to load the config.":"Impossible de charger la configuration.","Unique ident on the service.":"Identifiant unique sur le service.","Unknown":"Inconnu","Unselected":"Non sélectionné","Upload":"Télécharger","Uploading the file failed":"Le téléchargement du fichier a échoué","Uploading the logo failed":"Le téléchargement du logo a échoué","Uptime":"Temps de fonctionnement","Use Auth0 for your running Restreamer Core. More <0>details.":"Utilisez Auth0 pour votre noyau Restreamer en cours d'exécution. Plus de <0>détails.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Utilisez l'assistant (<0/>) pour une configuration rapide et facile, ou éditez (<1/>) les sources directement en mode personnalisé.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilisez vos droits d'auteur et choisissez la bonne licence d'image. Qu'elle soit libre pour tous ou fortement restreinte. Discutez brièvement de ce que les autres sont autorisés à faire avec votre image.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilisez vos droits d'auteur et choisissez la bonne licence d'image. Qu'il s'agisse d'une licence gratuite pour tous ou d'une licence très restreinte. Discutez brièvement de ce que les autres sont autorisés à faire avec votre image.","User registration":"Enregistrement de l'utilisateur","Username":"Nom d'utilisateur :","Username for authorization.":"Nom d'utilisateur pour l'autorisation.","Username for the device.":"Nom d'utilisateur pour l'appareil.","VPU ID":"ID VPU","Vertical Flip":"Flip vertical","Video":"Vidéo","Video device":"Appareil vidéo","Video settings":"Paramètres vidéo","Video setup":"Configuration vidéo","Video source":"Source vidéo","Viewer":"Spectateurs","Virtual source":"Source virtuelle","Volume":"Volume","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Bienvenue à Restreamer v2, la solution pour la publication rapide et facile de vidéos. Gratuit pour une utilisation privée et commerciale. Plus d'aide dans les <0>docs.","Where to store the HLS playlist and segments. In-Memory is recommended.":"Où stocker la liste de lecture et les segments HLS. Le stockage en mémoire est recommandé.","Write protection":"Protection de l'écriture","YUV test pattern":"Mire de test YUV","Yes":"Oui","You can't abort the wizard because at least one input must be defined.":"Vous ne pouvez pas interrompre l'assistant car au moins une entrée doit être définie.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Vous avez modifié la configuration. Pour que les changements prennent effet, vous devez redémarrer l'application. Voulez-vous redémarrer maintenant ?","You have to reconnect manually":"Vous devez vous reconnecter manuellement","You have unsaved changes. Please save them before you can control the service again.":"Vous avez des modifications non sauvegardées. Veuillez les sauvegarder avant de pouvoir contrôler à nouveau le service.","Your stream needs to be encoded, but there's no suitable encoder available.":"Votre flux doit être encodé, mais aucun encodeur approprié n'est disponible.","Your stream needs to be encoded. Choose the desired encoder:":"Votre flux doit être encodé. Choisissez l'encodeur souhaité :","blue":"bleu","brown":"brun","iframe code":"code iframe","kbit/s":"kbit/s","pink":"rose","velvet":"velours","violet":"violet","white":"blanc"}}; \ No newline at end of file diff --git a/src/locales/fr/messages.po b/src/locales/fr/messages.po index 555393c..13e0ca0 100644 --- a/src/locales/fr/messages.po +++ b/src/locales/fr/messages.po @@ -13,12 +13,20 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: src/misc/controls/HLS.js:81 +msgid "6 (+ guaranteed to start with a Key frame)" +msgstr "6 (+ garantie de commencer par un Key frame)" + +#: src/misc/controls/HLS.js:84 +msgid "7 (+ fragmented MP4 format)" +msgstr "7 (+ format MP4 fragmenté)" + #: src/misc/EncodingSelect.js:224 msgid "<0>Compatibility list" msgstr "<0>Liste des compatibilités" -#: src/views/Edit/Profile.js:380 -#: src/views/Edit/Profile.js:510 +#: src/views/Edit/Profile.js:393 +#: src/views/Edit/Profile.js:543 msgid "<0>Show probe details" msgstr "<0>Montrer les détails de la sonde." @@ -26,7 +34,7 @@ msgstr "<0>Montrer les détails de la sonde." msgid "ALSA" msgstr "ALSA" -#: src/views/Settings.js:907 +#: src/views/Settings.js:974 msgid "API endpoint not found. Settings not saved." msgstr "Le point de terminaison de l'API n'a pas été trouvé. Paramètres non sauvegardés." @@ -35,16 +43,16 @@ msgid "AVFoundation" msgstr "AVFoundation" #: src/misc/ChannelList.js:356 -#: src/views/Edit/Profile.js:410 -#: src/views/Edit/Wizard/index.js:1153 -#: src/views/Edit/index.js:549 -#: src/views/Edit/index.js:575 -#: src/views/Edit/index.js:594 -#: src/views/Publication/Add.js:362 -#: src/views/Publication/Edit.js:601 -#: src/views/Settings.js:1972 -#: src/views/Settings.js:2031 -#: src/views/Settings.js:2053 +#: src/views/Edit/Profile.js:433 +#: src/views/Edit/Wizard/index.js:1168 +#: src/views/Edit/index.js:603 +#: src/views/Edit/index.js:629 +#: src/views/Edit/index.js:648 +#: src/views/Publication/Add.js:364 +#: src/views/Publication/Edit.js:563 +#: src/views/Settings.js:2123 +#: src/views/Settings.js:2182 +#: src/views/Settings.js:2204 msgid "Abort" msgstr "Abandonner" @@ -57,11 +65,11 @@ msgstr "À propos de" msgid "Add" msgstr "Ajouter" -#: src/views/Publication/Add.js:321 +#: src/views/Publication/Add.js:323 msgid "Add Publication" msgstr "Ajouter une publication" -#: src/views/Playersite.js:692 +#: src/views/Playersite.js:708 msgid "Add external widgets and styles to the publication site. You can find some examples on the help page." msgstr "Ajoutez des widgets et des styles externes au site de publication. Vous pouvez trouver quelques exemples sur la page d'aide." @@ -69,18 +77,20 @@ msgstr "Ajoutez des widgets et des styles externes au site de publication. Vous msgid "Add new channel" msgstr "Ajouter un nouveau canal" -#: src/views/Publication/Add.js:324 +#: src/views/Publication/Add.js:326 msgid "Add: {0}" msgstr "Ajouter : {0}" -#: src/views/Edit/Sources/Network.js:355 +#: src/views/Edit/Sources/Network.js:421 #: src/views/Edit/Wizard/Sources/Network.js:66 +#: src/views/Publication/Services/Azure.js:98 #: src/views/Publication/Services/Brightcove.js:95 -#: src/views/Publication/Services/Core.js:100 +#: src/views/Publication/Services/Core.js:116 #: src/views/Publication/Services/DASH.js:192 #: src/views/Publication/Services/HLS.js:181 #: src/views/Publication/Services/Icecast.js:160 #: src/views/Publication/Services/Image2.js:126 +#: src/views/Publication/Services/Linkedin.js:93 #: src/views/Publication/Services/MPEGTS.js:160 #: src/views/Publication/Services/RTMP.js:132 #: src/views/Publication/Services/RTSP.js:150 @@ -88,23 +98,23 @@ msgstr "Ajouter : {0}" #: src/views/Publication/Services/SRT.js:161 #: src/views/Publication/Services/UDP.js:127 #: src/views/Publication/Services/WOWZA.js:132 -#: src/views/Settings.js:1302 +#: src/views/Settings.js:1370 msgid "Address" msgstr "Adresse" -#: src/views/Playersite.js:629 +#: src/views/Playersite.js:645 msgid "Address for the background image." msgstr "Adresse pour l'image de fond." -#: src/views/Settings.js:1331 +#: src/views/Settings.js:1399 msgid "Address to listen on for HTTP requests." msgstr "Adresse d'écoute pour les demandes HTTP." -#: src/views/Settings.js:1344 +#: src/views/Settings.js:1412 msgid "Address to listen on for HTTPS requests." msgstr "Adresse à écouter pour les demandes HTTPS." -#: src/views/Playersite.js:514 +#: src/views/Playersite.js:530 msgid "Adjust publication site colors and background as you like." msgstr "Ajustez les couleurs et le fond du site de publication comme vous le souhaitez." @@ -112,7 +122,7 @@ msgstr "Ajustez les couleurs et le fond du site de publication comme vous le sou msgid "Advanced monitoring" msgstr "Surveillance avancée" -#: src/views/Edit/Sources/Network.js:396 +#: src/views/Edit/Sources/Network.js:474 #: src/views/Publication/Services/DASH.js:204 #: src/views/Publication/Services/HLS.js:193 #: src/views/Publication/Services/Icecast.js:170 @@ -125,27 +135,32 @@ msgstr "Surveillance avancée" msgid "Advanced settings" msgstr "Paramètres avancés" -#: src/views/Edit/Wizard/index.js:287 +#: src/views/Edit/Wizard/index.js:302 msgid "Advanced setup" msgstr "Configuration avancée" +#: src/views/Playersite.js:433 +#: src/views/Publication/Player.js:443 +msgid "AirPlay" +msgstr "AirPlay" + #: src/views/Login.js:325 msgid "Alerting by email" msgstr "Alerte par e-mail" -#: src/views/Publication/Add.js:344 +#: src/views/Publication/Add.js:346 msgid "All" msgstr "Tous" -#: src/views/Settings.js:1163 +#: src/views/Settings.js:1231 msgid "All important system settings." msgstr "Tous les paramètres importants du système." -#: src/views/Settings.js:1478 +#: src/views/Settings.js:1548 msgid "Allow all referrer" msgstr "Autoriser tous les référents" -#: src/views/Settings.js:1518 +#: src/views/Settings.js:1588 msgid "Allow counting how many viewers the stream has." msgstr "Permet de compter le nombre de spectateurs du flux." @@ -157,8 +172,8 @@ msgstr "Amplitude" msgid "An environment variable sets this value." msgstr "Une variable d'environnement définit cette valeur." -#: src/views/Publication/Services/Core.js:107 -#: src/views/Settings.js:1816 +#: src/views/Publication/Services/Core.js:124 +#: src/views/Settings.js:1897 msgid "App" msgstr "App" @@ -168,11 +183,11 @@ msgstr "App" msgid "Application" msgstr "Application" -#: src/views/Edit/Wizard/index.js:1172 +#: src/views/Edit/Wizard/index.js:1187 msgid "Are you sure you want to abort the wizard?" msgstr "Êtes-vous sûr de vouloir interrompre l'assistant ?" -#: src/views/Publication/Add.js:492 +#: src/views/Publication/Add.js:467 msgid "Audio" msgstr "Audio" @@ -185,18 +200,18 @@ msgstr "Dispositif audio" msgid "Audio device" msgstr "Dispositif audio" -#: src/views/Edit/Wizard/index.js:875 -#: src/views/Edit/Wizard/index.js:887 +#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:902 msgid "Audio from device" msgstr "Audio de l'appareil" -#: src/views/Edit/Profile.js:425 +#: src/views/Edit/Profile.js:448 #: src/views/Edit/ProfileSummary.js:90 -#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Edit.js:506 msgid "Audio settings" msgstr "Paramètres audio" -#: src/views/Edit/Wizard/index.js:828 +#: src/views/Edit/Wizard/index.js:843 msgid "Audio setup" msgstr "Configuration audio" @@ -216,39 +231,39 @@ msgstr "Auth0 n'est actuellement pas disponible car cette interface est chargée msgid "Author" msgstr "Auteur" -#: src/views/Settings.js:1143 -#: src/views/Settings.js:1415 +#: src/views/Settings.js:1210 +#: src/views/Settings.js:1483 msgid "Authorization" msgstr "Autorisation" -#: src/misc/controls/HLS.js:83 +#: src/misc/controls/HLS.js:123 msgid "Automatic cleanup of all media data" msgstr "Nettoyage automatique de toutes les données des médias" -#: src/views/Publication/Player.js:437 +#: src/views/Publication/Player.js:440 msgid "Autoplay" msgstr "Jeu automatique" -#: src/views/Playersite.js:445 +#: src/views/Playersite.js:461 msgid "Available" msgstr "Disponible sur" -#: src/views/Edit/Profile.js:541 -#: src/views/Edit/Wizard/index.js:408 -#: src/views/Edit/Wizard/index.js:647 -#: src/views/Edit/Wizard/index.js:912 -#: src/views/Edit/Wizard/index.js:1024 -#: src/views/Edit/Wizard/index.js:1082 -#: src/views/Edit/Wizard/index.js:1164 -#: src/views/Publication/Add.js:528 +#: src/views/Edit/Profile.js:584 +#: src/views/Edit/Wizard/index.js:423 +#: src/views/Edit/Wizard/index.js:662 +#: src/views/Edit/Wizard/index.js:927 +#: src/views/Edit/Wizard/index.js:1039 +#: src/views/Edit/Wizard/index.js:1097 +#: src/views/Edit/Wizard/index.js:1179 +#: src/views/Publication/Add.js:492 msgid "Back" -msgstr "Dos" +msgstr "Retour" -#: src/views/Playersite.js:563 +#: src/views/Playersite.js:579 msgid "Background colors" msgstr "Couleurs d'arrière-plan" -#: src/views/Playersite.js:616 +#: src/views/Playersite.js:632 msgid "Background image" msgstr "Image de fond" @@ -273,7 +288,7 @@ msgstr "Clé du flux de sauvegarde" msgid "Bandwidth" msgstr "Bande passante" -#: src/views/Settings.js:1373 +#: src/views/Settings.js:1441 msgid "Bandwidth control" msgstr "Contrôle de la bande passante" @@ -282,7 +297,7 @@ msgid "Banner" msgstr "Bannière" #: src/views/Login.js:241 -#: src/views/Settings.js:1420 +#: src/views/Settings.js:1488 msgid "Basic" msgstr "Base" @@ -295,24 +310,24 @@ msgstr "Facteur Bip" msgid "Bitrate" msgstr "Bitrate" -#: src/views/Edit/Wizard/index.js:1013 -#: src/views/Edit/index.js:510 +#: src/views/Edit/Wizard/index.js:1028 +#: src/views/Edit/index.js:564 msgid "Briefly describe what the audience will see during the live stream." msgstr "Décrivez brièvement ce que le public verra pendant le streaming en direct." -#: src/views/Publication/Player.js:352 +#: src/views/Publication/Player.js:355 msgid "Button color" msgstr "Couleur du bouton" -#: src/views/Settings.js:1687 +#: src/views/Settings.js:1757 msgid "Cache for files on /data." msgstr "Cache pour les fichiers sur /data." -#: src/views/Settings.js:1715 +#: src/views/Settings.js:1785 msgid "Cache time (Seconds)" msgstr "Temps de cache (Secondes)" -#: src/views/Settings.js:1743 +#: src/views/Settings.js:1813 msgid "Cache types" msgstr "Types de caches" @@ -324,7 +339,7 @@ msgstr "Capture des clics" msgid "Capture cursor" msgstr "Curseur de capture" -#: src/views/Edit/index.js:327 +#: src/views/Edit/index.js:339 msgid "Channel \"{0}\" saved" msgstr "Canal \"{0}\" sauvegardé" @@ -332,11 +347,11 @@ msgstr "Canal \"{0}\" sauvegardé" msgid "Channels" msgstr "Chaînes" -#: src/views/Settings.js:1172 +#: src/views/Settings.js:1240 msgid "Check for updates" msgstr "Vérifier les mises à jour" -#: src/views/Publication/Add.js:272 +#: src/views/Publication/Add.js:276 msgid "Check the requirements" msgstr "Vérifiez les exigences" @@ -350,8 +365,8 @@ msgstr "Choisissez un flux audio" #: src/views/Edit/Sources/ALSA.js:96 #: src/views/Edit/Sources/Framebuffer.js:80 -#: src/views/Edit/Sources/Raspicam.js:84 -#: src/views/Edit/Sources/V4L.js:90 +#: src/views/Edit/Sources/Raspicam.js:87 +#: src/views/Edit/Sources/V4L.js:93 msgid "Choose an input device ..." msgstr "Choisissez un périphérique d'entrée ..." @@ -363,16 +378,21 @@ msgstr "Choisissez le codec ..." msgid "Choose tenant ..." msgstr "Choisir le locataire ..." +#: src/views/Playersite.js:425 +#: src/views/Publication/Player.js:442 +msgid "Chromecast" +msgstr "Chromecast" + #: src/views/Publication/Services/DASH.js:309 #: src/views/Publication/Services/HLS.js:249 msgid "Chunk" msgstr "Chunk" #: src/misc/ModalContent.js:77 -#: src/views/Playersite.js:782 -#: src/views/Publication/Add.js:525 -#: src/views/Publication/Edit.js:565 -#: src/views/Publication/Player.js:447 +#: src/views/Playersite.js:798 +#: src/views/Publication/Add.js:489 +#: src/views/Publication/Edit.js:527 +#: src/views/Publication/Player.js:452 msgid "Close" msgstr "Fermer" @@ -385,11 +405,11 @@ msgid "Codec" msgstr "Codec" #: src/views/Edit/Sources/VirtualAudio.js:110 -#: src/views/Publication/Player.js:320 +#: src/views/Publication/Player.js:323 msgid "Color" msgstr "Couleur" -#: src/views/Settings.js:1282 +#: src/views/Settings.js:1350 msgid "Config" msgstr "Config" @@ -410,7 +430,7 @@ msgid "Connected since <0/>" msgstr "Connecté depuis <0/>" #: src/misc/ActionButton.js:12 -#: src/views/Main/index.js:305 +#: src/views/Main/index.js:334 #: src/views/Publication/Process.js:40 msgid "Connecting ..." msgstr "Connecter ..." @@ -424,14 +444,14 @@ msgid "Connecting to Restreamer Core failed probably because of mixed content." msgstr "La connexion à Restreamer Core a échoué, probablement en raison d'un contenu mixte." #: src/misc/controls/Metadata.js:70 -#: src/views/Playersite.js:659 -#: src/views/Playersite.js:676 +#: src/views/Playersite.js:675 +#: src/views/Playersite.js:692 msgid "Content" msgstr "Contenu" -#: src/views/Main/index.js:365 +#: src/views/Main/index.js:394 msgid "Content URL" -msgstr "" +msgstr "URL du contenu" #: src/Footer.js:193 msgid "Cores" @@ -445,7 +465,7 @@ msgstr "Créer un utilisateur" msgid "Creative Commons" msgstr "Creative Commons" -#: src/misc/coders/Encoders/audio/Opus.js:59 +#: src/misc/coders/Encoders/audio/Opus.js:61 #: src/misc/coders/settings/Audio.js:25 #: src/misc/coders/settings/Audio.js:71 #: src/misc/coders/settings/Audio.js:122 @@ -454,14 +474,17 @@ msgstr "Creative Commons" #: src/misc/coders/settings/Video.js:115 #: src/misc/coders/settings/Video.js:181 #: src/misc/coders/settings/Video.js:220 +#: src/misc/filters/audio/Resample.js:63 +#: src/misc/filters/audio/Resample.js:114 +#: src/misc/filters/audio/Volume.js:58 #: src/views/Edit/Sources/ALSA.js:101 #: src/views/Edit/Sources/AVFoundation.js:120 #: src/views/Edit/Sources/AVFoundation.js:153 -#: src/views/Edit/Sources/V4L.js:96 +#: src/views/Edit/Sources/V4L.js:99 msgid "Custom ..." msgstr "Personnalisé..." -#: src/views/Settings.js:1288 +#: src/views/Settings.js:1356 msgid "Custom JSON config for datarhei Core." msgstr "Configuration JSON personnalisée pour le noyau datarhei." @@ -478,11 +501,11 @@ msgstr "Index audio personnalisé" msgid "Custom bitrate (kbit/s)" msgstr "Débit binaire personnalisé (kbit/s)" -#: src/views/Playersite.js:687 +#: src/views/Playersite.js:703 msgid "Custom code injection" msgstr "Injection de code personnalisé" -#: src/misc/coders/Encoders/audio/Opus.js:85 +#: src/misc/coders/Encoders/audio/Opus.js:87 msgid "Custom delay" msgstr "Délai personnalisé" @@ -503,10 +526,12 @@ msgid "Custom keyframe interval" msgstr "Intervalle d'images clés personnalisé" #: src/misc/coders/settings/Audio.js:98 +#: src/misc/filters/audio/Resample.js:90 msgid "Custom layout" msgstr "Mise en page personnalisée" #: src/misc/coders/settings/Audio.js:149 +#: src/misc/filters/audio/Resample.js:141 msgid "Custom sampling (Hz)" msgstr "Échantillonnage personnalisé (Hz)" @@ -518,7 +543,7 @@ msgstr "Échelle personnalisée" msgid "Custom size" msgstr "Taille personnalisée" -#: src/views/Edit/Sources/V4L.js:110 +#: src/views/Edit/Sources/V4L.js:113 msgid "Custom video device" msgstr "Dispositif vidéo personnalisé" @@ -536,8 +561,12 @@ msgstr "Données copiées dans le presse-papiers" msgid "Death color" msgstr "Couleur de la mort" +#: src/misc/filters/audio/Volume.js:74 +msgid "Decibels (dB)" +msgstr "Décibels (dB)" + #: src/misc/EncodingSelect.js:210 -#: src/views/Edit/Wizard/index.js:628 +#: src/views/Edit/Wizard/index.js:643 msgid "Decoder" msgstr "Décodeur" @@ -545,13 +574,13 @@ msgstr "Décodeur" #: src/views/Edit/Sources/AVFoundation.js:149 #: src/views/Edit/Wizard/Sources/AVFoundation.js:76 #: src/views/Edit/Wizard/Sources/AVFoundation.js:105 -#: src/views/Playersite.js:451 -#: src/views/Playersite.js:526 -#: src/views/Playersite.js:570 +#: src/views/Playersite.js:467 +#: src/views/Playersite.js:542 +#: src/views/Playersite.js:586 msgid "Default" msgstr "Défaut" -#: src/misc/coders/Encoders/audio/Opus.js:84 +#: src/misc/coders/Encoders/audio/Opus.js:86 msgid "Delay" msgstr "Délai" @@ -559,15 +588,15 @@ msgstr "Délai" msgid "Delay (ms)" msgstr "Délai (ms)" -#: src/views/Edit/index.js:563 -#: src/views/Edit/index.js:599 -#: src/views/Playersite.js:474 -#: src/views/Publication/Edit.js:574 -#: src/views/Publication/Edit.js:606 +#: src/views/Edit/index.js:617 +#: src/views/Edit/index.js:653 +#: src/views/Playersite.js:490 +#: src/views/Publication/Edit.js:536 +#: src/views/Publication/Edit.js:568 msgid "Delete" msgstr "Supprimer" -#: src/views/Publication/Edit.js:611 +#: src/views/Publication/Edit.js:573 msgid "Deleting a publication service cannot be reversed. The publication stops immediately." msgstr "La suppression d'un service de publication ne peut pas être annulée. La publication s'arrête immédiatement." @@ -582,12 +611,12 @@ msgid "Description" msgstr "Description" #: src/views/Playersite.js:352 -#: src/views/Playersite.js:509 +#: src/views/Playersite.js:525 msgid "Design" msgstr "Design" #: src/views/Edit/Sources/Framebuffer.js:87 -#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:905 #: src/views/Publication/Services/Framebuffer.js:93 msgid "Device" msgstr "Dispositif" @@ -598,7 +627,7 @@ msgstr "Dispositif" msgid "Disconnect" msgstr "Déconnexion" -#: src/views/Edit/index.js:580 +#: src/views/Edit/index.js:634 msgid "Disconnect & Continue" msgstr "Déconnecter et continuer" @@ -607,12 +636,13 @@ msgstr "Déconnecter et continuer" msgid "Disconnecting ..." msgstr "Déconnexion ..." -#: src/views/Settings.js:1650 +#: src/misc/controls/HLS.js:70 +#: src/views/Settings.js:1720 msgid "Disk" msgstr "Disque" -#: src/views/Settings.js:1684 -#: src/views/Settings.js:1692 +#: src/views/Settings.js:1754 +#: src/views/Settings.js:1762 msgid "Disk cache" msgstr "Cache disque" @@ -621,19 +651,19 @@ msgstr "Cache disque" msgid "Disk storage" msgstr "Stockage sur disque" -#: src/views/Settings.js:2063 +#: src/views/Settings.js:2214 msgid "Do you really want to restart the application now?" msgstr "Voulez-vous vraiment redémarrer l'application maintenant ?" -#: src/views/Edit/index.js:591 +#: src/views/Edit/index.js:645 msgid "Do you want to delete \"{0}\"?" msgstr "Voulez-vous supprimer \"{0}\" ?" -#: src/views/Publication/Edit.js:598 +#: src/views/Publication/Edit.js:560 msgid "Do you want to delete {title}?" msgstr "Voulez-vous supprimer {titre} ?" -#: src/views/Edit/index.js:572 +#: src/views/Edit/index.js:626 msgid "Do you want to disconnect \"{0}\"?" msgstr "Voulez-vous déconnecter \"{0}\" ?" @@ -658,7 +688,7 @@ msgstr "Documentation" msgid "Dup. frames" msgstr "Cadres de duplication" -#: src/views/Publication/Player.js:285 +#: src/views/Publication/Player.js:288 msgid "EDIT: Player" msgstr "EDIT : Joueur" @@ -666,27 +696,41 @@ msgstr "EDIT : Joueur" msgid "EDIT: Publication Website" msgstr "EDIT : Site de la publication" -#: src/views/Edit/index.js:391 +#: src/misc/controls/HLS.js:78 +msgid "EXT-X-VERSION" +msgstr "EXT-X-VERSION" + +#: src/views/Edit/index.js:403 msgid "Edit" msgstr "Modifier" -#: src/views/Edit/index.js:417 +#: src/views/Edit/index.js:429 msgid "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." msgstr "Modifiez les sources audio et vidéo pour le flux en direct. Ajoutez une description, et définissez la licence de votre contenu souhaité." -#: src/views/Publication/Edit.js:377 +#: src/views/Publication/Edit.js:384 msgid "Edit: {title}" msgstr "Edit : {title}" -#: src/views/Publication/Player.js:319 +#: src/views/Publication/Player.js:322 msgid "Embed" msgstr "Intégrer" -#: src/views/Edit/Sources/Network.js:577 +#: src/misc/controls/RTMP.js:48 +#: src/misc/controls/SRT.js:48 +msgid "Enable" +msgstr "Activer" + +#: src/views/Edit/Sources/Network.js:684 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:55 msgid "Enable RTMP server ..." msgstr "Activer le serveur RTMP ..." +#: src/views/Edit/Sources/Network.js:733 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:55 +msgid "Enable SRT server ..." +msgstr "Activer le serveur SRT ..." + #: src/views/Edit/Sources/VirtualAudio.js:162 msgid "Enable a periodic beep every second with this value times the carrier frequency" msgstr "Active un bip périodique toutes les secondes avec cette valeur multipliée par la fréquence porteuse" @@ -696,10 +740,15 @@ msgstr "Active un bip périodique toutes les secondes avec cette valeur multipli msgid "Enable backup stream" msgstr "Activer le flux de sauvegarde" -#: src/views/Publication/Player.js:427 +#: src/views/Publication/Player.js:430 msgid "Enable nerd statistics" msgstr "Activer les statistiques des nerds" +#: src/misc/controls/RTMP.js:70 +#: src/misc/controls/SRT.js:70 +msgid "Enable now" +msgstr "Activer maintenant" + #: src/views/Publication/Services/Dummy.js:277 #: src/views/Publication/Services/Facebook.js:138 msgid "Enable primary stream" @@ -709,23 +758,21 @@ msgstr "Activer le flux primaire" msgid "Enable snapshots" msgstr "Activer les instantanés" -#: src/views/Settings.js:1433 +#: src/views/Settings.js:1503 msgid "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." msgstr "Il est fortement conseillé d'activer l'autorisation. Sinon, n'importe qui peut accéder à cette instance." -#: src/views/Settings.js:1593 +#: src/views/Settings.js:1663 msgid "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." msgstr "L'activation de l'authentification de base est fortement conseillée. Sinon, n'importe qui pourrait écrire des données sur /memfs." -#: src/views/Edit/Wizard/index.js:634 +#: src/views/Edit/Wizard/index.js:649 msgid "Encoder" msgstr "Codeur" -#: src/views/Edit/Summary.js:66 -#: src/views/Publication/Add.js:374 -#: src/views/Publication/Add.js:466 -#: src/views/Publication/Edit.js:388 -#: src/views/Publication/Edit.js:505 +#: src/views/Edit/Summary.js:95 +#: src/views/Publication/Add.js:441 +#: src/views/Publication/Edit.js:478 msgid "Encoding" msgstr "Encodage" @@ -743,7 +790,7 @@ msgstr "Saisissez un nom pour le nouveau canal." msgid "Enter password" msgstr "Entrez le mot de passe" -#: src/views/Edit/Sources/Network.js:348 +#: src/views/Edit/Sources/Network.js:414 #: src/views/Edit/Wizard/Sources/Network.js:59 msgid "Enter the address of your network source:" msgstr "Saisissez l'adresse de votre source réseau :" @@ -752,15 +799,15 @@ msgstr "Saisissez l'adresse de votre source réseau :" msgid "Enter username" msgstr "Entrez le nom d'utilisateur" -#: src/misc/coders/Encoders/video/H264VideoToolbox.js:61 +#: src/misc/coders/Encoders/video/H264VideoToolbox.js:64 msgid "Entropy coder" msgstr "Codeur d'entropie" -#: src/views/Edit/Wizard/index.js:1118 +#: src/views/Edit/Wizard/index.js:1133 #: src/views/Incompatible.js:30 #: src/views/Invalid.js:29 #: src/views/Publication/Process.js:63 -#: src/views/Settings.js:1109 +#: src/views/Settings.js:1176 msgid "Error" msgstr "Erreur" @@ -770,40 +817,40 @@ msgstr "Erreur" msgid "Error while copying data to clipboard" msgstr "Erreur lors de la copie de données dans le presse-papiers" -#: src/views/Main/index.js:324 +#: src/views/Main/index.js:353 #: src/views/Publication/Process.js:64 msgid "Error: {0}" msgstr "Erreur : {0}" -#: src/views/Playersite.js:732 +#: src/views/Playersite.js:748 msgid "Expands the area above the channel list (live chat)." msgstr "Agrandit la zone au-dessus de la liste des chaînes (chat en direct)." -#: src/views/Playersite.js:752 +#: src/views/Playersite.js:768 msgid "Expands the area under the channel description (comment boxes)." msgstr "Agrandit la zone située sous la description du canal (cases de commentaires)." -#: src/views/Settings.js:1199 +#: src/views/Settings.js:1267 msgid "Expert mode" msgstr "Mode expert" -#: src/views/Playersite.js:717 +#: src/views/Playersite.js:733 msgid "Extend channel list" msgstr "Étendre la liste des canaux" -#: src/views/Playersite.js:737 +#: src/views/Playersite.js:753 msgid "Extend content" msgstr "Étendre le contenu" -#: src/views/Playersite.js:757 +#: src/views/Playersite.js:773 msgid "Extend footer" msgstr "Étendre le pied de page" -#: src/views/Playersite.js:697 +#: src/views/Playersite.js:713 msgid "Extend header" msgstr "Prolonger l'en-tête" -#: src/views/Settings.js:1936 +#: src/views/Settings.js:2087 msgid "FFmpeg" msgstr "FFmpeg" @@ -812,7 +859,7 @@ msgstr "FFmpeg" msgid "FPS" msgstr "FPS" -#: src/views/Publication/Add.js:180 +#: src/views/Publication/Add.js:187 msgid "Failed to create publication service ({0})" msgstr "Échec de la création du service de publication ({0})" @@ -820,12 +867,12 @@ msgstr "Échec de la création du service de publication ({0})" msgid "Failed to create publication website files." msgstr "Échec de la création des fichiers du site Web de publication." -#: src/views/Edit/Profile.js:341 -#: src/views/Edit/Profile.js:471 +#: src/views/Edit/Profile.js:354 +#: src/views/Edit/Profile.js:504 msgid "Failed to probe the source. Please check the <0>probe details." msgstr "Impossible de sonder la source. Veuillez vérifier les <0>détails de la sonde." -#: src/utils/restreamer.js:434 +#: src/utils/restreamer.js:446 msgid "Failed to refresh token: {0}" msgstr "Échec du rafraîchissement du jeton : {0}" @@ -841,7 +888,7 @@ msgstr "Échec de l'arrêt du processus" msgid "Failed to store player size setting." msgstr "Échec de l'enregistrement du paramètre de taille du lecteur." -#: src/views/Publication/Edit.js:222 +#: src/views/Publication/Edit.js:230 msgid "Failed to store publication service ({0})" msgstr "Échec du stockage du service de publication ({0})" @@ -850,15 +897,27 @@ msgid "Failed to update ingest process ({0})" msgstr "Échec de la mise à jour du processus d'ingestion ({0})" #: src/views/Edit/index.js:310 +msgid "Failed to update ingest snapshot process ({0})" +msgstr "Échec de la mise à jour du processus d'acquisition des instantanés ({0})" + +#: src/views/Edit/index.js:316 msgid "Failed to update the player" msgstr "Échec de la mise à jour du lecteur" -#: src/views/Edit/Wizard/index.js:375 -#: src/views/Edit/Wizard/index.js:838 +#: src/views/Edit/index.js:322 +msgid "Failed to update the playersite" +msgstr "Échec de la mise à jour du site des joueurs" + +#: src/views/Edit/Wizard/index.js:390 +#: src/views/Edit/Wizard/index.js:853 msgid "Failed to verify the source. Please check the address." msgstr "Impossible de vérifier la source. Veuillez vérifier l'adresse." -#: src/views/Edit/Profile.js:549 +#: src/views/Edit/Summary.js:101 +msgid "Filter" +msgstr "Filtre" + +#: src/views/Edit/Profile.js:592 msgid "Finish" msgstr "Finition" @@ -866,15 +925,15 @@ msgstr "Finition" msgid "Flags" msgstr "Drapeaux" -#: src/views/Playersite.js:772 +#: src/views/Playersite.js:788 msgid "For Javascripts." msgstr "Pour les Javascripts." -#: src/views/Playersite.js:712 +#: src/views/Playersite.js:728 msgid "For Stylesheets." msgstr "Pour les feuilles de style." -#: src/views/Edit/Sources/Network.js:439 +#: src/views/Edit/Sources/Network.js:521 msgid "Force input framerate" msgstr "Forcer le taux de rafraîchissement de l'entrée" @@ -891,7 +950,7 @@ msgid "Framebuffer" msgstr "Framebuffer" #: src/misc/coders/settings/Video.js:135 -#: src/views/Edit/Sources/Network.js:452 +#: src/views/Edit/Sources/Network.js:534 msgid "Framerate" msgstr "Fréquence d'images" @@ -899,7 +958,7 @@ msgstr "Fréquence d'images" msgid "Frequency (Hz)" msgstr "Fréquence (Hz)" -#: src/views/Publication/Services/Core.js:129 +#: src/views/Publication/Services/Core.js:154 #: src/views/Publication/Services/Facebook.js:115 #: src/views/Publication/Services/Facebook.js:133 #: src/views/Publication/Services/Instagram.js:88 @@ -910,13 +969,13 @@ msgstr "Fréquence (Hz)" msgid "GET" msgstr "GET" -#: src/views/Edit/Sources/Network.js:471 -#: src/views/Edit/index.js:400 +#: src/views/Edit/Sources/Network.js:553 #: src/views/Edit/index.js:412 +#: src/views/Edit/index.js:424 #: src/views/Playersite.js:350 #: src/views/Playersite.js:363 -#: src/views/Publication/Add.js:372 -#: src/views/Publication/Edit.js:386 +#: src/views/Publication/Add.js:374 +#: src/views/Publication/Edit.js:393 #: src/views/Publication/Services/DASH.js:211 #: src/views/Publication/Services/HLS.js:200 #: src/views/Publication/Services/Icecast.js:177 @@ -924,62 +983,73 @@ msgstr "GET" #: src/views/Publication/Services/RTMP.js:145 #: src/views/Publication/Services/RTSP.js:169 #: src/views/Publication/Services/SRT.js:177 -#: src/views/Settings.js:1138 -#: src/views/Settings.js:1158 +#: src/views/Settings.js:1205 +#: src/views/Settings.js:1226 msgid "General" msgstr "Général" -#: src/views/Publication/Player.js:410 +#: src/views/Publication/Player.js:413 msgid "Google Analytics ID" msgstr "ID Google Analytics" -#: src/views/Publication/Player.js:420 +#: src/views/Publication/Player.js:423 msgid "Google Analytics Tracker Name" msgstr "Nom du tracker Google Analytics" -#: src/views/Edit/index.js:471 -#: src/views/Main/index.js:369 +#: src/views/Main/index.js:403 msgid "HLS" msgstr "HLS" -#: src/views/Settings.js:1510 +#: src/views/Edit/index.js:483 +msgid "HLS output" +msgstr "Sortie HLS" + +#: src/views/Edit/Wizard/Sources/InternalHLS.js:73 +msgid "HLS server" +msgstr "Serveur HLS" + +#: src/views/Settings.js:1580 msgid "HLS statistic for the In-memory storage" msgstr "Statistique HLS pour le stockage en mémoire" -#: src/views/Edit/Sources/Network.js:429 +#: src/views/Edit/Sources/Network.js:511 msgid "HTTP and HTTPS" msgstr "HTTP et HTTPS" -#: src/views/Settings.js:1323 +#: src/views/Settings.js:1391 msgid "HTTP port" msgstr "Port HTTP" -#: src/views/Settings.js:1352 +#: src/views/Settings.js:1420 msgid "HTTPS (SSL/TLS)" msgstr "HTTPS (SSL/TLS)" -#: src/views/Settings.js:1336 +#: src/views/Settings.js:1404 msgid "HTTPS port" msgstr "Port HTTPS" -#: src/views/Edit/Sources/V4L.js:151 +#: src/views/Edit/Sources/V4L.js:154 #: src/views/Edit/Wizard/Sources/V4L.js:140 msgid "Hardware device" msgstr "Dispositif matériel" -#: src/views/Playersite.js:579 +#: src/views/Playersite.js:595 msgid "Header" msgstr "En-tête" -#: src/views/Playersite.js:535 +#: src/views/Playersite.js:551 msgid "Headline" msgstr "A la une" +#: src/misc/filters/video/HFlip.js:65 +msgid "Horizontal Flip" +msgstr "Retournement horizontal" + #: src/views/Login.js:319 msgid "Hosted Restreamer interface" msgstr "Interface hébergée de Restreamer" -#: src/views/Settings.js:1258 +#: src/views/Settings.js:1326 msgid "Human readable name on the service." msgstr "Nom lisible par l'homme sur le service." @@ -987,24 +1057,24 @@ msgstr "Nom lisible par l'homme sur le service." msgid "IP address" msgstr "Adresse IP" -#: src/views/Settings.js:2008 +#: src/views/Settings.js:2159 msgid "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." msgstr "Si vous avez changé les ports, il se peut que Restreamer Core ait déjà redémarré, mais qu'il soit maintenant disponible sur un port différent." -#: src/views/Settings.js:2002 +#: src/views/Settings.js:2153 msgid "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." msgstr "Si vous avez activé Let's Encrypt TLS, l'acquisition des certificats peut prendre un certain temps. Assurez-vous que Restreamer Core est joignable via le port 80 depuis Internet. Veuillez vérifier le journal de la console de Restreamer Core." -#: src/views/Settings.js:1525 +#: src/views/Settings.js:1595 msgid "Ignore IP ranges" msgstr "Ignorer les plages IP" -#: src/views/Playersite.js:624 -#: src/views/Publication/Player.js:366 +#: src/views/Playersite.js:640 +#: src/views/Publication/Player.js:369 msgid "Image URL" msgstr "URL de l'image" -#: src/views/Playersite.js:649 +#: src/views/Playersite.js:665 msgid "Imprint" msgstr "Impression" @@ -1012,7 +1082,8 @@ msgstr "Impression" msgid "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." msgstr "En plus du lecteur, le Restreamer offre une page d'accueil complète, que vous pouvez utiliser pour présenter votre flux en direct facilement et rapidement." -#: src/views/Settings.js:1577 +#: src/misc/controls/HLS.js:67 +#: src/views/Settings.js:1647 msgid "In-memory" msgstr "En mémoire" @@ -1021,39 +1092,35 @@ msgstr "En mémoire" msgid "In-memory storage" msgstr "Stockage en mémoire" -#: src/views/Publication/Add.js:269 +#: src/views/Publication/Add.js:273 msgid "Incompatible" msgstr "Incompatibilité" #: src/misc/coders/settings/Audio.js:67 #: src/misc/coders/settings/Audio.js:118 +#: src/misc/filters/audio/Pan.js:47 +#: src/misc/filters/audio/Resample.js:59 +#: src/misc/filters/audio/Resample.js:110 +#: src/misc/filters/audio/Volume.js:46 msgid "Inherit" msgstr "Hériter de" -#: src/views/Playersite.js:707 +#: src/views/Playersite.js:723 msgid "Inject 1" msgstr "Injecter 1" -#: src/views/Playersite.js:727 +#: src/views/Playersite.js:743 msgid "Inject 2" msgstr "Injecter 2" -#: src/views/Playersite.js:747 +#: src/views/Playersite.js:763 msgid "Inject 3" msgstr "Injecter 3" -#: src/views/Playersite.js:767 +#: src/views/Playersite.js:783 msgid "Inject 4" msgstr "Injecter 4" -#: src/views/Edit/Wizard/Sources/InternalHLS.js:75 -msgid "Internal HLS server" -msgstr "Serveur HLS interne" - -#: src/views/Edit/Wizard/Sources/InternalRTMP.js:95 -msgid "Internal RTMP server" -msgstr "Serveur RTMP interne" - #: src/misc/controls/Snapshot.js:50 msgid "Interval (seconds)" msgstr "Intervalle (secondes)" @@ -1068,28 +1135,29 @@ msgid "Keyframe interval (seconds)" msgstr "Intervalle entre les images clés (secondes)" #: src/misc/coders/settings/Audio.js:97 +#: src/misc/filters/audio/Resample.js:89 msgid "Layout" msgstr "Mise en page" -#: src/views/Settings.js:1357 +#: src/views/Settings.js:1425 msgid "Let's Encrypt certification" msgstr "Certification Let's Encrypt" -#: src/views/Settings.js:1365 +#: src/views/Settings.js:1433 msgid "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." msgstr "Let's Encrypt requiert un ou plusieurs noms de domaine publics et un port 80/TCP accessible." -#: src/misc/coders/Encoders/video/H264NVENC.js:109 +#: src/misc/coders/Encoders/video/H264NVENC.js:112 msgid "Level" msgstr "Niveau" -#: src/views/Settings.js:1918 +#: src/views/Settings.js:2069 msgid "Level of system protocol." msgstr "Niveau du protocole du système." -#: src/views/Edit/Wizard/index.js:1061 -#: src/views/Edit/index.js:403 -#: src/views/Edit/index.js:525 +#: src/views/Edit/Wizard/index.js:1076 +#: src/views/Edit/index.js:415 +#: src/views/Edit/index.js:579 msgid "License" msgstr "Licence" @@ -1097,28 +1165,28 @@ msgstr "Licence" msgid "Life color" msgstr "Couleur de la vie" -#: src/views/Playersite.js:606 +#: src/views/Playersite.js:622 msgid "Linecolor" msgstr "Linecolor" -#: src/views/Playersite.js:544 -#: src/views/Publication/Player.js:396 +#: src/views/Playersite.js:560 +#: src/views/Publication/Player.js:399 msgid "Link" msgstr "Lien" -#: src/views/Playersite.js:553 +#: src/views/Playersite.js:569 msgid "Link, mouseover" msgstr "Lien, survol de la souris" -#: src/views/Settings.js:1533 +#: src/views/Settings.js:1603 msgid "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." msgstr "Liste des plages IP en notation CIDR, par exemple, 127.0.0.1/32, que les statistiques n'enregistreront pas - une plage IP par ligne. Laissez vide pour enregistrer toutes les sessions." -#: src/views/Settings.js:1751 +#: src/views/Settings.js:1821 msgid "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." msgstr "Liste des extensions de fichiers à mettre en cache (par exemple, \".html\"), une par ligne. Laissez vide pour mettre en cache tous les types de fichiers." -#: src/misc/controls/HLS.js:74 +#: src/misc/controls/HLS.js:107 msgid "List size (segments)" msgstr "Taille de la liste (segments)" @@ -1142,13 +1210,13 @@ msgstr "Diffusion en direct sur le service RTMP Live de Vimeos" msgid "Livesource ID" msgstr "Livesource ID" -#: src/views/Settings.js:1870 +#: src/views/Settings.js:2021 msgid "Log level" msgstr "Niveau du journal" #: src/misc/modals/Process.js:90 -#: src/views/Settings.js:1147 -#: src/views/Settings.js:1846 +#: src/views/Settings.js:1215 +#: src/views/Settings.js:1997 msgid "Logging" msgstr "Enregistrement" @@ -1159,23 +1227,23 @@ msgstr "Enregistrement" msgid "Login" msgstr "Connexion" -#: src/utils/restreamer.js:263 #: src/utils/restreamer.js:268 -#: src/utils/restreamer.js:297 +#: src/utils/restreamer.js:273 #: src/utils/restreamer.js:302 +#: src/utils/restreamer.js:307 msgid "Login failed: Couldn't load API details" msgstr "La connexion a échoué : Impossible de charger les détails de l'API" -#: src/utils/restreamer.js:254 -#: src/utils/restreamer.js:288 +#: src/utils/restreamer.js:259 +#: src/utils/restreamer.js:293 msgid "Login failed: {0}" msgstr "La connexion a échoué : {0}" -#: src/views/Settings.js:1425 +#: src/views/Settings.js:1493 msgid "Login/JWT authorization" msgstr "Autorisation de connexion/JWT" -#: src/views/Publication/Player.js:321 +#: src/views/Publication/Player.js:324 msgid "Logo" msgstr "Logo" @@ -1183,24 +1251,28 @@ msgstr "Logo" msgid "Logout" msgstr "Déconnexion" +#: src/misc/filters/audio/Loudnorm.js:66 +msgid "Loudness Normalization" +msgstr "Normalisation de la sonorité" + #: src/Footer.js:208 msgid "MB" msgstr "MB" -#: src/views/Edit/index.js:380 +#: src/views/Edit/index.js:392 msgid "Main Source" msgstr "Source principale" -#: src/views/Main/index.js:260 +#: src/views/Main/index.js:289 #: src/views/Playersite.js:389 msgid "Main channel" msgstr "Canal principal" -#: src/views/Publication/Player.js:102 +#: src/views/Publication/Player.js:99 msgid "Main channel not found" msgstr "Canal principal non trouvé" -#: src/views/Edit/Wizard/index.js:188 +#: src/views/Edit/Wizard/index.js:194 msgid "Main channel saved" msgstr "Canal principal sauvegardé" @@ -1208,63 +1280,70 @@ msgstr "Canal principal sauvegardé" msgid "Main page channel (index.html)." msgstr "Canal de la page principale (index.html)." -#: src/views/Publication/Add.js:411 -#: src/views/Publication/Add.js:444 -#: src/views/Publication/Add.js:511 -#: src/views/Publication/Edit.js:419 -#: src/views/Publication/Edit.js:483 -#: src/views/Publication/Edit.js:552 +#: src/views/Publication/TabContent.js:49 msgid "Maintainer:" msgstr "Mainteneur :" -#: src/views/Settings.js:1710 +#: src/misc/controls/RTMP.js:54 +msgid "Make the channel available as an RTMP stream (experimental)." +msgstr "Rendre la chaîne disponible en tant que flux RTMP (expérimental)." + +#: src/misc/controls/SRT.js:54 +msgid "Make the channel available as an SRT stream (experimental)." +msgstr "Rendre la chaîne disponible en tant que flux SRT (expérimental)." + +#: src/misc/controls/HLS.js:117 +msgid "Master playlist (increases browser/client compatibility)" +msgstr "Liste de lecture principale (améliore la compatibilité avec les navigateurs et les clients)" + +#: src/views/Settings.js:1780 msgid "Maximum allowed cache size, 0 for unlimited." msgstr "Taille maximale autorisée du cache, 0 pour illimité." -#: src/views/Settings.js:1632 +#: src/views/Settings.js:1702 msgid "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." msgstr "Mégaoctets de RAM maximum autorisés pour /memfs, 0 pour illimité." -#: src/views/Settings.js:1676 +#: src/views/Settings.js:1746 msgid "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." msgstr "Maximum de mégaoctets autorisés à consommer du disque dur. 0 pour illimité." -#: src/views/Settings.js:1394 +#: src/views/Settings.js:1462 msgid "Maximum bandwidth Mbit/s" msgstr "Bande passante maximale Mbit/s" -#: src/misc/coders/Encoders/audio/Opus.js:74 +#: src/misc/coders/Encoders/audio/Opus.js:76 msgid "Maximum delay in milliseconds." msgstr "Délai maximal en millisecondes." -#: src/views/Settings.js:1728 +#: src/views/Settings.js:1798 msgid "Maximum file size (Megabytes)" msgstr "Taille maximale du fichier (mégaoctets)" -#: src/views/Settings.js:1736 +#: src/views/Settings.js:1806 msgid "Maximum file size to put in cache." msgstr "Taille maximale du fichier à mettre dans le cache." -#: src/views/Settings.js:1954 +#: src/views/Settings.js:2105 msgid "Maximum log histroy" msgstr "Histroy log maximum" -#: src/views/Settings.js:1923 -#: src/views/Settings.js:1941 +#: src/views/Settings.js:2074 +#: src/views/Settings.js:2092 msgid "Maximum log lines" msgstr "Lignes de journal maximum" -#: src/views/Settings.js:1624 -#: src/views/Settings.js:1668 -#: src/views/Settings.js:1702 +#: src/views/Settings.js:1694 +#: src/views/Settings.js:1738 +#: src/views/Settings.js:1772 msgid "Maximum size (Megabytes)" msgstr "Taille maximale (mégaoctets)" -#: src/views/Settings.js:1542 +#: src/views/Settings.js:1612 msgid "Maximum viewer idle time (Seconds)" msgstr "Temps d'inactivité maximum du téléspectateur (Secondes)" -#: src/views/Settings.js:1378 +#: src/views/Settings.js:1446 msgid "Maximum viewers" msgstr "Nombre maximum de téléspectateurs" @@ -1272,12 +1351,12 @@ msgstr "Nombre maximum de téléspectateurs" msgid "Memory" msgstr "Mémoire" -#: src/views/Edit/index.js:402 +#: src/views/Edit/index.js:414 msgid "Meta information" msgstr "Méta-information" -#: src/views/Edit/Wizard/index.js:1006 -#: src/views/Edit/index.js:505 +#: src/views/Edit/Wizard/index.js:1021 +#: src/views/Edit/index.js:559 msgid "Metadata" msgstr "Métadonnées" @@ -1299,44 +1378,56 @@ msgstr "Plus d'informations sur les droits d'auteur de YouTube <0>ici." msgid "More about licenses here" msgstr "Plus d'informations sur les licences ici" -#: src/views/Settings.js:1227 +#: src/views/Settings.js:1295 msgid "More about the service" msgstr "En savoir plus sur le service" -#: src/views/Publication/Player.js:438 +#: src/views/Publication/Player.js:441 msgid "Mute" msgstr "Mute" +#: src/misc/filters/audio/Pan.js:57 +msgid "Mute a channel." +msgstr "Coupez le son d'un canal." + +#: src/misc/filters/audio/Pan.js:50 +msgid "Mute left" +msgstr "Muet à gauche" + +#: src/misc/filters/audio/Pan.js:53 +msgid "Mute right" +msgstr "Muet à droite" + #: src/misc/ChannelList.js:380 #: src/misc/controls/Metadata.js:76 #: src/misc/controls/Metadata.js:98 -#: src/views/Playersite.js:489 -#: src/views/Settings.js:1250 +#: src/views/Playersite.js:505 +#: src/views/Settings.js:1318 msgid "Name" msgstr "Nom" -#: src/views/Playersite.js:494 +#: src/views/Playersite.js:510 msgid "Name for the template. If the name already exists, it will be overwritten." msgstr "Nom du modèle. Si le nom existe déjà, il sera écrasé." -#: src/views/Settings.js:1142 -#: src/views/Settings.js:1297 +#: src/views/Settings.js:1209 +#: src/views/Settings.js:1365 msgid "Network" msgstr "Réseau" -#: src/views/Edit/Sources/Network.js:684 -#: src/views/Edit/Wizard/Sources/Network.js:110 +#: src/views/Edit/Sources/Network.js:840 +#: src/views/Edit/Wizard/Sources/Network.js:123 msgid "Network source" msgstr "Source du réseau" -#: src/views/Edit/Wizard/index.js:413 -#: src/views/Edit/Wizard/index.js:652 -#: src/views/Edit/Wizard/index.js:917 -#: src/views/Edit/Wizard/index.js:1029 +#: src/views/Edit/Wizard/index.js:428 +#: src/views/Edit/Wizard/index.js:667 +#: src/views/Edit/Wizard/index.js:932 +#: src/views/Edit/Wizard/index.js:1044 msgid "Next" msgstr "Suivant" -#: src/views/Edit/Profile.js:413 +#: src/views/Edit/Profile.js:436 msgid "Next: Audio" msgstr "Suivant : Audio" @@ -1344,12 +1435,12 @@ msgstr "Suivant : Audio" msgid "Next: Video setup" msgstr "Suivant : Configuration de la vidéo" -#: src/views/Edit/Wizard/index.js:1182 +#: src/views/Edit/Wizard/index.js:1197 msgid "No" msgstr "Non" #: src/views/Edit/Sources/NoAudio.js:45 -#: src/views/Edit/Wizard/index.js:901 +#: src/views/Edit/Wizard/index.js:916 msgid "No audio" msgstr "Pas d'audio" @@ -1362,11 +1453,11 @@ msgstr "Aucun flux audio disponible" msgid "No input device available" msgstr "Aucun dispositif d'entrée disponible" -#: src/views/Edit/Wizard/index.js:373 +#: src/views/Edit/Wizard/index.js:388 msgid "No live stream was detected. Please check the software that sends the stream." msgstr "Aucun flux en direct n'a été détecté. Veuillez vérifier le logiciel qui envoie le flux." -#: src/views/Edit/Summary.js:28 +#: src/views/Edit/Summary.js:29 msgid "No source selected" msgstr "Pas de source sélectionnée" @@ -1378,8 +1469,12 @@ msgstr "Aucune source disponible" msgid "No suitable encoder found." msgstr "Aucun codeur approprié n'a été trouvé." -#: src/views/Main/index.js:286 -#: src/views/Publication/Player.js:294 +#: src/misc/FilterSelect.js:106 +msgid "No suitable filter found." +msgstr "Aucun filtre approprié n'a été trouvé." + +#: src/views/Main/index.js:315 +#: src/views/Publication/Player.js:297 msgid "No video" msgstr "Pas de vidéo" @@ -1387,7 +1482,7 @@ msgstr "Pas de vidéo" msgid "No video stream available" msgstr "Aucun flux vidéo disponible" -#: src/views/Settings.js:1243 +#: src/views/Settings.js:1311 msgid "Node ID" msgstr "ID du nœud" @@ -1396,44 +1491,61 @@ msgid "Noise" msgstr "Bruit" #: src/views/Edit/Sources/AVFoundation.js:145 -#: src/views/Edit/Summary.js:30 +#: src/views/Edit/Summary.js:31 +#: src/views/Edit/Summary.js:107 #: src/views/Edit/Wizard/Sources/AVFoundation.js:98 msgid "None" msgstr "Aucun" #: src/views/Playersite.js:353 -#: src/views/Playersite.js:644 +#: src/views/Playersite.js:660 msgid "Notes" msgstr "Notes" -#: src/views/Settings.js:1931 -#: src/views/Settings.js:1949 +#: src/views/Settings.js:2082 +#: src/views/Settings.js:2100 msgid "Number of log lines to keep." msgstr "Nombre de lignes de journal à conserver." -#: src/views/Settings.js:1962 +#: src/views/Settings.js:2113 msgid "Number of logs to keep for each process." msgstr "Nombre de journaux à conserver pour chaque processus." -#: src/views/Playersite.js:813 -#: src/views/Publication/Player.js:466 +#: src/views/Playersite.js:829 +#: src/views/Publication/Player.js:471 msgid "OK" msgstr "OK" -#: src/views/Settings.js:1497 +#: src/views/Settings.js:1567 msgid "One referrer per line, e.g. http://www.example.com" msgstr "Un référent par ligne, par exemple http://www.example.com." -#: src/views/Playersite.js:798 +#: src/views/Playersite.js:814 msgid "Open" msgstr "Ouvrir" -#: src/views/Publication/Edit.js:510 +#: src/misc/filters/audio/Pan.js:45 +msgid "Pan" +msgstr "Pan" + +#: src/views/Settings.js:1971 +msgid "Passphrase" +msgstr "Phrase de passe" + +#: src/views/Settings.js:1988 +msgid "Passphrase for SRT encryption." +msgstr "Phrase de passe pour le cryptage SRT." + +#: src/views/Settings.js:1980 +msgid "Passphrase must be between 10 and 79 characters long" +msgstr "La phrase de passe doit comporter entre 10 et 79 caractères." + +#: src/views/Publication/Edit.js:483 msgid "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." msgstr "Le Passthrough (copie) ne doit être désactivé que si nécessaire. Chaque encodage nécessite des ressources CPU/GPU supplémentaires." -#: src/views/Edit/Sources/Network.js:382 -#: src/views/Edit/Wizard/Sources/Network.js:88 +#: src/views/Edit/Sources/Network.js:460 +#: src/views/Edit/Wizard/Sources/Network.js:97 #: src/views/Login.js:282 #: src/views/Publication/Services/Akamai.js:134 #: src/views/Publication/Services/DASH.js:198 @@ -1442,22 +1554,22 @@ msgstr "Le Passthrough (copie) ne doit être désactivé que si nécessaire. Cha #: src/views/Publication/Services/RTSP.js:156 #: src/views/Publication/Services/Red5.js:157 #: src/views/Publication/Services/WOWZA.js:178 -#: src/views/Settings.js:1453 -#: src/views/Settings.js:1611 +#: src/views/Settings.js:1523 +#: src/views/Settings.js:1681 msgid "Password" msgstr "Mot de passe" -#: src/views/Settings.js:1459 -#: src/views/Settings.js:1619 +#: src/views/Settings.js:1529 +#: src/views/Settings.js:1689 msgid "Password for authorization." msgstr "Mot de passe pour l'autorisation." -#: src/views/Edit/Sources/Network.js:387 -#: src/views/Edit/Wizard/Sources/Network.js:90 +#: src/views/Edit/Sources/Network.js:465 +#: src/views/Edit/Wizard/Sources/Network.js:103 msgid "Password for the device." msgstr "Mot de passe pour l'appareil." -#: src/views/Settings.js:1555 +#: src/views/Settings.js:1625 msgid "Persist viewer statistics" msgstr "Persistance des statistiques des téléspectateurs" @@ -1469,25 +1581,25 @@ msgstr "Format des pixels" msgid "Plan: <0>Starter" msgstr "Plan : <0>Démarreur" -#: src/views/Publication/Add.js:347 +#: src/views/Publication/Add.js:349 msgid "Platforms" msgstr "Plateformes" -#: src/views/Publication/Player.js:323 -#: src/views/Settings.js:1144 -#: src/views/Settings.js:1468 +#: src/views/Publication/Player.js:326 +#: src/views/Settings.js:1211 +#: src/views/Settings.js:1538 msgid "Playback" msgstr "Lecture" -#: src/views/Main/Egress.js:95 +#: src/views/Main/Egress.js:100 msgid "Player" msgstr "Joueur" -#: src/views/Publication/Player.js:328 +#: src/views/Publication/Player.js:331 msgid "Player URL" msgstr "URL du joueur" -#: src/views/Publication/Player.js:257 +#: src/views/Publication/Player.js:254 msgid "Player settings saved" msgstr "Sauvegarde des paramètres du lecteur" @@ -1501,20 +1613,26 @@ msgstr "Site des joueurs" msgid "Playlist" msgstr "Liste de lecture" -#: src/views/Main/index.js:329 +#: src/misc/controls/HLS.js:88 +msgid "Playlist version (M3U8). Version 3 has the best browser/client compatibility." +msgstr "Version de la liste de lecture (M3U8). La version 3 a la meilleure compatibilité navigateur/client." + +#: src/views/Main/index.js:358 msgid "Please check the <0>process log" msgstr "Veuillez vérifier le <0>Journal du processus." #: src/views/Publication/Services/Akamai.js:29 +#: src/views/Publication/Services/Azure.js:29 #: src/views/Publication/Services/Bitmovin.js:23 #: src/views/Publication/Services/Brightcove.js:23 #: src/views/Publication/Services/CDN77.js:23 -#: src/views/Publication/Services/Core.js:26 +#: src/views/Publication/Services/Core.js:27 #: src/views/Publication/Services/DASH.js:35 #: src/views/Publication/Services/DaCast.js:26 #: src/views/Publication/Services/HLS.js:37 #: src/views/Publication/Services/Icecast.js:29 #: src/views/Publication/Services/Image2.js:33 +#: src/views/Publication/Services/Linkedin.js:24 #: src/views/Publication/Services/Livespotting.js:23 #: src/views/Publication/Services/MPEGTS.js:35 #: src/views/Publication/Services/RTMP.js:32 @@ -1527,37 +1645,42 @@ msgstr "Veuillez vérifier le <0>Journal du processus." msgid "Please contact the operator of the service and check what happens." msgstr "Veuillez contacter l'opérateur du service et vérifier ce qui se passe." +#: src/views/Publication/Services/Owncast.js:23 +#: src/views/Publication/Services/Telegram.js:14 +msgid "Please get in touch with the operator of the service and check what happens." +msgstr "Veuillez prendre contact avec l'opérateur du service et vérifier ce qui se passe." + #: src/views/Playersite.js:122 #: src/views/Playersite.js:197 -#: src/views/Publication/Player.js:159 +#: src/views/Publication/Player.js:156 msgid "Please select a file to upload." msgstr "Veuillez sélectionner un fichier à télécharger." -#: src/views/Publication/Add.js:471 +#: src/views/Publication/Add.js:446 msgid "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." msgstr "Veuillez utiliser \"Passthrough (copie)\" si possible. L'encodage nécessite des ressources CPU/GPU supplémentaires." -#: src/views/Edit/Wizard/index.js:435 -#: src/views/Edit/Wizard/index.js:933 +#: src/views/Edit/Wizard/index.js:450 +#: src/views/Edit/Wizard/index.js:948 msgid "Please wait. Probe stream data ..." msgstr "Veuillez patienter. Données du flux de sondes ..." -#: src/views/Edit/Wizard/index.js:1103 +#: src/views/Edit/Wizard/index.js:1118 msgid "Please wait. Setting up the stream ..." msgstr "Veuillez patienter. Configuration du flux ..." #: src/views/Publication/Services/Bitmovin.js:92 -#: src/views/Settings.js:1803 +#: src/views/Settings.js:1945 msgid "Port" msgstr "Port" -#: src/views/Publication/Player.js:381 +#: src/views/Publication/Player.js:384 msgid "Position" msgstr "Position" -#: src/misc/coders/Encoders/video/H264NVENC.js:67 -#: src/misc/coders/Encoders/video/X264.js:62 -#: src/misc/coders/Encoders/video/X265.js:62 +#: src/misc/coders/Encoders/video/H264NVENC.js:70 +#: src/misc/coders/Encoders/video/X264.js:72 +#: src/misc/coders/Encoders/video/X265.js:72 msgid "Preset" msgstr "Préréglage" @@ -1572,92 +1695,96 @@ msgstr "Clé de flux primaire" #: src/views/Edit/Sources/ALSA.js:136 #: src/views/Edit/Sources/AVFoundation.js:201 #: src/views/Edit/Sources/Framebuffer.js:110 -#: src/views/Edit/Sources/Network.js:505 -#: src/views/Edit/Sources/Network.js:552 -#: src/views/Edit/Sources/Network.js:599 -#: src/views/Edit/Sources/Raspicam.js:113 -#: src/views/Edit/Sources/V4L.js:131 +#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:660 +#: src/views/Edit/Sources/Network.js:706 +#: src/views/Edit/Sources/Network.js:755 +#: src/views/Edit/Sources/Raspicam.js:116 +#: src/views/Edit/Sources/V4L.js:134 #: src/views/Edit/Sources/VirtualAudio.js:169 #: src/views/Edit/Sources/VirtualVideo.js:188 msgid "Probe" msgstr "Sonde" -#: src/views/Edit/index.js:493 -#: src/views/Publication/Add.js:433 -#: src/views/Publication/Edit.js:441 +#: src/views/Edit/index.js:547 +#: src/views/Publication/Add.js:407 +#: src/views/Publication/Edit.js:420 msgid "Process" msgstr "Processus" -#: src/views/Publication/Add.js:373 -#: src/views/Publication/Edit.js:387 +#: src/views/Publication/Add.js:376 +#: src/views/Publication/Edit.js:395 msgid "Process control" msgstr "Contrôle du processus" -#: src/views/Publication/Edit.js:471 -msgid "Process debug" -msgstr "Débogage du processus" - -#: src/views/Main/index.js:413 -#: src/views/Publication/Edit.js:591 +#: src/views/Main/index.js:472 +#: src/views/Publication/Edit.js:553 msgid "Process debug report" msgstr "Rapport de débogage du processus" -#: src/views/Main/index.js:389 -#: src/views/Main/index.js:405 -#: src/views/Publication/Edit.js:468 -#: src/views/Publication/Edit.js:583 +#: src/views/Main/index.js:448 +#: src/views/Main/index.js:464 +#: src/views/Publication/Edit.js:444 +#: src/views/Publication/Edit.js:545 msgid "Process details" msgstr "Détails du processus" -#: src/views/Main/index.js:392 +#: src/views/Main/index.js:451 +#: src/views/Publication/Edit.js:447 msgid "Process report" msgstr "Rapport de processus" -#: src/views/Edit/index.js:401 -#: src/views/Edit/index.js:463 +#: src/views/Edit/index.js:413 +#: src/views/Edit/index.js:475 msgid "Processing & Control" msgstr "Traitement et contrôle" -#: src/misc/coders/Encoders/video/H264NVENC.js:92 -#: src/misc/coders/Encoders/video/H264VAAPI.js:82 +#: src/misc/coders/Encoders/video/H264NVENC.js:95 +#: src/misc/coders/Encoders/video/H264VAAPI.js:85 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:85 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:85 #: src/misc/coders/settings/Video.js:142 -#: src/views/Edit/Wizard/index.js:607 +#: src/views/Edit/Wizard/index.js:622 msgid "Profile" msgstr "Profil" -#: src/views/Edit/Sources/Network.js:520 +#: src/views/Edit/Sources/Network.js:623 #: src/views/Publication/Services/Akamai.js:144 #: src/views/Publication/Services/Akamai.js:182 +#: src/views/Publication/Services/Azure.js:89 #: src/views/Publication/Services/Bitmovin.js:86 #: src/views/Publication/Services/Brightcove.js:87 #: src/views/Publication/Services/CDN77.js:90 -#: src/views/Publication/Services/Core.js:91 +#: src/views/Publication/Services/Core.js:106 #: src/views/Publication/Services/DASH.js:186 #: src/views/Publication/Services/DaCast.js:110 #: src/views/Publication/Services/DaCast.js:168 #: src/views/Publication/Services/HLS.js:175 #: src/views/Publication/Services/Icecast.js:154 #: src/views/Publication/Services/Image2.js:120 +#: src/views/Publication/Services/Linkedin.js:84 #: src/views/Publication/Services/MPEGTS.js:154 +#: src/views/Publication/Services/Owncast.js:88 #: src/views/Publication/Services/RTMP.js:122 #: src/views/Publication/Services/RTSP.js:144 #: src/views/Publication/Services/Red5.js:105 #: src/views/Publication/Services/SRT.js:158 +#: src/views/Publication/Services/Telegram.js:79 #: src/views/Publication/Services/UDP.js:124 #: src/views/Publication/Services/WOWZA.js:122 msgid "Protocol" msgstr "Protocole" -#: src/views/Publication/Add.js:353 +#: src/views/Publication/Add.js:355 msgid "Protocols" msgstr "Protocoles" -#: src/views/Settings.js:1307 +#: src/views/Settings.js:1375 msgid "Public domain/s" msgstr "Domaine public/s" -#: src/views/Publication/Edit.js:113 -#: src/views/Publication/Edit.js:123 +#: src/views/Publication/Edit.js:107 +#: src/views/Publication/Edit.js:117 msgid "Publication service not found" msgstr "Service de publication non trouvé" @@ -1669,16 +1796,18 @@ msgstr "Sauvegarde des paramètres du site Web de la publication" msgid "Publications" msgstr "Publications" -#: src/views/Edit/Sources/Network.js:657 +#: src/views/Edit/Sources/Network.js:813 msgid "Pull Mode" msgstr "Mode de traction" -#: src/views/Edit/Sources/Network.js:656 +#: src/views/Edit/Sources/Network.js:812 msgid "Pull or recieve the data:" msgstr "Tirer ou recevoir les données :" #: src/misc/Progress.js:90 -#: src/misc/coders/Encoders/video/H264VAAPI.js:137 +#: src/misc/coders/Encoders/video/H264VAAPI.js:140 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:140 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:140 msgid "Quality" msgstr "Qualité" @@ -1686,47 +1815,67 @@ msgstr "Qualité" msgid "RGB test pattern" msgstr "Mire de test RVB" -#: src/views/Settings.js:1824 +#: src/views/Main/index.js:412 +#: src/views/Settings.js:1213 +#: src/views/Settings.js:1830 +msgid "RTMP" +msgstr "RTMP" + +#: src/views/Settings.js:1871 +msgid "RTMP Port" +msgstr "Port RTMP" + +#: src/views/Settings.js:1905 msgid "RTMP app for publishing." msgstr "Application RTMP pour la publication." -#: src/views/Settings.js:1765 +#: src/views/Edit/index.js:498 +msgid "RTMP output" +msgstr "Sortie RTMP" + +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:93 +#: src/views/Settings.js:1835 msgid "RTMP server" msgstr "Serveur RTMP" -#: src/views/Edit/Sources/Network.js:572 +#: src/views/Edit/Sources/Network.js:679 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:50 msgid "RTMP server is not enabled" msgstr "Le serveur RTMP n'est pas activé" -#: src/views/Settings.js:1811 +#: src/views/Settings.js:1879 msgid "RTMP server listen address." msgstr "Adresse d'écoute du serveur RTMP." -#: src/views/Settings.js:1837 +#: src/views/Settings.js:1918 msgid "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" msgstr "Jeton RTMP pour la publication et la lecture. Le jeton est la valeur du paramètre de requête de l'URL \"token\"." -#: src/views/Settings.js:1146 -#: src/views/Settings.js:1760 -msgid "RTMP/S" -msgstr "RTMP/S" +#: src/views/Settings.js:1884 +msgid "RTMPS Port" +msgstr "Port RTMPS" -#: src/views/Settings.js:1772 +#: src/views/Settings.js:1843 msgid "RTMPS server" msgstr "Serveur RTMPS" -#: src/views/Edit/Sources/Network.js:405 +#: src/views/Settings.js:1892 +msgid "RTMPS server listen address." +msgstr "Adresse d'écoute du serveur RTMPS." + +#: src/views/Edit/Sources/Network.js:483 msgid "RTSP" msgstr "RTSP" -#: src/views/Edit/Sources/Raspicam.js:132 +#: src/views/Edit/Sources/Raspicam.js:135 #: src/views/Edit/Wizard/Sources/Raspicam.js:117 msgid "Raspberry Pi camera" msgstr "Caméra Raspberry Pi" -#: src/misc/coders/Encoders/video/H264NVENC.js:144 -#: src/misc/coders/Encoders/video/H264VAAPI.js:63 +#: src/misc/coders/Encoders/video/H264NVENC.js:147 +#: src/misc/coders/Encoders/video/H264VAAPI.js:66 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:66 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:66 msgid "Rate control" msgstr "Contrôle du taux" @@ -1734,11 +1883,11 @@ msgstr "Contrôle du taux" msgid "Ratio" msgstr "Ratio" -#: src/views/Edit/Sources/Network.js:434 +#: src/views/Edit/Sources/Network.js:516 msgid "Read input at native speed" msgstr "Lecture de l'entrée à la vitesse native" -#: src/views/Edit/Sources/Network.js:658 +#: src/views/Edit/Sources/Network.js:814 msgid "Receive Mode" msgstr "Mode de réception" @@ -1752,13 +1901,13 @@ msgstr "Reconnecter" msgid "Reconnect delay (seconds)" msgstr "Délai de reconnexion (secondes)" -#: src/views/Main/index.js:340 +#: src/views/Main/index.js:369 #: src/views/Publication/Process.js:68 #: src/views/Publication/Process.js:81 msgid "Reconnecting in {0}s" msgstr "Reconnexion en {0}s" -#: src/views/Settings.js:1999 +#: src/views/Settings.js:2150 msgid "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." msgstr "La reconnexion au Restreamer Core a échoué au cours des {RETRIES} dernières secondes." @@ -1768,7 +1917,7 @@ msgstr "La reconnexion à Restreamer Core a échoué." #: src/views/Edit/Sources/ALSA.js:122 #: src/views/Edit/Sources/AVFoundation.js:181 -#: src/views/Edit/Sources/V4L.js:117 +#: src/views/Edit/Sources/V4L.js:120 #: src/views/Edit/Wizard/Sources/AVFoundation.js:135 #: src/views/Edit/Wizard/Sources/V4L.js:120 msgid "Refresh" @@ -1782,72 +1931,105 @@ msgid "Region" msgstr "Région" #: src/views/Password.js:159 -#: src/views/Settings.js:2019 +#: src/views/Settings.js:2170 msgid "Reload" msgstr "Rechargez" -#: src/views/Settings.js:1637 +#: src/views/Settings.js:1707 msgid "Remove the oldest entries if the /memfs is full" msgstr "Supprimer les entrées les plus anciennes si le /memfs est plein" -#: src/views/Settings.js:1784 +#: src/views/Settings.js:1852 msgid "Requires activation" msgstr "Nécessite une activation" -#: src/views/Settings.js:1206 -#: src/views/Settings.js:2036 -#: src/views/Settings.js:2049 -#: src/views/Settings.js:2058 +#: src/views/Settings.js:1274 +#: src/views/Settings.js:2187 +#: src/views/Settings.js:2200 +#: src/views/Settings.js:2209 msgid "Restart" msgstr "Redémarrer" -#: src/views/Settings.js:2027 +#: src/views/Settings.js:2178 msgid "Restart required" msgstr "Redémarrage nécessaire" #: src/views/Password.js:136 -#: src/views/Settings.js:1987 +#: src/views/Settings.js:2138 msgid "Restarting" msgstr "Redémarrage de" #: src/views/Password.js:141 -#: src/views/Settings.js:1992 +#: src/views/Settings.js:2143 msgid "Restarting Restreamer Core ..." msgstr "Redémarrage de Restreamer Core ..." -#: src/views/Settings.js:1015 +#: src/views/Settings.js:1082 msgid "Restarting the application failed." msgstr "Le redémarrage de l'application a échoué." -#: src/views/Settings.js:1234 +#: src/views/Settings.js:1302 msgid "Restreamer Service" msgstr "Service Restreamer" -#: src/views/Main/index.js:239 +#: src/views/Main/index.js:267 msgid "Retrieving stream data ..." msgstr "Récupération des données de flux ..." -#: src/views/Edit/Wizard/index.js:1128 +#: src/views/Edit/Wizard/index.js:1143 #: src/views/Invalid.js:43 -#: src/views/Settings.js:1116 +#: src/views/Settings.js:1183 msgid "Retry" msgstr "Réessayer" +#: src/misc/filters/video/Transpose.js:46 +msgid "Rotate" +msgstr "Rotation" + #: src/views/Edit/Sources/VirtualVideo.js:155 msgid "Rule" msgstr "Règle" +#: src/views/Main/index.js:422 +#: src/views/Settings.js:1214 +#: src/views/Settings.js:1927 +msgid "SRT" +msgstr "SRT" + +#: src/views/Edit/index.js:517 +msgid "SRT output" +msgstr "Sortie SRT" + +#: src/views/Edit/Wizard/Sources/InternalSRT.js:93 +#: src/views/Settings.js:1932 +msgid "SRT server" +msgstr "Serveur SRT" + +#: src/views/Edit/Sources/Network.js:728 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:50 +msgid "SRT server is not enabled" +msgstr "Le serveur SRT n'est pas activé" + +#: src/views/Settings.js:1953 +msgid "SRT server listen address." +msgstr "Adresse d'écoute du serveur SRT." + +#: src/views/Settings.js:1966 +msgid "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" +msgstr "Jeton SRT pour la publication et la lecture. Le jeton est la valeur du paramètre streamid \"token\"." + #: src/misc/coders/settings/Audio.js:148 +#: src/misc/filters/audio/Resample.js:140 msgid "Sampling" msgstr "Échantillonnage" -#: src/views/Edit/Wizard/index.js:1087 -#: src/views/Edit/index.js:560 -#: src/views/Playersite.js:788 -#: src/views/Publication/Add.js:534 -#: src/views/Publication/Edit.js:571 -#: src/views/Publication/Player.js:452 -#: src/views/Settings.js:1977 +#: src/views/Edit/Wizard/index.js:1102 +#: src/views/Edit/index.js:614 +#: src/views/Playersite.js:804 +#: src/views/Publication/Add.js:498 +#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Player.js:457 +#: src/views/Settings.js:2128 msgid "Save" msgstr "Sauvez" @@ -1855,7 +2037,7 @@ msgstr "Sauvez" msgid "Scale" msgstr "Échelle" -#: src/views/Settings.js:1723 +#: src/views/Settings.js:1793 msgid "Seconds to keep files in cache." msgstr "Secondes pour garder les fichiers dans le cache." @@ -1871,24 +2053,28 @@ msgstr "Secondes jusqu'à ce qu'un processus bloqué soit terminé." msgid "Seconds until the snapshot/thumbnail of the video source is updated." msgstr "Secondes jusqu'à ce que l'instantané/la vignette de la source vidéo soit mis à jour." -#: src/views/Settings.js:1473 +#: src/views/Settings.js:1543 msgid "Security" msgstr "Sécurité" -#: src/views/Publication/Services/Core.js:122 +#: src/views/Publication/Services/Core.js:145 +msgid "Security passphrase" +msgstr "Phrase de sécurité" + +#: src/views/Publication/Services/Core.js:138 #: src/views/Publication/Services/Livespotting.js:103 msgid "Security token" msgstr "Jeton de sécurité" -#: src/views/Publication/Player.js:342 +#: src/views/Publication/Player.js:345 msgid "Seekbar color" msgstr "Couleur du Seekbar" -#: src/misc/controls/HLS.js:62 +#: src/misc/controls/HLS.js:95 msgid "Segment length (seconds)" msgstr "Longueur du segment (secondes)" -#: src/misc/controls/HLS.js:67 +#: src/misc/controls/HLS.js:100 msgid "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." msgstr "Une fois ce délai écoulé, le segment sera coupé sur l'image clé suivante. Une valeur de 2 est recommandée." @@ -1897,11 +2083,16 @@ msgstr "Une fois ce délai écoulé, le segment sera coupé sur l'image clé sui msgid "Segmentation" msgstr "Segmentation" +#: src/views/Publication/Add.js:429 +#: src/views/Publication/Edit.js:470 +msgid "Select RTMP or SRT (if enabled) for less latency." +msgstr "Sélectionnez RTMP ou SRT (si activé) pour une latence moindre." + #: src/views/Edit/Sources/ALSA.js:108 #: src/views/Edit/Sources/AVFoundation.js:172 #: src/views/Edit/Sources/Framebuffer.js:99 -#: src/views/Edit/Sources/Raspicam.js:96 -#: src/views/Edit/Sources/V4L.js:103 +#: src/views/Edit/Sources/Raspicam.js:99 +#: src/views/Edit/Sources/V4L.js:106 #: src/views/Edit/Wizard/Sources/AVFoundation.js:120 #: src/views/Edit/Wizard/Sources/Raspicam.js:95 #: src/views/Edit/Wizard/Sources/V4L.js:114 @@ -1920,7 +2111,7 @@ msgstr "Sélectionnez la source ..." msgid "Select video source:" msgstr "Sélectionnez la source vidéo :" -#: src/views/Edit/Wizard/index.js:268 +#: src/views/Edit/Wizard/index.js:283 msgid "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." msgstr "Choisissez si vous tirez le flux d'une <0>source réseau (comme une caméra réseau) ou du <1>serveur RTMP interne (par exemple, les flux OBS vers le Restreamer)." @@ -1928,7 +2119,11 @@ msgstr "Choisissez si vous tirez le flux d'une <0>source réseau (comme une msgid "Select your encoding setting:" msgstr "Sélectionnez votre paramètre de codage :" -#: src/views/Playersite.js:588 +#: src/misc/FilterSelect.js:121 +msgid "Select your filter settings (optional):" +msgstr "Sélectionnez les paramètres de votre filtre (facultatif) :" + +#: src/views/Playersite.js:604 msgid "Selected" msgstr "Sélectionné" @@ -1936,18 +2131,20 @@ msgstr "Sélectionné" msgid "Selected channel" msgstr "Canal sélectionné" -#: src/views/Playersite.js:449 +#: src/views/Playersite.js:465 msgid "Selection" msgstr "Sélection" -#: src/views/Settings.js:1190 +#: src/views/Settings.js:1258 msgid "Send anonymous metrics (helps us for future development)" msgstr "Envoyez des métriques anonymes (nous aide pour le développement futur)" -#: src/views/Edit/Sources/Network.js:542 -#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:650 +#: src/views/Edit/Sources/Network.js:696 +#: src/views/Edit/Sources/Network.js:745 #: src/views/Edit/Wizard/Sources/InternalHLS.js:48 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:68 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:68 msgid "Send stream to this address:" msgstr "Envoyez le flux à cette adresse :" @@ -1959,19 +2156,24 @@ msgstr "Envoyer la vidéo au Framebuffer" msgid "Server" msgstr "Serveur" +#: src/views/Publication/Services/Owncast.js:100 +#: src/views/Publication/Services/Telegram.js:91 +msgid "Server URL" +msgstr "URL du serveur" + #: src/Header.js:257 #: src/views/Login.js:246 -#: src/views/Settings.js:1140 -#: src/views/Settings.js:1220 +#: src/views/Settings.js:1207 +#: src/views/Settings.js:1288 msgid "Service" msgstr "Service" -#: src/views/Publication/Add.js:392 +#: src/views/Publication/Add.js:387 #: src/views/Publication/Edit.js:406 msgid "Service name" msgstr "Nom du service" -#: src/views/Settings.js:1271 +#: src/views/Settings.js:1339 msgid "Service token for monitoring." msgstr "Jeton de service pour la surveillance." @@ -1979,35 +2181,35 @@ msgstr "Jeton de service pour la surveillance." msgid "Sessions" msgstr "Sessions" -#: src/views/Settings.js:1402 +#: src/views/Settings.js:1470 msgid "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Définit une limite de bande passante en Mbit par seconde pour le transfert des données HLS sortantes. Tous les services, tels que RTMP et les processus sortants, sont inclus dans le calcul. Si la bande passante est dépassée, les spectateurs HLS reçoivent le code d'état HTTP 509 (Bandwidth Limit Exceeded). 0 est illimité." -#: src/views/Settings.js:1386 +#: src/views/Settings.js:1454 msgid "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Définit une limite de visualisation pour les sessions HLS. Si la limite est dépassée, les spectateurs HLS reçoivent le code d'état HTTP 509 (limite de bande passante dépassée). La valeur 0 est illimitée." -#: src/views/Settings.js:1225 +#: src/views/Settings.js:1293 msgid "Setting for connection to the service." msgstr "Paramètre pour la connexion au service." -#: src/views/Settings.js:1126 +#: src/views/Settings.js:1193 msgid "Settings" msgstr "Paramètres" -#: src/views/Settings.js:1128 +#: src/views/Settings.js:1195 msgid "Settings (expert mode)" msgstr "Paramètres (mode expert)" -#: src/views/Settings.js:1653 +#: src/views/Settings.js:1723 msgid "Settings for /data path. The access is protected by" msgstr "Paramètres pour le chemin /data. L'accès est protégé par" -#: src/views/Settings.js:1580 +#: src/views/Settings.js:1650 msgid "Settings for /memfs path." msgstr "Paramètres pour le chemin /memfs." -#: src/views/Settings.js:958 +#: src/views/Settings.js:1025 msgid "Settings saved. All changes will be applied after restarting the application." msgstr "Les paramètres sont enregistrés. Toutes les modifications seront appliquées après le redémarrage de l'application." @@ -2015,7 +2217,7 @@ msgstr "Les paramètres sont enregistrés. Toutes les modifications seront appli msgid "Share button" msgstr "Bouton partager" -#: src/views/Playersite.js:431 +#: src/views/Playersite.js:447 msgid "Shows a reference to the project." msgstr "Affiche une référence au projet." @@ -2027,7 +2229,7 @@ msgstr "S'inscrire (gratuit)" msgid "Silence" msgstr "Silence" -#: src/views/Edit/Wizard/index.js:898 +#: src/views/Edit/Wizard/index.js:913 msgid "Silence Audio" msgstr "Silence Audio" @@ -2043,8 +2245,8 @@ msgstr "Nom de site" msgid "Size" msgstr "Taille" -#: src/views/Edit/index.js:482 -#: src/views/Main/index.js:372 +#: src/views/Edit/index.js:536 +#: src/views/Main/index.js:431 msgid "Snapshot" msgstr "Instantané" @@ -2052,19 +2254,29 @@ msgstr "Instantané" msgid "Social-login (OAuth2, 2FA)" msgstr "Social-login (OAuth2, 2FA)" -#: src/views/Edit/Sources/Network.js:418 +#: src/views/Edit/Sources/Network.js:500 msgid "Socket timeout (microseconds)" msgstr "Délai d'attente pour les sockets (microsecondes)" -#: src/views/Publication/Add.js:350 +#: src/views/Publication/Add.js:352 msgid "Software" msgstr "Logiciel" +#: src/misc/controls/Source.js:74 #: src/views/Edit/Sources/VirtualAudio.js:88 #: src/views/Edit/Sources/VirtualVideo.js:112 +#: src/views/Publication/Add.js:424 +#: src/views/Publication/Edit.js:465 msgid "Source" msgstr "Source :" +#: src/views/Publication/Add.js:375 +#: src/views/Publication/Add.js:419 +#: src/views/Publication/Edit.js:394 +#: src/views/Publication/Edit.js:460 +msgid "Source & Encoding" +msgstr "Source et encodage" + #: src/misc/Progress.js:103 msgid "Speed" msgstr "Vitesse" @@ -2073,24 +2285,25 @@ msgstr "Vitesse" msgid "Stale timeout (seconds)" msgstr "Délai d'expiration (secondes)" -#: src/views/Publication/Player.js:322 -#: src/views/Settings.js:1505 +#: src/views/Publication/Player.js:325 +#: src/views/Settings.js:1575 msgid "Statistics" msgstr "Statistiques" -#: src/views/Settings.js:1145 -#: src/views/Settings.js:1572 +#: src/misc/controls/HLS.js:65 +#: src/views/Settings.js:1212 +#: src/views/Settings.js:1642 msgid "Storage" msgstr "Stockage" -#: src/views/Settings.js:1563 +#: src/views/Settings.js:1633 msgid "Stores the viewer statistics to the disk." msgstr "Stocke les statistiques du visualiseur sur le disque." #: src/views/Edit/StreamSelect.js:30 #: src/views/Edit/StreamSelect.js:36 #: src/views/Edit/StreamSelect.js:81 -#: src/views/Edit/Wizard/index.js:878 +#: src/views/Edit/Wizard/index.js:893 msgid "Stream" msgstr "Stream" @@ -2103,7 +2316,9 @@ msgstr "URL du flux" #: src/views/Publication/Services/DaCast.js:153 #: src/views/Publication/Services/Dummy.js:274 #: src/views/Publication/Services/Instagram.js:84 +#: src/views/Publication/Services/Owncast.js:110 #: src/views/Publication/Services/Restream.js:116 +#: src/views/Publication/Services/Telegram.js:101 #: src/views/Publication/Services/Twitch.js:129 #: src/views/Publication/Services/Twitter.js:175 #: src/views/Publication/Services/Vimeo.js:73 @@ -2112,7 +2327,7 @@ msgid "Stream key" msgstr "Clé de flux" #: src/views/Publication/Services/Brightcove.js:101 -#: src/views/Publication/Services/Core.js:113 +#: src/views/Publication/Services/Core.js:131 #: src/views/Publication/Services/Red5.js:136 #: src/views/Publication/Services/WOWZA.js:158 msgid "Stream name" @@ -2122,31 +2337,35 @@ msgstr "Nom du cours d'eau" msgid "Stream names" msgstr "Noms des cours d'eau" -#: src/views/Playersite.js:425 +#: src/misc/controls/Source.js:78 +msgid "Stream source for publication service (experimental)." +msgstr "Source de flux pour le service de publication (expérimental)." + +#: src/views/Playersite.js:441 msgid "Support datarhei Restreamer" msgstr "Support datarhei Restreamer" -#: src/views/Edit/Sources/Network.js:361 +#: src/views/Edit/Sources/Network.js:427 #: src/views/Edit/Wizard/Sources/Network.js:72 msgid "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." msgstr "Prend en charge HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT et plus encore." #: src/Footer.js:184 #: src/Header.js:275 -#: src/views/Settings.js:1851 +#: src/views/Settings.js:2002 msgid "System" msgstr "Système" #: src/views/Playersite.js:351 -#: src/views/Playersite.js:440 +#: src/views/Playersite.js:456 msgid "Template" msgstr "Modèle" -#: src/views/Playersite.js:462 +#: src/views/Playersite.js:478 msgid "Template to be used for creating the publication website. The delete button removes the selection from the system." msgstr "Modèle à utiliser pour créer le site Web de la publication. Le bouton de suppression supprime la sélection du système." -#: src/views/Playersite.js:666 +#: src/views/Playersite.js:682 msgid "Terms" msgstr "Conditions" @@ -2158,18 +2377,30 @@ msgstr "Modèle de test" msgid "Test pattern (extended)" msgstr "Mire (étendue)" -#: src/views/Playersite.js:519 +#: src/views/Playersite.js:535 msgid "Text colors" msgstr "Couleurs du texte" +#: src/misc/controls/RTMP.js:61 +msgid "The RTMP output requires the RTMP Server." +msgstr "La sortie RTMP nécessite le serveur RTMP." + +#: src/misc/controls/SRT.js:61 +msgid "The SRT output requires the SRT Server." +msgstr "La sortie SRT nécessite le serveur SRT." + #: src/views/Edit/Sources/VirtualAudio.js:131 msgid "The amplitude (0.0 - 1.0) of the generated audio stream" msgstr "L'amplitude (0,0 - 1,0) du flux audio généré" -#: src/views/Settings.js:1210 +#: src/views/Settings.js:1278 msgid "The application is using an older version of the settings." msgstr "L'application utilise une ancienne version des paramètres." +#: src/views/Edit/Sources/Network.js:611 +msgid "The available FFmpeg binary doesn't support any of the required protocols." +msgstr "Le binaire FFmpeg disponible ne supporte aucun des protocoles requis." + #: src/misc/coders/settings/Audio.js:40 msgid "The bitrate of the audio stream." msgstr "Le débit binaire du flux audio." @@ -2178,15 +2409,15 @@ msgstr "Le débit binaire du flux audio." msgid "The carrier frequency" msgstr "La fréquence porteuse" -#: src/views/Edit/index.js:352 +#: src/views/Edit/index.js:364 msgid "The channel \"{0}\" could not be deleted" msgstr "Le canal \"{0}\" n'a pas pu être supprimé" -#: src/views/Edit/index.js:361 +#: src/views/Edit/index.js:373 msgid "The channel \"{0}\" has been deleted" msgstr "Le canal \"{0}\" a été supprimé" -#: src/views/Edit/index.js:604 +#: src/views/Edit/index.js:658 msgid "The deletion of this channel can not be recovered. All publications of this channel will be removed." msgstr "La suppression de ce canal ne peut pas être récupérée. Toutes les publications de ce canal seront supprimées." @@ -2196,10 +2427,11 @@ msgid "The input profile is not complete. Please define a video and audio source msgstr "Le profil d'entrée n'est pas complet. Veuillez définir une source vidéo et audio." #: src/misc/coders/settings/Audio.js:86 +#: src/misc/filters/audio/Resample.js:78 msgid "The layout of the audio stream." msgstr "La mise en page du flux audio." -#: src/misc/controls/HLS.js:79 +#: src/misc/controls/HLS.js:112 msgid "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." msgstr "Le nombre maximum de segments de la liste de lecture. 0 contiendra tous les segments. 6 est recommandé." @@ -2211,83 +2443,84 @@ msgstr "La couleur du bruit" msgid "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." msgstr "La personne qui a associé une œuvre à cet acte a dédié l'œuvre au domaine public en renonçant à tous ses droits sur l'œuvre dans le monde entier en vertu de la loi sur le droit d'auteur, y compris tous les droits connexes et voisins, dans la mesure autorisée par la loi. Vous pouvez copier, modifier, distribuer et exécuter l'œuvre, même à des fins commerciales, le tout sans demander la permission." -#: src/views/Settings.js:1315 +#: src/views/Settings.js:1383 msgid "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." msgstr "Le nom de domaine public joignable de l'hôte sur lequel ce Restreamer est exécuté. Séparez les noms de domaine multiples par une virgule." -#: src/views/Publication/Edit.js:270 +#: src/views/Publication/Edit.js:278 msgid "The publication service \"{0}\" could not be deleted" msgstr "Le service de publication \"{0}\" n'a pas pu être supprimé." -#: src/views/Publication/Add.js:188 +#: src/views/Publication/Add.js:195 msgid "The publication service \"{0}\" has been created" msgstr "Le service de publication \"{0}\" a été créé." -#: src/views/Publication/Edit.js:276 +#: src/views/Publication/Edit.js:284 msgid "The publication service \"{0}\" has been deleted" msgstr "Le service de publication \"{0}\" a été supprimé." -#: src/views/Publication/Add.js:186 +#: src/views/Publication/Add.js:193 msgid "The publication service has been created" msgstr "Le service de publication a été créé" #: src/misc/coders/settings/Audio.js:137 +#: src/misc/filters/audio/Resample.js:129 msgid "The sample rate of the audio stream." msgstr "La fréquence d'échantillonnage du flux audio." #: src/views/Playersite.js:152 #: src/views/Playersite.js:227 -#: src/views/Publication/Player.js:189 +#: src/views/Publication/Player.js:186 msgid "The selected file is too big ({0} bytes). Only {1} bytes are allowed." msgstr "Le fichier sélectionné est trop gros ({0} octets). Seuls les {1} octets sont autorisés." #: src/views/Playersite.js:141 #: src/views/Playersite.js:216 -#: src/views/Publication/Player.js:178 +#: src/views/Publication/Player.js:175 msgid "The selected file type ({0}) is not allowed. Allowed file types are {types}" msgstr "Le type de fichier sélectionné ({0}) n'est pas autorisé. Les types de fichiers autorisés sont {types}" -#: src/views/Publication/Edit.js:230 +#: src/views/Publication/Edit.js:238 msgid "The settings for \"{0}\" have been saved" msgstr "Les paramètres de \"{0}\" ont été sauvegardés." -#: src/views/Edit/Wizard/index.js:846 +#: src/views/Edit/Wizard/index.js:861 msgid "The source doesn't provide any audio streams." msgstr "La source ne fournit pas de flux audio." -#: src/views/Edit/Profile.js:487 +#: src/views/Edit/Profile.js:520 msgid "The source doesn't provide any audio streams. Please check the <0>probe details." msgstr "La source ne fournit pas de flux audio. Veuillez vérifier les <0>détails de la sonde." -#: src/views/Edit/Wizard/index.js:854 +#: src/views/Edit/Wizard/index.js:869 msgid "The source doesn't provide any compatible audio streams." msgstr "La source ne fournit pas de flux audio compatible." -#: src/views/Edit/Wizard/index.js:392 +#: src/views/Edit/Wizard/index.js:407 msgid "The source doesn't provide any compatible video streams. Please check the <0>requirements." msgstr "La source ne fournit pas de flux vidéo compatible. Veuillez vérifier les <0>exigences." -#: src/views/Edit/Profile.js:357 +#: src/views/Edit/Profile.js:370 msgid "The source doesn't provide any video streams. Please check the <0>probe details." msgstr "La source ne fournit pas de flux vidéo. Veuillez vérifier les <0>détails de la sonde." -#: src/views/Edit/Wizard/index.js:384 +#: src/views/Edit/Wizard/index.js:399 msgid "The source doesn't provide any video streams. Please check the device." msgstr "La source ne fournit pas de flux vidéo. Veuillez vérifier l'appareil." -#: src/views/Edit/Wizard/index.js:865 +#: src/views/Edit/Wizard/index.js:880 msgid "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." msgstr "La source vidéo ne fournit pas de flux audio compatible. <0>Silence audio est recommandé. Les services tels que YouTube, Facebook & Co. nécessitent un canal audio." -#: src/views/Edit/Wizard/index.js:603 +#: src/views/Edit/Wizard/index.js:618 msgid "The video source is compatible. Select the desired resolution:" msgstr "La source vidéo est compatible. Sélectionnez la résolution souhaitée :" -#: src/views/Settings.js:1182 +#: src/views/Settings.js:1250 msgid "There are updates available. Here you get more information." msgstr "Il y a des mises à jour disponibles. Ici vous obtenez plus d'informations." -#: src/views/Settings.js:911 +#: src/views/Settings.js:978 msgid "There was a problem storing the settings. Settings not saved." msgstr "Il y a eu un problème pour enregistrer les paramètres. Paramètres non sauvegardés." @@ -2297,15 +2530,15 @@ msgstr "Il y a eu une erreur de connexion à Restreamer Core à {0}." #: src/views/Playersite.js:165 #: src/views/Playersite.js:240 -#: src/views/Publication/Player.js:202 +#: src/views/Publication/Player.js:199 msgid "There was an error during upload: {0}" msgstr "Il y a eu une erreur pendant le téléchargement : {0}" -#: src/views/Edit/Wizard/index.js:1123 +#: src/views/Edit/Wizard/index.js:1138 msgid "There was an error setting up the stream." msgstr "Il y a eu une erreur dans la configuration du flux." -#: src/views/Settings.js:909 +#: src/views/Settings.js:976 msgid "There were some errors in the settings. Settings not saved." msgstr "Il y avait des erreurs dans les paramètres. Les paramètres n'ont pas été sauvegardés." @@ -2349,7 +2582,11 @@ msgstr "Cette licence permet aux réutilisateurs de distribuer, de remixer, d'ad msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." msgstr "Cette licence permet aux réutilisateurs de distribuer, de remixer, d'adapter et d'utiliser le matériel sur n'importe quel support ou format, à condition que le créateur soit mentionné. La licence autorise l'utilisation commerciale. Si vous remixez, adaptez ou développez le matériel, vous devez accorder une licence au matériel modifié selon des conditions identiques." -#: src/views/Edit/index.js:585 +#: src/views/Edit/Sources/Network.js:435 +msgid "This protocol is unknown or not supported by the available FFmpeg binary." +msgstr "Ce protocole est inconnu ou n'est pas supporté par le binaire FFmpeg disponible." + +#: src/views/Edit/index.js:639 msgid "This source cannot be edited while it is in use. To continue, you have to disconnect the source." msgstr "Cette source ne peut pas être éditée lorsqu'elle est en cours d'utilisation. Pour continuer, vous devez déconnecter la source." @@ -2365,15 +2602,20 @@ msgstr "Cette version de l'IU ne prend pas en charge le Core connecté ({0}). L' msgid "This version of the UI is compatible." msgstr "Cette version de l'interface utilisateur est compatible." -#: src/views/Settings.js:1550 +#: src/views/Settings.js:1620 msgid "Time until an inactive viewer connection is treated as closed." msgstr "Temps jusqu'à ce qu'une connexion de téléspectateur inactive soit traitée comme fermée." -#: src/views/Settings.js:1263 -#: src/views/Settings.js:1829 +#: src/views/Settings.js:1331 +#: src/views/Settings.js:1910 +#: src/views/Settings.js:1958 msgid "Token" msgstr "Token" +#: src/views/Publication/Services/Telegram.js:13 +msgid "Transmit a Livestream to a Telegram Channel." +msgstr "Transmettre un Livestream à une chaîne Telegram." + #: src/views/Publication/Services/Image2.js:25 msgid "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." msgstr "Transmettre des instantanés de la source principale à un serveur HTTP/S. Vous trouverez plus de détails sur les paramètres <0>ici." @@ -2430,7 +2672,7 @@ msgstr "Transmettre la source principale à un serveur UDP. Vous trouverez plus msgid "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." msgstr "Transmettre la source principale à un serveur WOWZA. Vous trouverez plus de détails sur les réglages <0>ici." -#: src/views/Publication/Services/Core.js:18 +#: src/views/Publication/Services/Core.js:19 msgid "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." msgstr "Transmettre la source principale à un datarhei Core Ressource. Plus de détails sur les paramètres peuvent être trouvés <0>ici." @@ -2450,6 +2692,18 @@ msgstr "Transmettez la source principale au service d'encodage en nuage Bitmovin msgid "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." msgstr "Transmettre la source principale au service RTMP de Restream. Vous trouverez plus de détails sur les paramètres <0>ici." +#: src/views/Publication/Services/Azure.js:17 +msgid "Transmit to a Azure Media Services. More details can be found <0>here." +msgstr "Transmettre à un service de médias Azure. Plus de détails peuvent être trouvés <0>ici." + +#: src/views/Publication/Services/Linkedin.js:16 +msgid "Transmit to linkedIn. More details can be found <0>here." +msgstr "Transmettre à linkedIn. Plus de détails peuvent être trouvés <0>ici." + +#: src/views/Publication/Services/Owncast.js:15 +msgid "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." +msgstr "Transmettez votre livestream à un serveur Owncast. <0>Vous trouverez ici plus de détails sur les paramètres." + #: src/views/Publication/Services/Youtube.js:21 msgid "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." msgstr "Transmet votre vidéo sous forme de flux RTMP avec la clé requise générée dans YouTube Studio. Vous pouvez trouver plus d'informations sur la configuration d'un flux en direct sur le site de la <0>Creator Academy de YouTube." @@ -2458,36 +2712,36 @@ msgstr "Transmet votre vidéo sous forme de flux RTMP avec la clé requise gén msgid "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." msgstr "Transmet votre flux vidéo avec la clé requise, qui a été générée dans Twitter Producer. Vous trouverez plus d'informations sur la configuration d'un flux en direct sur le site <0>Producteur de Twitter." -#: src/misc/coders/Encoders/video/X264.js:83 -#: src/misc/coders/Encoders/video/X265.js:83 +#: src/misc/coders/Encoders/video/X264.js:93 +#: src/misc/coders/Encoders/video/X265.js:93 msgid "Tune" msgstr "Tune" -#: src/views/Edit/Sources/Network.js:409 +#: src/views/Edit/Sources/Network.js:488 #: src/views/Edit/Wizard/Sources/Network.js:77 msgid "UDP transport" msgstr "Transport UDP" -#: src/views/Settings.js:1111 +#: src/views/Settings.js:1178 msgid "Unable to load the config." msgstr "Impossible de charger la configuration." -#: src/views/Settings.js:1245 +#: src/views/Settings.js:1313 msgid "Unique ident on the service." msgstr "Identifiant unique sur le service." -#: src/views/Main/Egress.js:91 +#: src/views/Main/Egress.js:96 msgid "Unknown" msgstr "Inconnu" -#: src/views/Playersite.js:597 +#: src/views/Playersite.js:613 msgid "Unselected" msgstr "Non sélectionné" -#: src/views/Playersite.js:482 -#: src/views/Playersite.js:499 -#: src/views/Playersite.js:634 -#: src/views/Publication/Player.js:373 +#: src/views/Playersite.js:498 +#: src/views/Playersite.js:515 +#: src/views/Playersite.js:650 +#: src/views/Publication/Player.js:376 msgid "Upload" msgstr "Télécharger" @@ -2495,7 +2749,7 @@ msgstr "Télécharger" msgid "Uploading the file failed" msgstr "Le téléchargement du fichier a échoué" -#: src/views/Publication/Player.js:232 +#: src/views/Publication/Player.js:229 msgid "Uploading the logo failed" msgstr "Le téléchargement du logo a échoué" @@ -2509,15 +2763,15 @@ msgstr "Temps de fonctionnement" msgid "Use Auth0 for your running Restreamer Core. More <0>details." msgstr "Utilisez Auth0 pour votre noyau Restreamer en cours d'exécution. Plus de <0>détails." -#: src/views/Edit/index.js:426 +#: src/views/Edit/index.js:438 msgid "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." msgstr "Utilisez l'assistant (<0/>) pour une configuration rapide et facile, ou éditez (<1/>) les sources directement en mode personnalisé." -#: src/views/Edit/Wizard/index.js:1068 +#: src/views/Edit/Wizard/index.js:1083 msgid "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Utilisez vos droits d'auteur et choisissez la bonne licence d'image. Qu'elle soit libre pour tous ou fortement restreinte. Discutez brièvement de ce que les autres sont autorisés à faire avec votre image." -#: src/views/Edit/index.js:530 +#: src/views/Edit/index.js:584 msgid "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Utilisez vos droits d'auteur et choisissez la bonne licence d'image. Qu'il s'agisse d'une licence gratuite pour tous ou d'une licence très restreinte. Discutez brièvement de ce que les autres sont autorisés à faire avec votre image." @@ -2525,8 +2779,8 @@ msgstr "Utilisez vos droits d'auteur et choisissez la bonne licence d'image. Qu' msgid "User registration" msgstr "Enregistrement de l'utilisateur" -#: src/views/Edit/Sources/Network.js:370 -#: src/views/Edit/Wizard/Sources/Network.js:81 +#: src/views/Edit/Sources/Network.js:448 +#: src/views/Edit/Wizard/Sources/Network.js:84 #: src/views/Login.js:272 #: src/views/Publication/Services/DASH.js:195 #: src/views/Publication/Services/DaCast.js:131 @@ -2534,18 +2788,18 @@ msgstr "Enregistrement de l'utilisateur" #: src/views/Publication/Services/RTSP.js:153 #: src/views/Publication/Services/Red5.js:146 #: src/views/Publication/Services/WOWZA.js:168 -#: src/views/Settings.js:1440 -#: src/views/Settings.js:1598 +#: src/views/Settings.js:1510 +#: src/views/Settings.js:1668 msgid "Username" msgstr "Nom d'utilisateur :" -#: src/views/Settings.js:1446 -#: src/views/Settings.js:1606 +#: src/views/Settings.js:1516 +#: src/views/Settings.js:1676 msgid "Username for authorization." msgstr "Nom d'utilisateur pour l'autorisation." -#: src/views/Edit/Sources/Network.js:375 -#: src/views/Edit/Wizard/Sources/Network.js:83 +#: src/views/Edit/Sources/Network.js:453 +#: src/views/Edit/Wizard/Sources/Network.js:90 msgid "Username for the device." msgstr "Nom d'utilisateur pour l'appareil." @@ -2553,28 +2807,32 @@ msgstr "Nom d'utilisateur pour l'appareil." msgid "VPU ID" msgstr "ID VPU" -#: src/views/Publication/Add.js:476 +#: src/misc/filters/video/VFlip.js:65 +msgid "Vertical Flip" +msgstr "Flip vertical" + +#: src/views/Publication/Add.js:451 msgid "Video" msgstr "Vidéo" #: src/views/Edit/Sources/AVFoundation.js:126 -#: src/views/Edit/Sources/Raspicam.js:89 -#: src/views/Edit/Sources/V4L.js:109 +#: src/views/Edit/Sources/Raspicam.js:92 +#: src/views/Edit/Sources/V4L.js:112 #: src/views/Edit/Wizard/Sources/AVFoundation.js:82 #: src/views/Edit/Wizard/Sources/Raspicam.js:86 #: src/views/Edit/Wizard/Sources/V4L.js:105 msgid "Video device" msgstr "Appareil vidéo" -#: src/views/Edit/Profile.js:320 +#: src/views/Edit/Profile.js:333 #: src/views/Edit/ProfileSummary.js:66 -#: src/views/Publication/Edit.js:517 +#: src/views/Publication/Edit.js:490 msgid "Video settings" msgstr "Paramètres vidéo" -#: src/views/Edit/Wizard/index.js:264 -#: src/views/Edit/Wizard/index.js:354 -#: src/views/Edit/Wizard/index.js:596 +#: src/views/Edit/Wizard/index.js:279 +#: src/views/Edit/Wizard/index.js:369 +#: src/views/Edit/Wizard/index.js:611 msgid "Video setup" msgstr "Configuration vidéo" @@ -2587,18 +2845,26 @@ msgstr "Source vidéo" #: src/Footer.js:245 #: src/views/Main/Publication.js:173 msgid "Viewer" -msgstr "Visionneuse" +msgstr "Spectateurs" #: src/views/Edit/Sources/VirtualAudio.js:187 #: src/views/Edit/Sources/VirtualVideo.js:206 msgid "Virtual source" msgstr "Source virtuelle" +#: src/misc/filters/audio/Volume.js:44 +msgid "Volume" +msgstr "Volume" + #: src/views/Welcome.js:27 msgid "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." msgstr "Bienvenue à Restreamer v2, la solution pour la publication rapide et facile de vidéos. Gratuit pour une utilisation privée et commerciale. Plus d'aide dans les <0>docs." -#: src/views/Settings.js:1585 +#: src/misc/controls/HLS.js:74 +msgid "Where to store the HLS playlist and segments. In-Memory is recommended." +msgstr "Où stocker la liste de lecture et les segments HLS. Le stockage en mémoire est recommandé." + +#: src/views/Settings.js:1655 msgid "Write protection" msgstr "Protection de l'écriture" @@ -2606,32 +2872,32 @@ msgstr "Protection de l'écriture" msgid "YUV test pattern" msgstr "Mire de test YUV" -#: src/views/Edit/Wizard/index.js:1177 +#: src/views/Edit/Wizard/index.js:1192 msgid "Yes" msgstr "Oui" -#: src/views/Edit/Wizard/index.js:1159 +#: src/views/Edit/Wizard/index.js:1174 msgid "You can't abort the wizard because at least one input must be defined." msgstr "Vous ne pouvez pas interrompre l'assistant car au moins une entrée doit être définie." -#: src/views/Settings.js:2041 +#: src/views/Settings.js:2192 msgid "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" msgstr "Vous avez modifié la configuration. Pour que les changements prennent effet, vous devez redémarrer l'application. Voulez-vous redémarrer maintenant ?" -#: src/views/Main/index.js:347 +#: src/views/Main/index.js:376 #: src/views/Publication/Process.js:73 msgid "You have to reconnect manually" msgstr "Vous devez vous reconnecter manuellement" -#: src/views/Publication/Edit.js:456 +#: src/views/Publication/Edit.js:432 msgid "You have unsaved changes. Please save them before you can control the service again." msgstr "Vous avez des modifications non sauvegardées. Veuillez les sauvegarder avant de pouvoir contrôler à nouveau le service." -#: src/views/Edit/Wizard/index.js:616 +#: src/views/Edit/Wizard/index.js:631 msgid "Your stream needs to be encoded, but there's no suitable encoder available." msgstr "Votre flux doit être encodé, mais aucun encodeur approprié n'est disponible." -#: src/views/Edit/Wizard/index.js:623 +#: src/views/Edit/Wizard/index.js:638 msgid "Your stream needs to be encoded. Choose the desired encoder:" msgstr "Votre flux doit être encodé. Choisissez l'encodeur souhaité :" @@ -2643,7 +2909,7 @@ msgstr "bleu" msgid "brown" msgstr "brun" -#: src/views/Publication/Player.js:331 +#: src/views/Publication/Player.js:334 msgid "iframe code" msgstr "code iframe" diff --git a/src/locales/it/messages.js b/src/locales/it/messages.js index 5907e59..3423ea5 100644 --- a/src/locales/it/messages.js +++ b/src/locales/it/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"<0>Compatibility list":"<0>Elenco di compatibilità","<0>Show probe details":"<0>Mostra dettagli sonda","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Endpoint API non trovato. Impostazioni non salvate.","AVFoundation":"AVFoundation","Abort":"Abort","About":"A proposito di","Add":"Aggiungi","Add Publication":"Aggiungi pubblicazione","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Aggiungere widget e stili esterni al sito di pubblicazione. Può trovare alcuni esempi nella pagina di aiuto.","Add new channel":"Aggiungere un nuovo canale","Add: {0}":["Aggiungi: ",["0"]],"Address":"Indirizzo","Address for the background image.":"Indirizzo per l'immagine di sfondo.","Address to listen on for HTTP requests.":"Indirizzo da ascoltare per le richieste HTTP.","Address to listen on for HTTPS requests.":"Indirizzo su cui ascoltare le richieste HTTPS.","Adjust publication site colors and background as you like.":"Regoli i colori del sito di pubblicazione e lo sfondo come preferisce.","Advanced monitoring":"Monitoraggio avanzato","Advanced settings":"Impostazioni avanzate","Advanced setup":"Configurazione avanzata","Alerting by email":"Avvisi via e-mail","All":"Tutti","All important system settings.":"Tutte le impostazioni importanti del sistema.","Allow all referrer":"Consentire tutti i referenti","Allow counting how many viewers the stream has.":"Permette di contare quanti spettatori ha lo stream.","Amplitude":"Ampiezza","An environment variable sets this value.":"Una variabile d'ambiente imposta questo valore.","App":"App","Application":"Applicazione","Are you sure you want to abort the wizard?":"È sicuro di voler interrompere la procedura guidata?","Audio":"Audio","Audio Device":"Dispositivo audio","Audio device":"Dispositivo audio","Audio from device":"Audio dal dispositivo","Audio settings":"Impostazioni audio","Audio setup":"Configurazione audio","Auth0":"Auth0","Auth0 Tenant":"Auth0 Inquilino","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 non è attualmente disponibile perché questa interfaccia è caricata da un'origine non sicura.","Author":"Autore","Authorization":"Autorizzazione","Automatic cleanup of all media data":"Pulizia automatica di tutti i dati dei media","Autoplay":"Autoplay","Available":"Disponibile","Back":"Indietro","Background colors":"Colori di sfondo","Background image":"Immagine di sfondo","Backup URL":"URL di backup","Backup server":"Server di backup","Backup stream":"Flusso di backup","Backup stream key":"Chiave del flusso di backup","Bandwidth":"Larghezza di banda","Bandwidth control":"Controllo della larghezza di banda","Banner":"Banner","Basic":"Di base","Beep factor":"Fattore bip","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Descriva brevemente ciò che il pubblico vedrà durante il live stream.","Button color":"Colore del pulsante","Cache for files on /data.":"Cache per i file su /data.","Cache time (Seconds)":"Tempo di cache (secondi)","Cache types":"Tipi di cache","Capture clicks":"Cattura i clic","Capture cursor":"Cattura del cursore","Channel \"{0}\" saved":["Canale \"",["0"],"\" salvato"],"Channels":"Canali","Check for updates":"Controlla gli aggiornamenti","Check the requirements":"Controlla i requisiti","Choose a video stream":"Scegliere un flusso video","Choose an audio stream":"Scegliere un flusso audio","Choose an input device ...":"Scegliere un dispositivo di input ...","Choose codec ...":"Scegliere il codec ...","Choose tenant ...":"Scelga l'inquilino ...","Chunk":"Chunk","Close":"Chiudere","Code injection":"Iniezione di codice","Codec":"Codec","Color":"Colore","Config":"Configurazione","Confirm password":"Confermare la password","Connect":"Collegare","Connected device":"Dispositivo collegato","Connected since <0/>":"Collegato da <0/>","Connecting ...":"Collegamento ...","Connecting to Restreamer Core ...":"Collegamento a Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"La connessione a Restreamer Core non è riuscita, probabilmente a causa del contenuto misto.","Content":"Contenuto","Content URL":"Content URL","Cores":"Nuclei","Create user":"Creare un utente","Creative Commons":"Creative Commons","Custom ...":"Personalizzato ...","Custom JSON config for datarhei Core.":"Configurazione JSON personalizzata per datarhei Core.","Custom audio device":"Dispositivo audio personalizzato","Custom audio index":"Indice audio personalizzato","Custom bitrate (kbit/s)":"Bitrate personalizzato (kbit/s)","Custom code injection":"Iniezione di codice personalizzato","Custom delay":"Ritardo personalizzato","Custom device":"Dispositivo personalizzato","Custom format":"Formato personalizzato","Custom framerate":"Framerate personalizzato","Custom keyframe interval":"Intervallo keyframe personalizzato","Custom layout":"Layout personalizzato","Custom sampling (Hz)":"Campionamento personalizzato (Hz)","Custom scale":"Scala personalizzata","Custom size":"Dimensione personalizzata","Custom video device":"Dispositivo video personalizzato","Custom video index":"Indice video personalizzato","Data copied to clipboard":"Dati copiati negli appunti","Death color":"Colore della morte","Decoder":"Decoder","Default":"Default","Delay":"Ritardo","Delay (ms)":"Ritardo (ms)","Delete":"Cancellare","Deleting a publication service cannot be reversed. The publication stops immediately.":"L'eliminazione di un servizio di pubblicazione non può essere annullata. La pubblicazione si interrompe immediatamente.","Delivering mode":"Modalità di consegna","Description":"Descrizione","Design":"Design","Device":"Dispositivo","Disconnect":"Scollegare","Disconnect & Continue":"Disconnettersi e continuare","Disconnecting ...":"Scollegamento ...","Disk":"Disco","Disk cache":"Cache del disco","Disk storage":"Archiviazione su disco","Do you really want to restart the application now?":"Vuoi davvero riavviare l'applicazione ora?","Do you want to delete \"{0}\"?":["Vuole cancellare \"",["0"],"\"?"],"Do you want to delete {title}?":["Vuoi cancellare ",["titolo"],"?"],"Do you want to disconnect \"{0}\"?":["Vuole disconnettere \"",["0"],"\"?"],"Docs":"Documenti","Documentation":"Documentazione","Dup. frames":"Telai duplicati","EDIT: Player":"EDIT: Giocatore","EDIT: Publication Website":"EDIT: Sito web di pubblicazione","Edit":"Modifica","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Modifichi le fonti audio e video per il live stream. Aggiunga una descrizione e imposti la licenza di contenuto desiderata.","Edit: {title}":["Modifica: ",["titolo"]],"Embed":"Incorporare","Enable RTMP server ...":"Abilitare il server RTMP ...","Enable a periodic beep every second with this value times the carrier frequency":"Abilita un bip periodico ogni secondo con questo valore moltiplicato per la frequenza della portante","Enable backup stream":"Attiva il flusso di backup","Enable nerd statistics":"Abilita le statistiche dei nerd","Enable primary stream":"Attiva il flusso primario","Enable snapshots":"Abilita le istantanee","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"L'abilitazione dell'autorizzazione è fortemente consigliata. Altrimenti, chiunque può accedere a questa istanza.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"L'abilitazione dell'autenticazione di base è fortemente consigliata. Altrimenti, chiunque potrebbe scrivere dati su /memfs.","Encoder":"Encoder","Encoding":"Codifica","Encryption":"Crittografia","Enter a name for the new channel.":"Inserisca un nome per il nuovo canale.","Enter password":"Inserire la password","Enter the address of your network source:":"Inserisci l'indirizzo della tua sorgente di rete:","Enter username":"Inserisca il nome utente","Entropy coder":"Codificatore di entropia","Error":"Errore","Error while copying data to clipboard":"Errore durante la copia dei dati negli appunti","Error: {0}":["Errore: ",["0"]],"Expands the area above the channel list (live chat).":"Espande l'area sopra l'elenco dei canali (live chat).","Expands the area under the channel description (comment boxes).":"Espande l'area sotto la descrizione del canale (caselle di commento).","Expert mode":"Modalità esperto","Extend channel list":"Estendere l'elenco dei canali","Extend content":"Estendere il contenuto","Extend footer":"Estendere il piè di pagina","Extend header":"Estendere l'intestazione","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Impossibile creare il servizio di pubblicazione (",["0"],")"],"Failed to create publication website files.":"Impossibile creare i file del sito web della pubblicazione.","Failed to probe the source. Please check the <0>probe details.":"Impossibile sondare la sorgente. Per favore controlla i <0>dettagli della sonda.","Failed to refresh token: {0}":["Impossibile aggiornare il token: ",["0"]],"Failed to save ingest metadata":"Non è riuscito a salvare i metadati di ingest","Failed to stop process":"Non è riuscito a fermare il processo","Failed to store player size setting.":"Impossibile memorizzare l'impostazione delle dimensioni del giocatore.","Failed to store publication service ({0})":["Impossibile memorizzare il servizio di pubblicazione (",["0"],")"],"Failed to update ingest process ({0})":["Fallito l'aggiornamento del processo di ingest (",["0"],")"],"Failed to update the player":"Non è riuscito ad aggiornare il giocatore","Failed to verify the source. Please check the address.":"Impossibile verificare la fonte. Si prega di controllare l'indirizzo.","Finish":"Finitura","Flags":"Bandiere","For Javascripts.":"Per i Javascript.","For Stylesheets.":"Per i fogli di stile.","Force input framerate":"Forzare il framerate in ingresso","Format":"Formato","Frame drops":"Cadute del telaio","Framebuffer":"Framebuffer","Framerate":"Framerate","Frequency (Hz)":"Frequenza (Hz)","GET":"GET","General":"Generale","Google Analytics ID":"ID di Google Analytics","Google Analytics Tracker Name":"Nome del tracker di Google Analytics","HLS":"HLS","HLS statistic for the In-memory storage":"Statistica HLS per l'archiviazione In-memory","HTTP and HTTPS":"HTTP e HTTPS","HTTP port":"Porta HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Porta HTTPS","Hardware device":"Dispositivo hardware","Header":"Intestazione","Headline":"Titolo","Hosted Restreamer interface":"Interfaccia Restreamer in hosting","Human readable name on the service.":"Nome leggibile dall'uomo del servizio.","IP address":"Indirizzo IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Se ha cambiato le porte, è possibile che Restreamer Core sia già stato riavviato, ma ora è disponibile su una porta diversa.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Se ha attivato Let's Encrypt TLS, potrebbe essere necessario un po' di tempo per acquisire i certificati. Si assicuri che Restreamer Core sia raggiungibile tramite la porta 80 da Internet. Controlli il registro della console di Restreamer Core.","Ignore IP ranges":"Ignora gli intervalli IP","Image URL":"URL dell'immagine","Imprint":"Impronta","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Oltre al player, Restreamer offre una landingpage completa, che può utilizzare per presentare il suo live stream in modo semplice e veloce.","In-memory":"In-memory","In-memory storage":"Archiviazione in memoria","Incompatible":"Incompatibile","Inherit":"Eredita","Inject 1":"Iniettare 1","Inject 2":"Iniettare 2","Inject 3":"Iniettare 3","Inject 4":"Iniettare 4","Internal HLS server":"Server HLS interno","Internal RTMP server":"Server RTMP interno","Interval (seconds)":"Intervallo (secondi)","Issue alert":"Allarme problemi","Keyframe interval (seconds)":"Intervallo dei fotogrammi chiave (secondi)","Layout":"Layout","Let's Encrypt certification":"Certificazione Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt richiede uno o più nomi di dominio pubblico e una porta 80/TCP accessibile.","Level":"Livello","Level of system protocol.":"Livello di protocollo del sistema.","License":"Licenza","Life color":"Colore della vita","Linecolor":"Linecolor","Link":"Link","Link, mouseover":"Link, passaggio del mouse","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Elenco di intervalli IP in notazione CIDR, ad esempio 127.0.0.1/32, che le statistiche non registreranno, un intervallo IP per riga. Lasciare vuoto per registrare tutte le sessioni.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Elenco di estensioni di file da mettere in cache (ad esempio \".html\"), una per riga. Lasciare vuoto per mettere in cache tutti i tipi di file.","List size (segments)":"Dimensione della lista (segmenti)","Live-Streaming to Facebook Live RTMP service":"Live-Streaming verso il servizio RTMP di Facebook Live","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Live-Streaming su Instagram Live RTMP Service. La chiave di streaming richiede un servizio come <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Live-Streaming su Twitch Live RTMP Service.","Live-Streaming to Vimeo Live RTMP Service":"Trasmissione in diretta su Vimeo Live RTMP Service","Livesource ID":"ID Livesource","Log level":"Livello di registro","Logging":"Registrazione","Login":"Accesso","Login failed: Couldn't load API details":"Accesso fallito: Impossibile caricare i dettagli API","Login failed: {0}":["Accesso fallito: ",["0"]],"Login/JWT authorization":"Accesso/Autorizzazione JWT","Logo":"Logo","Logout":"Disconnessione","MB":"MB","Main Source":"Fonte principale","Main channel":"Canale principale","Main channel not found":"Canale principale non trovato","Main channel saved":"Canale principale salvato","Main page channel (index.html).":"Canale della pagina principale (index.html).","Maintainer:":"Manutentore:","Maximum allowed cache size, 0 for unlimited.":"Dimensione massima consentita della cache, 0 per illimitata.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Megabyte massimi consentiti di RAM per /memfs, 0 per illimitato.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Megabyte massimi consentiti da consumare dal disco rigido. 0 per illimitato.","Maximum bandwidth Mbit/s":"Larghezza di banda massima Mbit/s","Maximum delay in milliseconds.":"Ritardo massimo in millisecondi.","Maximum file size (Megabytes)":"Dimensione massima del file (Megabyte)","Maximum file size to put in cache.":"Dimensione massima del file da inserire nella cache.","Maximum log histroy":"Istanza di log massima","Maximum log lines":"Linee di registro massime","Maximum size (Megabytes)":"Dimensione massima (Megabyte)","Maximum viewer idle time (Seconds)":"Tempo massimo di inattività del telespettatore (secondi)","Maximum viewers":"Spettatori massimi","Memory":"Memoria","Meta information":"Meta informazioni","Metadata":"Metadati","Mold":"Stampo","More about Twitter's copyright <0>here.":"Maggiori informazioni sul copyright di Twitter <0>qui.","More about YouTube's copyright <0>here.":"Maggiori informazioni sul copyright di YouTube <0>qui.","More about licenses here":"Maggiori informazioni sulle licenze qui","More about the service":"Maggiori informazioni sul servizio","Mute":"Muto","Name":"Nome","Name for the template. If the name already exists, it will be overwritten.":"Nome del modello. Se il nome esiste già, verrà sovrascritto.","Network":"Rete","Network source":"Fonte della rete","Next":"Prossimo","Next: Audio":"Prossimo: Audio","Next: Video setup":"Prossimo: Impostazione video","No":"No","No audio":"Nessun audio","No audio stream available":"Nessun flusso audio disponibile","No input device available":"Nessun dispositivo di input disponibile","No live stream was detected. Please check the software that sends the stream.":"Non è stato rilevato alcun flusso in diretta. Si prega di controllare il software che invia il flusso.","No source selected":"Nessuna fonte selezionata","No sources available":"Nessuna fonte disponibile","No suitable encoder found.":"Nessun encoder adatto trovato.","No video":"Nessun video","No video stream available":"Nessun flusso video disponibile","Node ID":"ID del nodo","Noise":"Rumore","None":"Nessuno","Notes":"Note","Number of log lines to keep.":"Numero di righe di registro da conservare.","Number of logs to keep for each process.":"Numero di registri da conservare per ogni processo.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Un referente per riga, ad esempio http://www.example.com.","Open":"Aperto","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Il passthrough (copia) deve essere disattivato solo se necessario. Ogni codifica richiede risorse CPU/GPU aggiuntive.","Password":"Password","Password for authorization.":"Password per l'autorizzazione.","Password for the device.":"Password per il dispositivo.","Persist viewer statistics":"Persistere le statistiche dei visualizzatori","Pixel format":"Formato pixel","Plan: <0>Starter":"Piano: <0>Inizio","Platforms":"Piattaforme","Playback":"Riproduzione","Player":"Giocatore","Player URL":"URL del giocatore","Player settings saved":"Impostazioni del giocatore salvate","Playersite":"Playersite","Playlist":"Playlist","Please check the <0>process log":"Si prega di controllare il <0>log del processo","Please contact the operator of the service and check what happens.":"Contatta l'operatore del servizio e verifica cosa succede.","Please select a file to upload.":"Seleziona un file da caricare.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Se possibile, utilizzi \"Passthrough (copia)\". La codifica richiede risorse CPU/GPU aggiuntive.","Please wait. Probe stream data ...":"Si prega di attendere. Flusso di dati della sonda ...","Please wait. Setting up the stream ...":"Si prega di attendere. Impostazione del flusso ...","Port":"Porto","Position":"Posizione","Preset":"Preset","Primary stream":"Flusso primario","Primary stream key":"Chiave di flusso primaria","Probe":"Sonda","Process":"Processo","Process control":"Controllo del processo","Process debug":"Debug del processo","Process debug report":"Rapporto di debug del processo","Process details":"Dettagli del processo","Process report":"Rapporto sul processo","Processing & Control":"Elaborazione e controllo","Profile":"Profilo","Protocol":"Protocollo","Protocols":"Protocolli","Public domain/s":"Dominio pubblico/i","Publication service not found":"Servizio di pubblicazione non trovato","Publication website settings saved":"Impostazioni del sito web di pubblicazione salvate","Publications":"Pubblicazioni","Pull Mode":"Modo di tirare","Pull or recieve the data:":"Tirare o ricevere i dati:","Quality":"Qualità","RGB test pattern":"Modello di test RGB","RTMP app for publishing.":"App RTMP per la pubblicazione.","RTMP server":"Server RTMP","RTMP server is not enabled":"Il server RTMP non è abilitato","RTMP server listen address.":"Indirizzo di ascolto del server RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Token RTMP per la pubblicazione e la riproduzione. Il token è il valore del parametro di query URL 'token'.","RTMP/S":"RTMP/S","RTMPS server":"Server RTMPS","RTSP":"RTSP","Raspberry Pi camera":"Fotocamera Raspberry Pi","Rate control":"Controllo del tasso","Ratio":"Rapporto","Read input at native speed":"Leggere l'input a velocità nativa","Receive Mode":"Modalità di ricezione","Reconnect":"Ricollegare","Reconnect delay (seconds)":"Ritardo di riconnessione (secondi)","Reconnecting in {0}s":["Riconnettersi in ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["La riconnessione a Restreamer Core non è riuscita negli ultimi ",["RETRIES"]," secondi."],"Reconnecting to Restreamer Core failed.":"La riconnessione a Restreamer Core non è riuscita.","Refresh":"Aggiornamento","Region":"Regione","Reload":"Ricarica","Remove the oldest entries if the /memfs is full":"Rimuovere le voci più vecchie se la /memfs è piena","Requires activation":"Richiede l'attivazione","Restart":"Riavviare","Restart required":"Riavvio richiesto","Restarting":"Riavvio","Restarting Restreamer Core ...":"Riavvio di Restreamer Core ...","Restarting the application failed.":"Il riavvio dell'applicazione non è riuscito.","Restreamer Service":"Servizio Restreamer","Retrieving stream data ...":"Recuperare i dati del flusso ...","Retry":"Riprova","Rule":"Regola","Sampling":"Campionamento","Save":"Salva","Scale":"Scala","Seconds to keep files in cache.":"Secondi per mantenere i file nella cache.","Seconds until a process is restarted.":"Secondi fino al riavvio di un processo.","Seconds until a staled process is terminated.":"Secondi fino alla terminazione di un processo in stallo.","Seconds until the snapshot/thumbnail of the video source is updated.":"Secondi fino all'aggiornamento dell'istantanea/ miniatura della sorgente video.","Security":"Sicurezza","Security token":"Token di sicurezza","Seekbar color":"Colore Seekbar","Segment length (seconds)":"Lunghezza del segmento (secondi)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Il segmento verrà tagliato sul fotogramma chiave successivo, una volta trascorso questo tempo. Si consiglia il valore 2.","Segmentation":"Segmentazione","Select a device:":"Selezionare un dispositivo:","Select audio source:":"Seleziona la sorgente audio:","Select source ...":"Selezionare la fonte ...","Select video source:":"Selezionare la sorgente video:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Selezioni se prelevare il flusso da una <0>sorgente di rete (come una telecamera di rete) o dal <1>server RTMP interno (ad esempio, i flussi OBS verso il Restreamer).","Select your encoding setting:":"Seleziona la tua impostazione di codifica:","Selected":"Selezionato","Selected channel":"Canale selezionato","Selection":"Selezione","Send anonymous metrics (helps us for future development)":"Invii metriche anonime (ci aiuta per lo sviluppo futuro)","Send stream to this address:":"Invia il flusso a questo indirizzo:","Send video to Framebuffer":"Invia il video al Framebuffer","Server":"Server","Service":"Servizio","Service name":"Nome del servizio","Service token for monitoring.":"Token di servizio per il monitoraggio.","Sessions":"Sessioni","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Imposta un limite di larghezza di banda in Mbit al secondo per il trasferimento di dati HLS in uscita. Tutti i servizi, come RTMP e i processi in uscita, sono inclusi nel calcolo. Se la larghezza di banda viene superata, gli spettatori HLS ricevono il codice di stato HTTP 509 (Limite di larghezza di banda superato). 0 è illimitato.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Imposta un limite di visualizzazione per le sessioni HLS. Se il limite viene superato, gli spettatori HLS ricevono il codice di stato HTTP 509 (Bandwidth Limit Exceeded). 0 è illimitato.","Setting for connection to the service.":"Impostazione per la connessione al servizio.","Settings":"Impostazioni","Settings (expert mode)":"Impostazioni (modalità esperto)","Settings for /data path. The access is protected by":"Impostazioni per il percorso /data. L'accesso è protetto da","Settings for /memfs path.":"Impostazioni per il percorso /memfs.","Settings saved. All changes will be applied after restarting the application.":"Impostazioni salvate. Tutte le modifiche saranno applicate dopo il riavvio dell'applicazione.","Share button":"Tasto condividi","Shows a reference to the project.":"Mostra un riferimento al progetto.","Sign up (free)":"Si iscriva (gratis)","Silence":"Silenzio","Silence Audio":"Silenzio Audio","Sine":"Seno","Sitename":"Nome del sito","Size":"Dimensione","Snapshot":"Snapshot","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Timeout della presa (microsecondi)","Software":"Software","Source":"Fonte","Speed":"Velocità","Stale timeout (seconds)":"Timeout di stallo (secondi)","Statistics":"Statistiche","Storage":"Stoccaggio","Stores the viewer statistics to the disk.":"Memorizza le statistiche del visualizzatore sul disco.","Stream":"Flusso","Stream URL":"URL del flusso","Stream key":"Chiave del flusso","Stream name":"Nome del flusso","Stream names":"Nomi dei flussi","Support datarhei Restreamer":"Supporto datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Supporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT e altro.","System":"Sistema","Template":"Modello","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Modello da utilizzare per la creazione del sito web della pubblicazione. Il pulsante Elimina rimuove la selezione dal sistema.","Terms":"Termini","Test pattern":"Modello di test","Test pattern (extended)":"Modello di test (esteso)","Text colors":"Colori del testo","The amplitude (0.0 - 1.0) of the generated audio stream":"L'ampiezza (0.0 - 1.0) del flusso audio generato","The application is using an older version of the settings.":"L'applicazione sta usando una vecchia versione delle impostazioni.","The bitrate of the audio stream.":"Il bitrate del flusso audio.","The carrier frequency":"La frequenza portante","The channel \"{0}\" could not be deleted":["Non è stato possibile eliminare il canale \"",["0"],"\"."],"The channel \"{0}\" has been deleted":["Il canale \"",["0"],"\" è stato cancellato."],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"La cancellazione di questo canale non può essere recuperata. Tutte le pubblicazioni di questo canale saranno rimosse.","The input profile is not complete. Please define a video and audio source.":"Il profilo di ingresso non è completo. Si prega di definire una sorgente video e audio.","The layout of the audio stream.":"Il layout del flusso audio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Il numero massimo di segmenti della playlist. 0 conterrà tutti i segmenti. 6 è consigliato.","The noise color":"Il colore del rumore","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"La persona che ha associato un'opera con questo atto ha dedicato l'opera al pubblico dominio rinunciando a tutti i suoi diritti sull'opera in tutto il mondo secondo la legge sul diritto d'autore, compresi tutti i diritti connessi e vicini, nella misura consentita dalla legge. Puoi copiare, modificare, distribuire ed eseguire l'opera, anche per scopi commerciali, il tutto senza chiedere il permesso.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Il nome di dominio pubblico raggiungibile dell'host su cui gira questo Restreamer. Separi i nomi di dominio multipli con una virgola.","The publication service \"{0}\" could not be deleted":["Il servizio di pubblicazione \"",["0"],"\" non può essere eliminato"],"The publication service \"{0}\" has been created":["Il servizio di pubblicazione \"",["0"],"\" è stato creato"],"The publication service \"{0}\" has been deleted":["Il servizio di pubblicazione \"",["0"],"\" è stato cancellato"],"The publication service has been created":"Il servizio di pubblicazione è stato creato","The sample rate of the audio stream.":"La frequenza di campionamento del flusso audio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Il file selezionato è troppo grande (",["0"]," byte). Sono ammessi solo ",["1"]," byte."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Il tipo di file selezionato (",["0"],") non è consentito. I tipi di file consentiti sono ",["types"]],"The settings for \"{0}\" have been saved":["Le impostazioni per \"",["0"],"\" sono state salvate"],"The source doesn't provide any audio streams.":"La fonte non fornisce alcun flusso audio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"La sorgente non fornisce alcun flusso audio. Per favore controlla i <0>dettagli della sonda.","The source doesn't provide any compatible audio streams.":"La fonte non fornisce alcun flusso audio compatibile.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"La fonte non fornisce alcun flusso video compatibile. Per favore controlla i <0>requisiti.","The source doesn't provide any video streams. Please check the <0>probe details.":"La fonte non fornisce alcun flusso video. Per favore controlla i <0>dettagli della sonda.","The source doesn't provide any video streams. Please check the device.":"La fonte non fornisce alcun flusso video. Si prega di controllare il dispositivo.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"La sorgente video non fornisce alcun flusso audio compatibile. Si raccomanda <0>Audio silenzioso. I servizi come YouTube, Facebook & Co. richiedono un canale audio.","The video source is compatible. Select the desired resolution:":"La sorgente video è compatibile. Selezionare la risoluzione desiderata:","There are updates available. Here you get more information.":"Sono disponibili degli aggiornamenti. Qui può ottenere maggiori informazioni.","There was a problem storing the settings. Settings not saved.":"Si è verificato un problema nella memorizzazione delle impostazioni. Le impostazioni non sono state salvate.","There was an error connecting to Restreamer Core at {0}.":["Si è verificato un errore di connessione a Restreamer Core a ",["0"],"."],"There was an error during upload: {0}":["Si è verificato un errore durante il caricamento: ",["0"]],"There was an error setting up the stream.":"C'è stato un errore nell'impostazione del flusso.","There were some errors in the settings. Settings not saved.":"Ci sono stati alcuni errori nelle impostazioni. Impostazioni non salvate.","There's no login method available.":"Non c'è un metodo di accesso disponibile.","This is a dummy service that explains to you the concepts of service.":"Questo è un servizio fittizio che le spiega i concetti di servizio.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Non si tratta necessariamente di un errore. Tuttavia, potrebbe essere necessario un po' più di tempo perché Restreamer Core si riavvii...","This is to mention the copyright regulations for the target of this service.":"Questo per citare le norme sul copyright per il target di questo servizio.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Questa licenza permette ai riutilizzatori di copiare e distribuire il materiale in qualsiasi mezzo o formato solo in forma non adattata, e solo a condizione che venga data attribuzione al creatore. La licenza permette l'uso commerciale.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Questa licenza permette ai riutilizzatori di copiare e distribuire il materiale in qualsiasi mezzo o formato solo in forma non adattata, solo per scopi non commerciali, e solo a condizione che venga data attribuzione al creatore.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato solo per scopi non commerciali, e solo finché viene data attribuzione al creatore.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato solo per scopi non commerciali, e solo finché viene data l'attribuzione al creatore. Se remixate, adattate o costruite sul materiale, dovete dare in licenza il materiale modificato sotto gli stessi termini.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato, purché venga data l'attribuzione al creatore. La licenza permette l'uso commerciale.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato, purché venga data l'attribuzione al creatore. La licenza permette l'uso commerciale. Se remixate, adattate o costruite sul materiale, dovete dare in licenza il materiale modificato sotto gli stessi termini.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Questa sorgente non può essere modificata mentre è in uso. Per continuare, deve scollegare la sorgente.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Questa versione dell'interfaccia utente non supporta il binario FFmpeg disponibile (",["0"],"). L'interfaccia utente richiede ",["1"],". Utilizzi un binario FFmpeg supportato."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Questa versione dell'interfaccia utente non supporta il Core connesso (",["0"],"). L'interfaccia utente richiede ",["1"],". Utilizzi una versione compatibile dell'interfaccia utente."],"This version of the UI is compatible.":"Questa versione dell'UI è compatibile.","Time until an inactive viewer connection is treated as closed.":"Tempo fino a quando una connessione inattiva del visualizzatore viene trattata come chiusa.","Token":"Token","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Trasmette le istantanee della sorgente principale a un server HTTP/S. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Trasmette il canale audio della sorgente principale a un server Icecast. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale come HTTP-Live-Streaming (HLS) a un server HTTP/S. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale come MPEG-DASH a un server HTTP/S. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un servizio Brightcove Live. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Trasmette la sorgente principale a un servizio RTMP di CDN77. Maggiori informazioni sulla configurazione <0>qui.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Trasmette la sorgente principale a un servizio RTMP DaCast. Maggiori informazioni sulla configurazione <0>qui.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Trasmette la sorgente principale a un Servizio MPEG-TS. Maggiori dettagli sulle impostazioni sono disponibili qui <0>qui.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server RTMP(e|s|t|te|ts). Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server RTSP. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un Server Red5/Pro. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server SRT. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server UDP. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server WOWZA. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a una risorsa Core datarhei. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Trasmette la fonte principale ad una fonte di livespotting.com. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Trasmette la sorgente principale a Akamai (MSL) Media Services Live. Maggiori dettagli sulle impostazioni dell'Encoder MSL sono disponibili su <0>qui.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Trasmette la sorgente principale al servizio di codifica cloud Bitmovin, un potente strumento per lo streaming live. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Trasmette la sorgente principale al Servizio Restream RTMP. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Trasmette il suo video come flusso RTMP con la chiave necessaria generata in YouTube Studio. Può trovare maggiori informazioni sull'impostazione di un live stream nella <0>Creator Academy di YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Trasmette il suo flusso video con la chiave richiesta, che è stata generata in Twitter Producer. Può trovare maggiori informazioni sull'impostazione di un live stream su Twitter <0>Producer.","Tune":"Tune","UDP transport":"Trasporto UDP","Unable to load the config.":"Impossibile caricare la configurazione.","Unique ident on the service.":"Identità unica del servizio.","Unknown":"Sconosciuto","Unselected":"Non selezionato","Upload":"Carica","Uploading the file failed":"Il caricamento del file non è riuscito","Uploading the logo failed":"Caricamento del logo fallito","Uptime":"Uptime","Use Auth0 for your running Restreamer Core. More <0>details.":"Utilizzi Auth0 per il suo Restreamer Core in esecuzione. Ulteriori <0>dettagli.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Utilizzi la procedura guidata (<0/>) per un'impostazione rapida e semplice, oppure modifichi (<1/>) le sorgenti direttamente in modalità personalizzata.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilizzi il suo copyright e scelga la licenza d'immagine corretta. Che sia libera per tutti o altamente limitata. Discuta brevemente di ciò che gli altri possono fare con la sua immagine.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Usa il tuo copyright e scegli la giusta licenza per le immagini. Che sia libera per tutti o altamente limitata. Discuti brevemente su cosa gli altri possono fare con la tua immagine.","User registration":"Registrazione dell'utente","Username":"Nome utente","Username for authorization.":"Nome utente per l'autorizzazione.","Username for the device.":"Nome utente del dispositivo.","VPU ID":"ID VPU","Video":"Video","Video device":"Dispositivo video","Video settings":"Impostazioni video","Video setup":"Configurazione video","Video source":"Fonte video","Viewer":"Visualizzatore","Virtual source":"Fonte virtuale","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Benvenuti a Restreamer v2, la soluzione per pubblicare video in modo facile e veloce. Gratuito per uso privato e commerciale. Ulteriore aiuto nei <0>docs.","Write protection":"Scrivere la protezione","YUV test pattern":"Modello di test YUV","Yes":"Sì","You can't abort the wizard because at least one input must be defined.":"Non può interrompere la procedura guidata perché deve essere definito almeno un ingresso.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Hai cambiato la configurazione. Affinché le modifiche abbiano effetto, devi riavviare l'applicazione. Vuoi riavviare ora?","You have to reconnect manually":"Devi riconnetterti manualmente","You have unsaved changes. Please save them before you can control the service again.":"Hai delle modifiche non salvate. Per favore, salvale prima di poter controllare di nuovo il servizio.","Your stream needs to be encoded, but there's no suitable encoder available.":"Il suo flusso deve essere codificato, ma non è disponibile un codificatore adatto.","Your stream needs to be encoded. Choose the desired encoder:":"Il tuo flusso deve essere codificato. Scegli il codificatore desiderato:","blue":"blu","brown":"marrone","iframe code":"codice iframe","kbit/s":"kbit/s","pink":"rosa","velvet":"velluto","violet":"viola","white":"bianco"}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"6 (+ guaranteed to start with a Key frame)":"6 (+ garantito per iniziare con un telaio chiave)","7 (+ fragmented MP4 format)":"7 (+ formato MP4 frammentato)","<0>Compatibility list":"<0>Elenco di compatibilità","<0>Show probe details":"<0>Mostra dettagli sonda","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Endpoint API non trovato. Impostazioni non salvate.","AVFoundation":"AVFoundation","Abort":"Abort","About":"A proposito di","Add":"Aggiungi","Add Publication":"Aggiungi pubblicazione","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Aggiungere widget e stili esterni al sito di pubblicazione. Può trovare alcuni esempi nella pagina di aiuto.","Add new channel":"Aggiungere un nuovo canale","Add: {0}":["Aggiungi: ",["0"]],"Address":"Indirizzo","Address for the background image.":"Indirizzo per l'immagine di sfondo.","Address to listen on for HTTP requests.":"Indirizzo da ascoltare per le richieste HTTP.","Address to listen on for HTTPS requests.":"Indirizzo su cui ascoltare le richieste HTTPS.","Adjust publication site colors and background as you like.":"Regoli i colori del sito di pubblicazione e lo sfondo come preferisce.","Advanced monitoring":"Monitoraggio avanzato","Advanced settings":"Impostazioni avanzate","Advanced setup":"Configurazione avanzata","AirPlay":"AirPlay","Alerting by email":"Avvisi via e-mail","All":"Tutti","All important system settings.":"Tutte le impostazioni importanti del sistema.","Allow all referrer":"Consentire tutti i referenti","Allow counting how many viewers the stream has.":"Permette di contare quanti spettatori ha lo stream.","Amplitude":"Ampiezza","An environment variable sets this value.":"Una variabile d'ambiente imposta questo valore.","App":"App","Application":"Applicazione","Are you sure you want to abort the wizard?":"È sicuro di voler interrompere la procedura guidata?","Audio":"Audio","Audio Device":"Dispositivo audio","Audio device":"Dispositivo audio","Audio from device":"Audio dal dispositivo","Audio settings":"Impostazioni audio","Audio setup":"Configurazione audio","Auth0":"Auth0","Auth0 Tenant":"Auth0 Inquilino","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 non è attualmente disponibile perché questa interfaccia è caricata da un'origine non sicura.","Author":"Autore","Authorization":"Autorizzazione","Automatic cleanup of all media data":"Pulizia automatica di tutti i dati dei media","Autoplay":"Autoplay","Available":"Disponibile","Back":"Indietro","Background colors":"Colori di sfondo","Background image":"Immagine di sfondo","Backup URL":"URL di backup","Backup server":"Server di backup","Backup stream":"Flusso di backup","Backup stream key":"Chiave del flusso di backup","Bandwidth":"Larghezza di banda","Bandwidth control":"Controllo della larghezza di banda","Banner":"Banner","Basic":"Di base","Beep factor":"Fattore bip","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Descriva brevemente ciò che il pubblico vedrà durante il live stream.","Button color":"Colore del pulsante","Cache for files on /data.":"Cache per i file su /data.","Cache time (Seconds)":"Tempo di cache (secondi)","Cache types":"Tipi di cache","Capture clicks":"Cattura i clic","Capture cursor":"Cattura del cursore","Channel \"{0}\" saved":["Canale \"",["0"],"\" salvato"],"Channels":"Canali","Check for updates":"Controlla gli aggiornamenti","Check the requirements":"Controlla i requisiti","Choose a video stream":"Scegliere un flusso video","Choose an audio stream":"Scegliere un flusso audio","Choose an input device ...":"Scegliere un dispositivo di input ...","Choose codec ...":"Scegliere il codec ...","Choose tenant ...":"Scelga l'inquilino ...","Chromecast":"Chromecast","Chunk":"Chunk","Close":"Chiudere","Code injection":"Iniezione di codice","Codec":"Codec","Color":"Colore","Config":"Configurazione","Confirm password":"Confermare la password","Connect":"Collegare","Connected device":"Dispositivo collegato","Connected since <0/>":"Collegato da <0/>","Connecting ...":"Collegamento ...","Connecting to Restreamer Core ...":"Collegamento a Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"La connessione a Restreamer Core non è riuscita, probabilmente a causa del contenuto misto.","Content":"Contenuto","Content URL":"URL del contenuto","Cores":"Nuclei","Create user":"Creare un utente","Creative Commons":"Creative Commons","Custom ...":"Personalizzato ...","Custom JSON config for datarhei Core.":"Configurazione JSON personalizzata per datarhei Core.","Custom audio device":"Dispositivo audio personalizzato","Custom audio index":"Indice audio personalizzato","Custom bitrate (kbit/s)":"Bitrate personalizzato (kbit/s)","Custom code injection":"Iniezione di codice personalizzato","Custom delay":"Ritardo personalizzato","Custom device":"Dispositivo personalizzato","Custom format":"Formato personalizzato","Custom framerate":"Framerate personalizzato","Custom keyframe interval":"Intervallo keyframe personalizzato","Custom layout":"Layout personalizzato","Custom sampling (Hz)":"Campionamento personalizzato (Hz)","Custom scale":"Scala personalizzata","Custom size":"Dimensione personalizzata","Custom video device":"Dispositivo video personalizzato","Custom video index":"Indice video personalizzato","Data copied to clipboard":"Dati copiati negli appunti","Death color":"Colore della morte","Decibels (dB)":"Decibel (dB)","Decoder":"Decoder","Default":"Default","Delay":"Ritardo","Delay (ms)":"Ritardo (ms)","Delete":"Cancellare","Deleting a publication service cannot be reversed. The publication stops immediately.":"L'eliminazione di un servizio di pubblicazione non può essere annullata. La pubblicazione si interrompe immediatamente.","Delivering mode":"Modalità di consegna","Description":"Descrizione","Design":"Design","Device":"Dispositivo","Disconnect":"Scollegare","Disconnect & Continue":"Disconnettersi e continuare","Disconnecting ...":"Scollegamento ...","Disk":"Disco","Disk cache":"Cache del disco","Disk storage":"Archiviazione su disco","Do you really want to restart the application now?":"Vuoi davvero riavviare l'applicazione ora?","Do you want to delete \"{0}\"?":["Vuole cancellare \"",["0"],"\"?"],"Do you want to delete {title}?":["Vuoi cancellare ",["titolo"],"?"],"Do you want to disconnect \"{0}\"?":["Vuole disconnettere \"",["0"],"\"?"],"Docs":"Documenti","Documentation":"Documentazione","Dup. frames":"Telai duplicati","EDIT: Player":"EDIT: Giocatore","EDIT: Publication Website":"EDIT: Sito web di pubblicazione","EXT-X-VERSION":"EXT-X-VERSIONE","Edit":"Modifica","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Modifichi le fonti audio e video per il live stream. Aggiunga una descrizione e imposti la licenza di contenuto desiderata.","Edit: {title}":["Modifica: ",["titolo"]],"Embed":"Incorporare","Enable":"Abilitazione","Enable RTMP server ...":"Abilitare il server RTMP ...","Enable SRT server ...":"Abilitare il server SRT ...","Enable a periodic beep every second with this value times the carrier frequency":"Abilita un bip periodico ogni secondo con questo valore moltiplicato per la frequenza della portante","Enable backup stream":"Attiva il flusso di backup","Enable nerd statistics":"Abilita le statistiche dei nerd","Enable now":"Attivare ora","Enable primary stream":"Attiva il flusso primario","Enable snapshots":"Abilita le istantanee","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"L'abilitazione dell'autorizzazione è fortemente consigliata. Altrimenti, chiunque può accedere a questa istanza.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"L'abilitazione dell'autenticazione di base è fortemente consigliata. Altrimenti, chiunque potrebbe scrivere dati su /memfs.","Encoder":"Encoder","Encoding":"Codifica","Encryption":"Crittografia","Enter a name for the new channel.":"Inserisca un nome per il nuovo canale.","Enter password":"Inserire la password","Enter the address of your network source:":"Inserisci l'indirizzo della tua sorgente di rete:","Enter username":"Inserisca il nome utente","Entropy coder":"Codificatore di entropia","Error":"Errore","Error while copying data to clipboard":"Errore durante la copia dei dati negli appunti","Error: {0}":["Errore: ",["0"]],"Expands the area above the channel list (live chat).":"Espande l'area sopra l'elenco dei canali (live chat).","Expands the area under the channel description (comment boxes).":"Espande l'area sotto la descrizione del canale (caselle di commento).","Expert mode":"Modalità esperto","Extend channel list":"Estendere l'elenco dei canali","Extend content":"Estendere il contenuto","Extend footer":"Estendere il piè di pagina","Extend header":"Estendere l'intestazione","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Impossibile creare il servizio di pubblicazione (",["0"],")"],"Failed to create publication website files.":"Impossibile creare i file del sito web della pubblicazione.","Failed to probe the source. Please check the <0>probe details.":"Impossibile sondare la sorgente. Per favore controlla i <0>dettagli della sonda.","Failed to refresh token: {0}":["Impossibile aggiornare il token: ",["0"]],"Failed to save ingest metadata":"Non è riuscito a salvare i metadati di ingest","Failed to stop process":"Non è riuscito a fermare il processo","Failed to store player size setting.":"Impossibile memorizzare l'impostazione delle dimensioni del giocatore.","Failed to store publication service ({0})":["Impossibile memorizzare il servizio di pubblicazione (",["0"],")"],"Failed to update ingest process ({0})":["Fallito l'aggiornamento del processo di ingest (",["0"],")"],"Failed to update ingest snapshot process ({0})":["Fallito l'aggiornamento del processo di ingest snapshot (",["0"],")"],"Failed to update the player":"Non è riuscito ad aggiornare il giocatore","Failed to update the playersite":"Non è riuscito ad aggiornare il sito dei giocatori","Failed to verify the source. Please check the address.":"Impossibile verificare la fonte. Si prega di controllare l'indirizzo.","Filter":"Filtro","Finish":"Finitura","Flags":"Bandiere","For Javascripts.":"Per i Javascript.","For Stylesheets.":"Per i fogli di stile.","Force input framerate":"Forzare il framerate in ingresso","Format":"Formato","Frame drops":"Cadute del telaio","Framebuffer":"Framebuffer","Framerate":"Framerate","Frequency (Hz)":"Frequenza (Hz)","GET":"GET","General":"Generale","Google Analytics ID":"ID di Google Analytics","Google Analytics Tracker Name":"Nome del tracker di Google Analytics","HLS":"HLS","HLS output":"Uscita HLS","HLS server":"Server HLS","HLS statistic for the In-memory storage":"Statistica HLS per l'archiviazione In-memory","HTTP and HTTPS":"HTTP e HTTPS","HTTP port":"Porta HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Porta HTTPS","Hardware device":"Dispositivo hardware","Header":"Intestazione","Headline":"Titolo","Horizontal Flip":"Capovolgimento orizzontale","Hosted Restreamer interface":"Interfaccia Restreamer in hosting","Human readable name on the service.":"Nome leggibile dall'uomo del servizio.","IP address":"Indirizzo IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Se ha cambiato le porte, è possibile che Restreamer Core sia già stato riavviato, ma ora è disponibile su una porta diversa.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Se ha attivato Let's Encrypt TLS, potrebbe essere necessario un po' di tempo per acquisire i certificati. Si assicuri che Restreamer Core sia raggiungibile tramite la porta 80 da Internet. Controlli il registro della console di Restreamer Core.","Ignore IP ranges":"Ignora gli intervalli IP","Image URL":"URL dell'immagine","Imprint":"Impronta","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Oltre al player, Restreamer offre una landingpage completa, che può utilizzare per presentare il suo live stream in modo semplice e veloce.","In-memory":"In-memory","In-memory storage":"Archiviazione in memoria","Incompatible":"Incompatibile","Inherit":"Eredita","Inject 1":"Iniettare 1","Inject 2":"Iniettare 2","Inject 3":"Iniettare 3","Inject 4":"Iniettare 4","Interval (seconds)":"Intervallo (secondi)","Issue alert":"Allarme problemi","Keyframe interval (seconds)":"Intervallo dei fotogrammi chiave (secondi)","Layout":"Layout","Let's Encrypt certification":"Certificazione Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt richiede uno o più nomi di dominio pubblico e una porta 80/TCP accessibile.","Level":"Livello","Level of system protocol.":"Livello di protocollo del sistema.","License":"Licenza","Life color":"Colore della vita","Linecolor":"Linecolor","Link":"Link","Link, mouseover":"Link, passaggio del mouse","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Elenco di intervalli IP in notazione CIDR, ad esempio 127.0.0.1/32, che le statistiche non registreranno, un intervallo IP per riga. Lasciare vuoto per registrare tutte le sessioni.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Elenco di estensioni di file da mettere in cache (ad esempio \".html\"), una per riga. Lasciare vuoto per mettere in cache tutti i tipi di file.","List size (segments)":"Dimensione della lista (segmenti)","Live-Streaming to Facebook Live RTMP service":"Live-Streaming verso il servizio RTMP di Facebook Live","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Live-Streaming su Instagram Live RTMP Service. La chiave di streaming richiede un servizio come <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Live-Streaming su Twitch Live RTMP Service.","Live-Streaming to Vimeo Live RTMP Service":"Trasmissione in diretta su Vimeo Live RTMP Service","Livesource ID":"ID Livesource","Log level":"Livello di registro","Logging":"Registrazione","Login":"Accesso","Login failed: Couldn't load API details":"Accesso fallito: Impossibile caricare i dettagli API","Login failed: {0}":["Accesso fallito: ",["0"]],"Login/JWT authorization":"Accesso/Autorizzazione JWT","Logo":"Logo","Logout":"Disconnessione","Loudness Normalization":"Normalizzazione del loudness","MB":"MB","Main Source":"Fonte principale","Main channel":"Canale principale","Main channel not found":"Canale principale non trovato","Main channel saved":"Canale principale salvato","Main page channel (index.html).":"Canale della pagina principale (index.html).","Maintainer:":"Manutentore:","Make the channel available as an RTMP stream (experimental).":"Rendere il canale disponibile come flusso RTMP (sperimentale).","Make the channel available as an SRT stream (experimental).":"Rendere il canale disponibile come flusso SRT (sperimentale).","Master playlist (increases browser/client compatibility)":"Playlist master (aumenta la compatibilità tra browser e client)","Maximum allowed cache size, 0 for unlimited.":"Dimensione massima consentita della cache, 0 per illimitata.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Megabyte massimi consentiti di RAM per /memfs, 0 per illimitato.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Megabyte massimi consentiti da consumare dal disco rigido. 0 per illimitato.","Maximum bandwidth Mbit/s":"Larghezza di banda massima Mbit/s","Maximum delay in milliseconds.":"Ritardo massimo in millisecondi.","Maximum file size (Megabytes)":"Dimensione massima del file (Megabyte)","Maximum file size to put in cache.":"Dimensione massima del file da inserire nella cache.","Maximum log histroy":"Istanza di log massima","Maximum log lines":"Linee di registro massime","Maximum size (Megabytes)":"Dimensione massima (Megabyte)","Maximum viewer idle time (Seconds)":"Tempo massimo di inattività del telespettatore (secondi)","Maximum viewers":"Spettatori massimi","Memory":"Memoria","Meta information":"Meta informazioni","Metadata":"Metadati","Mold":"Stampo","More about Twitter's copyright <0>here.":"Maggiori informazioni sul copyright di Twitter <0>qui.","More about YouTube's copyright <0>here.":"Maggiori informazioni sul copyright di YouTube <0>qui.","More about licenses here":"Maggiori informazioni sulle licenze qui","More about the service":"Maggiori informazioni sul servizio","Mute":"Muto","Mute a channel.":"Disattivare un canale.","Mute left":"Silenziamento a sinistra","Mute right":"Muto a destra","Name":"Nome","Name for the template. If the name already exists, it will be overwritten.":"Nome del modello. Se il nome esiste già, verrà sovrascritto.","Network":"Rete","Network source":"Fonte della rete","Next":"Prossimo","Next: Audio":"Prossimo: Audio","Next: Video setup":"Prossimo: Impostazione video","No":"No","No audio":"Nessun audio","No audio stream available":"Nessun flusso audio disponibile","No input device available":"Nessun dispositivo di input disponibile","No live stream was detected. Please check the software that sends the stream.":"Non è stato rilevato alcun flusso in diretta. Si prega di controllare il software che invia il flusso.","No source selected":"Nessuna fonte selezionata","No sources available":"Nessuna fonte disponibile","No suitable encoder found.":"Nessun encoder adatto trovato.","No suitable filter found.":"Non è stato trovato un filtro adatto.","No video":"Nessun video","No video stream available":"Nessun flusso video disponibile","Node ID":"ID del nodo","Noise":"Rumore","None":"Nessuno","Notes":"Note","Number of log lines to keep.":"Numero di righe di registro da conservare.","Number of logs to keep for each process.":"Numero di registri da conservare per ogni processo.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Un referente per riga, ad esempio http://www.example.com.","Open":"Aperto","Pan":"Pan","Passphrase":"Passphrase","Passphrase for SRT encryption.":"Passphrase per la crittografia SRT.","Passphrase must be between 10 and 79 characters long":"La passphrase deve avere una lunghezza compresa tra 10 e 79 caratteri.","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Il passthrough (copia) deve essere disattivato solo se necessario. Ogni codifica richiede risorse CPU/GPU aggiuntive.","Password":"Password","Password for authorization.":"Password per l'autorizzazione.","Password for the device.":"Password per il dispositivo.","Persist viewer statistics":"Persistere le statistiche dei visualizzatori","Pixel format":"Formato pixel","Plan: <0>Starter":"Piano: <0>Inizio","Platforms":"Piattaforme","Playback":"Riproduzione","Player":"Giocatore","Player URL":"URL del giocatore","Player settings saved":"Impostazioni del giocatore salvate","Playersite":"Playersite","Playlist":"Playlist","Playlist version (M3U8). Version 3 has the best browser/client compatibility.":"Versione della playlist (M3U8). La versione 3 ha la migliore compatibilità tra browser e client.","Please check the <0>process log":"Si prega di controllare il <0>log del processo","Please contact the operator of the service and check what happens.":"Contatta l'operatore del servizio e verifica cosa succede.","Please get in touch with the operator of the service and check what happens.":"Contattate l'operatore del servizio e verificate cosa succede.","Please select a file to upload.":"Seleziona un file da caricare.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Se possibile, utilizzi \"Passthrough (copia)\". La codifica richiede risorse CPU/GPU aggiuntive.","Please wait. Probe stream data ...":"Si prega di attendere. Flusso di dati della sonda ...","Please wait. Setting up the stream ...":"Si prega di attendere. Impostazione del flusso ...","Port":"Porto","Position":"Posizione","Preset":"Preset","Primary stream":"Flusso primario","Primary stream key":"Chiave di flusso primaria","Probe":"Sonda","Process":"Processo","Process control":"Controllo del processo","Process debug report":"Rapporto di debug del processo","Process details":"Dettagli del processo","Process report":"Rapporto sul processo","Processing & Control":"Elaborazione e controllo","Profile":"Profilo","Protocol":"Protocollo","Protocols":"Protocolli","Public domain/s":"Dominio pubblico/i","Publication service not found":"Servizio di pubblicazione non trovato","Publication website settings saved":"Impostazioni del sito web di pubblicazione salvate","Publications":"Pubblicazioni","Pull Mode":"Modo di tirare","Pull or recieve the data:":"Tirare o ricevere i dati:","Quality":"Qualità","RGB test pattern":"Modello di test RGB","RTMP":"RTMP","RTMP Port":"Porta RTMP","RTMP app for publishing.":"App RTMP per la pubblicazione.","RTMP output":"Uscita RTMP","RTMP server":"Server RTMP","RTMP server is not enabled":"Il server RTMP non è abilitato","RTMP server listen address.":"Indirizzo di ascolto del server RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Token RTMP per la pubblicazione e la riproduzione. Il token è il valore del parametro di query URL 'token'.","RTMPS Port":"Porta RTMPS","RTMPS server":"Server RTMPS","RTMPS server listen address.":"Indirizzo di ascolto del server RTMPS.","RTSP":"RTSP","Raspberry Pi camera":"Fotocamera Raspberry Pi","Rate control":"Controllo del tasso","Ratio":"Rapporto","Read input at native speed":"Leggere l'input a velocità nativa","Receive Mode":"Modalità di ricezione","Reconnect":"Ricollegare","Reconnect delay (seconds)":"Ritardo di riconnessione (secondi)","Reconnecting in {0}s":["Riconnettersi in ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["La riconnessione a Restreamer Core non è riuscita negli ultimi ",["RETRIES"]," secondi."],"Reconnecting to Restreamer Core failed.":"La riconnessione a Restreamer Core non è riuscita.","Refresh":"Aggiornamento","Region":"Regione","Reload":"Ricarica","Remove the oldest entries if the /memfs is full":"Rimuovere le voci più vecchie se la /memfs è piena","Requires activation":"Richiede l'attivazione","Restart":"Riavviare","Restart required":"Riavvio richiesto","Restarting":"Riavvio","Restarting Restreamer Core ...":"Riavvio di Restreamer Core ...","Restarting the application failed.":"Il riavvio dell'applicazione non è riuscito.","Restreamer Service":"Servizio Restreamer","Retrieving stream data ...":"Recuperare i dati del flusso ...","Retry":"Riprova","Rotate":"Ruotare","Rule":"Regola","SRT":"SRT","SRT output":"Uscita SRT","SRT server":"Server SRT","SRT server is not enabled":"Il server SRT non è abilitato","SRT server listen address.":"Indirizzo di ascolto del server SRT.","SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'":"Token SRT per la pubblicazione e la riproduzione. Il token è il valore del parametro streamid \"token\".","Sampling":"Campionamento","Save":"Salva","Scale":"Scala","Seconds to keep files in cache.":"Secondi per mantenere i file nella cache.","Seconds until a process is restarted.":"Secondi fino al riavvio di un processo.","Seconds until a staled process is terminated.":"Secondi fino alla terminazione di un processo in stallo.","Seconds until the snapshot/thumbnail of the video source is updated.":"Secondi fino all'aggiornamento dell'istantanea/ miniatura della sorgente video.","Security":"Sicurezza","Security passphrase":"Passphrase di sicurezza","Security token":"Token di sicurezza","Seekbar color":"Colore Seekbar","Segment length (seconds)":"Lunghezza del segmento (secondi)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Il segmento verrà tagliato sul fotogramma chiave successivo, una volta trascorso questo tempo. Si consiglia il valore 2.","Segmentation":"Segmentazione","Select RTMP or SRT (if enabled) for less latency.":"Selezionare RTMP o SRT (se abilitato) per ridurre la latenza.","Select a device:":"Selezionare un dispositivo:","Select audio source:":"Seleziona la sorgente audio:","Select source ...":"Selezionare la fonte ...","Select video source:":"Selezionare la sorgente video:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Selezioni se prelevare il flusso da una <0>sorgente di rete (come una telecamera di rete) o dal <1>server RTMP interno (ad esempio, i flussi OBS verso il Restreamer).","Select your encoding setting:":"Seleziona la tua impostazione di codifica:","Select your filter settings (optional):":"Selezionare le impostazioni del filtro (opzionale):","Selected":"Selezionato","Selected channel":"Canale selezionato","Selection":"Selezione","Send anonymous metrics (helps us for future development)":"Invii metriche anonime (ci aiuta per lo sviluppo futuro)","Send stream to this address:":"Invia il flusso a questo indirizzo:","Send video to Framebuffer":"Invia il video al Framebuffer","Server":"Server","Server URL":"URL del server","Service":"Servizio","Service name":"Nome del servizio","Service token for monitoring.":"Token di servizio per il monitoraggio.","Sessions":"Sessioni","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Imposta un limite di larghezza di banda in Mbit al secondo per il trasferimento di dati HLS in uscita. Tutti i servizi, come RTMP e i processi in uscita, sono inclusi nel calcolo. Se la larghezza di banda viene superata, gli spettatori HLS ricevono il codice di stato HTTP 509 (Limite di larghezza di banda superato). 0 è illimitato.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Imposta un limite di visualizzazione per le sessioni HLS. Se il limite viene superato, gli spettatori HLS ricevono il codice di stato HTTP 509 (Bandwidth Limit Exceeded). 0 è illimitato.","Setting for connection to the service.":"Impostazione per la connessione al servizio.","Settings":"Impostazioni","Settings (expert mode)":"Impostazioni (modalità esperto)","Settings for /data path. The access is protected by":"Impostazioni per il percorso /data. L'accesso è protetto da","Settings for /memfs path.":"Impostazioni per il percorso /memfs.","Settings saved. All changes will be applied after restarting the application.":"Impostazioni salvate. Tutte le modifiche saranno applicate dopo il riavvio dell'applicazione.","Share button":"Tasto condividi","Shows a reference to the project.":"Mostra un riferimento al progetto.","Sign up (free)":"Si iscriva (gratis)","Silence":"Silenzio","Silence Audio":"Silenzio Audio","Sine":"Seno","Sitename":"Nome del sito","Size":"Dimensione","Snapshot":"Snapshot","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Timeout della presa (microsecondi)","Software":"Software","Source":"Fonte","Source & Encoding":"Fonte e codifica","Speed":"Velocità","Stale timeout (seconds)":"Timeout di stallo (secondi)","Statistics":"Statistiche","Storage":"Stoccaggio","Stores the viewer statistics to the disk.":"Memorizza le statistiche del visualizzatore sul disco.","Stream":"Flusso","Stream URL":"URL del flusso","Stream key":"Chiave del flusso","Stream name":"Nome del flusso","Stream names":"Nomi dei flussi","Stream source for publication service (experimental).":"Fonte di flusso per il servizio di pubblicazione (sperimentale).","Support datarhei Restreamer":"Supporto datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Supporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT e altro.","System":"Sistema","Template":"Modello","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Modello da utilizzare per la creazione del sito web della pubblicazione. Il pulsante Elimina rimuove la selezione dal sistema.","Terms":"Termini","Test pattern":"Modello di test","Test pattern (extended)":"Modello di test (esteso)","Text colors":"Colori del testo","The RTMP output requires the RTMP Server.":"L'uscita RTMP richiede il server RTMP.","The SRT output requires the SRT Server.":"L'output SRT richiede il server SRT.","The amplitude (0.0 - 1.0) of the generated audio stream":"L'ampiezza (0.0 - 1.0) del flusso audio generato","The application is using an older version of the settings.":"L'applicazione sta usando una vecchia versione delle impostazioni.","The available FFmpeg binary doesn't support any of the required protocols.":"Il binario FFmpeg disponibile non supporta nessuno dei protocolli richiesti.","The bitrate of the audio stream.":"Il bitrate del flusso audio.","The carrier frequency":"La frequenza portante","The channel \"{0}\" could not be deleted":["Non è stato possibile eliminare il canale \"",["0"],"\"."],"The channel \"{0}\" has been deleted":["Il canale \"",["0"],"\" è stato cancellato."],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"La cancellazione di questo canale non può essere recuperata. Tutte le pubblicazioni di questo canale saranno rimosse.","The input profile is not complete. Please define a video and audio source.":"Il profilo di ingresso non è completo. Si prega di definire una sorgente video e audio.","The layout of the audio stream.":"Il layout del flusso audio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Il numero massimo di segmenti della playlist. 0 conterrà tutti i segmenti. 6 è consigliato.","The noise color":"Il colore del rumore","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"La persona che ha associato un'opera con questo atto ha dedicato l'opera al pubblico dominio rinunciando a tutti i suoi diritti sull'opera in tutto il mondo secondo la legge sul diritto d'autore, compresi tutti i diritti connessi e vicini, nella misura consentita dalla legge. Puoi copiare, modificare, distribuire ed eseguire l'opera, anche per scopi commerciali, il tutto senza chiedere il permesso.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Il nome di dominio pubblico raggiungibile dell'host su cui gira questo Restreamer. Separi i nomi di dominio multipli con una virgola.","The publication service \"{0}\" could not be deleted":["Il servizio di pubblicazione \"",["0"],"\" non può essere eliminato"],"The publication service \"{0}\" has been created":["Il servizio di pubblicazione \"",["0"],"\" è stato creato"],"The publication service \"{0}\" has been deleted":["Il servizio di pubblicazione \"",["0"],"\" è stato cancellato"],"The publication service has been created":"Il servizio di pubblicazione è stato creato","The sample rate of the audio stream.":"La frequenza di campionamento del flusso audio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Il file selezionato è troppo grande (",["0"]," byte). Sono ammessi solo ",["1"]," byte."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Il tipo di file selezionato (",["0"],") non è consentito. I tipi di file consentiti sono ",["types"]],"The settings for \"{0}\" have been saved":["Le impostazioni per \"",["0"],"\" sono state salvate"],"The source doesn't provide any audio streams.":"La fonte non fornisce alcun flusso audio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"La sorgente non fornisce alcun flusso audio. Per favore controlla i <0>dettagli della sonda.","The source doesn't provide any compatible audio streams.":"La fonte non fornisce alcun flusso audio compatibile.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"La fonte non fornisce alcun flusso video compatibile. Per favore controlla i <0>requisiti.","The source doesn't provide any video streams. Please check the <0>probe details.":"La fonte non fornisce alcun flusso video. Per favore controlla i <0>dettagli della sonda.","The source doesn't provide any video streams. Please check the device.":"La fonte non fornisce alcun flusso video. Si prega di controllare il dispositivo.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"La sorgente video non fornisce alcun flusso audio compatibile. Si raccomanda <0>Audio silenzioso. I servizi come YouTube, Facebook & Co. richiedono un canale audio.","The video source is compatible. Select the desired resolution:":"La sorgente video è compatibile. Selezionare la risoluzione desiderata:","There are updates available. Here you get more information.":"Sono disponibili degli aggiornamenti. Qui può ottenere maggiori informazioni.","There was a problem storing the settings. Settings not saved.":"Si è verificato un problema nella memorizzazione delle impostazioni. Le impostazioni non sono state salvate.","There was an error connecting to Restreamer Core at {0}.":["Si è verificato un errore di connessione a Restreamer Core a ",["0"],"."],"There was an error during upload: {0}":["Si è verificato un errore durante il caricamento: ",["0"]],"There was an error setting up the stream.":"C'è stato un errore nell'impostazione del flusso.","There were some errors in the settings. Settings not saved.":"Ci sono stati alcuni errori nelle impostazioni. Impostazioni non salvate.","There's no login method available.":"Non c'è un metodo di accesso disponibile.","This is a dummy service that explains to you the concepts of service.":"Questo è un servizio fittizio che le spiega i concetti di servizio.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Non si tratta necessariamente di un errore. Tuttavia, potrebbe essere necessario un po' più di tempo perché Restreamer Core si riavvii...","This is to mention the copyright regulations for the target of this service.":"Questo per citare le norme sul copyright per il target di questo servizio.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Questa licenza permette ai riutilizzatori di copiare e distribuire il materiale in qualsiasi mezzo o formato solo in forma non adattata, e solo a condizione che venga data attribuzione al creatore. La licenza permette l'uso commerciale.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Questa licenza permette ai riutilizzatori di copiare e distribuire il materiale in qualsiasi mezzo o formato solo in forma non adattata, solo per scopi non commerciali, e solo a condizione che venga data attribuzione al creatore.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato solo per scopi non commerciali, e solo finché viene data attribuzione al creatore.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato solo per scopi non commerciali, e solo finché viene data l'attribuzione al creatore. Se remixate, adattate o costruite sul materiale, dovete dare in licenza il materiale modificato sotto gli stessi termini.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato, purché venga data l'attribuzione al creatore. La licenza permette l'uso commerciale.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato, purché venga data l'attribuzione al creatore. La licenza permette l'uso commerciale. Se remixate, adattate o costruite sul materiale, dovete dare in licenza il materiale modificato sotto gli stessi termini.","This protocol is unknown or not supported by the available FFmpeg binary.":"Questo protocollo è sconosciuto o non supportato dal binario FFmpeg disponibile.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Questa sorgente non può essere modificata mentre è in uso. Per continuare, deve scollegare la sorgente.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Questa versione dell'interfaccia utente non supporta il binario FFmpeg disponibile (",["0"],"). L'interfaccia utente richiede ",["1"],". Utilizzi un binario FFmpeg supportato."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Questa versione dell'interfaccia utente non supporta il Core connesso (",["0"],"). L'interfaccia utente richiede ",["1"],". Utilizzi una versione compatibile dell'interfaccia utente."],"This version of the UI is compatible.":"Questa versione dell'UI è compatibile.","Time until an inactive viewer connection is treated as closed.":"Tempo fino a quando una connessione inattiva del visualizzatore viene trattata come chiusa.","Token":"Token","Transmit a Livestream to a Telegram Channel.":"Trasmettere un Livestream a un canale Telegram.","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Trasmette le istantanee della sorgente principale a un server HTTP/S. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Trasmette il canale audio della sorgente principale a un server Icecast. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale come HTTP-Live-Streaming (HLS) a un server HTTP/S. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale come MPEG-DASH a un server HTTP/S. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un servizio Brightcove Live. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Trasmette la sorgente principale a un servizio RTMP di CDN77. Maggiori informazioni sulla configurazione <0>qui.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Trasmette la sorgente principale a un servizio RTMP DaCast. Maggiori informazioni sulla configurazione <0>qui.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Trasmette la sorgente principale a un Servizio MPEG-TS. Maggiori dettagli sulle impostazioni sono disponibili qui <0>qui.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server RTMP(e|s|t|te|ts). Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server RTSP. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un Server Red5/Pro. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server SRT. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server UDP. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a un server WOWZA. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Trasmette la sorgente principale a una risorsa Core datarhei. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Trasmette la fonte principale ad una fonte di livespotting.com. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Trasmette la sorgente principale a Akamai (MSL) Media Services Live. Maggiori dettagli sulle impostazioni dell'Encoder MSL sono disponibili su <0>qui.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Trasmette la sorgente principale al servizio di codifica cloud Bitmovin, un potente strumento per lo streaming live. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Trasmette la sorgente principale al Servizio Restream RTMP. Maggiori dettagli sulle impostazioni sono disponibili <0>qui.","Transmit to a Azure Media Services. More details can be found <0>here.":"Trasmettere a un Azure Media Services. Ulteriori dettagli sono disponibili <0>qui.","Transmit to linkedIn. More details can be found <0>here.":"Trasmettere a linkedIn. Ulteriori dettagli sono disponibili <0>qui.","Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.":"Trasmettere il Livestream a un server Owncast. <0>Qui si possono trovare maggiori dettagli sulle impostazioni.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Trasmette il suo video come flusso RTMP con la chiave necessaria generata in YouTube Studio. Può trovare maggiori informazioni sull'impostazione di un live stream nella <0>Creator Academy di YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Trasmette il suo flusso video con la chiave richiesta, che è stata generata in Twitter Producer. Può trovare maggiori informazioni sull'impostazione di un live stream su Twitter <0>Producer.","Tune":"Tune","UDP transport":"Trasporto UDP","Unable to load the config.":"Impossibile caricare la configurazione.","Unique ident on the service.":"Identità unica del servizio.","Unknown":"Sconosciuto","Unselected":"Non selezionato","Upload":"Carica","Uploading the file failed":"Il caricamento del file non è riuscito","Uploading the logo failed":"Caricamento del logo fallito","Uptime":"Uptime","Use Auth0 for your running Restreamer Core. More <0>details.":"Utilizzi Auth0 per il suo Restreamer Core in esecuzione. Ulteriori <0>dettagli.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Utilizzi la procedura guidata (<0/>) per un'impostazione rapida e semplice, oppure modifichi (<1/>) le sorgenti direttamente in modalità personalizzata.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Utilizzi il suo copyright e scelga la licenza d'immagine corretta. Che sia libera per tutti o altamente limitata. Discuta brevemente di ciò che gli altri possono fare con la sua immagine.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Usa il tuo copyright e scegli la giusta licenza per le immagini. Che sia libera per tutti o altamente limitata. Discuti brevemente su cosa gli altri possono fare con la tua immagine.","User registration":"Registrazione dell'utente","Username":"Nome utente","Username for authorization.":"Nome utente per l'autorizzazione.","Username for the device.":"Nome utente del dispositivo.","VPU ID":"ID VPU","Vertical Flip":"Capovolgimento verticale","Video":"Video","Video device":"Dispositivo video","Video settings":"Impostazioni video","Video setup":"Configurazione video","Video source":"Fonte video","Viewer":"Visualizzatore","Virtual source":"Fonte virtuale","Volume":"Volume","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Benvenuti a Restreamer v2, la soluzione per pubblicare video in modo facile e veloce. Gratuito per uso privato e commerciale. Ulteriore aiuto nei <0>docs.","Where to store the HLS playlist and segments. In-Memory is recommended.":"Dove memorizzare la playlist e i segmenti HLS. Si consiglia di utilizzare la memoria interna.","Write protection":"Scrivere la protezione","YUV test pattern":"Modello di test YUV","Yes":"Sì","You can't abort the wizard because at least one input must be defined.":"Non può interrompere la procedura guidata perché deve essere definito almeno un ingresso.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Hai cambiato la configurazione. Affinché le modifiche abbiano effetto, devi riavviare l'applicazione. Vuoi riavviare ora?","You have to reconnect manually":"Devi riconnetterti manualmente","You have unsaved changes. Please save them before you can control the service again.":"Hai delle modifiche non salvate. Per favore, salvale prima di poter controllare di nuovo il servizio.","Your stream needs to be encoded, but there's no suitable encoder available.":"Il suo flusso deve essere codificato, ma non è disponibile un codificatore adatto.","Your stream needs to be encoded. Choose the desired encoder:":"Il tuo flusso deve essere codificato. Scegli il codificatore desiderato:","blue":"blu","brown":"marrone","iframe code":"codice iframe","kbit/s":"kbit/s","pink":"rosa","velvet":"velluto","violet":"viola","white":"bianco"}}; \ No newline at end of file diff --git a/src/locales/it/messages.po b/src/locales/it/messages.po index 9530ae3..503e87a 100644 --- a/src/locales/it/messages.po +++ b/src/locales/it/messages.po @@ -13,12 +13,20 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: src/misc/controls/HLS.js:81 +msgid "6 (+ guaranteed to start with a Key frame)" +msgstr "6 (+ garantito per iniziare con un telaio chiave)" + +#: src/misc/controls/HLS.js:84 +msgid "7 (+ fragmented MP4 format)" +msgstr "7 (+ formato MP4 frammentato)" + #: src/misc/EncodingSelect.js:224 msgid "<0>Compatibility list" msgstr "<0>Elenco di compatibilità" -#: src/views/Edit/Profile.js:380 -#: src/views/Edit/Profile.js:510 +#: src/views/Edit/Profile.js:393 +#: src/views/Edit/Profile.js:543 msgid "<0>Show probe details" msgstr "<0>Mostra dettagli sonda" @@ -26,7 +34,7 @@ msgstr "<0>Mostra dettagli sonda" msgid "ALSA" msgstr "ALSA" -#: src/views/Settings.js:907 +#: src/views/Settings.js:974 msgid "API endpoint not found. Settings not saved." msgstr "Endpoint API non trovato. Impostazioni non salvate." @@ -35,16 +43,16 @@ msgid "AVFoundation" msgstr "AVFoundation" #: src/misc/ChannelList.js:356 -#: src/views/Edit/Profile.js:410 -#: src/views/Edit/Wizard/index.js:1153 -#: src/views/Edit/index.js:549 -#: src/views/Edit/index.js:575 -#: src/views/Edit/index.js:594 -#: src/views/Publication/Add.js:362 -#: src/views/Publication/Edit.js:601 -#: src/views/Settings.js:1972 -#: src/views/Settings.js:2031 -#: src/views/Settings.js:2053 +#: src/views/Edit/Profile.js:433 +#: src/views/Edit/Wizard/index.js:1168 +#: src/views/Edit/index.js:603 +#: src/views/Edit/index.js:629 +#: src/views/Edit/index.js:648 +#: src/views/Publication/Add.js:364 +#: src/views/Publication/Edit.js:563 +#: src/views/Settings.js:2123 +#: src/views/Settings.js:2182 +#: src/views/Settings.js:2204 msgid "Abort" msgstr "Abort" @@ -57,11 +65,11 @@ msgstr "A proposito di" msgid "Add" msgstr "Aggiungi" -#: src/views/Publication/Add.js:321 +#: src/views/Publication/Add.js:323 msgid "Add Publication" msgstr "Aggiungi pubblicazione" -#: src/views/Playersite.js:692 +#: src/views/Playersite.js:708 msgid "Add external widgets and styles to the publication site. You can find some examples on the help page." msgstr "Aggiungere widget e stili esterni al sito di pubblicazione. Può trovare alcuni esempi nella pagina di aiuto." @@ -69,18 +77,20 @@ msgstr "Aggiungere widget e stili esterni al sito di pubblicazione. Può trovare msgid "Add new channel" msgstr "Aggiungere un nuovo canale" -#: src/views/Publication/Add.js:324 +#: src/views/Publication/Add.js:326 msgid "Add: {0}" msgstr "Aggiungi: {0}" -#: src/views/Edit/Sources/Network.js:355 +#: src/views/Edit/Sources/Network.js:421 #: src/views/Edit/Wizard/Sources/Network.js:66 +#: src/views/Publication/Services/Azure.js:98 #: src/views/Publication/Services/Brightcove.js:95 -#: src/views/Publication/Services/Core.js:100 +#: src/views/Publication/Services/Core.js:116 #: src/views/Publication/Services/DASH.js:192 #: src/views/Publication/Services/HLS.js:181 #: src/views/Publication/Services/Icecast.js:160 #: src/views/Publication/Services/Image2.js:126 +#: src/views/Publication/Services/Linkedin.js:93 #: src/views/Publication/Services/MPEGTS.js:160 #: src/views/Publication/Services/RTMP.js:132 #: src/views/Publication/Services/RTSP.js:150 @@ -88,23 +98,23 @@ msgstr "Aggiungi: {0}" #: src/views/Publication/Services/SRT.js:161 #: src/views/Publication/Services/UDP.js:127 #: src/views/Publication/Services/WOWZA.js:132 -#: src/views/Settings.js:1302 +#: src/views/Settings.js:1370 msgid "Address" msgstr "Indirizzo" -#: src/views/Playersite.js:629 +#: src/views/Playersite.js:645 msgid "Address for the background image." msgstr "Indirizzo per l'immagine di sfondo." -#: src/views/Settings.js:1331 +#: src/views/Settings.js:1399 msgid "Address to listen on for HTTP requests." msgstr "Indirizzo da ascoltare per le richieste HTTP." -#: src/views/Settings.js:1344 +#: src/views/Settings.js:1412 msgid "Address to listen on for HTTPS requests." msgstr "Indirizzo su cui ascoltare le richieste HTTPS." -#: src/views/Playersite.js:514 +#: src/views/Playersite.js:530 msgid "Adjust publication site colors and background as you like." msgstr "Regoli i colori del sito di pubblicazione e lo sfondo come preferisce." @@ -112,7 +122,7 @@ msgstr "Regoli i colori del sito di pubblicazione e lo sfondo come preferisce." msgid "Advanced monitoring" msgstr "Monitoraggio avanzato" -#: src/views/Edit/Sources/Network.js:396 +#: src/views/Edit/Sources/Network.js:474 #: src/views/Publication/Services/DASH.js:204 #: src/views/Publication/Services/HLS.js:193 #: src/views/Publication/Services/Icecast.js:170 @@ -125,27 +135,32 @@ msgstr "Monitoraggio avanzato" msgid "Advanced settings" msgstr "Impostazioni avanzate" -#: src/views/Edit/Wizard/index.js:287 +#: src/views/Edit/Wizard/index.js:302 msgid "Advanced setup" msgstr "Configurazione avanzata" +#: src/views/Playersite.js:433 +#: src/views/Publication/Player.js:443 +msgid "AirPlay" +msgstr "AirPlay" + #: src/views/Login.js:325 msgid "Alerting by email" msgstr "Avvisi via e-mail" -#: src/views/Publication/Add.js:344 +#: src/views/Publication/Add.js:346 msgid "All" msgstr "Tutti" -#: src/views/Settings.js:1163 +#: src/views/Settings.js:1231 msgid "All important system settings." msgstr "Tutte le impostazioni importanti del sistema." -#: src/views/Settings.js:1478 +#: src/views/Settings.js:1548 msgid "Allow all referrer" msgstr "Consentire tutti i referenti" -#: src/views/Settings.js:1518 +#: src/views/Settings.js:1588 msgid "Allow counting how many viewers the stream has." msgstr "Permette di contare quanti spettatori ha lo stream." @@ -157,8 +172,8 @@ msgstr "Ampiezza" msgid "An environment variable sets this value." msgstr "Una variabile d'ambiente imposta questo valore." -#: src/views/Publication/Services/Core.js:107 -#: src/views/Settings.js:1816 +#: src/views/Publication/Services/Core.js:124 +#: src/views/Settings.js:1897 msgid "App" msgstr "App" @@ -168,11 +183,11 @@ msgstr "App" msgid "Application" msgstr "Applicazione" -#: src/views/Edit/Wizard/index.js:1172 +#: src/views/Edit/Wizard/index.js:1187 msgid "Are you sure you want to abort the wizard?" msgstr "È sicuro di voler interrompere la procedura guidata?" -#: src/views/Publication/Add.js:492 +#: src/views/Publication/Add.js:467 msgid "Audio" msgstr "Audio" @@ -185,18 +200,18 @@ msgstr "Dispositivo audio" msgid "Audio device" msgstr "Dispositivo audio" -#: src/views/Edit/Wizard/index.js:875 -#: src/views/Edit/Wizard/index.js:887 +#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:902 msgid "Audio from device" msgstr "Audio dal dispositivo" -#: src/views/Edit/Profile.js:425 +#: src/views/Edit/Profile.js:448 #: src/views/Edit/ProfileSummary.js:90 -#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Edit.js:506 msgid "Audio settings" msgstr "Impostazioni audio" -#: src/views/Edit/Wizard/index.js:828 +#: src/views/Edit/Wizard/index.js:843 msgid "Audio setup" msgstr "Configurazione audio" @@ -216,39 +231,39 @@ msgstr "Auth0 non è attualmente disponibile perché questa interfaccia è caric msgid "Author" msgstr "Autore" -#: src/views/Settings.js:1143 -#: src/views/Settings.js:1415 +#: src/views/Settings.js:1210 +#: src/views/Settings.js:1483 msgid "Authorization" msgstr "Autorizzazione" -#: src/misc/controls/HLS.js:83 +#: src/misc/controls/HLS.js:123 msgid "Automatic cleanup of all media data" msgstr "Pulizia automatica di tutti i dati dei media" -#: src/views/Publication/Player.js:437 +#: src/views/Publication/Player.js:440 msgid "Autoplay" msgstr "Autoplay" -#: src/views/Playersite.js:445 +#: src/views/Playersite.js:461 msgid "Available" msgstr "Disponibile" -#: src/views/Edit/Profile.js:541 -#: src/views/Edit/Wizard/index.js:408 -#: src/views/Edit/Wizard/index.js:647 -#: src/views/Edit/Wizard/index.js:912 -#: src/views/Edit/Wizard/index.js:1024 -#: src/views/Edit/Wizard/index.js:1082 -#: src/views/Edit/Wizard/index.js:1164 -#: src/views/Publication/Add.js:528 +#: src/views/Edit/Profile.js:584 +#: src/views/Edit/Wizard/index.js:423 +#: src/views/Edit/Wizard/index.js:662 +#: src/views/Edit/Wizard/index.js:927 +#: src/views/Edit/Wizard/index.js:1039 +#: src/views/Edit/Wizard/index.js:1097 +#: src/views/Edit/Wizard/index.js:1179 +#: src/views/Publication/Add.js:492 msgid "Back" msgstr "Indietro" -#: src/views/Playersite.js:563 +#: src/views/Playersite.js:579 msgid "Background colors" msgstr "Colori di sfondo" -#: src/views/Playersite.js:616 +#: src/views/Playersite.js:632 msgid "Background image" msgstr "Immagine di sfondo" @@ -273,7 +288,7 @@ msgstr "Chiave del flusso di backup" msgid "Bandwidth" msgstr "Larghezza di banda" -#: src/views/Settings.js:1373 +#: src/views/Settings.js:1441 msgid "Bandwidth control" msgstr "Controllo della larghezza di banda" @@ -282,7 +297,7 @@ msgid "Banner" msgstr "Banner" #: src/views/Login.js:241 -#: src/views/Settings.js:1420 +#: src/views/Settings.js:1488 msgid "Basic" msgstr "Di base" @@ -295,24 +310,24 @@ msgstr "Fattore bip" msgid "Bitrate" msgstr "Bitrate" -#: src/views/Edit/Wizard/index.js:1013 -#: src/views/Edit/index.js:510 +#: src/views/Edit/Wizard/index.js:1028 +#: src/views/Edit/index.js:564 msgid "Briefly describe what the audience will see during the live stream." msgstr "Descriva brevemente ciò che il pubblico vedrà durante il live stream." -#: src/views/Publication/Player.js:352 +#: src/views/Publication/Player.js:355 msgid "Button color" msgstr "Colore del pulsante" -#: src/views/Settings.js:1687 +#: src/views/Settings.js:1757 msgid "Cache for files on /data." msgstr "Cache per i file su /data." -#: src/views/Settings.js:1715 +#: src/views/Settings.js:1785 msgid "Cache time (Seconds)" msgstr "Tempo di cache (secondi)" -#: src/views/Settings.js:1743 +#: src/views/Settings.js:1813 msgid "Cache types" msgstr "Tipi di cache" @@ -324,7 +339,7 @@ msgstr "Cattura i clic" msgid "Capture cursor" msgstr "Cattura del cursore" -#: src/views/Edit/index.js:327 +#: src/views/Edit/index.js:339 msgid "Channel \"{0}\" saved" msgstr "Canale \"{0}\" salvato" @@ -332,11 +347,11 @@ msgstr "Canale \"{0}\" salvato" msgid "Channels" msgstr "Canali" -#: src/views/Settings.js:1172 +#: src/views/Settings.js:1240 msgid "Check for updates" msgstr "Controlla gli aggiornamenti" -#: src/views/Publication/Add.js:272 +#: src/views/Publication/Add.js:276 msgid "Check the requirements" msgstr "Controlla i requisiti" @@ -350,8 +365,8 @@ msgstr "Scegliere un flusso audio" #: src/views/Edit/Sources/ALSA.js:96 #: src/views/Edit/Sources/Framebuffer.js:80 -#: src/views/Edit/Sources/Raspicam.js:84 -#: src/views/Edit/Sources/V4L.js:90 +#: src/views/Edit/Sources/Raspicam.js:87 +#: src/views/Edit/Sources/V4L.js:93 msgid "Choose an input device ..." msgstr "Scegliere un dispositivo di input ..." @@ -363,16 +378,21 @@ msgstr "Scegliere il codec ..." msgid "Choose tenant ..." msgstr "Scelga l'inquilino ..." +#: src/views/Playersite.js:425 +#: src/views/Publication/Player.js:442 +msgid "Chromecast" +msgstr "Chromecast" + #: src/views/Publication/Services/DASH.js:309 #: src/views/Publication/Services/HLS.js:249 msgid "Chunk" msgstr "Chunk" #: src/misc/ModalContent.js:77 -#: src/views/Playersite.js:782 -#: src/views/Publication/Add.js:525 -#: src/views/Publication/Edit.js:565 -#: src/views/Publication/Player.js:447 +#: src/views/Playersite.js:798 +#: src/views/Publication/Add.js:489 +#: src/views/Publication/Edit.js:527 +#: src/views/Publication/Player.js:452 msgid "Close" msgstr "Chiudere" @@ -385,11 +405,11 @@ msgid "Codec" msgstr "Codec" #: src/views/Edit/Sources/VirtualAudio.js:110 -#: src/views/Publication/Player.js:320 +#: src/views/Publication/Player.js:323 msgid "Color" msgstr "Colore" -#: src/views/Settings.js:1282 +#: src/views/Settings.js:1350 msgid "Config" msgstr "Configurazione" @@ -410,7 +430,7 @@ msgid "Connected since <0/>" msgstr "Collegato da <0/>" #: src/misc/ActionButton.js:12 -#: src/views/Main/index.js:305 +#: src/views/Main/index.js:334 #: src/views/Publication/Process.js:40 msgid "Connecting ..." msgstr "Collegamento ..." @@ -424,14 +444,14 @@ msgid "Connecting to Restreamer Core failed probably because of mixed content." msgstr "La connessione a Restreamer Core non è riuscita, probabilmente a causa del contenuto misto." #: src/misc/controls/Metadata.js:70 -#: src/views/Playersite.js:659 -#: src/views/Playersite.js:676 +#: src/views/Playersite.js:675 +#: src/views/Playersite.js:692 msgid "Content" msgstr "Contenuto" -#: src/views/Main/index.js:365 +#: src/views/Main/index.js:394 msgid "Content URL" -msgstr "" +msgstr "URL del contenuto" #: src/Footer.js:193 msgid "Cores" @@ -445,7 +465,7 @@ msgstr "Creare un utente" msgid "Creative Commons" msgstr "Creative Commons" -#: src/misc/coders/Encoders/audio/Opus.js:59 +#: src/misc/coders/Encoders/audio/Opus.js:61 #: src/misc/coders/settings/Audio.js:25 #: src/misc/coders/settings/Audio.js:71 #: src/misc/coders/settings/Audio.js:122 @@ -454,14 +474,17 @@ msgstr "Creative Commons" #: src/misc/coders/settings/Video.js:115 #: src/misc/coders/settings/Video.js:181 #: src/misc/coders/settings/Video.js:220 +#: src/misc/filters/audio/Resample.js:63 +#: src/misc/filters/audio/Resample.js:114 +#: src/misc/filters/audio/Volume.js:58 #: src/views/Edit/Sources/ALSA.js:101 #: src/views/Edit/Sources/AVFoundation.js:120 #: src/views/Edit/Sources/AVFoundation.js:153 -#: src/views/Edit/Sources/V4L.js:96 +#: src/views/Edit/Sources/V4L.js:99 msgid "Custom ..." msgstr "Personalizzato ..." -#: src/views/Settings.js:1288 +#: src/views/Settings.js:1356 msgid "Custom JSON config for datarhei Core." msgstr "Configurazione JSON personalizzata per datarhei Core." @@ -478,11 +501,11 @@ msgstr "Indice audio personalizzato" msgid "Custom bitrate (kbit/s)" msgstr "Bitrate personalizzato (kbit/s)" -#: src/views/Playersite.js:687 +#: src/views/Playersite.js:703 msgid "Custom code injection" msgstr "Iniezione di codice personalizzato" -#: src/misc/coders/Encoders/audio/Opus.js:85 +#: src/misc/coders/Encoders/audio/Opus.js:87 msgid "Custom delay" msgstr "Ritardo personalizzato" @@ -503,10 +526,12 @@ msgid "Custom keyframe interval" msgstr "Intervallo keyframe personalizzato" #: src/misc/coders/settings/Audio.js:98 +#: src/misc/filters/audio/Resample.js:90 msgid "Custom layout" msgstr "Layout personalizzato" #: src/misc/coders/settings/Audio.js:149 +#: src/misc/filters/audio/Resample.js:141 msgid "Custom sampling (Hz)" msgstr "Campionamento personalizzato (Hz)" @@ -518,7 +543,7 @@ msgstr "Scala personalizzata" msgid "Custom size" msgstr "Dimensione personalizzata" -#: src/views/Edit/Sources/V4L.js:110 +#: src/views/Edit/Sources/V4L.js:113 msgid "Custom video device" msgstr "Dispositivo video personalizzato" @@ -536,8 +561,12 @@ msgstr "Dati copiati negli appunti" msgid "Death color" msgstr "Colore della morte" +#: src/misc/filters/audio/Volume.js:74 +msgid "Decibels (dB)" +msgstr "Decibel (dB)" + #: src/misc/EncodingSelect.js:210 -#: src/views/Edit/Wizard/index.js:628 +#: src/views/Edit/Wizard/index.js:643 msgid "Decoder" msgstr "Decoder" @@ -545,13 +574,13 @@ msgstr "Decoder" #: src/views/Edit/Sources/AVFoundation.js:149 #: src/views/Edit/Wizard/Sources/AVFoundation.js:76 #: src/views/Edit/Wizard/Sources/AVFoundation.js:105 -#: src/views/Playersite.js:451 -#: src/views/Playersite.js:526 -#: src/views/Playersite.js:570 +#: src/views/Playersite.js:467 +#: src/views/Playersite.js:542 +#: src/views/Playersite.js:586 msgid "Default" msgstr "Default" -#: src/misc/coders/Encoders/audio/Opus.js:84 +#: src/misc/coders/Encoders/audio/Opus.js:86 msgid "Delay" msgstr "Ritardo" @@ -559,15 +588,15 @@ msgstr "Ritardo" msgid "Delay (ms)" msgstr "Ritardo (ms)" -#: src/views/Edit/index.js:563 -#: src/views/Edit/index.js:599 -#: src/views/Playersite.js:474 -#: src/views/Publication/Edit.js:574 -#: src/views/Publication/Edit.js:606 +#: src/views/Edit/index.js:617 +#: src/views/Edit/index.js:653 +#: src/views/Playersite.js:490 +#: src/views/Publication/Edit.js:536 +#: src/views/Publication/Edit.js:568 msgid "Delete" msgstr "Cancellare" -#: src/views/Publication/Edit.js:611 +#: src/views/Publication/Edit.js:573 msgid "Deleting a publication service cannot be reversed. The publication stops immediately." msgstr "L'eliminazione di un servizio di pubblicazione non può essere annullata. La pubblicazione si interrompe immediatamente." @@ -582,12 +611,12 @@ msgid "Description" msgstr "Descrizione" #: src/views/Playersite.js:352 -#: src/views/Playersite.js:509 +#: src/views/Playersite.js:525 msgid "Design" msgstr "Design" #: src/views/Edit/Sources/Framebuffer.js:87 -#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:905 #: src/views/Publication/Services/Framebuffer.js:93 msgid "Device" msgstr "Dispositivo" @@ -598,7 +627,7 @@ msgstr "Dispositivo" msgid "Disconnect" msgstr "Scollegare" -#: src/views/Edit/index.js:580 +#: src/views/Edit/index.js:634 msgid "Disconnect & Continue" msgstr "Disconnettersi e continuare" @@ -607,12 +636,13 @@ msgstr "Disconnettersi e continuare" msgid "Disconnecting ..." msgstr "Scollegamento ..." -#: src/views/Settings.js:1650 +#: src/misc/controls/HLS.js:70 +#: src/views/Settings.js:1720 msgid "Disk" msgstr "Disco" -#: src/views/Settings.js:1684 -#: src/views/Settings.js:1692 +#: src/views/Settings.js:1754 +#: src/views/Settings.js:1762 msgid "Disk cache" msgstr "Cache del disco" @@ -621,19 +651,19 @@ msgstr "Cache del disco" msgid "Disk storage" msgstr "Archiviazione su disco" -#: src/views/Settings.js:2063 +#: src/views/Settings.js:2214 msgid "Do you really want to restart the application now?" msgstr "Vuoi davvero riavviare l'applicazione ora?" -#: src/views/Edit/index.js:591 +#: src/views/Edit/index.js:645 msgid "Do you want to delete \"{0}\"?" msgstr "Vuole cancellare \"{0}\"?" -#: src/views/Publication/Edit.js:598 +#: src/views/Publication/Edit.js:560 msgid "Do you want to delete {title}?" msgstr "Vuoi cancellare {titolo}?" -#: src/views/Edit/index.js:572 +#: src/views/Edit/index.js:626 msgid "Do you want to disconnect \"{0}\"?" msgstr "Vuole disconnettere \"{0}\"?" @@ -658,7 +688,7 @@ msgstr "Documentazione" msgid "Dup. frames" msgstr "Telai duplicati" -#: src/views/Publication/Player.js:285 +#: src/views/Publication/Player.js:288 msgid "EDIT: Player" msgstr "EDIT: Giocatore" @@ -666,27 +696,41 @@ msgstr "EDIT: Giocatore" msgid "EDIT: Publication Website" msgstr "EDIT: Sito web di pubblicazione" -#: src/views/Edit/index.js:391 +#: src/misc/controls/HLS.js:78 +msgid "EXT-X-VERSION" +msgstr "EXT-X-VERSIONE" + +#: src/views/Edit/index.js:403 msgid "Edit" msgstr "Modifica" -#: src/views/Edit/index.js:417 +#: src/views/Edit/index.js:429 msgid "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." msgstr "Modifichi le fonti audio e video per il live stream. Aggiunga una descrizione e imposti la licenza di contenuto desiderata." -#: src/views/Publication/Edit.js:377 +#: src/views/Publication/Edit.js:384 msgid "Edit: {title}" msgstr "Modifica: {titolo}" -#: src/views/Publication/Player.js:319 +#: src/views/Publication/Player.js:322 msgid "Embed" msgstr "Incorporare" -#: src/views/Edit/Sources/Network.js:577 +#: src/misc/controls/RTMP.js:48 +#: src/misc/controls/SRT.js:48 +msgid "Enable" +msgstr "Abilitazione" + +#: src/views/Edit/Sources/Network.js:684 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:55 msgid "Enable RTMP server ..." msgstr "Abilitare il server RTMP ..." +#: src/views/Edit/Sources/Network.js:733 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:55 +msgid "Enable SRT server ..." +msgstr "Abilitare il server SRT ..." + #: src/views/Edit/Sources/VirtualAudio.js:162 msgid "Enable a periodic beep every second with this value times the carrier frequency" msgstr "Abilita un bip periodico ogni secondo con questo valore moltiplicato per la frequenza della portante" @@ -696,10 +740,15 @@ msgstr "Abilita un bip periodico ogni secondo con questo valore moltiplicato per msgid "Enable backup stream" msgstr "Attiva il flusso di backup" -#: src/views/Publication/Player.js:427 +#: src/views/Publication/Player.js:430 msgid "Enable nerd statistics" msgstr "Abilita le statistiche dei nerd" +#: src/misc/controls/RTMP.js:70 +#: src/misc/controls/SRT.js:70 +msgid "Enable now" +msgstr "Attivare ora" + #: src/views/Publication/Services/Dummy.js:277 #: src/views/Publication/Services/Facebook.js:138 msgid "Enable primary stream" @@ -709,23 +758,21 @@ msgstr "Attiva il flusso primario" msgid "Enable snapshots" msgstr "Abilita le istantanee" -#: src/views/Settings.js:1433 +#: src/views/Settings.js:1503 msgid "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." msgstr "L'abilitazione dell'autorizzazione è fortemente consigliata. Altrimenti, chiunque può accedere a questa istanza." -#: src/views/Settings.js:1593 +#: src/views/Settings.js:1663 msgid "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." msgstr "L'abilitazione dell'autenticazione di base è fortemente consigliata. Altrimenti, chiunque potrebbe scrivere dati su /memfs." -#: src/views/Edit/Wizard/index.js:634 +#: src/views/Edit/Wizard/index.js:649 msgid "Encoder" msgstr "Encoder" -#: src/views/Edit/Summary.js:66 -#: src/views/Publication/Add.js:374 -#: src/views/Publication/Add.js:466 -#: src/views/Publication/Edit.js:388 -#: src/views/Publication/Edit.js:505 +#: src/views/Edit/Summary.js:95 +#: src/views/Publication/Add.js:441 +#: src/views/Publication/Edit.js:478 msgid "Encoding" msgstr "Codifica" @@ -743,7 +790,7 @@ msgstr "Inserisca un nome per il nuovo canale." msgid "Enter password" msgstr "Inserire la password" -#: src/views/Edit/Sources/Network.js:348 +#: src/views/Edit/Sources/Network.js:414 #: src/views/Edit/Wizard/Sources/Network.js:59 msgid "Enter the address of your network source:" msgstr "Inserisci l'indirizzo della tua sorgente di rete:" @@ -752,15 +799,15 @@ msgstr "Inserisci l'indirizzo della tua sorgente di rete:" msgid "Enter username" msgstr "Inserisca il nome utente" -#: src/misc/coders/Encoders/video/H264VideoToolbox.js:61 +#: src/misc/coders/Encoders/video/H264VideoToolbox.js:64 msgid "Entropy coder" msgstr "Codificatore di entropia" -#: src/views/Edit/Wizard/index.js:1118 +#: src/views/Edit/Wizard/index.js:1133 #: src/views/Incompatible.js:30 #: src/views/Invalid.js:29 #: src/views/Publication/Process.js:63 -#: src/views/Settings.js:1109 +#: src/views/Settings.js:1176 msgid "Error" msgstr "Errore" @@ -770,40 +817,40 @@ msgstr "Errore" msgid "Error while copying data to clipboard" msgstr "Errore durante la copia dei dati negli appunti" -#: src/views/Main/index.js:324 +#: src/views/Main/index.js:353 #: src/views/Publication/Process.js:64 msgid "Error: {0}" msgstr "Errore: {0}" -#: src/views/Playersite.js:732 +#: src/views/Playersite.js:748 msgid "Expands the area above the channel list (live chat)." msgstr "Espande l'area sopra l'elenco dei canali (live chat)." -#: src/views/Playersite.js:752 +#: src/views/Playersite.js:768 msgid "Expands the area under the channel description (comment boxes)." msgstr "Espande l'area sotto la descrizione del canale (caselle di commento)." -#: src/views/Settings.js:1199 +#: src/views/Settings.js:1267 msgid "Expert mode" msgstr "Modalità esperto" -#: src/views/Playersite.js:717 +#: src/views/Playersite.js:733 msgid "Extend channel list" msgstr "Estendere l'elenco dei canali" -#: src/views/Playersite.js:737 +#: src/views/Playersite.js:753 msgid "Extend content" msgstr "Estendere il contenuto" -#: src/views/Playersite.js:757 +#: src/views/Playersite.js:773 msgid "Extend footer" msgstr "Estendere il piè di pagina" -#: src/views/Playersite.js:697 +#: src/views/Playersite.js:713 msgid "Extend header" msgstr "Estendere l'intestazione" -#: src/views/Settings.js:1936 +#: src/views/Settings.js:2087 msgid "FFmpeg" msgstr "FFmpeg" @@ -812,7 +859,7 @@ msgstr "FFmpeg" msgid "FPS" msgstr "FPS" -#: src/views/Publication/Add.js:180 +#: src/views/Publication/Add.js:187 msgid "Failed to create publication service ({0})" msgstr "Impossibile creare il servizio di pubblicazione ({0})" @@ -820,12 +867,12 @@ msgstr "Impossibile creare il servizio di pubblicazione ({0})" msgid "Failed to create publication website files." msgstr "Impossibile creare i file del sito web della pubblicazione." -#: src/views/Edit/Profile.js:341 -#: src/views/Edit/Profile.js:471 +#: src/views/Edit/Profile.js:354 +#: src/views/Edit/Profile.js:504 msgid "Failed to probe the source. Please check the <0>probe details." msgstr "Impossibile sondare la sorgente. Per favore controlla i <0>dettagli della sonda." -#: src/utils/restreamer.js:434 +#: src/utils/restreamer.js:446 msgid "Failed to refresh token: {0}" msgstr "Impossibile aggiornare il token: {0}" @@ -841,7 +888,7 @@ msgstr "Non è riuscito a fermare il processo" msgid "Failed to store player size setting." msgstr "Impossibile memorizzare l'impostazione delle dimensioni del giocatore." -#: src/views/Publication/Edit.js:222 +#: src/views/Publication/Edit.js:230 msgid "Failed to store publication service ({0})" msgstr "Impossibile memorizzare il servizio di pubblicazione ({0})" @@ -850,15 +897,27 @@ msgid "Failed to update ingest process ({0})" msgstr "Fallito l'aggiornamento del processo di ingest ({0})" #: src/views/Edit/index.js:310 +msgid "Failed to update ingest snapshot process ({0})" +msgstr "Fallito l'aggiornamento del processo di ingest snapshot ({0})" + +#: src/views/Edit/index.js:316 msgid "Failed to update the player" msgstr "Non è riuscito ad aggiornare il giocatore" -#: src/views/Edit/Wizard/index.js:375 -#: src/views/Edit/Wizard/index.js:838 +#: src/views/Edit/index.js:322 +msgid "Failed to update the playersite" +msgstr "Non è riuscito ad aggiornare il sito dei giocatori" + +#: src/views/Edit/Wizard/index.js:390 +#: src/views/Edit/Wizard/index.js:853 msgid "Failed to verify the source. Please check the address." msgstr "Impossibile verificare la fonte. Si prega di controllare l'indirizzo." -#: src/views/Edit/Profile.js:549 +#: src/views/Edit/Summary.js:101 +msgid "Filter" +msgstr "Filtro" + +#: src/views/Edit/Profile.js:592 msgid "Finish" msgstr "Finitura" @@ -866,15 +925,15 @@ msgstr "Finitura" msgid "Flags" msgstr "Bandiere" -#: src/views/Playersite.js:772 +#: src/views/Playersite.js:788 msgid "For Javascripts." msgstr "Per i Javascript." -#: src/views/Playersite.js:712 +#: src/views/Playersite.js:728 msgid "For Stylesheets." msgstr "Per i fogli di stile." -#: src/views/Edit/Sources/Network.js:439 +#: src/views/Edit/Sources/Network.js:521 msgid "Force input framerate" msgstr "Forzare il framerate in ingresso" @@ -891,7 +950,7 @@ msgid "Framebuffer" msgstr "Framebuffer" #: src/misc/coders/settings/Video.js:135 -#: src/views/Edit/Sources/Network.js:452 +#: src/views/Edit/Sources/Network.js:534 msgid "Framerate" msgstr "Framerate" @@ -899,7 +958,7 @@ msgstr "Framerate" msgid "Frequency (Hz)" msgstr "Frequenza (Hz)" -#: src/views/Publication/Services/Core.js:129 +#: src/views/Publication/Services/Core.js:154 #: src/views/Publication/Services/Facebook.js:115 #: src/views/Publication/Services/Facebook.js:133 #: src/views/Publication/Services/Instagram.js:88 @@ -910,13 +969,13 @@ msgstr "Frequenza (Hz)" msgid "GET" msgstr "GET" -#: src/views/Edit/Sources/Network.js:471 -#: src/views/Edit/index.js:400 +#: src/views/Edit/Sources/Network.js:553 #: src/views/Edit/index.js:412 +#: src/views/Edit/index.js:424 #: src/views/Playersite.js:350 #: src/views/Playersite.js:363 -#: src/views/Publication/Add.js:372 -#: src/views/Publication/Edit.js:386 +#: src/views/Publication/Add.js:374 +#: src/views/Publication/Edit.js:393 #: src/views/Publication/Services/DASH.js:211 #: src/views/Publication/Services/HLS.js:200 #: src/views/Publication/Services/Icecast.js:177 @@ -924,62 +983,73 @@ msgstr "GET" #: src/views/Publication/Services/RTMP.js:145 #: src/views/Publication/Services/RTSP.js:169 #: src/views/Publication/Services/SRT.js:177 -#: src/views/Settings.js:1138 -#: src/views/Settings.js:1158 +#: src/views/Settings.js:1205 +#: src/views/Settings.js:1226 msgid "General" msgstr "Generale" -#: src/views/Publication/Player.js:410 +#: src/views/Publication/Player.js:413 msgid "Google Analytics ID" msgstr "ID di Google Analytics" -#: src/views/Publication/Player.js:420 +#: src/views/Publication/Player.js:423 msgid "Google Analytics Tracker Name" msgstr "Nome del tracker di Google Analytics" -#: src/views/Edit/index.js:471 -#: src/views/Main/index.js:369 +#: src/views/Main/index.js:403 msgid "HLS" msgstr "HLS" -#: src/views/Settings.js:1510 +#: src/views/Edit/index.js:483 +msgid "HLS output" +msgstr "Uscita HLS" + +#: src/views/Edit/Wizard/Sources/InternalHLS.js:73 +msgid "HLS server" +msgstr "Server HLS" + +#: src/views/Settings.js:1580 msgid "HLS statistic for the In-memory storage" msgstr "Statistica HLS per l'archiviazione In-memory" -#: src/views/Edit/Sources/Network.js:429 +#: src/views/Edit/Sources/Network.js:511 msgid "HTTP and HTTPS" msgstr "HTTP e HTTPS" -#: src/views/Settings.js:1323 +#: src/views/Settings.js:1391 msgid "HTTP port" msgstr "Porta HTTP" -#: src/views/Settings.js:1352 +#: src/views/Settings.js:1420 msgid "HTTPS (SSL/TLS)" msgstr "HTTPS (SSL/TLS)" -#: src/views/Settings.js:1336 +#: src/views/Settings.js:1404 msgid "HTTPS port" msgstr "Porta HTTPS" -#: src/views/Edit/Sources/V4L.js:151 +#: src/views/Edit/Sources/V4L.js:154 #: src/views/Edit/Wizard/Sources/V4L.js:140 msgid "Hardware device" msgstr "Dispositivo hardware" -#: src/views/Playersite.js:579 +#: src/views/Playersite.js:595 msgid "Header" msgstr "Intestazione" -#: src/views/Playersite.js:535 +#: src/views/Playersite.js:551 msgid "Headline" msgstr "Titolo" +#: src/misc/filters/video/HFlip.js:65 +msgid "Horizontal Flip" +msgstr "Capovolgimento orizzontale" + #: src/views/Login.js:319 msgid "Hosted Restreamer interface" msgstr "Interfaccia Restreamer in hosting" -#: src/views/Settings.js:1258 +#: src/views/Settings.js:1326 msgid "Human readable name on the service." msgstr "Nome leggibile dall'uomo del servizio." @@ -987,24 +1057,24 @@ msgstr "Nome leggibile dall'uomo del servizio." msgid "IP address" msgstr "Indirizzo IP" -#: src/views/Settings.js:2008 +#: src/views/Settings.js:2159 msgid "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." msgstr "Se ha cambiato le porte, è possibile che Restreamer Core sia già stato riavviato, ma ora è disponibile su una porta diversa." -#: src/views/Settings.js:2002 +#: src/views/Settings.js:2153 msgid "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." msgstr "Se ha attivato Let's Encrypt TLS, potrebbe essere necessario un po' di tempo per acquisire i certificati. Si assicuri che Restreamer Core sia raggiungibile tramite la porta 80 da Internet. Controlli il registro della console di Restreamer Core." -#: src/views/Settings.js:1525 +#: src/views/Settings.js:1595 msgid "Ignore IP ranges" msgstr "Ignora gli intervalli IP" -#: src/views/Playersite.js:624 -#: src/views/Publication/Player.js:366 +#: src/views/Playersite.js:640 +#: src/views/Publication/Player.js:369 msgid "Image URL" msgstr "URL dell'immagine" -#: src/views/Playersite.js:649 +#: src/views/Playersite.js:665 msgid "Imprint" msgstr "Impronta" @@ -1012,7 +1082,8 @@ msgstr "Impronta" msgid "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." msgstr "Oltre al player, Restreamer offre una landingpage completa, che può utilizzare per presentare il suo live stream in modo semplice e veloce." -#: src/views/Settings.js:1577 +#: src/misc/controls/HLS.js:67 +#: src/views/Settings.js:1647 msgid "In-memory" msgstr "In-memory" @@ -1021,39 +1092,35 @@ msgstr "In-memory" msgid "In-memory storage" msgstr "Archiviazione in memoria" -#: src/views/Publication/Add.js:269 +#: src/views/Publication/Add.js:273 msgid "Incompatible" msgstr "Incompatibile" #: src/misc/coders/settings/Audio.js:67 #: src/misc/coders/settings/Audio.js:118 +#: src/misc/filters/audio/Pan.js:47 +#: src/misc/filters/audio/Resample.js:59 +#: src/misc/filters/audio/Resample.js:110 +#: src/misc/filters/audio/Volume.js:46 msgid "Inherit" msgstr "Eredita" -#: src/views/Playersite.js:707 +#: src/views/Playersite.js:723 msgid "Inject 1" msgstr "Iniettare 1" -#: src/views/Playersite.js:727 +#: src/views/Playersite.js:743 msgid "Inject 2" msgstr "Iniettare 2" -#: src/views/Playersite.js:747 +#: src/views/Playersite.js:763 msgid "Inject 3" msgstr "Iniettare 3" -#: src/views/Playersite.js:767 +#: src/views/Playersite.js:783 msgid "Inject 4" msgstr "Iniettare 4" -#: src/views/Edit/Wizard/Sources/InternalHLS.js:75 -msgid "Internal HLS server" -msgstr "Server HLS interno" - -#: src/views/Edit/Wizard/Sources/InternalRTMP.js:95 -msgid "Internal RTMP server" -msgstr "Server RTMP interno" - #: src/misc/controls/Snapshot.js:50 msgid "Interval (seconds)" msgstr "Intervallo (secondi)" @@ -1068,28 +1135,29 @@ msgid "Keyframe interval (seconds)" msgstr "Intervallo dei fotogrammi chiave (secondi)" #: src/misc/coders/settings/Audio.js:97 +#: src/misc/filters/audio/Resample.js:89 msgid "Layout" msgstr "Layout" -#: src/views/Settings.js:1357 +#: src/views/Settings.js:1425 msgid "Let's Encrypt certification" msgstr "Certificazione Let's Encrypt" -#: src/views/Settings.js:1365 +#: src/views/Settings.js:1433 msgid "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." msgstr "Let's Encrypt richiede uno o più nomi di dominio pubblico e una porta 80/TCP accessibile." -#: src/misc/coders/Encoders/video/H264NVENC.js:109 +#: src/misc/coders/Encoders/video/H264NVENC.js:112 msgid "Level" msgstr "Livello" -#: src/views/Settings.js:1918 +#: src/views/Settings.js:2069 msgid "Level of system protocol." msgstr "Livello di protocollo del sistema." -#: src/views/Edit/Wizard/index.js:1061 -#: src/views/Edit/index.js:403 -#: src/views/Edit/index.js:525 +#: src/views/Edit/Wizard/index.js:1076 +#: src/views/Edit/index.js:415 +#: src/views/Edit/index.js:579 msgid "License" msgstr "Licenza" @@ -1097,28 +1165,28 @@ msgstr "Licenza" msgid "Life color" msgstr "Colore della vita" -#: src/views/Playersite.js:606 +#: src/views/Playersite.js:622 msgid "Linecolor" msgstr "Linecolor" -#: src/views/Playersite.js:544 -#: src/views/Publication/Player.js:396 +#: src/views/Playersite.js:560 +#: src/views/Publication/Player.js:399 msgid "Link" msgstr "Link" -#: src/views/Playersite.js:553 +#: src/views/Playersite.js:569 msgid "Link, mouseover" msgstr "Link, passaggio del mouse" -#: src/views/Settings.js:1533 +#: src/views/Settings.js:1603 msgid "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." msgstr "Elenco di intervalli IP in notazione CIDR, ad esempio 127.0.0.1/32, che le statistiche non registreranno, un intervallo IP per riga. Lasciare vuoto per registrare tutte le sessioni." -#: src/views/Settings.js:1751 +#: src/views/Settings.js:1821 msgid "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." msgstr "Elenco di estensioni di file da mettere in cache (ad esempio \".html\"), una per riga. Lasciare vuoto per mettere in cache tutti i tipi di file." -#: src/misc/controls/HLS.js:74 +#: src/misc/controls/HLS.js:107 msgid "List size (segments)" msgstr "Dimensione della lista (segmenti)" @@ -1142,13 +1210,13 @@ msgstr "Trasmissione in diretta su Vimeo Live RTMP Service" msgid "Livesource ID" msgstr "ID Livesource" -#: src/views/Settings.js:1870 +#: src/views/Settings.js:2021 msgid "Log level" msgstr "Livello di registro" #: src/misc/modals/Process.js:90 -#: src/views/Settings.js:1147 -#: src/views/Settings.js:1846 +#: src/views/Settings.js:1215 +#: src/views/Settings.js:1997 msgid "Logging" msgstr "Registrazione" @@ -1159,23 +1227,23 @@ msgstr "Registrazione" msgid "Login" msgstr "Accesso" -#: src/utils/restreamer.js:263 #: src/utils/restreamer.js:268 -#: src/utils/restreamer.js:297 +#: src/utils/restreamer.js:273 #: src/utils/restreamer.js:302 +#: src/utils/restreamer.js:307 msgid "Login failed: Couldn't load API details" msgstr "Accesso fallito: Impossibile caricare i dettagli API" -#: src/utils/restreamer.js:254 -#: src/utils/restreamer.js:288 +#: src/utils/restreamer.js:259 +#: src/utils/restreamer.js:293 msgid "Login failed: {0}" msgstr "Accesso fallito: {0}" -#: src/views/Settings.js:1425 +#: src/views/Settings.js:1493 msgid "Login/JWT authorization" msgstr "Accesso/Autorizzazione JWT" -#: src/views/Publication/Player.js:321 +#: src/views/Publication/Player.js:324 msgid "Logo" msgstr "Logo" @@ -1183,24 +1251,28 @@ msgstr "Logo" msgid "Logout" msgstr "Disconnessione" +#: src/misc/filters/audio/Loudnorm.js:66 +msgid "Loudness Normalization" +msgstr "Normalizzazione del loudness" + #: src/Footer.js:208 msgid "MB" msgstr "MB" -#: src/views/Edit/index.js:380 +#: src/views/Edit/index.js:392 msgid "Main Source" msgstr "Fonte principale" -#: src/views/Main/index.js:260 +#: src/views/Main/index.js:289 #: src/views/Playersite.js:389 msgid "Main channel" msgstr "Canale principale" -#: src/views/Publication/Player.js:102 +#: src/views/Publication/Player.js:99 msgid "Main channel not found" msgstr "Canale principale non trovato" -#: src/views/Edit/Wizard/index.js:188 +#: src/views/Edit/Wizard/index.js:194 msgid "Main channel saved" msgstr "Canale principale salvato" @@ -1208,63 +1280,70 @@ msgstr "Canale principale salvato" msgid "Main page channel (index.html)." msgstr "Canale della pagina principale (index.html)." -#: src/views/Publication/Add.js:411 -#: src/views/Publication/Add.js:444 -#: src/views/Publication/Add.js:511 -#: src/views/Publication/Edit.js:419 -#: src/views/Publication/Edit.js:483 -#: src/views/Publication/Edit.js:552 +#: src/views/Publication/TabContent.js:49 msgid "Maintainer:" msgstr "Manutentore:" -#: src/views/Settings.js:1710 +#: src/misc/controls/RTMP.js:54 +msgid "Make the channel available as an RTMP stream (experimental)." +msgstr "Rendere il canale disponibile come flusso RTMP (sperimentale)." + +#: src/misc/controls/SRT.js:54 +msgid "Make the channel available as an SRT stream (experimental)." +msgstr "Rendere il canale disponibile come flusso SRT (sperimentale)." + +#: src/misc/controls/HLS.js:117 +msgid "Master playlist (increases browser/client compatibility)" +msgstr "Playlist master (aumenta la compatibilità tra browser e client)" + +#: src/views/Settings.js:1780 msgid "Maximum allowed cache size, 0 for unlimited." msgstr "Dimensione massima consentita della cache, 0 per illimitata." -#: src/views/Settings.js:1632 +#: src/views/Settings.js:1702 msgid "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." msgstr "Megabyte massimi consentiti di RAM per /memfs, 0 per illimitato." -#: src/views/Settings.js:1676 +#: src/views/Settings.js:1746 msgid "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." msgstr "Megabyte massimi consentiti da consumare dal disco rigido. 0 per illimitato." -#: src/views/Settings.js:1394 +#: src/views/Settings.js:1462 msgid "Maximum bandwidth Mbit/s" msgstr "Larghezza di banda massima Mbit/s" -#: src/misc/coders/Encoders/audio/Opus.js:74 +#: src/misc/coders/Encoders/audio/Opus.js:76 msgid "Maximum delay in milliseconds." msgstr "Ritardo massimo in millisecondi." -#: src/views/Settings.js:1728 +#: src/views/Settings.js:1798 msgid "Maximum file size (Megabytes)" msgstr "Dimensione massima del file (Megabyte)" -#: src/views/Settings.js:1736 +#: src/views/Settings.js:1806 msgid "Maximum file size to put in cache." msgstr "Dimensione massima del file da inserire nella cache." -#: src/views/Settings.js:1954 +#: src/views/Settings.js:2105 msgid "Maximum log histroy" msgstr "Istanza di log massima" -#: src/views/Settings.js:1923 -#: src/views/Settings.js:1941 +#: src/views/Settings.js:2074 +#: src/views/Settings.js:2092 msgid "Maximum log lines" msgstr "Linee di registro massime" -#: src/views/Settings.js:1624 -#: src/views/Settings.js:1668 -#: src/views/Settings.js:1702 +#: src/views/Settings.js:1694 +#: src/views/Settings.js:1738 +#: src/views/Settings.js:1772 msgid "Maximum size (Megabytes)" msgstr "Dimensione massima (Megabyte)" -#: src/views/Settings.js:1542 +#: src/views/Settings.js:1612 msgid "Maximum viewer idle time (Seconds)" msgstr "Tempo massimo di inattività del telespettatore (secondi)" -#: src/views/Settings.js:1378 +#: src/views/Settings.js:1446 msgid "Maximum viewers" msgstr "Spettatori massimi" @@ -1272,12 +1351,12 @@ msgstr "Spettatori massimi" msgid "Memory" msgstr "Memoria" -#: src/views/Edit/index.js:402 +#: src/views/Edit/index.js:414 msgid "Meta information" msgstr "Meta informazioni" -#: src/views/Edit/Wizard/index.js:1006 -#: src/views/Edit/index.js:505 +#: src/views/Edit/Wizard/index.js:1021 +#: src/views/Edit/index.js:559 msgid "Metadata" msgstr "Metadati" @@ -1299,44 +1378,56 @@ msgstr "Maggiori informazioni sul copyright di YouTube <0>qui." msgid "More about licenses here" msgstr "Maggiori informazioni sulle licenze qui" -#: src/views/Settings.js:1227 +#: src/views/Settings.js:1295 msgid "More about the service" msgstr "Maggiori informazioni sul servizio" -#: src/views/Publication/Player.js:438 +#: src/views/Publication/Player.js:441 msgid "Mute" msgstr "Muto" +#: src/misc/filters/audio/Pan.js:57 +msgid "Mute a channel." +msgstr "Disattivare un canale." + +#: src/misc/filters/audio/Pan.js:50 +msgid "Mute left" +msgstr "Silenziamento a sinistra" + +#: src/misc/filters/audio/Pan.js:53 +msgid "Mute right" +msgstr "Muto a destra" + #: src/misc/ChannelList.js:380 #: src/misc/controls/Metadata.js:76 #: src/misc/controls/Metadata.js:98 -#: src/views/Playersite.js:489 -#: src/views/Settings.js:1250 +#: src/views/Playersite.js:505 +#: src/views/Settings.js:1318 msgid "Name" msgstr "Nome" -#: src/views/Playersite.js:494 +#: src/views/Playersite.js:510 msgid "Name for the template. If the name already exists, it will be overwritten." msgstr "Nome del modello. Se il nome esiste già, verrà sovrascritto." -#: src/views/Settings.js:1142 -#: src/views/Settings.js:1297 +#: src/views/Settings.js:1209 +#: src/views/Settings.js:1365 msgid "Network" msgstr "Rete" -#: src/views/Edit/Sources/Network.js:684 -#: src/views/Edit/Wizard/Sources/Network.js:110 +#: src/views/Edit/Sources/Network.js:840 +#: src/views/Edit/Wizard/Sources/Network.js:123 msgid "Network source" msgstr "Fonte della rete" -#: src/views/Edit/Wizard/index.js:413 -#: src/views/Edit/Wizard/index.js:652 -#: src/views/Edit/Wizard/index.js:917 -#: src/views/Edit/Wizard/index.js:1029 +#: src/views/Edit/Wizard/index.js:428 +#: src/views/Edit/Wizard/index.js:667 +#: src/views/Edit/Wizard/index.js:932 +#: src/views/Edit/Wizard/index.js:1044 msgid "Next" msgstr "Prossimo" -#: src/views/Edit/Profile.js:413 +#: src/views/Edit/Profile.js:436 msgid "Next: Audio" msgstr "Prossimo: Audio" @@ -1344,12 +1435,12 @@ msgstr "Prossimo: Audio" msgid "Next: Video setup" msgstr "Prossimo: Impostazione video" -#: src/views/Edit/Wizard/index.js:1182 +#: src/views/Edit/Wizard/index.js:1197 msgid "No" msgstr "No" #: src/views/Edit/Sources/NoAudio.js:45 -#: src/views/Edit/Wizard/index.js:901 +#: src/views/Edit/Wizard/index.js:916 msgid "No audio" msgstr "Nessun audio" @@ -1362,11 +1453,11 @@ msgstr "Nessun flusso audio disponibile" msgid "No input device available" msgstr "Nessun dispositivo di input disponibile" -#: src/views/Edit/Wizard/index.js:373 +#: src/views/Edit/Wizard/index.js:388 msgid "No live stream was detected. Please check the software that sends the stream." msgstr "Non è stato rilevato alcun flusso in diretta. Si prega di controllare il software che invia il flusso." -#: src/views/Edit/Summary.js:28 +#: src/views/Edit/Summary.js:29 msgid "No source selected" msgstr "Nessuna fonte selezionata" @@ -1378,8 +1469,12 @@ msgstr "Nessuna fonte disponibile" msgid "No suitable encoder found." msgstr "Nessun encoder adatto trovato." -#: src/views/Main/index.js:286 -#: src/views/Publication/Player.js:294 +#: src/misc/FilterSelect.js:106 +msgid "No suitable filter found." +msgstr "Non è stato trovato un filtro adatto." + +#: src/views/Main/index.js:315 +#: src/views/Publication/Player.js:297 msgid "No video" msgstr "Nessun video" @@ -1387,7 +1482,7 @@ msgstr "Nessun video" msgid "No video stream available" msgstr "Nessun flusso video disponibile" -#: src/views/Settings.js:1243 +#: src/views/Settings.js:1311 msgid "Node ID" msgstr "ID del nodo" @@ -1396,44 +1491,61 @@ msgid "Noise" msgstr "Rumore" #: src/views/Edit/Sources/AVFoundation.js:145 -#: src/views/Edit/Summary.js:30 +#: src/views/Edit/Summary.js:31 +#: src/views/Edit/Summary.js:107 #: src/views/Edit/Wizard/Sources/AVFoundation.js:98 msgid "None" msgstr "Nessuno" #: src/views/Playersite.js:353 -#: src/views/Playersite.js:644 +#: src/views/Playersite.js:660 msgid "Notes" msgstr "Note" -#: src/views/Settings.js:1931 -#: src/views/Settings.js:1949 +#: src/views/Settings.js:2082 +#: src/views/Settings.js:2100 msgid "Number of log lines to keep." msgstr "Numero di righe di registro da conservare." -#: src/views/Settings.js:1962 +#: src/views/Settings.js:2113 msgid "Number of logs to keep for each process." msgstr "Numero di registri da conservare per ogni processo." -#: src/views/Playersite.js:813 -#: src/views/Publication/Player.js:466 +#: src/views/Playersite.js:829 +#: src/views/Publication/Player.js:471 msgid "OK" msgstr "OK" -#: src/views/Settings.js:1497 +#: src/views/Settings.js:1567 msgid "One referrer per line, e.g. http://www.example.com" msgstr "Un referente per riga, ad esempio http://www.example.com." -#: src/views/Playersite.js:798 +#: src/views/Playersite.js:814 msgid "Open" msgstr "Aperto" -#: src/views/Publication/Edit.js:510 +#: src/misc/filters/audio/Pan.js:45 +msgid "Pan" +msgstr "Pan" + +#: src/views/Settings.js:1971 +msgid "Passphrase" +msgstr "Passphrase" + +#: src/views/Settings.js:1988 +msgid "Passphrase for SRT encryption." +msgstr "Passphrase per la crittografia SRT." + +#: src/views/Settings.js:1980 +msgid "Passphrase must be between 10 and 79 characters long" +msgstr "La passphrase deve avere una lunghezza compresa tra 10 e 79 caratteri." + +#: src/views/Publication/Edit.js:483 msgid "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." msgstr "Il passthrough (copia) deve essere disattivato solo se necessario. Ogni codifica richiede risorse CPU/GPU aggiuntive." -#: src/views/Edit/Sources/Network.js:382 -#: src/views/Edit/Wizard/Sources/Network.js:88 +#: src/views/Edit/Sources/Network.js:460 +#: src/views/Edit/Wizard/Sources/Network.js:97 #: src/views/Login.js:282 #: src/views/Publication/Services/Akamai.js:134 #: src/views/Publication/Services/DASH.js:198 @@ -1442,22 +1554,22 @@ msgstr "Il passthrough (copia) deve essere disattivato solo se necessario. Ogni #: src/views/Publication/Services/RTSP.js:156 #: src/views/Publication/Services/Red5.js:157 #: src/views/Publication/Services/WOWZA.js:178 -#: src/views/Settings.js:1453 -#: src/views/Settings.js:1611 +#: src/views/Settings.js:1523 +#: src/views/Settings.js:1681 msgid "Password" msgstr "Password" -#: src/views/Settings.js:1459 -#: src/views/Settings.js:1619 +#: src/views/Settings.js:1529 +#: src/views/Settings.js:1689 msgid "Password for authorization." msgstr "Password per l'autorizzazione." -#: src/views/Edit/Sources/Network.js:387 -#: src/views/Edit/Wizard/Sources/Network.js:90 +#: src/views/Edit/Sources/Network.js:465 +#: src/views/Edit/Wizard/Sources/Network.js:103 msgid "Password for the device." msgstr "Password per il dispositivo." -#: src/views/Settings.js:1555 +#: src/views/Settings.js:1625 msgid "Persist viewer statistics" msgstr "Persistere le statistiche dei visualizzatori" @@ -1469,25 +1581,25 @@ msgstr "Formato pixel" msgid "Plan: <0>Starter" msgstr "Piano: <0>Inizio" -#: src/views/Publication/Add.js:347 +#: src/views/Publication/Add.js:349 msgid "Platforms" msgstr "Piattaforme" -#: src/views/Publication/Player.js:323 -#: src/views/Settings.js:1144 -#: src/views/Settings.js:1468 +#: src/views/Publication/Player.js:326 +#: src/views/Settings.js:1211 +#: src/views/Settings.js:1538 msgid "Playback" msgstr "Riproduzione" -#: src/views/Main/Egress.js:95 +#: src/views/Main/Egress.js:100 msgid "Player" msgstr "Giocatore" -#: src/views/Publication/Player.js:328 +#: src/views/Publication/Player.js:331 msgid "Player URL" msgstr "URL del giocatore" -#: src/views/Publication/Player.js:257 +#: src/views/Publication/Player.js:254 msgid "Player settings saved" msgstr "Impostazioni del giocatore salvate" @@ -1501,20 +1613,26 @@ msgstr "Playersite" msgid "Playlist" msgstr "Playlist" -#: src/views/Main/index.js:329 +#: src/misc/controls/HLS.js:88 +msgid "Playlist version (M3U8). Version 3 has the best browser/client compatibility." +msgstr "Versione della playlist (M3U8). La versione 3 ha la migliore compatibilità tra browser e client." + +#: src/views/Main/index.js:358 msgid "Please check the <0>process log" msgstr "Si prega di controllare il <0>log del processo" #: src/views/Publication/Services/Akamai.js:29 +#: src/views/Publication/Services/Azure.js:29 #: src/views/Publication/Services/Bitmovin.js:23 #: src/views/Publication/Services/Brightcove.js:23 #: src/views/Publication/Services/CDN77.js:23 -#: src/views/Publication/Services/Core.js:26 +#: src/views/Publication/Services/Core.js:27 #: src/views/Publication/Services/DASH.js:35 #: src/views/Publication/Services/DaCast.js:26 #: src/views/Publication/Services/HLS.js:37 #: src/views/Publication/Services/Icecast.js:29 #: src/views/Publication/Services/Image2.js:33 +#: src/views/Publication/Services/Linkedin.js:24 #: src/views/Publication/Services/Livespotting.js:23 #: src/views/Publication/Services/MPEGTS.js:35 #: src/views/Publication/Services/RTMP.js:32 @@ -1527,37 +1645,42 @@ msgstr "Si prega di controllare il <0>log del processo" msgid "Please contact the operator of the service and check what happens." msgstr "Contatta l'operatore del servizio e verifica cosa succede." +#: src/views/Publication/Services/Owncast.js:23 +#: src/views/Publication/Services/Telegram.js:14 +msgid "Please get in touch with the operator of the service and check what happens." +msgstr "Contattate l'operatore del servizio e verificate cosa succede." + #: src/views/Playersite.js:122 #: src/views/Playersite.js:197 -#: src/views/Publication/Player.js:159 +#: src/views/Publication/Player.js:156 msgid "Please select a file to upload." msgstr "Seleziona un file da caricare." -#: src/views/Publication/Add.js:471 +#: src/views/Publication/Add.js:446 msgid "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." msgstr "Se possibile, utilizzi \"Passthrough (copia)\". La codifica richiede risorse CPU/GPU aggiuntive." -#: src/views/Edit/Wizard/index.js:435 -#: src/views/Edit/Wizard/index.js:933 +#: src/views/Edit/Wizard/index.js:450 +#: src/views/Edit/Wizard/index.js:948 msgid "Please wait. Probe stream data ..." msgstr "Si prega di attendere. Flusso di dati della sonda ..." -#: src/views/Edit/Wizard/index.js:1103 +#: src/views/Edit/Wizard/index.js:1118 msgid "Please wait. Setting up the stream ..." msgstr "Si prega di attendere. Impostazione del flusso ..." #: src/views/Publication/Services/Bitmovin.js:92 -#: src/views/Settings.js:1803 +#: src/views/Settings.js:1945 msgid "Port" msgstr "Porto" -#: src/views/Publication/Player.js:381 +#: src/views/Publication/Player.js:384 msgid "Position" msgstr "Posizione" -#: src/misc/coders/Encoders/video/H264NVENC.js:67 -#: src/misc/coders/Encoders/video/X264.js:62 -#: src/misc/coders/Encoders/video/X265.js:62 +#: src/misc/coders/Encoders/video/H264NVENC.js:70 +#: src/misc/coders/Encoders/video/X264.js:72 +#: src/misc/coders/Encoders/video/X265.js:72 msgid "Preset" msgstr "Preset" @@ -1572,92 +1695,96 @@ msgstr "Chiave di flusso primaria" #: src/views/Edit/Sources/ALSA.js:136 #: src/views/Edit/Sources/AVFoundation.js:201 #: src/views/Edit/Sources/Framebuffer.js:110 -#: src/views/Edit/Sources/Network.js:505 -#: src/views/Edit/Sources/Network.js:552 -#: src/views/Edit/Sources/Network.js:599 -#: src/views/Edit/Sources/Raspicam.js:113 -#: src/views/Edit/Sources/V4L.js:131 +#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:660 +#: src/views/Edit/Sources/Network.js:706 +#: src/views/Edit/Sources/Network.js:755 +#: src/views/Edit/Sources/Raspicam.js:116 +#: src/views/Edit/Sources/V4L.js:134 #: src/views/Edit/Sources/VirtualAudio.js:169 #: src/views/Edit/Sources/VirtualVideo.js:188 msgid "Probe" msgstr "Sonda" -#: src/views/Edit/index.js:493 -#: src/views/Publication/Add.js:433 -#: src/views/Publication/Edit.js:441 +#: src/views/Edit/index.js:547 +#: src/views/Publication/Add.js:407 +#: src/views/Publication/Edit.js:420 msgid "Process" msgstr "Processo" -#: src/views/Publication/Add.js:373 -#: src/views/Publication/Edit.js:387 +#: src/views/Publication/Add.js:376 +#: src/views/Publication/Edit.js:395 msgid "Process control" msgstr "Controllo del processo" -#: src/views/Publication/Edit.js:471 -msgid "Process debug" -msgstr "Debug del processo" - -#: src/views/Main/index.js:413 -#: src/views/Publication/Edit.js:591 +#: src/views/Main/index.js:472 +#: src/views/Publication/Edit.js:553 msgid "Process debug report" msgstr "Rapporto di debug del processo" -#: src/views/Main/index.js:389 -#: src/views/Main/index.js:405 -#: src/views/Publication/Edit.js:468 -#: src/views/Publication/Edit.js:583 +#: src/views/Main/index.js:448 +#: src/views/Main/index.js:464 +#: src/views/Publication/Edit.js:444 +#: src/views/Publication/Edit.js:545 msgid "Process details" msgstr "Dettagli del processo" -#: src/views/Main/index.js:392 +#: src/views/Main/index.js:451 +#: src/views/Publication/Edit.js:447 msgid "Process report" msgstr "Rapporto sul processo" -#: src/views/Edit/index.js:401 -#: src/views/Edit/index.js:463 +#: src/views/Edit/index.js:413 +#: src/views/Edit/index.js:475 msgid "Processing & Control" msgstr "Elaborazione e controllo" -#: src/misc/coders/Encoders/video/H264NVENC.js:92 -#: src/misc/coders/Encoders/video/H264VAAPI.js:82 +#: src/misc/coders/Encoders/video/H264NVENC.js:95 +#: src/misc/coders/Encoders/video/H264VAAPI.js:85 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:85 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:85 #: src/misc/coders/settings/Video.js:142 -#: src/views/Edit/Wizard/index.js:607 +#: src/views/Edit/Wizard/index.js:622 msgid "Profile" msgstr "Profilo" -#: src/views/Edit/Sources/Network.js:520 +#: src/views/Edit/Sources/Network.js:623 #: src/views/Publication/Services/Akamai.js:144 #: src/views/Publication/Services/Akamai.js:182 +#: src/views/Publication/Services/Azure.js:89 #: src/views/Publication/Services/Bitmovin.js:86 #: src/views/Publication/Services/Brightcove.js:87 #: src/views/Publication/Services/CDN77.js:90 -#: src/views/Publication/Services/Core.js:91 +#: src/views/Publication/Services/Core.js:106 #: src/views/Publication/Services/DASH.js:186 #: src/views/Publication/Services/DaCast.js:110 #: src/views/Publication/Services/DaCast.js:168 #: src/views/Publication/Services/HLS.js:175 #: src/views/Publication/Services/Icecast.js:154 #: src/views/Publication/Services/Image2.js:120 +#: src/views/Publication/Services/Linkedin.js:84 #: src/views/Publication/Services/MPEGTS.js:154 +#: src/views/Publication/Services/Owncast.js:88 #: src/views/Publication/Services/RTMP.js:122 #: src/views/Publication/Services/RTSP.js:144 #: src/views/Publication/Services/Red5.js:105 #: src/views/Publication/Services/SRT.js:158 +#: src/views/Publication/Services/Telegram.js:79 #: src/views/Publication/Services/UDP.js:124 #: src/views/Publication/Services/WOWZA.js:122 msgid "Protocol" msgstr "Protocollo" -#: src/views/Publication/Add.js:353 +#: src/views/Publication/Add.js:355 msgid "Protocols" msgstr "Protocolli" -#: src/views/Settings.js:1307 +#: src/views/Settings.js:1375 msgid "Public domain/s" msgstr "Dominio pubblico/i" -#: src/views/Publication/Edit.js:113 -#: src/views/Publication/Edit.js:123 +#: src/views/Publication/Edit.js:107 +#: src/views/Publication/Edit.js:117 msgid "Publication service not found" msgstr "Servizio di pubblicazione non trovato" @@ -1669,16 +1796,18 @@ msgstr "Impostazioni del sito web di pubblicazione salvate" msgid "Publications" msgstr "Pubblicazioni" -#: src/views/Edit/Sources/Network.js:657 +#: src/views/Edit/Sources/Network.js:813 msgid "Pull Mode" msgstr "Modo di tirare" -#: src/views/Edit/Sources/Network.js:656 +#: src/views/Edit/Sources/Network.js:812 msgid "Pull or recieve the data:" msgstr "Tirare o ricevere i dati:" #: src/misc/Progress.js:90 -#: src/misc/coders/Encoders/video/H264VAAPI.js:137 +#: src/misc/coders/Encoders/video/H264VAAPI.js:140 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:140 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:140 msgid "Quality" msgstr "Qualità" @@ -1686,47 +1815,67 @@ msgstr "Qualità" msgid "RGB test pattern" msgstr "Modello di test RGB" -#: src/views/Settings.js:1824 +#: src/views/Main/index.js:412 +#: src/views/Settings.js:1213 +#: src/views/Settings.js:1830 +msgid "RTMP" +msgstr "RTMP" + +#: src/views/Settings.js:1871 +msgid "RTMP Port" +msgstr "Porta RTMP" + +#: src/views/Settings.js:1905 msgid "RTMP app for publishing." msgstr "App RTMP per la pubblicazione." -#: src/views/Settings.js:1765 +#: src/views/Edit/index.js:498 +msgid "RTMP output" +msgstr "Uscita RTMP" + +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:93 +#: src/views/Settings.js:1835 msgid "RTMP server" msgstr "Server RTMP" -#: src/views/Edit/Sources/Network.js:572 +#: src/views/Edit/Sources/Network.js:679 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:50 msgid "RTMP server is not enabled" msgstr "Il server RTMP non è abilitato" -#: src/views/Settings.js:1811 +#: src/views/Settings.js:1879 msgid "RTMP server listen address." msgstr "Indirizzo di ascolto del server RTMP." -#: src/views/Settings.js:1837 +#: src/views/Settings.js:1918 msgid "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" msgstr "Token RTMP per la pubblicazione e la riproduzione. Il token è il valore del parametro di query URL 'token'." -#: src/views/Settings.js:1146 -#: src/views/Settings.js:1760 -msgid "RTMP/S" -msgstr "RTMP/S" +#: src/views/Settings.js:1884 +msgid "RTMPS Port" +msgstr "Porta RTMPS" -#: src/views/Settings.js:1772 +#: src/views/Settings.js:1843 msgid "RTMPS server" msgstr "Server RTMPS" -#: src/views/Edit/Sources/Network.js:405 +#: src/views/Settings.js:1892 +msgid "RTMPS server listen address." +msgstr "Indirizzo di ascolto del server RTMPS." + +#: src/views/Edit/Sources/Network.js:483 msgid "RTSP" msgstr "RTSP" -#: src/views/Edit/Sources/Raspicam.js:132 +#: src/views/Edit/Sources/Raspicam.js:135 #: src/views/Edit/Wizard/Sources/Raspicam.js:117 msgid "Raspberry Pi camera" msgstr "Fotocamera Raspberry Pi" -#: src/misc/coders/Encoders/video/H264NVENC.js:144 -#: src/misc/coders/Encoders/video/H264VAAPI.js:63 +#: src/misc/coders/Encoders/video/H264NVENC.js:147 +#: src/misc/coders/Encoders/video/H264VAAPI.js:66 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:66 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:66 msgid "Rate control" msgstr "Controllo del tasso" @@ -1734,11 +1883,11 @@ msgstr "Controllo del tasso" msgid "Ratio" msgstr "Rapporto" -#: src/views/Edit/Sources/Network.js:434 +#: src/views/Edit/Sources/Network.js:516 msgid "Read input at native speed" msgstr "Leggere l'input a velocità nativa" -#: src/views/Edit/Sources/Network.js:658 +#: src/views/Edit/Sources/Network.js:814 msgid "Receive Mode" msgstr "Modalità di ricezione" @@ -1752,13 +1901,13 @@ msgstr "Ricollegare" msgid "Reconnect delay (seconds)" msgstr "Ritardo di riconnessione (secondi)" -#: src/views/Main/index.js:340 +#: src/views/Main/index.js:369 #: src/views/Publication/Process.js:68 #: src/views/Publication/Process.js:81 msgid "Reconnecting in {0}s" msgstr "Riconnettersi in {0}s" -#: src/views/Settings.js:1999 +#: src/views/Settings.js:2150 msgid "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." msgstr "La riconnessione a Restreamer Core non è riuscita negli ultimi {RETRIES} secondi." @@ -1768,7 +1917,7 @@ msgstr "La riconnessione a Restreamer Core non è riuscita." #: src/views/Edit/Sources/ALSA.js:122 #: src/views/Edit/Sources/AVFoundation.js:181 -#: src/views/Edit/Sources/V4L.js:117 +#: src/views/Edit/Sources/V4L.js:120 #: src/views/Edit/Wizard/Sources/AVFoundation.js:135 #: src/views/Edit/Wizard/Sources/V4L.js:120 msgid "Refresh" @@ -1782,72 +1931,105 @@ msgid "Region" msgstr "Regione" #: src/views/Password.js:159 -#: src/views/Settings.js:2019 +#: src/views/Settings.js:2170 msgid "Reload" msgstr "Ricarica" -#: src/views/Settings.js:1637 +#: src/views/Settings.js:1707 msgid "Remove the oldest entries if the /memfs is full" msgstr "Rimuovere le voci più vecchie se la /memfs è piena" -#: src/views/Settings.js:1784 +#: src/views/Settings.js:1852 msgid "Requires activation" msgstr "Richiede l'attivazione" -#: src/views/Settings.js:1206 -#: src/views/Settings.js:2036 -#: src/views/Settings.js:2049 -#: src/views/Settings.js:2058 +#: src/views/Settings.js:1274 +#: src/views/Settings.js:2187 +#: src/views/Settings.js:2200 +#: src/views/Settings.js:2209 msgid "Restart" msgstr "Riavviare" -#: src/views/Settings.js:2027 +#: src/views/Settings.js:2178 msgid "Restart required" msgstr "Riavvio richiesto" #: src/views/Password.js:136 -#: src/views/Settings.js:1987 +#: src/views/Settings.js:2138 msgid "Restarting" msgstr "Riavvio" #: src/views/Password.js:141 -#: src/views/Settings.js:1992 +#: src/views/Settings.js:2143 msgid "Restarting Restreamer Core ..." msgstr "Riavvio di Restreamer Core ..." -#: src/views/Settings.js:1015 +#: src/views/Settings.js:1082 msgid "Restarting the application failed." msgstr "Il riavvio dell'applicazione non è riuscito." -#: src/views/Settings.js:1234 +#: src/views/Settings.js:1302 msgid "Restreamer Service" msgstr "Servizio Restreamer" -#: src/views/Main/index.js:239 +#: src/views/Main/index.js:267 msgid "Retrieving stream data ..." msgstr "Recuperare i dati del flusso ..." -#: src/views/Edit/Wizard/index.js:1128 +#: src/views/Edit/Wizard/index.js:1143 #: src/views/Invalid.js:43 -#: src/views/Settings.js:1116 +#: src/views/Settings.js:1183 msgid "Retry" msgstr "Riprova" +#: src/misc/filters/video/Transpose.js:46 +msgid "Rotate" +msgstr "Ruotare" + #: src/views/Edit/Sources/VirtualVideo.js:155 msgid "Rule" msgstr "Regola" +#: src/views/Main/index.js:422 +#: src/views/Settings.js:1214 +#: src/views/Settings.js:1927 +msgid "SRT" +msgstr "SRT" + +#: src/views/Edit/index.js:517 +msgid "SRT output" +msgstr "Uscita SRT" + +#: src/views/Edit/Wizard/Sources/InternalSRT.js:93 +#: src/views/Settings.js:1932 +msgid "SRT server" +msgstr "Server SRT" + +#: src/views/Edit/Sources/Network.js:728 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:50 +msgid "SRT server is not enabled" +msgstr "Il server SRT non è abilitato" + +#: src/views/Settings.js:1953 +msgid "SRT server listen address." +msgstr "Indirizzo di ascolto del server SRT." + +#: src/views/Settings.js:1966 +msgid "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" +msgstr "Token SRT per la pubblicazione e la riproduzione. Il token è il valore del parametro streamid \"token\"." + #: src/misc/coders/settings/Audio.js:148 +#: src/misc/filters/audio/Resample.js:140 msgid "Sampling" msgstr "Campionamento" -#: src/views/Edit/Wizard/index.js:1087 -#: src/views/Edit/index.js:560 -#: src/views/Playersite.js:788 -#: src/views/Publication/Add.js:534 -#: src/views/Publication/Edit.js:571 -#: src/views/Publication/Player.js:452 -#: src/views/Settings.js:1977 +#: src/views/Edit/Wizard/index.js:1102 +#: src/views/Edit/index.js:614 +#: src/views/Playersite.js:804 +#: src/views/Publication/Add.js:498 +#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Player.js:457 +#: src/views/Settings.js:2128 msgid "Save" msgstr "Salva" @@ -1855,7 +2037,7 @@ msgstr "Salva" msgid "Scale" msgstr "Scala" -#: src/views/Settings.js:1723 +#: src/views/Settings.js:1793 msgid "Seconds to keep files in cache." msgstr "Secondi per mantenere i file nella cache." @@ -1871,24 +2053,28 @@ msgstr "Secondi fino alla terminazione di un processo in stallo." msgid "Seconds until the snapshot/thumbnail of the video source is updated." msgstr "Secondi fino all'aggiornamento dell'istantanea/ miniatura della sorgente video." -#: src/views/Settings.js:1473 +#: src/views/Settings.js:1543 msgid "Security" msgstr "Sicurezza" -#: src/views/Publication/Services/Core.js:122 +#: src/views/Publication/Services/Core.js:145 +msgid "Security passphrase" +msgstr "Passphrase di sicurezza" + +#: src/views/Publication/Services/Core.js:138 #: src/views/Publication/Services/Livespotting.js:103 msgid "Security token" msgstr "Token di sicurezza" -#: src/views/Publication/Player.js:342 +#: src/views/Publication/Player.js:345 msgid "Seekbar color" msgstr "Colore Seekbar" -#: src/misc/controls/HLS.js:62 +#: src/misc/controls/HLS.js:95 msgid "Segment length (seconds)" msgstr "Lunghezza del segmento (secondi)" -#: src/misc/controls/HLS.js:67 +#: src/misc/controls/HLS.js:100 msgid "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." msgstr "Il segmento verrà tagliato sul fotogramma chiave successivo, una volta trascorso questo tempo. Si consiglia il valore 2." @@ -1897,11 +2083,16 @@ msgstr "Il segmento verrà tagliato sul fotogramma chiave successivo, una volta msgid "Segmentation" msgstr "Segmentazione" +#: src/views/Publication/Add.js:429 +#: src/views/Publication/Edit.js:470 +msgid "Select RTMP or SRT (if enabled) for less latency." +msgstr "Selezionare RTMP o SRT (se abilitato) per ridurre la latenza." + #: src/views/Edit/Sources/ALSA.js:108 #: src/views/Edit/Sources/AVFoundation.js:172 #: src/views/Edit/Sources/Framebuffer.js:99 -#: src/views/Edit/Sources/Raspicam.js:96 -#: src/views/Edit/Sources/V4L.js:103 +#: src/views/Edit/Sources/Raspicam.js:99 +#: src/views/Edit/Sources/V4L.js:106 #: src/views/Edit/Wizard/Sources/AVFoundation.js:120 #: src/views/Edit/Wizard/Sources/Raspicam.js:95 #: src/views/Edit/Wizard/Sources/V4L.js:114 @@ -1920,7 +2111,7 @@ msgstr "Selezionare la fonte ..." msgid "Select video source:" msgstr "Selezionare la sorgente video:" -#: src/views/Edit/Wizard/index.js:268 +#: src/views/Edit/Wizard/index.js:283 msgid "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." msgstr "Selezioni se prelevare il flusso da una <0>sorgente di rete (come una telecamera di rete) o dal <1>server RTMP interno (ad esempio, i flussi OBS verso il Restreamer)." @@ -1928,7 +2119,11 @@ msgstr "Selezioni se prelevare il flusso da una <0>sorgente di rete (come un msgid "Select your encoding setting:" msgstr "Seleziona la tua impostazione di codifica:" -#: src/views/Playersite.js:588 +#: src/misc/FilterSelect.js:121 +msgid "Select your filter settings (optional):" +msgstr "Selezionare le impostazioni del filtro (opzionale):" + +#: src/views/Playersite.js:604 msgid "Selected" msgstr "Selezionato" @@ -1936,18 +2131,20 @@ msgstr "Selezionato" msgid "Selected channel" msgstr "Canale selezionato" -#: src/views/Playersite.js:449 +#: src/views/Playersite.js:465 msgid "Selection" msgstr "Selezione" -#: src/views/Settings.js:1190 +#: src/views/Settings.js:1258 msgid "Send anonymous metrics (helps us for future development)" msgstr "Invii metriche anonime (ci aiuta per lo sviluppo futuro)" -#: src/views/Edit/Sources/Network.js:542 -#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:650 +#: src/views/Edit/Sources/Network.js:696 +#: src/views/Edit/Sources/Network.js:745 #: src/views/Edit/Wizard/Sources/InternalHLS.js:48 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:68 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:68 msgid "Send stream to this address:" msgstr "Invia il flusso a questo indirizzo:" @@ -1959,19 +2156,24 @@ msgstr "Invia il video al Framebuffer" msgid "Server" msgstr "Server" +#: src/views/Publication/Services/Owncast.js:100 +#: src/views/Publication/Services/Telegram.js:91 +msgid "Server URL" +msgstr "URL del server" + #: src/Header.js:257 #: src/views/Login.js:246 -#: src/views/Settings.js:1140 -#: src/views/Settings.js:1220 +#: src/views/Settings.js:1207 +#: src/views/Settings.js:1288 msgid "Service" msgstr "Servizio" -#: src/views/Publication/Add.js:392 +#: src/views/Publication/Add.js:387 #: src/views/Publication/Edit.js:406 msgid "Service name" msgstr "Nome del servizio" -#: src/views/Settings.js:1271 +#: src/views/Settings.js:1339 msgid "Service token for monitoring." msgstr "Token di servizio per il monitoraggio." @@ -1979,35 +2181,35 @@ msgstr "Token di servizio per il monitoraggio." msgid "Sessions" msgstr "Sessioni" -#: src/views/Settings.js:1402 +#: src/views/Settings.js:1470 msgid "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Imposta un limite di larghezza di banda in Mbit al secondo per il trasferimento di dati HLS in uscita. Tutti i servizi, come RTMP e i processi in uscita, sono inclusi nel calcolo. Se la larghezza di banda viene superata, gli spettatori HLS ricevono il codice di stato HTTP 509 (Limite di larghezza di banda superato). 0 è illimitato." -#: src/views/Settings.js:1386 +#: src/views/Settings.js:1454 msgid "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Imposta un limite di visualizzazione per le sessioni HLS. Se il limite viene superato, gli spettatori HLS ricevono il codice di stato HTTP 509 (Bandwidth Limit Exceeded). 0 è illimitato." -#: src/views/Settings.js:1225 +#: src/views/Settings.js:1293 msgid "Setting for connection to the service." msgstr "Impostazione per la connessione al servizio." -#: src/views/Settings.js:1126 +#: src/views/Settings.js:1193 msgid "Settings" msgstr "Impostazioni" -#: src/views/Settings.js:1128 +#: src/views/Settings.js:1195 msgid "Settings (expert mode)" msgstr "Impostazioni (modalità esperto)" -#: src/views/Settings.js:1653 +#: src/views/Settings.js:1723 msgid "Settings for /data path. The access is protected by" msgstr "Impostazioni per il percorso /data. L'accesso è protetto da" -#: src/views/Settings.js:1580 +#: src/views/Settings.js:1650 msgid "Settings for /memfs path." msgstr "Impostazioni per il percorso /memfs." -#: src/views/Settings.js:958 +#: src/views/Settings.js:1025 msgid "Settings saved. All changes will be applied after restarting the application." msgstr "Impostazioni salvate. Tutte le modifiche saranno applicate dopo il riavvio dell'applicazione." @@ -2015,7 +2217,7 @@ msgstr "Impostazioni salvate. Tutte le modifiche saranno applicate dopo il riavv msgid "Share button" msgstr "Tasto condividi" -#: src/views/Playersite.js:431 +#: src/views/Playersite.js:447 msgid "Shows a reference to the project." msgstr "Mostra un riferimento al progetto." @@ -2027,7 +2229,7 @@ msgstr "Si iscriva (gratis)" msgid "Silence" msgstr "Silenzio" -#: src/views/Edit/Wizard/index.js:898 +#: src/views/Edit/Wizard/index.js:913 msgid "Silence Audio" msgstr "Silenzio Audio" @@ -2043,8 +2245,8 @@ msgstr "Nome del sito" msgid "Size" msgstr "Dimensione" -#: src/views/Edit/index.js:482 -#: src/views/Main/index.js:372 +#: src/views/Edit/index.js:536 +#: src/views/Main/index.js:431 msgid "Snapshot" msgstr "Snapshot" @@ -2052,19 +2254,29 @@ msgstr "Snapshot" msgid "Social-login (OAuth2, 2FA)" msgstr "Social-login (OAuth2, 2FA)" -#: src/views/Edit/Sources/Network.js:418 +#: src/views/Edit/Sources/Network.js:500 msgid "Socket timeout (microseconds)" msgstr "Timeout della presa (microsecondi)" -#: src/views/Publication/Add.js:350 +#: src/views/Publication/Add.js:352 msgid "Software" msgstr "Software" +#: src/misc/controls/Source.js:74 #: src/views/Edit/Sources/VirtualAudio.js:88 #: src/views/Edit/Sources/VirtualVideo.js:112 +#: src/views/Publication/Add.js:424 +#: src/views/Publication/Edit.js:465 msgid "Source" msgstr "Fonte" +#: src/views/Publication/Add.js:375 +#: src/views/Publication/Add.js:419 +#: src/views/Publication/Edit.js:394 +#: src/views/Publication/Edit.js:460 +msgid "Source & Encoding" +msgstr "Fonte e codifica" + #: src/misc/Progress.js:103 msgid "Speed" msgstr "Velocità" @@ -2073,24 +2285,25 @@ msgstr "Velocità" msgid "Stale timeout (seconds)" msgstr "Timeout di stallo (secondi)" -#: src/views/Publication/Player.js:322 -#: src/views/Settings.js:1505 +#: src/views/Publication/Player.js:325 +#: src/views/Settings.js:1575 msgid "Statistics" msgstr "Statistiche" -#: src/views/Settings.js:1145 -#: src/views/Settings.js:1572 +#: src/misc/controls/HLS.js:65 +#: src/views/Settings.js:1212 +#: src/views/Settings.js:1642 msgid "Storage" msgstr "Stoccaggio" -#: src/views/Settings.js:1563 +#: src/views/Settings.js:1633 msgid "Stores the viewer statistics to the disk." msgstr "Memorizza le statistiche del visualizzatore sul disco." #: src/views/Edit/StreamSelect.js:30 #: src/views/Edit/StreamSelect.js:36 #: src/views/Edit/StreamSelect.js:81 -#: src/views/Edit/Wizard/index.js:878 +#: src/views/Edit/Wizard/index.js:893 msgid "Stream" msgstr "Flusso" @@ -2103,7 +2316,9 @@ msgstr "URL del flusso" #: src/views/Publication/Services/DaCast.js:153 #: src/views/Publication/Services/Dummy.js:274 #: src/views/Publication/Services/Instagram.js:84 +#: src/views/Publication/Services/Owncast.js:110 #: src/views/Publication/Services/Restream.js:116 +#: src/views/Publication/Services/Telegram.js:101 #: src/views/Publication/Services/Twitch.js:129 #: src/views/Publication/Services/Twitter.js:175 #: src/views/Publication/Services/Vimeo.js:73 @@ -2112,7 +2327,7 @@ msgid "Stream key" msgstr "Chiave del flusso" #: src/views/Publication/Services/Brightcove.js:101 -#: src/views/Publication/Services/Core.js:113 +#: src/views/Publication/Services/Core.js:131 #: src/views/Publication/Services/Red5.js:136 #: src/views/Publication/Services/WOWZA.js:158 msgid "Stream name" @@ -2122,31 +2337,35 @@ msgstr "Nome del flusso" msgid "Stream names" msgstr "Nomi dei flussi" -#: src/views/Playersite.js:425 +#: src/misc/controls/Source.js:78 +msgid "Stream source for publication service (experimental)." +msgstr "Fonte di flusso per il servizio di pubblicazione (sperimentale)." + +#: src/views/Playersite.js:441 msgid "Support datarhei Restreamer" msgstr "Supporto datarhei Restreamer" -#: src/views/Edit/Sources/Network.js:361 +#: src/views/Edit/Sources/Network.js:427 #: src/views/Edit/Wizard/Sources/Network.js:72 msgid "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." msgstr "Supporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT e altro." #: src/Footer.js:184 #: src/Header.js:275 -#: src/views/Settings.js:1851 +#: src/views/Settings.js:2002 msgid "System" msgstr "Sistema" #: src/views/Playersite.js:351 -#: src/views/Playersite.js:440 +#: src/views/Playersite.js:456 msgid "Template" msgstr "Modello" -#: src/views/Playersite.js:462 +#: src/views/Playersite.js:478 msgid "Template to be used for creating the publication website. The delete button removes the selection from the system." msgstr "Modello da utilizzare per la creazione del sito web della pubblicazione. Il pulsante Elimina rimuove la selezione dal sistema." -#: src/views/Playersite.js:666 +#: src/views/Playersite.js:682 msgid "Terms" msgstr "Termini" @@ -2158,18 +2377,30 @@ msgstr "Modello di test" msgid "Test pattern (extended)" msgstr "Modello di test (esteso)" -#: src/views/Playersite.js:519 +#: src/views/Playersite.js:535 msgid "Text colors" msgstr "Colori del testo" +#: src/misc/controls/RTMP.js:61 +msgid "The RTMP output requires the RTMP Server." +msgstr "L'uscita RTMP richiede il server RTMP." + +#: src/misc/controls/SRT.js:61 +msgid "The SRT output requires the SRT Server." +msgstr "L'output SRT richiede il server SRT." + #: src/views/Edit/Sources/VirtualAudio.js:131 msgid "The amplitude (0.0 - 1.0) of the generated audio stream" msgstr "L'ampiezza (0.0 - 1.0) del flusso audio generato" -#: src/views/Settings.js:1210 +#: src/views/Settings.js:1278 msgid "The application is using an older version of the settings." msgstr "L'applicazione sta usando una vecchia versione delle impostazioni." +#: src/views/Edit/Sources/Network.js:611 +msgid "The available FFmpeg binary doesn't support any of the required protocols." +msgstr "Il binario FFmpeg disponibile non supporta nessuno dei protocolli richiesti." + #: src/misc/coders/settings/Audio.js:40 msgid "The bitrate of the audio stream." msgstr "Il bitrate del flusso audio." @@ -2178,15 +2409,15 @@ msgstr "Il bitrate del flusso audio." msgid "The carrier frequency" msgstr "La frequenza portante" -#: src/views/Edit/index.js:352 +#: src/views/Edit/index.js:364 msgid "The channel \"{0}\" could not be deleted" msgstr "Non è stato possibile eliminare il canale \"{0}\"." -#: src/views/Edit/index.js:361 +#: src/views/Edit/index.js:373 msgid "The channel \"{0}\" has been deleted" msgstr "Il canale \"{0}\" è stato cancellato." -#: src/views/Edit/index.js:604 +#: src/views/Edit/index.js:658 msgid "The deletion of this channel can not be recovered. All publications of this channel will be removed." msgstr "La cancellazione di questo canale non può essere recuperata. Tutte le pubblicazioni di questo canale saranno rimosse." @@ -2196,10 +2427,11 @@ msgid "The input profile is not complete. Please define a video and audio source msgstr "Il profilo di ingresso non è completo. Si prega di definire una sorgente video e audio." #: src/misc/coders/settings/Audio.js:86 +#: src/misc/filters/audio/Resample.js:78 msgid "The layout of the audio stream." msgstr "Il layout del flusso audio." -#: src/misc/controls/HLS.js:79 +#: src/misc/controls/HLS.js:112 msgid "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." msgstr "Il numero massimo di segmenti della playlist. 0 conterrà tutti i segmenti. 6 è consigliato." @@ -2211,83 +2443,84 @@ msgstr "Il colore del rumore" msgid "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." msgstr "La persona che ha associato un'opera con questo atto ha dedicato l'opera al pubblico dominio rinunciando a tutti i suoi diritti sull'opera in tutto il mondo secondo la legge sul diritto d'autore, compresi tutti i diritti connessi e vicini, nella misura consentita dalla legge. Puoi copiare, modificare, distribuire ed eseguire l'opera, anche per scopi commerciali, il tutto senza chiedere il permesso." -#: src/views/Settings.js:1315 +#: src/views/Settings.js:1383 msgid "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." msgstr "Il nome di dominio pubblico raggiungibile dell'host su cui gira questo Restreamer. Separi i nomi di dominio multipli con una virgola." -#: src/views/Publication/Edit.js:270 +#: src/views/Publication/Edit.js:278 msgid "The publication service \"{0}\" could not be deleted" msgstr "Il servizio di pubblicazione \"{0}\" non può essere eliminato" -#: src/views/Publication/Add.js:188 +#: src/views/Publication/Add.js:195 msgid "The publication service \"{0}\" has been created" msgstr "Il servizio di pubblicazione \"{0}\" è stato creato" -#: src/views/Publication/Edit.js:276 +#: src/views/Publication/Edit.js:284 msgid "The publication service \"{0}\" has been deleted" msgstr "Il servizio di pubblicazione \"{0}\" è stato cancellato" -#: src/views/Publication/Add.js:186 +#: src/views/Publication/Add.js:193 msgid "The publication service has been created" msgstr "Il servizio di pubblicazione è stato creato" #: src/misc/coders/settings/Audio.js:137 +#: src/misc/filters/audio/Resample.js:129 msgid "The sample rate of the audio stream." msgstr "La frequenza di campionamento del flusso audio." #: src/views/Playersite.js:152 #: src/views/Playersite.js:227 -#: src/views/Publication/Player.js:189 +#: src/views/Publication/Player.js:186 msgid "The selected file is too big ({0} bytes). Only {1} bytes are allowed." msgstr "Il file selezionato è troppo grande ({0} byte). Sono ammessi solo {1} byte." #: src/views/Playersite.js:141 #: src/views/Playersite.js:216 -#: src/views/Publication/Player.js:178 +#: src/views/Publication/Player.js:175 msgid "The selected file type ({0}) is not allowed. Allowed file types are {types}" msgstr "Il tipo di file selezionato ({0}) non è consentito. I tipi di file consentiti sono {types}" -#: src/views/Publication/Edit.js:230 +#: src/views/Publication/Edit.js:238 msgid "The settings for \"{0}\" have been saved" msgstr "Le impostazioni per \"{0}\" sono state salvate" -#: src/views/Edit/Wizard/index.js:846 +#: src/views/Edit/Wizard/index.js:861 msgid "The source doesn't provide any audio streams." msgstr "La fonte non fornisce alcun flusso audio." -#: src/views/Edit/Profile.js:487 +#: src/views/Edit/Profile.js:520 msgid "The source doesn't provide any audio streams. Please check the <0>probe details." msgstr "La sorgente non fornisce alcun flusso audio. Per favore controlla i <0>dettagli della sonda." -#: src/views/Edit/Wizard/index.js:854 +#: src/views/Edit/Wizard/index.js:869 msgid "The source doesn't provide any compatible audio streams." msgstr "La fonte non fornisce alcun flusso audio compatibile." -#: src/views/Edit/Wizard/index.js:392 +#: src/views/Edit/Wizard/index.js:407 msgid "The source doesn't provide any compatible video streams. Please check the <0>requirements." msgstr "La fonte non fornisce alcun flusso video compatibile. Per favore controlla i <0>requisiti." -#: src/views/Edit/Profile.js:357 +#: src/views/Edit/Profile.js:370 msgid "The source doesn't provide any video streams. Please check the <0>probe details." msgstr "La fonte non fornisce alcun flusso video. Per favore controlla i <0>dettagli della sonda." -#: src/views/Edit/Wizard/index.js:384 +#: src/views/Edit/Wizard/index.js:399 msgid "The source doesn't provide any video streams. Please check the device." msgstr "La fonte non fornisce alcun flusso video. Si prega di controllare il dispositivo." -#: src/views/Edit/Wizard/index.js:865 +#: src/views/Edit/Wizard/index.js:880 msgid "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." msgstr "La sorgente video non fornisce alcun flusso audio compatibile. Si raccomanda <0>Audio silenzioso. I servizi come YouTube, Facebook & Co. richiedono un canale audio." -#: src/views/Edit/Wizard/index.js:603 +#: src/views/Edit/Wizard/index.js:618 msgid "The video source is compatible. Select the desired resolution:" msgstr "La sorgente video è compatibile. Selezionare la risoluzione desiderata:" -#: src/views/Settings.js:1182 +#: src/views/Settings.js:1250 msgid "There are updates available. Here you get more information." msgstr "Sono disponibili degli aggiornamenti. Qui può ottenere maggiori informazioni." -#: src/views/Settings.js:911 +#: src/views/Settings.js:978 msgid "There was a problem storing the settings. Settings not saved." msgstr "Si è verificato un problema nella memorizzazione delle impostazioni. Le impostazioni non sono state salvate." @@ -2297,15 +2530,15 @@ msgstr "Si è verificato un errore di connessione a Restreamer Core a {0}." #: src/views/Playersite.js:165 #: src/views/Playersite.js:240 -#: src/views/Publication/Player.js:202 +#: src/views/Publication/Player.js:199 msgid "There was an error during upload: {0}" msgstr "Si è verificato un errore durante il caricamento: {0}" -#: src/views/Edit/Wizard/index.js:1123 +#: src/views/Edit/Wizard/index.js:1138 msgid "There was an error setting up the stream." msgstr "C'è stato un errore nell'impostazione del flusso." -#: src/views/Settings.js:909 +#: src/views/Settings.js:976 msgid "There were some errors in the settings. Settings not saved." msgstr "Ci sono stati alcuni errori nelle impostazioni. Impostazioni non salvate." @@ -2349,7 +2582,11 @@ msgstr "Questa licenza permette ai riutilizzatori di distribuire, remixare, adat msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." msgstr "Questa licenza permette ai riutilizzatori di distribuire, remixare, adattare e costruire sul materiale in qualsiasi mezzo o formato, purché venga data l'attribuzione al creatore. La licenza permette l'uso commerciale. Se remixate, adattate o costruite sul materiale, dovete dare in licenza il materiale modificato sotto gli stessi termini." -#: src/views/Edit/index.js:585 +#: src/views/Edit/Sources/Network.js:435 +msgid "This protocol is unknown or not supported by the available FFmpeg binary." +msgstr "Questo protocollo è sconosciuto o non supportato dal binario FFmpeg disponibile." + +#: src/views/Edit/index.js:639 msgid "This source cannot be edited while it is in use. To continue, you have to disconnect the source." msgstr "Questa sorgente non può essere modificata mentre è in uso. Per continuare, deve scollegare la sorgente." @@ -2365,15 +2602,20 @@ msgstr "Questa versione dell'interfaccia utente non supporta il Core connesso ({ msgid "This version of the UI is compatible." msgstr "Questa versione dell'UI è compatibile." -#: src/views/Settings.js:1550 +#: src/views/Settings.js:1620 msgid "Time until an inactive viewer connection is treated as closed." msgstr "Tempo fino a quando una connessione inattiva del visualizzatore viene trattata come chiusa." -#: src/views/Settings.js:1263 -#: src/views/Settings.js:1829 +#: src/views/Settings.js:1331 +#: src/views/Settings.js:1910 +#: src/views/Settings.js:1958 msgid "Token" msgstr "Token" +#: src/views/Publication/Services/Telegram.js:13 +msgid "Transmit a Livestream to a Telegram Channel." +msgstr "Trasmettere un Livestream a un canale Telegram." + #: src/views/Publication/Services/Image2.js:25 msgid "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." msgstr "Trasmette le istantanee della sorgente principale a un server HTTP/S. Maggiori dettagli sulle impostazioni sono disponibili <0>qui." @@ -2430,7 +2672,7 @@ msgstr "Trasmette la sorgente principale a un server UDP. Maggiori dettagli sull msgid "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." msgstr "Trasmette la sorgente principale a un server WOWZA. Maggiori dettagli sulle impostazioni sono disponibili <0>qui." -#: src/views/Publication/Services/Core.js:18 +#: src/views/Publication/Services/Core.js:19 msgid "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." msgstr "Trasmette la sorgente principale a una risorsa Core datarhei. Maggiori dettagli sulle impostazioni sono disponibili <0>qui." @@ -2450,6 +2692,18 @@ msgstr "Trasmette la sorgente principale al servizio di codifica cloud Bitmovin, msgid "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." msgstr "Trasmette la sorgente principale al Servizio Restream RTMP. Maggiori dettagli sulle impostazioni sono disponibili <0>qui." +#: src/views/Publication/Services/Azure.js:17 +msgid "Transmit to a Azure Media Services. More details can be found <0>here." +msgstr "Trasmettere a un Azure Media Services. Ulteriori dettagli sono disponibili <0>qui." + +#: src/views/Publication/Services/Linkedin.js:16 +msgid "Transmit to linkedIn. More details can be found <0>here." +msgstr "Trasmettere a linkedIn. Ulteriori dettagli sono disponibili <0>qui." + +#: src/views/Publication/Services/Owncast.js:15 +msgid "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." +msgstr "Trasmettere il Livestream a un server Owncast. <0>Qui si possono trovare maggiori dettagli sulle impostazioni." + #: src/views/Publication/Services/Youtube.js:21 msgid "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." msgstr "Trasmette il suo video come flusso RTMP con la chiave necessaria generata in YouTube Studio. Può trovare maggiori informazioni sull'impostazione di un live stream nella <0>Creator Academy di YouTube." @@ -2458,36 +2712,36 @@ msgstr "Trasmette il suo video come flusso RTMP con la chiave necessaria generat msgid "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." msgstr "Trasmette il suo flusso video con la chiave richiesta, che è stata generata in Twitter Producer. Può trovare maggiori informazioni sull'impostazione di un live stream su Twitter <0>Producer." -#: src/misc/coders/Encoders/video/X264.js:83 -#: src/misc/coders/Encoders/video/X265.js:83 +#: src/misc/coders/Encoders/video/X264.js:93 +#: src/misc/coders/Encoders/video/X265.js:93 msgid "Tune" msgstr "Tune" -#: src/views/Edit/Sources/Network.js:409 +#: src/views/Edit/Sources/Network.js:488 #: src/views/Edit/Wizard/Sources/Network.js:77 msgid "UDP transport" msgstr "Trasporto UDP" -#: src/views/Settings.js:1111 +#: src/views/Settings.js:1178 msgid "Unable to load the config." msgstr "Impossibile caricare la configurazione." -#: src/views/Settings.js:1245 +#: src/views/Settings.js:1313 msgid "Unique ident on the service." msgstr "Identità unica del servizio." -#: src/views/Main/Egress.js:91 +#: src/views/Main/Egress.js:96 msgid "Unknown" msgstr "Sconosciuto" -#: src/views/Playersite.js:597 +#: src/views/Playersite.js:613 msgid "Unselected" msgstr "Non selezionato" -#: src/views/Playersite.js:482 -#: src/views/Playersite.js:499 -#: src/views/Playersite.js:634 -#: src/views/Publication/Player.js:373 +#: src/views/Playersite.js:498 +#: src/views/Playersite.js:515 +#: src/views/Playersite.js:650 +#: src/views/Publication/Player.js:376 msgid "Upload" msgstr "Carica" @@ -2495,7 +2749,7 @@ msgstr "Carica" msgid "Uploading the file failed" msgstr "Il caricamento del file non è riuscito" -#: src/views/Publication/Player.js:232 +#: src/views/Publication/Player.js:229 msgid "Uploading the logo failed" msgstr "Caricamento del logo fallito" @@ -2509,15 +2763,15 @@ msgstr "Uptime" msgid "Use Auth0 for your running Restreamer Core. More <0>details." msgstr "Utilizzi Auth0 per il suo Restreamer Core in esecuzione. Ulteriori <0>dettagli." -#: src/views/Edit/index.js:426 +#: src/views/Edit/index.js:438 msgid "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." msgstr "Utilizzi la procedura guidata (<0/>) per un'impostazione rapida e semplice, oppure modifichi (<1/>) le sorgenti direttamente in modalità personalizzata." -#: src/views/Edit/Wizard/index.js:1068 +#: src/views/Edit/Wizard/index.js:1083 msgid "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Utilizzi il suo copyright e scelga la licenza d'immagine corretta. Che sia libera per tutti o altamente limitata. Discuta brevemente di ciò che gli altri possono fare con la sua immagine." -#: src/views/Edit/index.js:530 +#: src/views/Edit/index.js:584 msgid "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Usa il tuo copyright e scegli la giusta licenza per le immagini. Che sia libera per tutti o altamente limitata. Discuti brevemente su cosa gli altri possono fare con la tua immagine." @@ -2525,8 +2779,8 @@ msgstr "Usa il tuo copyright e scegli la giusta licenza per le immagini. Che sia msgid "User registration" msgstr "Registrazione dell'utente" -#: src/views/Edit/Sources/Network.js:370 -#: src/views/Edit/Wizard/Sources/Network.js:81 +#: src/views/Edit/Sources/Network.js:448 +#: src/views/Edit/Wizard/Sources/Network.js:84 #: src/views/Login.js:272 #: src/views/Publication/Services/DASH.js:195 #: src/views/Publication/Services/DaCast.js:131 @@ -2534,18 +2788,18 @@ msgstr "Registrazione dell'utente" #: src/views/Publication/Services/RTSP.js:153 #: src/views/Publication/Services/Red5.js:146 #: src/views/Publication/Services/WOWZA.js:168 -#: src/views/Settings.js:1440 -#: src/views/Settings.js:1598 +#: src/views/Settings.js:1510 +#: src/views/Settings.js:1668 msgid "Username" msgstr "Nome utente" -#: src/views/Settings.js:1446 -#: src/views/Settings.js:1606 +#: src/views/Settings.js:1516 +#: src/views/Settings.js:1676 msgid "Username for authorization." msgstr "Nome utente per l'autorizzazione." -#: src/views/Edit/Sources/Network.js:375 -#: src/views/Edit/Wizard/Sources/Network.js:83 +#: src/views/Edit/Sources/Network.js:453 +#: src/views/Edit/Wizard/Sources/Network.js:90 msgid "Username for the device." msgstr "Nome utente del dispositivo." @@ -2553,28 +2807,32 @@ msgstr "Nome utente del dispositivo." msgid "VPU ID" msgstr "ID VPU" -#: src/views/Publication/Add.js:476 +#: src/misc/filters/video/VFlip.js:65 +msgid "Vertical Flip" +msgstr "Capovolgimento verticale" + +#: src/views/Publication/Add.js:451 msgid "Video" msgstr "Video" #: src/views/Edit/Sources/AVFoundation.js:126 -#: src/views/Edit/Sources/Raspicam.js:89 -#: src/views/Edit/Sources/V4L.js:109 +#: src/views/Edit/Sources/Raspicam.js:92 +#: src/views/Edit/Sources/V4L.js:112 #: src/views/Edit/Wizard/Sources/AVFoundation.js:82 #: src/views/Edit/Wizard/Sources/Raspicam.js:86 #: src/views/Edit/Wizard/Sources/V4L.js:105 msgid "Video device" msgstr "Dispositivo video" -#: src/views/Edit/Profile.js:320 +#: src/views/Edit/Profile.js:333 #: src/views/Edit/ProfileSummary.js:66 -#: src/views/Publication/Edit.js:517 +#: src/views/Publication/Edit.js:490 msgid "Video settings" msgstr "Impostazioni video" -#: src/views/Edit/Wizard/index.js:264 -#: src/views/Edit/Wizard/index.js:354 -#: src/views/Edit/Wizard/index.js:596 +#: src/views/Edit/Wizard/index.js:279 +#: src/views/Edit/Wizard/index.js:369 +#: src/views/Edit/Wizard/index.js:611 msgid "Video setup" msgstr "Configurazione video" @@ -2594,11 +2852,19 @@ msgstr "Visualizzatore" msgid "Virtual source" msgstr "Fonte virtuale" +#: src/misc/filters/audio/Volume.js:44 +msgid "Volume" +msgstr "Volume" + #: src/views/Welcome.js:27 msgid "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." msgstr "Benvenuti a Restreamer v2, la soluzione per pubblicare video in modo facile e veloce. Gratuito per uso privato e commerciale. Ulteriore aiuto nei <0>docs." -#: src/views/Settings.js:1585 +#: src/misc/controls/HLS.js:74 +msgid "Where to store the HLS playlist and segments. In-Memory is recommended." +msgstr "Dove memorizzare la playlist e i segmenti HLS. Si consiglia di utilizzare la memoria interna." + +#: src/views/Settings.js:1655 msgid "Write protection" msgstr "Scrivere la protezione" @@ -2606,32 +2872,32 @@ msgstr "Scrivere la protezione" msgid "YUV test pattern" msgstr "Modello di test YUV" -#: src/views/Edit/Wizard/index.js:1177 +#: src/views/Edit/Wizard/index.js:1192 msgid "Yes" msgstr "Sì" -#: src/views/Edit/Wizard/index.js:1159 +#: src/views/Edit/Wizard/index.js:1174 msgid "You can't abort the wizard because at least one input must be defined." msgstr "Non può interrompere la procedura guidata perché deve essere definito almeno un ingresso." -#: src/views/Settings.js:2041 +#: src/views/Settings.js:2192 msgid "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" msgstr "Hai cambiato la configurazione. Affinché le modifiche abbiano effetto, devi riavviare l'applicazione. Vuoi riavviare ora?" -#: src/views/Main/index.js:347 +#: src/views/Main/index.js:376 #: src/views/Publication/Process.js:73 msgid "You have to reconnect manually" msgstr "Devi riconnetterti manualmente" -#: src/views/Publication/Edit.js:456 +#: src/views/Publication/Edit.js:432 msgid "You have unsaved changes. Please save them before you can control the service again." msgstr "Hai delle modifiche non salvate. Per favore, salvale prima di poter controllare di nuovo il servizio." -#: src/views/Edit/Wizard/index.js:616 +#: src/views/Edit/Wizard/index.js:631 msgid "Your stream needs to be encoded, but there's no suitable encoder available." msgstr "Il suo flusso deve essere codificato, ma non è disponibile un codificatore adatto." -#: src/views/Edit/Wizard/index.js:623 +#: src/views/Edit/Wizard/index.js:638 msgid "Your stream needs to be encoded. Choose the desired encoder:" msgstr "Il tuo flusso deve essere codificato. Scegli il codificatore desiderato:" @@ -2643,7 +2909,7 @@ msgstr "blu" msgid "brown" msgstr "marrone" -#: src/views/Publication/Player.js:331 +#: src/views/Publication/Player.js:334 msgid "iframe code" msgstr "codice iframe" diff --git a/src/locales/pl/messages.js b/src/locales/pl/messages.js new file mode 100644 index 0000000..721fa55 --- /dev/null +++ b/src/locales/pl/messages.js @@ -0,0 +1 @@ +/*eslint-disable*/module.exports={messages:{"6 (+ guaranteed to start with a Key frame)":"6 (+ gwarantowany start z ramką Key)","7 (+ fragmented MP4 format)":"7 (+ fragmentaryczny format MP4)","<0>Compatibility list":"<0>Lista kompatybilności","<0>Show probe details":"<0>Pokaż szczegóły sondy","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Nie znaleziono punktu końcowego interfejsu API. Ustawienia nie zostały zapisane.","AVFoundation":"AVFoundation","Abort":"Anuluj","About":"W związku z","Add":"Dodaj","Add Publication":"Dodaj Publikację","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Dodaj widżety i style zewnętrzne do witryny publikowania. Kilka przykładów znajdziesz na stronie pomocy.","Add new channel":"Dodaj nowy kanał","Add: {0}":["Dodaj : ",["0"]],"Address":"Adres","Address for the background image.":"Adres obrazu tła.","Address to listen on for HTTP requests.":"Adres do nasłuchiwania żądań HTTP.","Address to listen on for HTTPS requests.":"Adres do nasłuchiwania żądań HTTPS.","Adjust publication site colors and background as you like.":"Dostosuj kolory i tło witryny publikowania zgodnie z potrzebami.","Advanced monitoring":"Zaawansowane monitorowanie","Advanced settings":"Zaawansowane ustawienia","Advanced setup":"Ustawienia zaawansowane","AirPlay":"AirPlay","Alerting by email":"Powiadomienie e-mail","All":"Wszystko","All important system settings.":"Wszystkie ważne parametry systemu.","Allow all referrer":"Zezwól wszystkim odsyłającym","Allow counting how many viewers the stream has.":"Pozwala policzyć liczbę widzów strumienia.","Amplitude":"Zasięg","An environment variable sets this value.":"Zmienna środowiskowa ustawia tę wartość.","App":"App","Application":"Aplikacja","Are you sure you want to abort the wizard?":"Czy na pewno chcesz przerwać kreatorowi?","Audio":"Dźwięk","Audio Device":"Urządzenie Dźwiękowe","Audio device":"Urządzenie audio","Audio from device":"Dźwięk z urządzenia","Audio settings":"Parametry dźwięku","Audio setup":"Ustawienia dźwięku","Auth0":"Auth0","Auth0 Tenant":"Auth0 Najemca","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 jest obecnie niedostępne, ponieważ ten interfejs jest ładowany z niezabezpieczonego źródła.","Author":"Autor","Authorization":"Uprawnienie","Automatic cleanup of all media data":"Automatyczne czyszczenie wszystkich danych multimedialnych","Autoplay":"Automatyczne odtwarzanie (Autoplay)","Available":"Dostępne na","Back":"Wstecz","Background colors":"Kolory tła","Background image":"Obraz tła","Backup URL":"Link do kopii zapasowej","Backup server":"Serwer kopii zapasowej","Backup stream":"Zapasowy stream","Backup stream key":"Klucz streamu kopii zapasowej","Bandwidth":"Pasmo","Bandwidth control":"Kontrola przepustowości","Banner":"Baner","Basic":"Zasadniczy","Beep factor":"Współczynnik sygnału dźwiękowego","Bitrate":"Bitrate","Briefly describe what the audience will see during the live stream.":"Krótko opisz, co widzowie zobaczą podczas transmisji na żywo.","Button color":"Kolor przycisku","Cache for files on /data.":"Buforowane pliki w /data.","Cache time (Seconds)":"Czas buforowania (w sekundach)","Cache types":"Rodzaje buforu","Capture clicks":"Przechwyt kliknięć","Capture cursor":"Przechwyt kursoru","Channel \"{0}\" saved":["Kanał \"",["0"],"” został zapisany"],"Channels":"Kanały","Check for updates":"Sprawdź aktualizacje","Check the requirements":"Sprawdź wymagania","Choose a video stream":"Wybierz strumień wideo","Choose an audio stream":"Wybierz strumień dźwiękowy","Choose an input device ...":"Wybierz urządzenie wejściowe ...","Choose codec ...":"Wybierz kodek ...","Choose tenant ...":"Wybór najemcy...","Chromecast":"Chromecast","Chunk":"Kawałek","Close":"Zamknij","Code injection":"Wstrzyknięcie kodu","Codec":"Kodek","Color":"Kolor","Config":"Config","Confirm password":"Potwierdź hasło","Connect":"Zaloguj się","Connected device":"Urządzenie podłączone ","Connected since <0/>":"Zalogowany od ","Connecting ...":"Zalogowany ...","Connecting to Restreamer Core ...":"Łączenie z Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"Połączenie z Restreamer Core nie powiodło się, prawdopodobnie z powodu mieszanej zawartości.","Content":"Zawartość","Content URL":"URL treści","Cores":"Rdzenie","Create user":"Utwórz użytkownika","Creative Commons":"Creative Commons","Custom ...":"Dostosuj ...","Custom JSON config for datarhei Core.":"Własna konfiguracja JSON dla Datarhei Core.","Custom audio device":"Własne urządzenie audio","Custom audio index":"Własny indeks audio","Custom bitrate (kbit/s)":"Własna szybkość transmisji (kb/s)","Custom code injection":"Wstrzyknięcie własnego kodu","Custom delay":"Własny limit czasu","Custom device":"Własne urządzenie","Custom format":"Własny format","Custom framerate":"Własna częstotliwość odświeżania","Custom keyframe interval":"Własny interwał klatki kluczowej","Custom layout":"Własny układ","Custom sampling (Hz)":"Własne próbkowanie (Hz)","Custom scale":"Własna skala","Custom size":"Własny rozmiar","Custom video device":"Własne urządzenie wideo","Custom video index":"Własny indeks wideo","Data copied to clipboard":"Dane skopiowane do schowka","Death color":"Kolor śmierci","Decibels (dB)":"Decybele (dB)","Decoder":"Dekoder","Default":"Domyślny","Delay":"Limit czasu","Delay (ms)":"Opóźnienie (w ms)","Delete":"Usuń","Deleting a publication service cannot be reversed. The publication stops immediately.":"Usunięcia usługi publikowania nie można cofnąć. Publikowanie zatrzymuje się natychmiast.","Delivering mode":"Sposób dostawy","Description":"Opis","Design":"Model","Device":"Urządzenie","Disconnect":"Wyloguj","Disconnect & Continue":"Odłącz i kontynuuj","Disconnecting ...":"Wylogowywanie ...","Disk":"Dysk","Disk cache":"Dysk z pamięci podręcznej","Disk storage":"Miejsce na dysku","Do you really want to restart the application now?":"Czy na pewno chcesz teraz ponownie uruchomić aplikację?","Do you want to delete \"{0}\"?":["Czy chcesz usunąć \"",["0"],"”?"],"Do you want to delete {title}?":["Czy chcesz usunąć ",["title"],"?"],"Do you want to disconnect \"{0}\"?":["Czy chcesz odłączyć \"",["0"],"”?"],"Docs":"Dokumenty","Documentation":"Dokumentacja","Dup. frames":"Ramki podwaniające","EDIT: Player":"EDIT: Gracz","EDIT: Publication Website":"EDIT: Witryna publikacji","EXT-X-VERSION":"EXT-X-VERSION","Edit":"Edytuj","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Zmień źródła audio i wideo dla transmisji na żywo. Dodaj opis i ustaw licencję na żądaną zawartość.","Edit: {title}":["Edytuj: ",["title"]],"Embed":"Integruj","Enable":"Włącz","Enable RTMP server ...":"Aktywuj serwer RTMP ...","Enable SRT server ...":"Włączenie serwera SRT ...","Enable a periodic beep every second with this value times the carrier frequency":"Aktywuje okresowy sygnał dźwiękowy co sekundę z tą wartością pomnożoną przez częstotliwość nośną","Enable backup stream":"Aktywuj kopie streamu","Enable nerd statistics":"Włącz statystyki nerdów","Enable now":"Włącz teraz","Enable primary stream":"Aktywuj podstawowy stream","Enable snapshots":"Włącz migawki","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Zdecydowanie zaleca się aktywację autoryzacji. W przeciwnym razie każdy może uzyskać dostęp do tej instancji.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Zdecydowanie zaleca się włączenie uwierzytelniania podstawowego. W przeciwnym razie każdy mógłby zapisać dane do /memfs.","Encoder":"Koder","Encoding":"Kodowanie","Encryption":"Szyfrowanie","Enter a name for the new channel.":"Wpisz nazwę nowego kanału.","Enter password":"Wpisz hasło","Enter the address of your network source:":"Wprowadź adres źródła sieci:","Enter username":"Wpisz login","Entropy coder":"Koder entropii","Error":"Błąd","Error while copying data to clipboard":"Błąd podczas kopiowania danych do schowka","Error: {0}":["Błąd: ",["0"]],"Expands the area above the channel list (live chat).":"Rozwija obszar nad listą kanałów (czat na żywo).","Expands the area under the channel description (comment boxes).":"Rozwija obszar pod opisem kanału (pola komentarzy).","Expert mode":"Tryb ekspercki","Extend channel list":"Rozwiń listę kanałów","Extend content":"Rozwiń zawartość","Extend footer":"Rozszerz stopkę","Extend header":"Rozszerz nagłówek","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Nie udało się utworzyć usługi publikowania (",["0"],")"],"Failed to create publication website files.":"Nie udało się utworzyć publikowanych plików witryny.","Failed to probe the source. Please check the <0>probe details.":"Nie można zbadać źródła. Sprawdź <0>szczegóły sondy.","Failed to refresh token: {0}":["Nie udało się odświeżyć tokena: ",["0"]],"Failed to save ingest metadata":"Nie udało się zapisać metadanych pozyskiwania","Failed to stop process":"Zakończenie procesu nie powiodło się","Failed to store player size setting.":"Nie udało się zapisać ustawienia rozmiaru dysku.","Failed to store publication service ({0})":["Nie udało się zapisać usługi publikowania (",["0"],")"],"Failed to update ingest process ({0})":["Nie udało się zaktualizować procesu przetwarzania (",["0"],")"],"Failed to update ingest snapshot process ({0})":["Nie udało się zaktualizować procesu ingest snapshot (",["0"],")"],"Failed to update the player":"Aktualizacja odtwarzacza nie powiodła się","Failed to update the playersite":"Nie udało się zaktualizować strony dla graczy","Failed to verify the source. Please check the address.":"Nie można zweryfikować źródła. Zweryfikuj adres.","Filter":"Filtr","Finish":"Wykończenie","Flags":"Flagi","For Javascripts.":"Dla JavaScriptów.","For Stylesheets.":"Do arkuszy stylów.","Force input framerate":"Wymuś częstotliwość odświeżania wejściowego","Format":"Format","Frame drops":"Spadki ramek","Framebuffer":"Framebuffer","Framerate":"Częstotliwość wyświetlania klatek","Frequency (Hz)":"Częstotliwość (Hz)","GET":"GET","General":"Główny","Google Analytics ID":"Google Analytics ID","Google Analytics Tracker Name":"Google Analytics Tracker Name","HLS":"HLS","HLS output":"Wyjście HLS","HLS server":"Serwer HLS","HLS statistic for the In-memory storage":"Statystyki HLS dotyczące przechowywania w pamięci","HTTP and HTTPS":"HTTP i HTTPS","HTTP port":"Port HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Port HTTPS","Hardware device":"Urządzenie sprzętowe","Header":"Nagłówek","Headline":"Wyróżniony","Horizontal Flip":"Przerzucanie poziome","Hosted Restreamer interface":"Interfejs hostowany przez Restreamer","Human readable name on the service.":"Nazwa czytelna dla człowieka w usłudze.","IP address":"Adres IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Jeśli zmieniłeś porty, Restreamer Core mógł już się zrestartować, ale jest teraz dostępny na innym porcie.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Jeśli masz włączoną usługę Let's Encrypt TLS, uzyskanie certyfikatów może zająć trochę czasu. Upewnij się, że Restreamer Core jest dostępny przez port 80 z Internetu. Sprawdź dziennik konsoli Restreamer Core.","Ignore IP ranges":"Ignoruj ​​zakresy adresów IP","Image URL":"Link do obrazu","Imprint":"Wydrukowanie","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Oprócz odtwarzacza, Restreamer oferuje obszerną stronę główną, na której możesz łatwo i szybko zaprezentować swoją transmisję na żywo.","In-memory":"W pamięci","In-memory storage":"Przechowywanie w pamięci","Incompatible":"Niezgodny","Inherit":"Odziedziczony od","Inject 1":"Wstrzyknij 1","Inject 2":"Wstrzyknij 2","Inject 3":"Wstrzyknij 3","Inject 4":"Wstrzyknij 4","Interval (seconds)":"Interwał (sekundy)","Issue alert":"Zgłoszenie problemów","Keyframe interval (seconds)":"Odstęp między klatkami kluczowymi (sekundy)","Layout":"Układ","Let's Encrypt certification":"Certyfikat Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Let's Encrypt wymaga co najmniej jednej nazwy domeny publicznej i dostępnego portu 80/TCP.","Level":"Poziom","Level of system protocol.":"Poziom protokołu systemowego.","License":"Patent","Life color":"Kolor życia","Linecolor":"Kolor linii","Link":"Link","Link, mouseover":"Link, mouseover","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Lista zakresów IP w notacji CIDR, na przykład 127.0.0.1/32, których statystyki nie będą rejestrowane - jeden zakres IP na linię. Pozostaw puste, aby zapisać wszystkie sesje.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Lista rozszerzeń plików do pamięci podręcznej (na przykład „.html”), po jednym w wierszu. Pozostaw puste, aby buforować wszystkie typy plików.","List size (segments)":"Rozmiar listy (segmenty)","Live-Streaming to Facebook Live RTMP service":"Przesyłanie strumieniowe na żywo do usługi Facebook Live RTMP","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Usługa przesyłania strumieniowego na żywo RTMP na Instagramie Live. Klucz przesyłania strumieniowego wymaga usługi takiej jak <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Transmisja na żywo w usłudze RTMP Twitch Live.","Live-Streaming to Vimeo Live RTMP Service":"Transmisja na żywo w usłudze Vimeos RTMP Live","Livesource ID":"Livesource ID","Log level":"Poziom dziennika","Logging":"Zapis","Login":"Zaloguj","Login failed: Couldn't load API details":"Połączenie nie powiodło się: nie udało się wczytać szczegółów interfejsu API","Login failed: {0}":["Połączenie nie powiodło się: ",["0"]],"Login/JWT authorization":"Zezwolenie na logowanie/JWT","Logo":"Logo","Logout":"Wyloguj","Loudness Normalization":"Normalizacja głośności","MB":"MB","Main Source":"Główne Źródło","Main channel":"Kanał główny","Main channel not found":"Nie znaleziono głównego kanału","Main channel saved":"Kanał główny zapisany","Main page channel (index.html).":"Kanał strony głównej (index.html).","Maintainer:":"Opiekun:","Make the channel available as an RTMP stream (experimental).":"Udostępnij kanał jako strumień RTMP (eksperymentalnie).","Make the channel available as an SRT stream (experimental).":"Udostępnij kanał jako strumień SRT (eksperymentalnie).","Master playlist (increases browser/client compatibility)":"Główna lista odtwarzania (zwiększa kompatybilność z przeglądarką/klientem)","Maximum allowed cache size, 0 for unlimited.":"Maksymalny dozwolony rozmiar pamięci podręcznej, 0 nieograniczony.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Maksymalna dozwolona liczba megabajtów pamięci RAM dla /memfs, 0 oznacza nieograniczoną liczbę.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Maksymalna dopuszczalna liczba megabajtów na dysku twardym. 0 dla nieograniczonego.","Maximum bandwidth Mbit/s":"Maksymalna przepustowość Mbit/s","Maximum delay in milliseconds.":"Maksymalne opóźnienie w milisekundach.","Maximum file size (Megabytes)":"Maksymalny rozmiar pliku (megabajty)","Maximum file size to put in cache.":"Taille maximale du fichier à mettre dans le cache.","Maximum log histroy":"Maksymalny dziennik historii","Maximum log lines":"Maksymalna liczba wierszy dziennika","Maximum size (Megabytes)":"Maksymalny rozmiar (MegaBajty)","Maximum viewer idle time (Seconds)":"Maksymalny czas bezczynności przeglądarki (sekundy)","Maximum viewers":"Maksymalna liczba widzów","Memory":"Pamięć","Meta information":"Informacje Meta","Metadata":"Metadane","Mold":"Pleśń","More about Twitter's copyright <0>here.":"Więcej informacji na temat praw autorskich Twittera <0>tutaj.","More about YouTube's copyright <0>here.":"Więcej informacji o prawach autorskich w YouTube <0>tutaj.","More about licenses here":"Więcej informacji o licencjach tutaj","More about the service":"Dowiedz się więcej o usłudze","Mute":"Wycisz","Mute a channel.":"Wyciszenie kanału.","Mute left":"Wyciszenie w lewo","Mute right":"Wyciszenie w prawo","Name":"Nazwa","Name for the template. If the name already exists, it will be overwritten.":"Nazwa modelu. Jeśli nazwa już istnieje, zostanie nadpisana.","Network":"Sieć","Network source":"Źródło sieciowe","Next":"Następny","Next: Audio":"Następny: Dźwięk","Next: Video setup":"Dalej: Konfiguracja wideo","No":"Nie","No audio":"Bez dźwięku","No audio stream available":"Brak dostępnych strumieni audio","No input device available":"Brak dostępnego urządzenia wejściowego","No live stream was detected. Please check the software that sends the stream.":"Nie wykryto transmisji na żywo. Sprawdź oprogramowanie wysyłające strumień.","No source selected":"Nie wybrano źródła","No sources available":"Brak dostępnego źródła","No suitable encoder found.":"Nie znaleziono odpowiedniego enkodera.","No suitable filter found.":"Nie znaleziono odpowiedniego filtra.","No video":"Brak wideo","No video stream available":"Brak dostępnych strumieni wideo","Node ID":"Identyfikator węzła","Noise":"Dźwięk","None":"Żaden","Notes":"Notatki","Number of log lines to keep.":"Liczba wierszy dziennika do zachowania.","Number of logs to keep for each process.":"Liczba dzienników do przechowywania dla każdego procesu.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Jedna strona odsyłająca w wierszu, na przykład http://www.domena.com.","Open":"Otwórz","Pan":"Pan","Passphrase":"Passphrase","Passphrase for SRT encryption.":"Passphrase dla szyfrowania SRT.","Passphrase must be between 10 and 79 characters long":"Passphrase musi mieć długość od 10 do 79 znaków","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Przekazywanie (kopiowanie) powinno być wyłączone tylko w razie potrzeby. Każde kodowanie wymaga dodatkowych zasobów procesora/GPU.","Password":"Hasło","Password for authorization.":"Hasło do autoryzacji.","Password for the device.":"Hasło do urządzenia.","Persist viewer statistics":"Trwałość statystyk oglądających","Pixel format":"Proporcje pikseli","Plan: <0>Starter":"Schemat: <0>Starter","Platforms":"Platformy","Playback":"Odczyt","Player":"Player","Player URL":"Adres URL Playera","Player settings saved":"Zapis ustawień odtwarzacza","Playersite":"Playersite","Playlist":"Lista odtwarzania","Playlist version (M3U8). Version 3 has the best browser/client compatibility.":"Wersja playlisty (M3U8). Wersja 3 ma najlepszą kompatybilność z przeglądarką/klientem.","Please check the <0>process log":"Sprawdź <0>Dziennik procesów.","Please contact the operator of the service and check what happens.":"Skontaktuj się z operatorem serwisu i sprawdź co się dzieje.","Please get in touch with the operator of the service and check what happens.":"Proszę skontaktować się z operatorem serwisu i sprawdzić co się dzieje.","Please select a file to upload.":"Wybierz plik do przesłania.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Jeśli to możliwe, użyj opcji \"Przekazywanie (kopiowanie)”. Kodowanie wymaga dodatkowych zasobów procesora/GPU.","Please wait. Probe stream data ...":"Proszę czekać. Dane przepływu sondy...","Please wait. Setting up the stream ...":"Proszę czekać. Konfiguracja strumienia...","Port":"Port","Position":"Pozycja","Preset":"Zaprogramowane","Primary stream":"Główny stream","Primary stream key":"Klucz strumienia podstawowego","Probe":"Sonda","Process":"Przebieg","Process control":"Kontrola procesu","Process debug report":"Raport debugowania procesu","Process details":"Szczegóły procesu","Process report":"Raport z procesu","Processing & Control":"Przetwarzanie i kontrola","Profile":"Profil","Protocol":"Protokół","Protocols":"Protokoły","Public domain/s":"Domena(y) publiczna(e)","Publication service not found":"Nie znaleziono usługi wydawniczej","Publication website settings saved":"Tworzenie kopii zapasowej ustawień witryny publikacji","Publications":"Publikacje","Pull Mode":"Tryb ciągnięcia","Pull or recieve the data:":"Pobierz lub odbierz dane:","Quality":"Jakość","RGB test pattern":"Wzór testowy RGB","RTMP":"RTMP","RTMP Port":"Port RTMP","RTMP app for publishing.":"Aplikacja RTMP do publikacji.","RTMP output":"Wyjście RTMP","RTMP server":"Serwer RTMP","RTMP server is not enabled":"Serwer RTMP nie jest włączony","RTMP server listen address.":"Adres nasłuchiwania serwera RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Token RTMP do publikowania i odtwarzania. Token jest wartością parametru zapytania adresu URL \"token”.","RTMPS Port":"RTMPS Port","RTMPS server":"Serwer RTMPS","RTMPS server listen address.":"Adres nasłuchu serwera RTMPS.","RTSP":"RTSP","Raspberry Pi camera":"Kamera Raspberry Pi","Rate control":"Kontrola szybkości","Ratio":"Ratio","Read input at native speed":"Odtwarzaj dane wejściowe z natywną prędkością","Receive Mode":"Tryb odbioru","Reconnect":"Połączyć ponownie","Reconnect delay (seconds)":"Limit czasu ponownego połączenia (sekundy)","Reconnecting in {0}s":["Połącz ponownie za ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["Ponowne połączenie z Restreamer Core nie powiodło się w ciągu ostatnich ",["RETRIES"]," sekund."],"Reconnecting to Restreamer Core failed.":"Nie udało się ponownie połączyć z Restreamer Core.","Refresh":"Odśwież","Region":"Region","Reload":"Odnów","Remove the oldest entries if the /memfs is full":"Usuń najstarsze wpisy, jeśli folder /memfs jest pełny","Requires activation":"Wymaga aktywacji","Restart":"Uruchom ponownie","Restart required":"Wymagane jest ponowne uruchomienie","Restarting":"Uruchom ponownie","Restarting Restreamer Core ...":"Uruchom ponownie Restreamer Core ...","Restarting the application failed.":"Ponowne uruchomienie aplikacji nie powiodło się.","Restreamer Service":"Usługa Restreamer","Retrieving stream data ...":"Pobieranie danych strumienia ...","Retry":"Spróbuj ponownie","Rotate":"Obrót","Rule":"Reguła","SRT":"SRT","SRT output":"Wyjście SRT","SRT server":"Serwer SRT","SRT server is not enabled":"Serwer SRT nie jest włączony","SRT server listen address.":"Adres nasłuchu serwera SRT.","SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'":"SRT token do publikowania i odtwarzania. Token jest wartością parametru streamid 'token'.","Sampling":"Próbowanie","Save":"Zapisać","Scale":"Skala","Seconds to keep files in cache.":"Sekundy na przechowywanie plików w pamięci podręcznej.","Seconds until a process is restarted.":"Sekundy do ponownego uruchomienia procesu.","Seconds until a staled process is terminated.":"Sekundy do zakończenia zablokowanego procesu.","Seconds until the snapshot/thumbnail of the video source is updated.":"Sekundy do zaktualizowania migawki/miniaturki źródła wideo.","Security":"Bezpieczeństwo","Security passphrase":"Hasło zabezpieczające","Security token":"Token bezpieczeństwa","Seekbar color":"Kolor paska wyszukiwania (Seekbar)","Segment length (seconds)":"Długość segmentu (sekundy)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Po upływie tego opóźnienia segment zostanie wycięty w następnej klatce kluczowej. Zalecana jest wartość 2.","Segmentation":"Segmentacja","Select RTMP or SRT (if enabled) for less latency.":"Wybierz RTMP lub SRT (jeśli jest włączony), aby zmniejszyć opóźnienia.","Select a device:":"Wybierz urządzenie:","Select audio source:":"Wybierz źródło dźwięku:","Select source ...":"Wybierz źródło ...","Select video source:":"Wybierz źródło wideo:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Wybierz, czy pobierasz strumień z <0>źródła sieciowego (np. kamery sieciowej), czy z <1>wewnętrznego serwera RTMP (np. strumienie OBS do Restreamer).","Select your encoding setting:":"Wybierz ustawienia kodowania:","Select your filter settings (optional):":"Wybierz ustawienia filtra (opcjonalnie):","Selected":"Wybrany","Selected channel":"Wybrany kanał","Selection":"Wybór","Send anonymous metrics (helps us for future development)":"Wysyłaj anonimowe dane (pomaga nam w przyszłym rozwoju)","Send stream to this address:":"Wyślij stream na ten adres:","Send video to Framebuffer":"Wyślij wideo do Framebuffer","Server":"Serwer","Server URL":"URL serwera","Service":"Usługa","Service name":"Nazwa serwisu","Service token for monitoring.":"Token serwisowy do monitorowania.","Sessions":"Sesje","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Ustawia limit przepustowości w Mbit na sekundę dla wychodzącego transferu danych HLS. Wszystkie usługi, takie jak RTMP i procesy wychodzące, są uwzględniane w kalkulacji. W przypadku przekroczenia przepustowości przeglądarki HLS otrzymują kod stanu HTTP 509 (Przekroczono limit przepustowości). 0 jest nieograniczone.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Ustawia limit oglądania dla sesji HLS. W przypadku przekroczenia limitu przeglądarki HLS otrzymują kod stanu HTTP 509 (przekroczono limit przepustowości). Wartość 0 jest nieograniczona.","Setting for connection to the service.":"Parametr połączenia serwisowego.","Settings":"Ustawienia","Settings (expert mode)":"Parametry (tryb eksperta)","Settings for /data path. The access is protected by":"Parametry ścieżki /data. Dostęp jest chroniony przez","Settings for /memfs path.":"Parametry ścieżki /memfs.","Settings saved. All changes will be applied after restarting the application.":"Ustawienia zostały zapisane. Wszystkie zmiany zostaną zastosowane po ponownym uruchomieniu aplikacji.","Share button":"Przycisk udostępniania","Shows a reference to the project.":"Wyświetla odniesienie do projektu.","Sign up (free)":"Zarejestruj się (bezpłatnie)","Silence":"Cisza","Silence Audio":"Wycisz Dźwięk","Sine":"Sine","Sitename":"Nazwa Strony","Size":"Rozmiar","Snapshot":"Snapshot","Social-login (OAuth2, 2FA)":"Social-login (OAuth2, 2FA)","Socket timeout (microseconds)":"Limit czasu dla gniazd (mikrosekundy)","Software":"Oprogramowanie","Source":"Źródło","Source & Encoding":"Źródło i kodowanie","Speed":"Prędkość","Stale timeout (seconds)":"Limit czasu (sekundy)","Statistics":"Statystyki","Storage":"Magazynowanie","Stores the viewer statistics to the disk.":"Przechowuje statystyki oglądających na dysku.","Stream":"Stream","Stream URL":"Adres URL streamu","Stream key":"Klucz strumienia","Stream name":"Nazwa streamu","Stream names":"Nazwy stream","Stream source for publication service (experimental).":"Źródło strumienia dla usługi publikacji (eksperymentalne).","Support datarhei Restreamer":"Wsparcie datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Obsługuje HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT i inne.","System":"System","Template":"Wygłąd","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Szablon do wykorzystania przy tworzeniu strony internetowej publikacji. Przycisk Usuń usuwa zaznaczenie z systemu.","Terms":"Warunki","Test pattern":"Wzór testu","Test pattern (extended)":"Wzór testu (rozszerzony)","Text colors":"Kolory tekstu","The RTMP output requires the RTMP Server.":"Wyjście RTMP wymaga serwera RTMP.","The SRT output requires the SRT Server.":"Wyjście SRT wymaga serwera SRT.","The amplitude (0.0 - 1.0) of the generated audio stream":"Rozległość (0,0–1,0) generowanego strumienia audio","The application is using an older version of the settings.":"Aplikacja korzysta ze starej wersji ustawień.","The available FFmpeg binary doesn't support any of the required protocols.":"Dostępne binarki FFmpeg nie obsługują żadnego z wymaganych protokołów.","The bitrate of the audio stream.":"Szybkość transmisji strumienia audio.","The carrier frequency":"Częstotliwość nośna","The channel \"{0}\" could not be deleted":["Nie można usunąć kanału \"",["0"],"”"],"The channel \"{0}\" has been deleted":["Kanał \"",["0"],"” został usunięty"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"Usunięcia tego kanału nie można odzyskać. Wszystkie posty w tym kanale zostaną usunięte.","The input profile is not complete. Please define a video and audio source.":"Profil wpisu nie jest kompletny. Ustaw źródło wideo i audio.","The layout of the audio stream.":"Układ strumienia audio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Maksymalna liczba segmentów na liście odtwarzania. 0 będzie zawierało wszystkie segmenty. 6 jest zalecane.","The noise color":"Kolor szumu","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"Osoba, która powiązała utwór z tym aktem, przekazała utwór do domeny publicznej, zrzekając się wszystkich praw do utworu na całym świecie zgodnie z prawem autorskim, w tym wszystkich praw pokrewnych i praw sąsiadów, w zakresie dozwolonym przez prawo. Możesz kopiować, modyfikować, rozpowszechniać i wykonywać pracę, nawet w celach komercyjnych, bez pytania o pozwolenie.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Publiczna nazwa domeny hosta, na którym działa ten Restreamer. Poszczególne nazwy domen oddziel przecinkami.","The publication service \"{0}\" could not be deleted":["Nie można usunąć usługi publikowania \"",["0"],"”."],"The publication service \"{0}\" has been created":["Usługa publikowania \"",["0"],"” została utworzona."],"The publication service \"{0}\" has been deleted":["Usługa publikowania \"",["0"],"” została usunięta."],"The publication service has been created":"Powstał serwis wydawniczy","The sample rate of the audio stream.":"Częstotliwość próbkowania strumienia audio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Wybrany plik jest za duży (",["0"]," bajtów). Dozwolonych jest tylko ",["1"]," bajtów."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Wybrany typ pliku (",["0"],") jest niedozwolony. Dozwolone typy plików to ",["types"]],"The settings for \"{0}\" have been saved":["Ustawienia dla \"",["0"],"” zostały zapisane."],"The source doesn't provide any audio streams.":"Źródło nie zapewnia strumienia audio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"Źródło nie zapewnia strumienia audio. Sprawdź <0>szczegóły sondy.","The source doesn't provide any compatible audio streams.":"Źródło nie zapewnia kompatybilnego strumienia audio.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"Źródło nie zapewnia kompatybilnego strumienia wideo. Sprawdź <0>wymagania.","The source doesn't provide any video streams. Please check the <0>probe details.":"Źródło nie zapewnia strumienia wideo. Sprawdź <0>szczegóły sondy.","The source doesn't provide any video streams. Please check the device.":"Źródło nie zapewnia strumienia wideo. Sprawdź urządzenie.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"Źródło wideo nie zapewnia kompatybilnego strumienia audio. Zalecana jest <0>wyciszenie dźwięku. Usługi takie jak YouTube, Facebook i Spółka wymagają kanału audio.","The video source is compatible. Select the desired resolution:":"Źródło wideo jest kompatybilne. Wybierz żądaną rozdzielczość:","There are updates available. Here you get more information.":"Dostępne są aktualizacje. Tutaj uzyskasz więcej informacji.","There was a problem storing the settings. Settings not saved.":"Podczas zapisywania ustawień wystąpił problem. Ustawienia nie zostały zapisane.","There was an error connecting to Restreamer Core at {0}.":["Wystąpił błąd podczas łączenia z Restreamer Core o ",["0"],"."],"There was an error during upload: {0}":["Wystąpił błąd podczas pobierania: ",["0"]],"There was an error setting up the stream.":"Wystąpił błąd podczas konfigurowania strumienia.","There were some errors in the settings. Settings not saved.":"Wystąpiły błędy w ustawieniach. Ustawienia nie zostały zapisane.","There's no login method available.":"Nie ma dostępnej metody połączenia.","This is a dummy service that explains to you the concepts of service.":"Jest to fikcyjna usługa, która wyjaśnia Ci koncepcje usługi.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Niekoniecznie jest to błąd. Jednak ponowne uruchomienie Restreamer Core może potrwać nieco dłużej...","This is to mention the copyright regulations for the target of this service.":"Ma to na celu wspomnieć o zasadach dotyczących praw autorskich dla celu tej usługi.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Ta licencja umożliwia ponownemu użytkownikowi kopiowanie i rozpowszechnianie materiału w dowolnym medium lub formacie, wyłącznie w nieodpowiedniej formie, pod warunkiem, że twórca zostanie potwierdzony. Licencja pozwala na wykorzystanie komercyjne.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Niniejsza licencja umożliwia ponownemu kopiowaniu i rozpowszechnianiu materiału w dowolnym medium lub formacie, wyłącznie w nieodpowiedniej formie, do celów niekomercyjnych i pod warunkiem, że twórca zostanie potwierdzony.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Ta licencja umożliwia ponownemu użytkownikowi rozpowszechnianie, remiksowanie, adaptowanie i używanie materiału w dowolnym medium lub formacie wyłącznie do celów niekomercyjnych, pod warunkiem uznania autora za twórcę.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Ta licencja umożliwia ponownemu użytkownikowi rozpowszechnianie, remiksowanie, adaptowanie i używanie materiału w dowolnym medium lub formacie wyłącznie do celów niekomercyjnych, pod warunkiem uznania autora za twórcę. Jeśli remiksujesz, adaptujesz lub rozszerzasz materiał, musisz licencjonować zmodyfikowany materiał na identycznych warunkach.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Ta licencja umożliwia ponownemu użytkownikowi rozpowszechnianie, remiksowanie, adaptowanie i używanie materiału w dowolnym medium lub formacie, pod warunkiem, że twórca zostanie potwierdzony. Licencja pozwala na wykorzystanie komercyjne.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Ta licencja umożliwia ponownemu użytkownikowi rozpowszechnianie, remiksowanie, adaptowanie i używanie materiału w dowolnym medium lub formacie, pod warunkiem, że twórca zostanie potwierdzony. Licencja pozwala na wykorzystanie komercyjne. Jeśli remiksujesz, adaptujesz lub rozszerzasz materiał, musisz licencjonować zmodyfikowany materiał na identycznych warunkach.","This protocol is unknown or not supported by the available FFmpeg binary.":"Ten protokół jest nieznany lub nie jest obsługiwany przez dostępne binarki FFmpeg.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Tego źródła nie można edytować podczas używania. Aby kontynuować, musisz odłączyć źródło.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Ta wersja interfejsu użytkownika nie obsługuje dostępnego pliku binarnego FFmpeg (",["0"],"). Interfejs użytkownika wymaga ",["1"],". Użyj obsługiwanego pliku binarnego FFmpeg."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Ta wersja interfejsu użytkownika nie obsługuje podłączonego Core (",["0"],"). Interfejs użytkownika wymaga ",["1"],". Użyj zgodnej wersji interfejsu użytkownika."],"This version of the UI is compatible.":"Ta wersja interfejsu użytkownika jest zgodna.","Time until an inactive viewer connection is treated as closed.":"Czas, po którym nieaktywne połączenie widza jest traktowane jako zamknięte.","Token":"Token","Transmit a Livestream to a Telegram Channel.":"Przekazuj Livestream na kanał Telegram.","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Przesyłaj migawki z podstawowego źródła do serwera HTTP/S. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Przesyła kanał audio z głównego źródła do serwera Icecast. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Prześlij główne źródło jako HTTP-Live-Streaming (HLS) do serwera HTTP/S. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Prześlij główne źródło w MPEG-DASH do serwera HTTP/S. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Prześlij główne źródło do usługi Brightcove Live. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Prześlij główne źródło do usługi CDN77 RTMP. Więcej informacji o konfiguracji <0>tutaj.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Prześlij główne źródło do usługi DaCast RTMP. Więcej informacji o konfiguracji <0>tutaj.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Prześlij główne źródło do usługi MPEG-TS. Więcej informacji na temat ustawień znajdziesz tutaj <0>tutaj.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Prześlij główne źródło do serwera RTMP(e|s|t|te|ts). Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Prześlij główne źródło do serwera RTSP. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Prześlij główne źródło do serwera Red5/Pro. Więcej szczegółów na temat ustawień znajdziesz <0>tutaj.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Prześlij główne źródło do serwera SRT. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Prześlij źródło podstawowe do serwera UDP. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Prześlij główne źródło do serwera WOWZA. Więcej szczegółów na temat ustawień znajdziesz <0>tutaj.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Przekaż źródło podstawowe do datarhei Core Ressource. Więcej szczegółów na temat ustawień można znaleźć <0>tutaj.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Przekaż główne źródło do Ressource livespotting.com. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Prześlij podstawowe źródło do usługi Akamai (MSL) Media Services Live. Więcej szczegółów na temat ustawień kodera MSL można znaleźć <0>tutaj.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Prześlij główne źródło do usługi kodowania w chmurze Bitmovin, potężnego narzędzia do przesyłania strumieniowego na żywo. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Prześlij główne źródło do usługi Restream RTMP. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj.","Transmit to a Azure Media Services. More details can be found <0>here.":"Przekazać do usługi Azure Media Services. Więcej szczegółów można znaleźć <0>tutaj.","Transmit to linkedIn. More details can be found <0>here.":"Przekazać do linkedIn. Więcej szczegółów można znaleźć <0>tutaj.","Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.":"Prześlij swój Livestream na serwer Owncast. <0>Tutaj znajdziesz więcej szczegółów dotyczących ustawień.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Przesyła Twój film jako strumień RTMP z wymaganym kluczem wygenerowanym w YouTube Studio. Więcej informacji na temat konfigurowania transmisji na żywo znajdziesz w witrynie <0>Creator Academy YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Przesyła strumień wideo z wymaganym kluczem, który został wygenerowany w programie Twitter Producer. Więcej informacji na temat konfigurowania transmisji na żywo można znaleźć na stronie <0>Producent Twittera.","Tune":"Tune","UDP transport":"Transport UDP","Unable to load the config.":"Nie udało się wczytać konfiguracji.","Unique ident on the service.":"Unikalny identyfikator w usłudze.","Unknown":"Nieznany","Unselected":"Nie zaznaczone","Upload":"Upload","Uploading the file failed":"Przesyłanie pliku nie powiodło się","Uploading the logo failed":"Nie udało się pobrać logo","Uptime":"Czas operacyjny","Use Auth0 for your running Restreamer Core. More <0>details.":"Użyj Auth0 dla działającego Restreamera Core. Więcej <0>szczegółów.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Użyj kreatora (<0/>) do szybkiej i łatwej konfiguracji lub edytuj (<1/>) źródła bezpośrednio w trybie niestandardowym.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Wykorzystaj swoje prawa autorskie i wybierz odpowiednią licencję na obraz. Bez względu na to, czy jest darmowy dla wszystkich, czy mocno ograniczony. Krótko omów, co inni mogą zrobić z Twoim wizerunkiem.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Wykorzystaj swoje prawa autorskie i wybierz odpowiednią licencję na obraz. Niezależnie od tego, czy jest to licencja bezpłatna, czy bardzo ograniczona. Krótko omów, co inni mogą zrobić z Twoim wizerunkiem.","User registration":"Rejestracja Użytkownika","Username":"Login","Username for authorization.":"Nazwa użytkownika do autoryzacji.","Username for the device.":"Nazwa użytkownika urządzenia.","VPU ID":"VPU ID","Vertical Flip":"Przerzucanie pionowe","Video":"Wideo","Video device":"Urządzenie wideo","Video settings":"Ustawienia wideo","Video setup":"Konfiguracja wideo","Video source":"Źródło wideo","Viewer":"Widz","Virtual source":"Wirtualne źródło","Volume":"Tom","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Witamy w Restreamer v2, rozwiązanie do szybkiego i łatwego publikowania filmów. Bezpłatnie do użytku prywatnego i komercyjnego. Więcej pomocy w <0>dokumentacji.","Where to store the HLS playlist and segments. In-Memory is recommended.":"Gdzie ma być przechowywana playlista HLS i segmenty. Zalecane jest In-Memory.","Write protection":"Ochrona przed zapisem","YUV test pattern":"Tabela testowa YUV","Yes":"Tak","You can't abort the wizard because at least one input must be defined.":"Nie można przerwać kreatora, ponieważ należy zdefiniować co najmniej jeden wpis.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Zmieniłeś konfigurację. Aby zmiany odniosły skutek, musisz ponownie uruchomić aplikację. Czy chcesz teraz ponownie uruchomić?","You have to reconnect manually":"Musisz ponownie połączyć się ręcznie","You have unsaved changes. Please save them before you can control the service again.":"Masz niezapisane zmiany. Utwórz ich kopię zapasową, zanim będziesz mógł ponownie kontrolować usługę.","Your stream needs to be encoded, but there's no suitable encoder available.":"Twój strumień musi być zakodowany, ale nie jest dostępny odpowiedni koder.","Your stream needs to be encoded. Choose the desired encoder:":"Twój strumień musi być zakodowany. Wybierz żądany koder:","blue":"niebieski","brown":"brązowy","iframe code":"Kod iframe","kbit/s":"kbit/s","pink":"różowy","velvet":"aksamitny","violet":"fioletowy","white":"biały"}}; \ No newline at end of file diff --git a/src/locales/pl/messages.po b/src/locales/pl/messages.po new file mode 100644 index 0000000..40c5a85 --- /dev/null +++ b/src/locales/pl/messages.po @@ -0,0 +1,2936 @@ +msgid "" +msgstr "" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: POEditor.com\n" +"Project-Id-Version: Restreamer\n" +"Language: pl\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: \n" +"PO-Revision-Date: \n" +"Last-Translator: \n" +"Language-Team: \n" +"Plural-Forms: \n" + +#: src/misc/controls/HLS.js:81 +msgid "6 (+ guaranteed to start with a Key frame)" +msgstr "6 (+ gwarantowany start z ramką Key)" + +#: src/misc/controls/HLS.js:84 +msgid "7 (+ fragmented MP4 format)" +msgstr "7 (+ fragmentaryczny format MP4)" + +#: src/misc/EncodingSelect.js:224 +msgid "<0>Compatibility list" +msgstr "<0>Lista kompatybilności" + +#: src/views/Edit/Profile.js:393 +#: src/views/Edit/Profile.js:543 +msgid "<0>Show probe details" +msgstr "<0>Pokaż szczegóły sondy" + +#: src/views/Edit/Sources/ALSA.js:156 +msgid "ALSA" +msgstr "ALSA" + +#: src/views/Settings.js:974 +msgid "API endpoint not found. Settings not saved." +msgstr "Nie znaleziono punktu końcowego interfejsu API. Ustawienia nie zostały zapisane." + +#: src/views/Edit/Sources/AVFoundation.js:221 +msgid "AVFoundation" +msgstr "AVFoundation" + +#: src/misc/ChannelList.js:356 +#: src/views/Edit/Profile.js:433 +#: src/views/Edit/Wizard/index.js:1168 +#: src/views/Edit/index.js:603 +#: src/views/Edit/index.js:629 +#: src/views/Edit/index.js:648 +#: src/views/Publication/Add.js:364 +#: src/views/Publication/Edit.js:563 +#: src/views/Settings.js:2123 +#: src/views/Settings.js:2182 +#: src/views/Settings.js:2204 +msgid "Abort" +msgstr "Anuluj" + +#: src/Header.js:283 +#: src/Header.js:324 +msgid "About" +msgstr "W związku z" + +#: src/misc/ChannelList.js:369 +msgid "Add" +msgstr "Dodaj" + +#: src/views/Publication/Add.js:323 +msgid "Add Publication" +msgstr "Dodaj Publikację" + +#: src/views/Playersite.js:708 +msgid "Add external widgets and styles to the publication site. You can find some examples on the help page." +msgstr "Dodaj widżety i style zewnętrzne do witryny publikowania. Kilka przykładów znajdziesz na stronie pomocy." + +#: src/misc/ChannelList.js:353 +msgid "Add new channel" +msgstr "Dodaj nowy kanał" + +#: src/views/Publication/Add.js:326 +msgid "Add: {0}" +msgstr "Dodaj : {0}" + +#: src/views/Edit/Sources/Network.js:421 +#: src/views/Edit/Wizard/Sources/Network.js:66 +#: src/views/Publication/Services/Azure.js:98 +#: src/views/Publication/Services/Brightcove.js:95 +#: src/views/Publication/Services/Core.js:116 +#: src/views/Publication/Services/DASH.js:192 +#: src/views/Publication/Services/HLS.js:181 +#: src/views/Publication/Services/Icecast.js:160 +#: src/views/Publication/Services/Image2.js:126 +#: src/views/Publication/Services/Linkedin.js:93 +#: src/views/Publication/Services/MPEGTS.js:160 +#: src/views/Publication/Services/RTMP.js:132 +#: src/views/Publication/Services/RTSP.js:150 +#: src/views/Publication/Services/Red5.js:115 +#: src/views/Publication/Services/SRT.js:161 +#: src/views/Publication/Services/UDP.js:127 +#: src/views/Publication/Services/WOWZA.js:132 +#: src/views/Settings.js:1370 +msgid "Address" +msgstr "Adres" + +#: src/views/Playersite.js:645 +msgid "Address for the background image." +msgstr "Adres obrazu tła." + +#: src/views/Settings.js:1399 +msgid "Address to listen on for HTTP requests." +msgstr "Adres do nasłuchiwania żądań HTTP." + +#: src/views/Settings.js:1412 +msgid "Address to listen on for HTTPS requests." +msgstr "Adres do nasłuchiwania żądań HTTPS." + +#: src/views/Playersite.js:530 +msgid "Adjust publication site colors and background as you like." +msgstr "Dostosuj kolory i tło witryny publikowania zgodnie z potrzebami." + +#: src/views/Login.js:322 +msgid "Advanced monitoring" +msgstr "Zaawansowane monitorowanie" + +#: src/views/Edit/Sources/Network.js:474 +#: src/views/Publication/Services/DASH.js:204 +#: src/views/Publication/Services/HLS.js:193 +#: src/views/Publication/Services/Icecast.js:170 +#: src/views/Publication/Services/Image2.js:132 +#: src/views/Publication/Services/MPEGTS.js:166 +#: src/views/Publication/Services/RTMP.js:138 +#: src/views/Publication/Services/RTSP.js:162 +#: src/views/Publication/Services/SRT.js:170 +#: src/views/Publication/Services/UDP.js:133 +msgid "Advanced settings" +msgstr "Zaawansowane ustawienia" + +#: src/views/Edit/Wizard/index.js:302 +msgid "Advanced setup" +msgstr "Ustawienia zaawansowane" + +#: src/views/Playersite.js:433 +#: src/views/Publication/Player.js:443 +msgid "AirPlay" +msgstr "AirPlay" + +#: src/views/Login.js:325 +msgid "Alerting by email" +msgstr "Powiadomienie e-mail" + +#: src/views/Publication/Add.js:346 +msgid "All" +msgstr "Wszystko" + +#: src/views/Settings.js:1231 +msgid "All important system settings." +msgstr "Wszystkie ważne parametry systemu." + +#: src/views/Settings.js:1548 +msgid "Allow all referrer" +msgstr "Zezwól wszystkim odsyłającym" + +#: src/views/Settings.js:1588 +msgid "Allow counting how many viewers the stream has." +msgstr "Pozwala policzyć liczbę widzów strumienia." + +#: src/views/Edit/Sources/VirtualAudio.js:126 +msgid "Amplitude" +msgstr "Zasięg" + +#: src/misc/Env.js:41 +msgid "An environment variable sets this value." +msgstr "Zmienna środowiskowa ustawia tę wartość." + +#: src/views/Publication/Services/Core.js:124 +#: src/views/Settings.js:1897 +msgid "App" +msgstr "App" + +#: src/Footer.js:218 +#: src/views/Publication/Services/Red5.js:126 +#: src/views/Publication/Services/WOWZA.js:148 +msgid "Application" +msgstr "Aplikacja" + +#: src/views/Edit/Wizard/index.js:1187 +msgid "Are you sure you want to abort the wizard?" +msgstr "Czy na pewno chcesz przerwać kreatorowi?" + +#: src/views/Publication/Add.js:467 +msgid "Audio" +msgstr "Dźwięk" + +#: src/views/Edit/Wizard/Sources/AVFoundation.js:111 +msgid "Audio Device" +msgstr "Urządzenie Dźwiękowe" + +#: src/views/Edit/Sources/ALSA.js:114 +#: src/views/Edit/Sources/AVFoundation.js:159 +msgid "Audio device" +msgstr "Urządzenie audio" + +#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:902 +msgid "Audio from device" +msgstr "Dźwięk z urządzenia" + +#: src/views/Edit/Profile.js:448 +#: src/views/Edit/ProfileSummary.js:90 +#: src/views/Publication/Edit.js:506 +msgid "Audio settings" +msgstr "Parametry dźwięku" + +#: src/views/Edit/Wizard/index.js:843 +msgid "Audio setup" +msgstr "Ustawienia dźwięku" + +#: src/views/Login.js:236 +msgid "Auth0" +msgstr "Auth0" + +#: src/views/Login.js:365 +msgid "Auth0 Tenant" +msgstr "Auth0 Najemca" + +#: src/views/Login.js:356 +msgid "Auth0 is currently not available because this interface is loaded from an insecure origin." +msgstr "Auth0 jest obecnie niedostępne, ponieważ ten interfejs jest ładowany z niezabezpieczonego źródła." + +#: src/misc/controls/Metadata.js:71 +msgid "Author" +msgstr "Autor" + +#: src/views/Settings.js:1210 +#: src/views/Settings.js:1483 +msgid "Authorization" +msgstr "Uprawnienie" + +#: src/misc/controls/HLS.js:123 +msgid "Automatic cleanup of all media data" +msgstr "Automatyczne czyszczenie wszystkich danych multimedialnych" + +#: src/views/Publication/Player.js:440 +msgid "Autoplay" +msgstr "Automatyczne odtwarzanie (Autoplay)" + +#: src/views/Playersite.js:461 +msgid "Available" +msgstr "Dostępne na" + +#: src/views/Edit/Profile.js:584 +#: src/views/Edit/Wizard/index.js:423 +#: src/views/Edit/Wizard/index.js:662 +#: src/views/Edit/Wizard/index.js:927 +#: src/views/Edit/Wizard/index.js:1039 +#: src/views/Edit/Wizard/index.js:1097 +#: src/views/Edit/Wizard/index.js:1179 +#: src/views/Publication/Add.js:492 +msgid "Back" +msgstr "Wstecz" + +#: src/views/Playersite.js:579 +msgid "Background colors" +msgstr "Kolory tła" + +#: src/views/Playersite.js:632 +msgid "Background image" +msgstr "Obraz tła" + +#: src/views/Publication/Services/Akamai.js:196 +msgid "Backup URL" +msgstr "Link do kopii zapasowej" + +#: src/views/Publication/Services/DaCast.js:182 +msgid "Backup server" +msgstr "Serwer kopii zapasowej" + +#: src/views/Publication/Services/Youtube.js:182 +msgid "Backup stream" +msgstr "Zapasowy stream" + +#: src/views/Publication/Services/Facebook.js:124 +msgid "Backup stream key" +msgstr "Klucz streamu kopii zapasowej" + +#: src/Footer.js:256 +#: src/Footer.js:269 +msgid "Bandwidth" +msgstr "Pasmo" + +#: src/views/Settings.js:1441 +msgid "Bandwidth control" +msgstr "Kontrola przepustowości" + +#: src/misc/modals/Process.js:81 +msgid "Banner" +msgstr "Baner" + +#: src/views/Login.js:241 +#: src/views/Settings.js:1488 +msgid "Basic" +msgstr "Zasadniczy" + +#: src/views/Edit/Sources/VirtualAudio.js:157 +msgid "Beep factor" +msgstr "Współczynnik sygnału dźwiękowego" + +#: src/misc/coders/settings/Audio.js:50 +#: src/misc/coders/settings/Video.js:51 +msgid "Bitrate" +msgstr "Bitrate" + +#: src/views/Edit/Wizard/index.js:1028 +#: src/views/Edit/index.js:564 +msgid "Briefly describe what the audience will see during the live stream." +msgstr "Krótko opisz, co widzowie zobaczą podczas transmisji na żywo." + +#: src/views/Publication/Player.js:355 +msgid "Button color" +msgstr "Kolor przycisku" + +#: src/views/Settings.js:1757 +msgid "Cache for files on /data." +msgstr "Buforowane pliki w /data." + +#: src/views/Settings.js:1785 +msgid "Cache time (Seconds)" +msgstr "Czas buforowania (w sekundach)" + +#: src/views/Settings.js:1813 +msgid "Cache types" +msgstr "Rodzaje buforu" + +#: src/views/Edit/Sources/AVFoundation.js:197 +msgid "Capture clicks" +msgstr "Przechwyt kliknięć" + +#: src/views/Edit/Sources/AVFoundation.js:194 +msgid "Capture cursor" +msgstr "Przechwyt kursoru" + +#: src/views/Edit/index.js:339 +msgid "Channel \"{0}\" saved" +msgstr "Kanał \"{0}” został zapisany" + +#: src/views/Edit/Sources/ALSA.js:129 +msgid "Channels" +msgstr "Kanały" + +#: src/views/Settings.js:1240 +msgid "Check for updates" +msgstr "Sprawdź aktualizacje" + +#: src/views/Publication/Add.js:276 +msgid "Check the requirements" +msgstr "Sprawdź wymagania" + +#: src/views/Edit/StreamSelect.js:53 +msgid "Choose a video stream" +msgstr "Wybierz strumień wideo" + +#: src/views/Edit/StreamSelect.js:68 +msgid "Choose an audio stream" +msgstr "Wybierz strumień dźwiękowy" + +#: src/views/Edit/Sources/ALSA.js:96 +#: src/views/Edit/Sources/Framebuffer.js:80 +#: src/views/Edit/Sources/Raspicam.js:87 +#: src/views/Edit/Sources/V4L.js:93 +msgid "Choose an input device ..." +msgstr "Wybierz urządzenie wejściowe ..." + +#: src/misc/EncodingSelect.js:202 +msgid "Choose codec ..." +msgstr "Wybierz kodek ..." + +#: src/views/Login.js:367 +msgid "Choose tenant ..." +msgstr "Wybór najemcy..." + +#: src/views/Playersite.js:425 +#: src/views/Publication/Player.js:442 +msgid "Chromecast" +msgstr "Chromecast" + +#: src/views/Publication/Services/DASH.js:309 +#: src/views/Publication/Services/HLS.js:249 +msgid "Chunk" +msgstr "Kawałek" + +#: src/misc/ModalContent.js:77 +#: src/views/Playersite.js:798 +#: src/views/Publication/Add.js:489 +#: src/views/Publication/Edit.js:527 +#: src/views/Publication/Player.js:452 +msgid "Close" +msgstr "Zamknij" + +#: src/views/Playersite.js:354 +msgid "Code injection" +msgstr "Wstrzyknięcie kodu" + +#: src/misc/EncodingSelect.js:200 +msgid "Codec" +msgstr "Kodek" + +#: src/views/Edit/Sources/VirtualAudio.js:110 +#: src/views/Publication/Player.js:323 +msgid "Color" +msgstr "Kolor" + +#: src/views/Settings.js:1350 +msgid "Config" +msgstr "Config" + +#: src/views/Password.js:117 +msgid "Confirm password" +msgstr "Potwierdź hasło" + +#: src/misc/ActionButton.js:38 +msgid "Connect" +msgstr "Zaloguj się" + +#: src/views/Edit/Wizard/Sources/AVFoundation.js:157 +msgid "Connected device" +msgstr "Urządzenie podłączone " + +#: src/views/Publication/Process.js:54 +msgid "Connected since <0/>" +msgstr "Zalogowany od " + +#: src/misc/ActionButton.js:12 +#: src/views/Main/index.js:334 +#: src/views/Publication/Process.js:40 +msgid "Connecting ..." +msgstr "Zalogowany ..." + +#: src/views/Initializing.js:21 +msgid "Connecting to Restreamer Core ..." +msgstr "Łączenie z Restreamer Core ..." + +#: src/views/Invalid.js:36 +msgid "Connecting to Restreamer Core failed probably because of mixed content." +msgstr "Połączenie z Restreamer Core nie powiodło się, prawdopodobnie z powodu mieszanej zawartości." + +#: src/misc/controls/Metadata.js:70 +#: src/views/Playersite.js:675 +#: src/views/Playersite.js:692 +msgid "Content" +msgstr "Zawartość" + +#: src/views/Main/index.js:394 +msgid "Content URL" +msgstr "URL treści" + +#: src/Footer.js:193 +msgid "Cores" +msgstr "Rdzenie" + +#: src/views/Password.js:127 +msgid "Create user" +msgstr "Utwórz użytkownika" + +#: src/misc/controls/License/index.js:112 +msgid "Creative Commons" +msgstr "Creative Commons" + +#: src/misc/coders/Encoders/audio/Opus.js:61 +#: src/misc/coders/settings/Audio.js:25 +#: src/misc/coders/settings/Audio.js:71 +#: src/misc/coders/settings/Audio.js:122 +#: src/misc/coders/settings/Video.js:31 +#: src/misc/coders/settings/Video.js:70 +#: src/misc/coders/settings/Video.js:115 +#: src/misc/coders/settings/Video.js:181 +#: src/misc/coders/settings/Video.js:220 +#: src/misc/filters/audio/Resample.js:63 +#: src/misc/filters/audio/Resample.js:114 +#: src/misc/filters/audio/Volume.js:58 +#: src/views/Edit/Sources/ALSA.js:101 +#: src/views/Edit/Sources/AVFoundation.js:120 +#: src/views/Edit/Sources/AVFoundation.js:153 +#: src/views/Edit/Sources/V4L.js:99 +msgid "Custom ..." +msgstr "Dostosuj ..." + +#: src/views/Settings.js:1356 +msgid "Custom JSON config for datarhei Core." +msgstr "Własna konfiguracja JSON dla Datarhei Core." + +#: src/views/Edit/Sources/ALSA.js:115 +msgid "Custom audio device" +msgstr "Własne urządzenie audio" + +#: src/views/Edit/Sources/AVFoundation.js:160 +msgid "Custom audio index" +msgstr "Własny indeks audio" + +#: src/misc/coders/settings/Audio.js:51 +#: src/misc/coders/settings/Video.js:52 +msgid "Custom bitrate (kbit/s)" +msgstr "Własna szybkość transmisji (kb/s)" + +#: src/views/Playersite.js:703 +msgid "Custom code injection" +msgstr "Wstrzyknięcie własnego kodu" + +#: src/misc/coders/Encoders/audio/Opus.js:87 +msgid "Custom delay" +msgstr "Własny limit czasu" + +#: src/views/Edit/Sources/Framebuffer.js:88 +msgid "Custom device" +msgstr "Własne urządzenie" + +#: src/misc/coders/settings/Video.js:241 +msgid "Custom format" +msgstr "Własny format" + +#: src/misc/coders/settings/Video.js:136 +msgid "Custom framerate" +msgstr "Własna częstotliwość odświeżania" + +#: src/misc/coders/settings/Video.js:91 +msgid "Custom keyframe interval" +msgstr "Własny interwał klatki kluczowej" + +#: src/misc/coders/settings/Audio.js:98 +#: src/misc/filters/audio/Resample.js:90 +msgid "Custom layout" +msgstr "Własny układ" + +#: src/misc/coders/settings/Audio.js:149 +#: src/misc/filters/audio/Resample.js:141 +msgid "Custom sampling (Hz)" +msgstr "Własne próbkowanie (Hz)" + +#: src/views/Edit/Sources/VirtualVideo.js:149 +msgid "Custom scale" +msgstr "Własna skala" + +#: src/misc/coders/settings/Video.js:202 +msgid "Custom size" +msgstr "Własny rozmiar" + +#: src/views/Edit/Sources/V4L.js:113 +msgid "Custom video device" +msgstr "Własne urządzenie wideo" + +#: src/views/Edit/Sources/AVFoundation.js:127 +msgid "Custom video index" +msgstr "Własny indeks wideo" + +#: src/misc/CopyButton.js:20 +#: src/misc/TextFieldCopy.js:33 +#: src/misc/Textarea.js:46 +msgid "Data copied to clipboard" +msgstr "Dane skopiowane do schowka" + +#: src/views/Edit/Sources/VirtualVideo.js:167 +msgid "Death color" +msgstr "Kolor śmierci" + +#: src/misc/filters/audio/Volume.js:74 +msgid "Decibels (dB)" +msgstr "Decybele (dB)" + +#: src/misc/EncodingSelect.js:210 +#: src/views/Edit/Wizard/index.js:643 +msgid "Decoder" +msgstr "Dekoder" + +#: src/views/Edit/Sources/AVFoundation.js:115 +#: src/views/Edit/Sources/AVFoundation.js:149 +#: src/views/Edit/Wizard/Sources/AVFoundation.js:76 +#: src/views/Edit/Wizard/Sources/AVFoundation.js:105 +#: src/views/Playersite.js:467 +#: src/views/Playersite.js:542 +#: src/views/Playersite.js:586 +msgid "Default" +msgstr "Domyślny" + +#: src/misc/coders/Encoders/audio/Opus.js:86 +msgid "Delay" +msgstr "Limit czasu" + +#: src/views/Edit/Sources/ALSA.js:132 +msgid "Delay (ms)" +msgstr "Opóźnienie (w ms)" + +#: src/views/Edit/index.js:617 +#: src/views/Edit/index.js:653 +#: src/views/Playersite.js:490 +#: src/views/Publication/Edit.js:536 +#: src/views/Publication/Edit.js:568 +msgid "Delete" +msgstr "Usuń" + +#: src/views/Publication/Edit.js:573 +msgid "Deleting a publication service cannot be reversed. The publication stops immediately." +msgstr "Usunięcia usługi publikowania nie można cofnąć. Publikowanie zatrzymuje się natychmiast." + +#: src/views/Publication/Services/Twitter.js:141 +#: src/views/Publication/Services/Youtube.js:167 +msgid "Delivering mode" +msgstr "Sposób dostawy" + +#: src/misc/controls/Metadata.js:85 +#: src/misc/controls/Metadata.js:110 +msgid "Description" +msgstr "Opis" + +#: src/views/Playersite.js:352 +#: src/views/Playersite.js:525 +msgid "Design" +msgstr "Model" + +#: src/views/Edit/Sources/Framebuffer.js:87 +#: src/views/Edit/Wizard/index.js:905 +#: src/views/Publication/Services/Framebuffer.js:93 +msgid "Device" +msgstr "Urządzenie" + +#: src/misc/ActionButton.js:24 +#: src/misc/ActionButton.js:45 +#: src/misc/ActionButton.js:59 +msgid "Disconnect" +msgstr "Wyloguj" + +#: src/views/Edit/index.js:634 +msgid "Disconnect & Continue" +msgstr "Odłącz i kontynuuj" + +#: src/misc/ActionButton.js:18 +#: src/views/Publication/Process.js:47 +msgid "Disconnecting ..." +msgstr "Wylogowywanie ..." + +#: src/misc/controls/HLS.js:70 +#: src/views/Settings.js:1720 +msgid "Disk" +msgstr "Dysk" + +#: src/views/Settings.js:1754 +#: src/views/Settings.js:1762 +msgid "Disk cache" +msgstr "Dysk z pamięci podręcznej" + +#: src/Footer.js:315 +#: src/Footer.js:328 +msgid "Disk storage" +msgstr "Miejsce na dysku" + +#: src/views/Settings.js:2214 +msgid "Do you really want to restart the application now?" +msgstr "Czy na pewno chcesz teraz ponownie uruchomić aplikację?" + +#: src/views/Edit/index.js:645 +msgid "Do you want to delete \"{0}\"?" +msgstr "Czy chcesz usunąć \"{0}”?" + +#: src/views/Publication/Edit.js:560 +msgid "Do you want to delete {title}?" +msgstr "Czy chcesz usunąć {title}?" + +#: src/views/Edit/index.js:626 +msgid "Do you want to disconnect \"{0}\"?" +msgstr "Czy chcesz odłączyć \"{0}”?" + +#: src/Header.js:289 +#: src/Header.js:330 +msgid "Docs" +msgstr "Dokumenty" + +#: src/views/Publication/Services/DASH.js:501 +#: src/views/Publication/Services/HLS.js:496 +#: src/views/Publication/Services/Icecast.js:238 +#: src/views/Publication/Services/Image2.js:171 +#: src/views/Publication/Services/MPEGTS.js:355 +#: src/views/Publication/Services/RTMP.js:250 +#: src/views/Publication/Services/RTSP.js:235 +#: src/views/Publication/Services/SRT.js:428 +#: src/views/Publication/Services/UDP.js:241 +msgid "Documentation" +msgstr "Dokumentacja" + +#: src/misc/Progress.js:127 +msgid "Dup. frames" +msgstr "Ramki podwaniające" + +#: src/views/Publication/Player.js:288 +msgid "EDIT: Player" +msgstr "EDIT: Gracz" + +#: src/views/Playersite.js:346 +msgid "EDIT: Publication Website" +msgstr "EDIT: Witryna publikacji" + +#: src/misc/controls/HLS.js:78 +msgid "EXT-X-VERSION" +msgstr "EXT-X-VERSION" + +#: src/views/Edit/index.js:403 +msgid "Edit" +msgstr "Edytuj" + +#: src/views/Edit/index.js:429 +msgid "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." +msgstr "Zmień źródła audio i wideo dla transmisji na żywo. Dodaj opis i ustaw licencję na żądaną zawartość." + +#: src/views/Publication/Edit.js:384 +msgid "Edit: {title}" +msgstr "Edytuj: {title}" + +#: src/views/Publication/Player.js:322 +msgid "Embed" +msgstr "Integruj" + +#: src/misc/controls/RTMP.js:48 +#: src/misc/controls/SRT.js:48 +msgid "Enable" +msgstr "Włącz" + +#: src/views/Edit/Sources/Network.js:684 +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:55 +msgid "Enable RTMP server ..." +msgstr "Aktywuj serwer RTMP ..." + +#: src/views/Edit/Sources/Network.js:733 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:55 +msgid "Enable SRT server ..." +msgstr "Włączenie serwera SRT ..." + +#: src/views/Edit/Sources/VirtualAudio.js:162 +msgid "Enable a periodic beep every second with this value times the carrier frequency" +msgstr "Aktywuje okresowy sygnał dźwiękowy co sekundę z tą wartością pomnożoną przez częstotliwość nośną" + +#: src/views/Publication/Services/Dummy.js:278 +#: src/views/Publication/Services/Facebook.js:139 +msgid "Enable backup stream" +msgstr "Aktywuj kopie streamu" + +#: src/views/Publication/Player.js:430 +msgid "Enable nerd statistics" +msgstr "Włącz statystyki nerdów" + +#: src/misc/controls/RTMP.js:70 +#: src/misc/controls/SRT.js:70 +msgid "Enable now" +msgstr "Włącz teraz" + +#: src/views/Publication/Services/Dummy.js:277 +#: src/views/Publication/Services/Facebook.js:138 +msgid "Enable primary stream" +msgstr "Aktywuj podstawowy stream" + +#: src/misc/controls/Snapshot.js:44 +msgid "Enable snapshots" +msgstr "Włącz migawki" + +#: src/views/Settings.js:1503 +msgid "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." +msgstr "Zdecydowanie zaleca się aktywację autoryzacji. W przeciwnym razie każdy może uzyskać dostęp do tej instancji." + +#: src/views/Settings.js:1663 +msgid "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." +msgstr "Zdecydowanie zaleca się włączenie uwierzytelniania podstawowego. W przeciwnym razie każdy mógłby zapisać dane do /memfs." + +#: src/views/Edit/Wizard/index.js:649 +msgid "Encoder" +msgstr "Koder" + +#: src/views/Edit/Summary.js:95 +#: src/views/Publication/Add.js:441 +#: src/views/Publication/Edit.js:478 +msgid "Encoding" +msgstr "Kodowanie" + +#: src/views/Publication/Services/HLS.js:445 +#: src/views/Publication/Services/RTMP.js:222 +#: src/views/Publication/Services/SRT.js:372 +msgid "Encryption" +msgstr "Szyfrowanie" + +#: src/misc/ChannelList.js:376 +msgid "Enter a name for the new channel." +msgstr "Wpisz nazwę nowego kanału." + +#: src/views/Password.js:107 +msgid "Enter password" +msgstr "Wpisz hasło" + +#: src/views/Edit/Sources/Network.js:414 +#: src/views/Edit/Wizard/Sources/Network.js:59 +msgid "Enter the address of your network source:" +msgstr "Wprowadź adres źródła sieci:" + +#: src/views/Password.js:97 +msgid "Enter username" +msgstr "Wpisz login" + +#: src/misc/coders/Encoders/video/H264VideoToolbox.js:64 +msgid "Entropy coder" +msgstr "Koder entropii" + +#: src/views/Edit/Wizard/index.js:1133 +#: src/views/Incompatible.js:30 +#: src/views/Invalid.js:29 +#: src/views/Publication/Process.js:63 +#: src/views/Settings.js:1176 +msgid "Error" +msgstr "Błąd" + +#: src/misc/CopyButton.js:22 +#: src/misc/TextFieldCopy.js:35 +#: src/misc/Textarea.js:48 +msgid "Error while copying data to clipboard" +msgstr "Błąd podczas kopiowania danych do schowka" + +#: src/views/Main/index.js:353 +#: src/views/Publication/Process.js:64 +msgid "Error: {0}" +msgstr "Błąd: {0}" + +#: src/views/Playersite.js:748 +msgid "Expands the area above the channel list (live chat)." +msgstr "Rozwija obszar nad listą kanałów (czat na żywo)." + +#: src/views/Playersite.js:768 +msgid "Expands the area under the channel description (comment boxes)." +msgstr "Rozwija obszar pod opisem kanału (pola komentarzy)." + +#: src/views/Settings.js:1267 +msgid "Expert mode" +msgstr "Tryb ekspercki" + +#: src/views/Playersite.js:733 +msgid "Extend channel list" +msgstr "Rozwiń listę kanałów" + +#: src/views/Playersite.js:753 +msgid "Extend content" +msgstr "Rozwiń zawartość" + +#: src/views/Playersite.js:773 +msgid "Extend footer" +msgstr "Rozszerz stopkę" + +#: src/views/Playersite.js:713 +msgid "Extend header" +msgstr "Rozszerz nagłówek" + +#: src/views/Settings.js:2087 +msgid "FFmpeg" +msgstr "FFmpeg" + +#: src/misc/Progress.js:64 +#: src/views/Main/Progress.js:79 +msgid "FPS" +msgstr "FPS" + +#: src/views/Publication/Add.js:187 +msgid "Failed to create publication service ({0})" +msgstr "Nie udało się utworzyć usługi publikowania ({0})" + +#: src/views/Playersite.js:310 +msgid "Failed to create publication website files." +msgstr "Nie udało się utworzyć publikowanych plików witryny." + +#: src/views/Edit/Profile.js:354 +#: src/views/Edit/Profile.js:504 +msgid "Failed to probe the source. Please check the <0>probe details." +msgstr "Nie można zbadać źródła. Sprawdź <0>szczegóły sondy." + +#: src/utils/restreamer.js:446 +msgid "Failed to refresh token: {0}" +msgstr "Nie udało się odświeżyć tokena: {0}" + +#: src/views/Edit/index.js:304 +msgid "Failed to save ingest metadata" +msgstr "Nie udało się zapisać metadanych pozyskiwania" + +#: src/views/Edit/index.js:179 +msgid "Failed to stop process" +msgstr "Zakończenie procesu nie powiodło się" + +#: src/views/Playersite.js:303 +msgid "Failed to store player size setting." +msgstr "Nie udało się zapisać ustawienia rozmiaru dysku." + +#: src/views/Publication/Edit.js:230 +msgid "Failed to store publication service ({0})" +msgstr "Nie udało się zapisać usługi publikowania ({0})" + +#: src/views/Edit/index.js:297 +msgid "Failed to update ingest process ({0})" +msgstr "Nie udało się zaktualizować procesu przetwarzania ({0})" + +#: src/views/Edit/index.js:310 +msgid "Failed to update ingest snapshot process ({0})" +msgstr "Nie udało się zaktualizować procesu ingest snapshot ({0})" + +#: src/views/Edit/index.js:316 +msgid "Failed to update the player" +msgstr "Aktualizacja odtwarzacza nie powiodła się" + +#: src/views/Edit/index.js:322 +msgid "Failed to update the playersite" +msgstr "Nie udało się zaktualizować strony dla graczy" + +#: src/views/Edit/Wizard/index.js:390 +#: src/views/Edit/Wizard/index.js:853 +msgid "Failed to verify the source. Please check the address." +msgstr "Nie można zweryfikować źródła. Zweryfikuj adres." + +#: src/views/Edit/Summary.js:101 +msgid "Filter" +msgstr "Filtr" + +#: src/views/Edit/Profile.js:592 +msgid "Finish" +msgstr "Wykończenie" + +#: src/views/Edit/Sources/VirtualVideo.js:182 +msgid "Flags" +msgstr "Flagi" + +#: src/views/Playersite.js:788 +msgid "For Javascripts." +msgstr "Dla JavaScriptów." + +#: src/views/Playersite.js:728 +msgid "For Stylesheets." +msgstr "Do arkuszy stylów." + +#: src/views/Edit/Sources/Network.js:521 +msgid "Force input framerate" +msgstr "Wymuś częstotliwość odświeżania wejściowego" + +#: src/misc/coders/settings/Video.js:240 +msgid "Format" +msgstr "Format" + +#: src/misc/Progress.js:114 +msgid "Frame drops" +msgstr "Spadki ramek" + +#: src/views/Edit/Sources/Framebuffer.js:129 +msgid "Framebuffer" +msgstr "Framebuffer" + +#: src/misc/coders/settings/Video.js:135 +#: src/views/Edit/Sources/Network.js:534 +msgid "Framerate" +msgstr "Częstotliwość wyświetlania klatek" + +#: src/views/Edit/Sources/VirtualAudio.js:145 +msgid "Frequency (Hz)" +msgstr "Częstotliwość (Hz)" + +#: src/views/Publication/Services/Core.js:154 +#: src/views/Publication/Services/Facebook.js:115 +#: src/views/Publication/Services/Facebook.js:133 +#: src/views/Publication/Services/Instagram.js:88 +#: src/views/Publication/Services/Restream.js:120 +#: src/views/Publication/Services/Twitch.js:133 +#: src/views/Publication/Services/Twitter.js:179 +#: src/views/Publication/Services/Youtube.js:177 +msgid "GET" +msgstr "GET" + +#: src/views/Edit/Sources/Network.js:553 +#: src/views/Edit/index.js:412 +#: src/views/Edit/index.js:424 +#: src/views/Playersite.js:350 +#: src/views/Playersite.js:363 +#: src/views/Publication/Add.js:374 +#: src/views/Publication/Edit.js:393 +#: src/views/Publication/Services/DASH.js:211 +#: src/views/Publication/Services/HLS.js:200 +#: src/views/Publication/Services/Icecast.js:177 +#: src/views/Publication/Services/Image2.js:139 +#: src/views/Publication/Services/RTMP.js:145 +#: src/views/Publication/Services/RTSP.js:169 +#: src/views/Publication/Services/SRT.js:177 +#: src/views/Settings.js:1205 +#: src/views/Settings.js:1226 +msgid "General" +msgstr "Główny" + +#: src/views/Publication/Player.js:413 +msgid "Google Analytics ID" +msgstr "Google Analytics ID" + +#: src/views/Publication/Player.js:423 +msgid "Google Analytics Tracker Name" +msgstr "Google Analytics Tracker Name" + +#: src/views/Main/index.js:403 +msgid "HLS" +msgstr "HLS" + +#: src/views/Edit/index.js:483 +msgid "HLS output" +msgstr "Wyjście HLS" + +#: src/views/Edit/Wizard/Sources/InternalHLS.js:73 +msgid "HLS server" +msgstr "Serwer HLS" + +#: src/views/Settings.js:1580 +msgid "HLS statistic for the In-memory storage" +msgstr "Statystyki HLS dotyczące przechowywania w pamięci" + +#: src/views/Edit/Sources/Network.js:511 +msgid "HTTP and HTTPS" +msgstr "HTTP i HTTPS" + +#: src/views/Settings.js:1391 +msgid "HTTP port" +msgstr "Port HTTP" + +#: src/views/Settings.js:1420 +msgid "HTTPS (SSL/TLS)" +msgstr "HTTPS (SSL/TLS)" + +#: src/views/Settings.js:1404 +msgid "HTTPS port" +msgstr "Port HTTPS" + +#: src/views/Edit/Sources/V4L.js:154 +#: src/views/Edit/Wizard/Sources/V4L.js:140 +msgid "Hardware device" +msgstr "Urządzenie sprzętowe" + +#: src/views/Playersite.js:595 +msgid "Header" +msgstr "Nagłówek" + +#: src/views/Playersite.js:551 +msgid "Headline" +msgstr "Wyróżniony" + +#: src/misc/filters/video/HFlip.js:65 +msgid "Horizontal Flip" +msgstr "Przerzucanie poziome" + +#: src/views/Login.js:319 +msgid "Hosted Restreamer interface" +msgstr "Interfejs hostowany przez Restreamer" + +#: src/views/Settings.js:1326 +msgid "Human readable name on the service." +msgstr "Nazwa czytelna dla człowieka w usłudze." + +#: src/views/Publication/Services/Bitmovin.js:89 +msgid "IP address" +msgstr "Adres IP" + +#: src/views/Settings.js:2159 +msgid "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." +msgstr "Jeśli zmieniłeś porty, Restreamer Core mógł już się zrestartować, ale jest teraz dostępny na innym porcie." + +#: src/views/Settings.js:2153 +msgid "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." +msgstr "Jeśli masz włączoną usługę Let's Encrypt TLS, uzyskanie certyfikatów może zająć trochę czasu. Upewnij się, że Restreamer Core jest dostępny przez port 80 z Internetu. Sprawdź dziennik konsoli Restreamer Core." + +#: src/views/Settings.js:1595 +msgid "Ignore IP ranges" +msgstr "Ignoruj ​​zakresy adresów IP" + +#: src/views/Playersite.js:640 +#: src/views/Publication/Player.js:369 +msgid "Image URL" +msgstr "Link do obrazu" + +#: src/views/Playersite.js:665 +msgid "Imprint" +msgstr "Wydrukowanie" + +#: src/views/Playersite.js:368 +msgid "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." +msgstr "Oprócz odtwarzacza, Restreamer oferuje obszerną stronę główną, na której możesz łatwo i szybko zaprezentować swoją transmisję na żywo." + +#: src/misc/controls/HLS.js:67 +#: src/views/Settings.js:1647 +msgid "In-memory" +msgstr "W pamięci" + +#: src/Footer.js:285 +#: src/Footer.js:298 +msgid "In-memory storage" +msgstr "Przechowywanie w pamięci" + +#: src/views/Publication/Add.js:273 +msgid "Incompatible" +msgstr "Niezgodny" + +#: src/misc/coders/settings/Audio.js:67 +#: src/misc/coders/settings/Audio.js:118 +#: src/misc/filters/audio/Pan.js:47 +#: src/misc/filters/audio/Resample.js:59 +#: src/misc/filters/audio/Resample.js:110 +#: src/misc/filters/audio/Volume.js:46 +msgid "Inherit" +msgstr "Odziedziczony od" + +#: src/views/Playersite.js:723 +msgid "Inject 1" +msgstr "Wstrzyknij 1" + +#: src/views/Playersite.js:743 +msgid "Inject 2" +msgstr "Wstrzyknij 2" + +#: src/views/Playersite.js:763 +msgid "Inject 3" +msgstr "Wstrzyknij 3" + +#: src/views/Playersite.js:783 +msgid "Inject 4" +msgstr "Wstrzyknij 4" + +#: src/misc/controls/Snapshot.js:50 +msgid "Interval (seconds)" +msgstr "Interwał (sekundy)" + +#: src/Header.js:295 +#: src/Header.js:336 +msgid "Issue alert" +msgstr "Zgłoszenie problemów" + +#: src/misc/coders/settings/Video.js:90 +msgid "Keyframe interval (seconds)" +msgstr "Odstęp między klatkami kluczowymi (sekundy)" + +#: src/misc/coders/settings/Audio.js:97 +#: src/misc/filters/audio/Resample.js:89 +msgid "Layout" +msgstr "Układ" + +#: src/views/Settings.js:1425 +msgid "Let's Encrypt certification" +msgstr "Certyfikat Let's Encrypt" + +#: src/views/Settings.js:1433 +msgid "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." +msgstr "Let's Encrypt wymaga co najmniej jednej nazwy domeny publicznej i dostępnego portu 80/TCP." + +#: src/misc/coders/Encoders/video/H264NVENC.js:112 +msgid "Level" +msgstr "Poziom" + +#: src/views/Settings.js:2069 +msgid "Level of system protocol." +msgstr "Poziom protokołu systemowego." + +#: src/views/Edit/Wizard/index.js:1076 +#: src/views/Edit/index.js:415 +#: src/views/Edit/index.js:579 +msgid "License" +msgstr "Patent" + +#: src/views/Edit/Sources/VirtualVideo.js:176 +msgid "Life color" +msgstr "Kolor życia" + +#: src/views/Playersite.js:622 +msgid "Linecolor" +msgstr "Kolor linii" + +#: src/views/Playersite.js:560 +#: src/views/Publication/Player.js:399 +msgid "Link" +msgstr "Link" + +#: src/views/Playersite.js:569 +msgid "Link, mouseover" +msgstr "Link, mouseover" + +#: src/views/Settings.js:1603 +msgid "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." +msgstr "Lista zakresów IP w notacji CIDR, na przykład 127.0.0.1/32, których statystyki nie będą rejestrowane - jeden zakres IP na linię. Pozostaw puste, aby zapisać wszystkie sesje." + +#: src/views/Settings.js:1821 +msgid "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." +msgstr "Lista rozszerzeń plików do pamięci podręcznej (na przykład „.html”), po jednym w wierszu. Pozostaw puste, aby buforować wszystkie typy plików." + +#: src/misc/controls/HLS.js:107 +msgid "List size (segments)" +msgstr "Rozmiar listy (segmenty)" + +#: src/views/Publication/Services/Facebook.js:16 +msgid "Live-Streaming to Facebook Live RTMP service" +msgstr "Przesyłanie strumieniowe na żywo do usługi Facebook Live RTMP" + +#: src/views/Publication/Services/Instagram.js:17 +msgid "Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck." +msgstr "Usługa przesyłania strumieniowego na żywo RTMP na Instagramie Live. Klucz przesyłania strumieniowego wymaga usługi takiej jak <0>Yellow Duck." + +#: src/views/Publication/Services/Twitch.js:17 +msgid "Live-Streaming to Twitch Live RTMP Service." +msgstr "Transmisja na żywo w usłudze RTMP Twitch Live." + +#: src/views/Publication/Services/Vimeo.js:12 +msgid "Live-Streaming to Vimeo Live RTMP Service" +msgstr "Transmisja na żywo w usłudze Vimeos RTMP Live" + +#: src/views/Publication/Services/Livespotting.js:94 +msgid "Livesource ID" +msgstr "Livesource ID" + +#: src/views/Settings.js:2021 +msgid "Log level" +msgstr "Poziom dziennika" + +#: src/misc/modals/Process.js:90 +#: src/views/Settings.js:1215 +#: src/views/Settings.js:1997 +msgid "Logging" +msgstr "Zapis" + +#: src/views/Login.js:297 +#: src/views/Login.js:391 +#: src/views/Login.js:406 +#: src/views/Publication/Services/Akamai.js:124 +msgid "Login" +msgstr "Zaloguj" + +#: src/utils/restreamer.js:268 +#: src/utils/restreamer.js:273 +#: src/utils/restreamer.js:302 +#: src/utils/restreamer.js:307 +msgid "Login failed: Couldn't load API details" +msgstr "Połączenie nie powiodło się: nie udało się wczytać szczegółów interfejsu API" + +#: src/utils/restreamer.js:259 +#: src/utils/restreamer.js:293 +msgid "Login failed: {0}" +msgstr "Połączenie nie powiodło się: {0}" + +#: src/views/Settings.js:1493 +msgid "Login/JWT authorization" +msgstr "Zezwolenie na logowanie/JWT" + +#: src/views/Publication/Player.js:324 +msgid "Logo" +msgstr "Logo" + +#: src/Header.js:307 +msgid "Logout" +msgstr "Wyloguj" + +#: src/misc/filters/audio/Loudnorm.js:66 +msgid "Loudness Normalization" +msgstr "Normalizacja głośności" + +#: src/Footer.js:208 +msgid "MB" +msgstr "MB" + +#: src/views/Edit/index.js:392 +msgid "Main Source" +msgstr "Główne Źródło" + +#: src/views/Main/index.js:289 +#: src/views/Playersite.js:389 +msgid "Main channel" +msgstr "Kanał główny" + +#: src/views/Publication/Player.js:99 +msgid "Main channel not found" +msgstr "Nie znaleziono głównego kanału" + +#: src/views/Edit/Wizard/index.js:194 +msgid "Main channel saved" +msgstr "Kanał główny zapisany" + +#: src/views/Playersite.js:412 +msgid "Main page channel (index.html)." +msgstr "Kanał strony głównej (index.html)." + +#: src/views/Publication/TabContent.js:49 +msgid "Maintainer:" +msgstr "Opiekun:" + +#: src/misc/controls/RTMP.js:54 +msgid "Make the channel available as an RTMP stream (experimental)." +msgstr "Udostępnij kanał jako strumień RTMP (eksperymentalnie)." + +#: src/misc/controls/SRT.js:54 +msgid "Make the channel available as an SRT stream (experimental)." +msgstr "Udostępnij kanał jako strumień SRT (eksperymentalnie)." + +#: src/misc/controls/HLS.js:117 +msgid "Master playlist (increases browser/client compatibility)" +msgstr "Główna lista odtwarzania (zwiększa kompatybilność z przeglądarką/klientem)" + +#: src/views/Settings.js:1780 +msgid "Maximum allowed cache size, 0 for unlimited." +msgstr "Maksymalny dozwolony rozmiar pamięci podręcznej, 0 nieograniczony." + +#: src/views/Settings.js:1702 +msgid "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." +msgstr "Maksymalna dozwolona liczba megabajtów pamięci RAM dla /memfs, 0 oznacza nieograniczoną liczbę." + +#: src/views/Settings.js:1746 +msgid "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." +msgstr "Maksymalna dopuszczalna liczba megabajtów na dysku twardym. 0 dla nieograniczonego." + +#: src/views/Settings.js:1462 +msgid "Maximum bandwidth Mbit/s" +msgstr "Maksymalna przepustowość Mbit/s" + +#: src/misc/coders/Encoders/audio/Opus.js:76 +msgid "Maximum delay in milliseconds." +msgstr "Maksymalne opóźnienie w milisekundach." + +#: src/views/Settings.js:1798 +msgid "Maximum file size (Megabytes)" +msgstr "Maksymalny rozmiar pliku (megabajty)" + +#: src/views/Settings.js:1806 +msgid "Maximum file size to put in cache." +msgstr "Taille maximale du fichier à mettre dans le cache." + +#: src/views/Settings.js:2105 +msgid "Maximum log histroy" +msgstr "Maksymalny dziennik historii" + +#: src/views/Settings.js:2074 +#: src/views/Settings.js:2092 +msgid "Maximum log lines" +msgstr "Maksymalna liczba wierszy dziennika" + +#: src/views/Settings.js:1694 +#: src/views/Settings.js:1738 +#: src/views/Settings.js:1772 +msgid "Maximum size (Megabytes)" +msgstr "Maksymalny rozmiar (MegaBajty)" + +#: src/views/Settings.js:1612 +msgid "Maximum viewer idle time (Seconds)" +msgstr "Maksymalny czas bezczynności przeglądarki (sekundy)" + +#: src/views/Settings.js:1446 +msgid "Maximum viewers" +msgstr "Maksymalna liczba widzów" + +#: src/Footer.js:202 +msgid "Memory" +msgstr "Pamięć" + +#: src/views/Edit/index.js:414 +msgid "Meta information" +msgstr "Informacje Meta" + +#: src/views/Edit/Wizard/index.js:1021 +#: src/views/Edit/index.js:559 +msgid "Metadata" +msgstr "Metadane" + +#: src/views/Edit/Sources/VirtualVideo.js:158 +msgid "Mold" +msgstr "Pleśń" + +#: src/views/Publication/Services/Twitter.js:30 +msgid "More about Twitter's copyright <0>here." +msgstr "Więcej informacji na temat praw autorskich Twittera <0>tutaj." + +#: src/views/Publication/Services/Youtube.js:31 +msgid "More about YouTube's copyright <0>here." +msgstr "Więcej informacji o prawach autorskich w YouTube <0>tutaj." + +#: src/views/Publication/Services/Facebook.js:17 +#: src/views/Publication/Services/Twitch.js:18 +#: src/views/Publication/Services/Vimeo.js:14 +msgid "More about licenses here" +msgstr "Więcej informacji o licencjach tutaj" + +#: src/views/Settings.js:1295 +msgid "More about the service" +msgstr "Dowiedz się więcej o usłudze" + +#: src/views/Publication/Player.js:441 +msgid "Mute" +msgstr "Wycisz" + +#: src/misc/filters/audio/Pan.js:57 +msgid "Mute a channel." +msgstr "Wyciszenie kanału." + +#: src/misc/filters/audio/Pan.js:50 +msgid "Mute left" +msgstr "Wyciszenie w lewo" + +#: src/misc/filters/audio/Pan.js:53 +msgid "Mute right" +msgstr "Wyciszenie w prawo" + +#: src/misc/ChannelList.js:380 +#: src/misc/controls/Metadata.js:76 +#: src/misc/controls/Metadata.js:98 +#: src/views/Playersite.js:505 +#: src/views/Settings.js:1318 +msgid "Name" +msgstr "Nazwa" + +#: src/views/Playersite.js:510 +msgid "Name for the template. If the name already exists, it will be overwritten." +msgstr "Nazwa modelu. Jeśli nazwa już istnieje, zostanie nadpisana." + +#: src/views/Settings.js:1209 +#: src/views/Settings.js:1365 +msgid "Network" +msgstr "Sieć" + +#: src/views/Edit/Sources/Network.js:840 +#: src/views/Edit/Wizard/Sources/Network.js:123 +msgid "Network source" +msgstr "Źródło sieciowe" + +#: src/views/Edit/Wizard/index.js:428 +#: src/views/Edit/Wizard/index.js:667 +#: src/views/Edit/Wizard/index.js:932 +#: src/views/Edit/Wizard/index.js:1044 +msgid "Next" +msgstr "Następny" + +#: src/views/Edit/Profile.js:436 +msgid "Next: Audio" +msgstr "Następny: Dźwięk" + +#: src/views/Welcome.js:39 +msgid "Next: Video setup" +msgstr "Dalej: Konfiguracja wideo" + +#: src/views/Edit/Wizard/index.js:1197 +msgid "No" +msgstr "Nie" + +#: src/views/Edit/Sources/NoAudio.js:45 +#: src/views/Edit/Wizard/index.js:916 +msgid "No audio" +msgstr "Bez dźwięku" + +#: src/views/Edit/StreamSelect.js:62 +msgid "No audio stream available" +msgstr "Brak dostępnych strumieni audio" + +#: src/views/Edit/Wizard/Sources/AVFoundation.js:70 +#: src/views/Edit/Wizard/Sources/V4L.js:99 +msgid "No input device available" +msgstr "Brak dostępnego urządzenia wejściowego" + +#: src/views/Edit/Wizard/index.js:388 +msgid "No live stream was detected. Please check the software that sends the stream." +msgstr "Nie wykryto transmisji na żywo. Sprawdź oprogramowanie wysyłające strumień." + +#: src/views/Edit/Summary.js:29 +msgid "No source selected" +msgstr "Nie wybrano źródła" + +#: src/views/Edit/SourceSelect.js:174 +msgid "No sources available" +msgstr "Brak dostępnego źródła" + +#: src/misc/EncodingSelect.js:164 +msgid "No suitable encoder found." +msgstr "Nie znaleziono odpowiedniego enkodera." + +#: src/misc/FilterSelect.js:106 +msgid "No suitable filter found." +msgstr "Nie znaleziono odpowiedniego filtra." + +#: src/views/Main/index.js:315 +#: src/views/Publication/Player.js:297 +msgid "No video" +msgstr "Brak wideo" + +#: src/views/Edit/StreamSelect.js:47 +msgid "No video stream available" +msgstr "Brak dostępnych strumieni wideo" + +#: src/views/Settings.js:1311 +msgid "Node ID" +msgstr "Identyfikator węzła" + +#: src/views/Edit/Sources/VirtualAudio.js:90 +msgid "Noise" +msgstr "Dźwięk" + +#: src/views/Edit/Sources/AVFoundation.js:145 +#: src/views/Edit/Summary.js:31 +#: src/views/Edit/Summary.js:107 +#: src/views/Edit/Wizard/Sources/AVFoundation.js:98 +msgid "None" +msgstr "Żaden" + +#: src/views/Playersite.js:353 +#: src/views/Playersite.js:660 +msgid "Notes" +msgstr "Notatki" + +#: src/views/Settings.js:2082 +#: src/views/Settings.js:2100 +msgid "Number of log lines to keep." +msgstr "Liczba wierszy dziennika do zachowania." + +#: src/views/Settings.js:2113 +msgid "Number of logs to keep for each process." +msgstr "Liczba dzienników do przechowywania dla każdego procesu." + +#: src/views/Playersite.js:829 +#: src/views/Publication/Player.js:471 +msgid "OK" +msgstr "OK" + +#: src/views/Settings.js:1567 +msgid "One referrer per line, e.g. http://www.example.com" +msgstr "Jedna strona odsyłająca w wierszu, na przykład http://www.domena.com." + +#: src/views/Playersite.js:814 +msgid "Open" +msgstr "Otwórz" + +#: src/misc/filters/audio/Pan.js:45 +msgid "Pan" +msgstr "Pan" + +#: src/views/Settings.js:1971 +msgid "Passphrase" +msgstr "Passphrase" + +#: src/views/Settings.js:1988 +msgid "Passphrase for SRT encryption." +msgstr "Passphrase dla szyfrowania SRT." + +#: src/views/Settings.js:1980 +msgid "Passphrase must be between 10 and 79 characters long" +msgstr "Passphrase musi mieć długość od 10 do 79 znaków" + +#: src/views/Publication/Edit.js:483 +msgid "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." +msgstr "Przekazywanie (kopiowanie) powinno być wyłączone tylko w razie potrzeby. Każde kodowanie wymaga dodatkowych zasobów procesora/GPU." + +#: src/views/Edit/Sources/Network.js:460 +#: src/views/Edit/Wizard/Sources/Network.js:97 +#: src/views/Login.js:282 +#: src/views/Publication/Services/Akamai.js:134 +#: src/views/Publication/Services/DASH.js:198 +#: src/views/Publication/Services/DaCast.js:142 +#: src/views/Publication/Services/HLS.js:187 +#: src/views/Publication/Services/RTSP.js:156 +#: src/views/Publication/Services/Red5.js:157 +#: src/views/Publication/Services/WOWZA.js:178 +#: src/views/Settings.js:1523 +#: src/views/Settings.js:1681 +msgid "Password" +msgstr "Hasło" + +#: src/views/Settings.js:1529 +#: src/views/Settings.js:1689 +msgid "Password for authorization." +msgstr "Hasło do autoryzacji." + +#: src/views/Edit/Sources/Network.js:465 +#: src/views/Edit/Wizard/Sources/Network.js:103 +msgid "Password for the device." +msgstr "Hasło do urządzenia." + +#: src/views/Settings.js:1625 +msgid "Persist viewer statistics" +msgstr "Trwałość statystyk oglądających" + +#: src/views/Publication/Services/Framebuffer.js:102 +msgid "Pixel format" +msgstr "Proporcje pikseli" + +#: src/views/Login.js:311 +msgid "Plan: <0>Starter" +msgstr "Schemat: <0>Starter" + +#: src/views/Publication/Add.js:349 +msgid "Platforms" +msgstr "Platformy" + +#: src/views/Publication/Player.js:326 +#: src/views/Settings.js:1211 +#: src/views/Settings.js:1538 +msgid "Playback" +msgstr "Odczyt" + +#: src/views/Main/Egress.js:100 +msgid "Player" +msgstr "Player" + +#: src/views/Publication/Player.js:331 +msgid "Player URL" +msgstr "Adres URL Playera" + +#: src/views/Publication/Player.js:254 +msgid "Player settings saved" +msgstr "Zapis ustawień odtwarzacza" + +#: src/Header.js:267 +#: src/views/Playersite.js:375 +msgid "Playersite" +msgstr "Playersite" + +#: src/views/Publication/Services/DASH.js:348 +#: src/views/Publication/Services/HLS.js:288 +msgid "Playlist" +msgstr "Lista odtwarzania" + +#: src/misc/controls/HLS.js:88 +msgid "Playlist version (M3U8). Version 3 has the best browser/client compatibility." +msgstr "Wersja playlisty (M3U8). Wersja 3 ma najlepszą kompatybilność z przeglądarką/klientem." + +#: src/views/Main/index.js:358 +msgid "Please check the <0>process log" +msgstr "Sprawdź <0>Dziennik procesów." + +#: src/views/Publication/Services/Akamai.js:29 +#: src/views/Publication/Services/Azure.js:29 +#: src/views/Publication/Services/Bitmovin.js:23 +#: src/views/Publication/Services/Brightcove.js:23 +#: src/views/Publication/Services/CDN77.js:23 +#: src/views/Publication/Services/Core.js:27 +#: src/views/Publication/Services/DASH.js:35 +#: src/views/Publication/Services/DaCast.js:26 +#: src/views/Publication/Services/HLS.js:37 +#: src/views/Publication/Services/Icecast.js:29 +#: src/views/Publication/Services/Image2.js:33 +#: src/views/Publication/Services/Linkedin.js:24 +#: src/views/Publication/Services/Livespotting.js:23 +#: src/views/Publication/Services/MPEGTS.js:35 +#: src/views/Publication/Services/RTMP.js:32 +#: src/views/Publication/Services/RTSP.js:36 +#: src/views/Publication/Services/Red5.js:25 +#: src/views/Publication/Services/Restream.js:26 +#: src/views/Publication/Services/SRT.js:33 +#: src/views/Publication/Services/UDP.js:31 +#: src/views/Publication/Services/WOWZA.js:28 +msgid "Please contact the operator of the service and check what happens." +msgstr "Skontaktuj się z operatorem serwisu i sprawdź co się dzieje." + +#: src/views/Publication/Services/Owncast.js:23 +#: src/views/Publication/Services/Telegram.js:14 +msgid "Please get in touch with the operator of the service and check what happens." +msgstr "Proszę skontaktować się z operatorem serwisu i sprawdzić co się dzieje." + +#: src/views/Playersite.js:122 +#: src/views/Playersite.js:197 +#: src/views/Publication/Player.js:156 +msgid "Please select a file to upload." +msgstr "Wybierz plik do przesłania." + +#: src/views/Publication/Add.js:446 +msgid "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." +msgstr "Jeśli to możliwe, użyj opcji \"Przekazywanie (kopiowanie)”. Kodowanie wymaga dodatkowych zasobów procesora/GPU." + +#: src/views/Edit/Wizard/index.js:450 +#: src/views/Edit/Wizard/index.js:948 +msgid "Please wait. Probe stream data ..." +msgstr "Proszę czekać. Dane przepływu sondy..." + +#: src/views/Edit/Wizard/index.js:1118 +msgid "Please wait. Setting up the stream ..." +msgstr "Proszę czekać. Konfiguracja strumienia..." + +#: src/views/Publication/Services/Bitmovin.js:92 +#: src/views/Settings.js:1945 +msgid "Port" +msgstr "Port" + +#: src/views/Publication/Player.js:384 +msgid "Position" +msgstr "Pozycja" + +#: src/misc/coders/Encoders/video/H264NVENC.js:70 +#: src/misc/coders/Encoders/video/X264.js:72 +#: src/misc/coders/Encoders/video/X265.js:72 +msgid "Preset" +msgstr "Zaprogramowane" + +#: src/views/Publication/Services/Youtube.js:181 +msgid "Primary stream" +msgstr "Główny stream" + +#: src/views/Publication/Services/Facebook.js:106 +msgid "Primary stream key" +msgstr "Klucz strumienia podstawowego" + +#: src/views/Edit/Sources/ALSA.js:136 +#: src/views/Edit/Sources/AVFoundation.js:201 +#: src/views/Edit/Sources/Framebuffer.js:110 +#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:660 +#: src/views/Edit/Sources/Network.js:706 +#: src/views/Edit/Sources/Network.js:755 +#: src/views/Edit/Sources/Raspicam.js:116 +#: src/views/Edit/Sources/V4L.js:134 +#: src/views/Edit/Sources/VirtualAudio.js:169 +#: src/views/Edit/Sources/VirtualVideo.js:188 +msgid "Probe" +msgstr "Sonda" + +#: src/views/Edit/index.js:547 +#: src/views/Publication/Add.js:407 +#: src/views/Publication/Edit.js:420 +msgid "Process" +msgstr "Przebieg" + +#: src/views/Publication/Add.js:376 +#: src/views/Publication/Edit.js:395 +msgid "Process control" +msgstr "Kontrola procesu" + +#: src/views/Main/index.js:472 +#: src/views/Publication/Edit.js:553 +msgid "Process debug report" +msgstr "Raport debugowania procesu" + +#: src/views/Main/index.js:448 +#: src/views/Main/index.js:464 +#: src/views/Publication/Edit.js:444 +#: src/views/Publication/Edit.js:545 +msgid "Process details" +msgstr "Szczegóły procesu" + +#: src/views/Main/index.js:451 +#: src/views/Publication/Edit.js:447 +msgid "Process report" +msgstr "Raport z procesu" + +#: src/views/Edit/index.js:413 +#: src/views/Edit/index.js:475 +msgid "Processing & Control" +msgstr "Przetwarzanie i kontrola" + +#: src/misc/coders/Encoders/video/H264NVENC.js:95 +#: src/misc/coders/Encoders/video/H264VAAPI.js:85 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:85 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:85 +#: src/misc/coders/settings/Video.js:142 +#: src/views/Edit/Wizard/index.js:622 +msgid "Profile" +msgstr "Profil" + +#: src/views/Edit/Sources/Network.js:623 +#: src/views/Publication/Services/Akamai.js:144 +#: src/views/Publication/Services/Akamai.js:182 +#: src/views/Publication/Services/Azure.js:89 +#: src/views/Publication/Services/Bitmovin.js:86 +#: src/views/Publication/Services/Brightcove.js:87 +#: src/views/Publication/Services/CDN77.js:90 +#: src/views/Publication/Services/Core.js:106 +#: src/views/Publication/Services/DASH.js:186 +#: src/views/Publication/Services/DaCast.js:110 +#: src/views/Publication/Services/DaCast.js:168 +#: src/views/Publication/Services/HLS.js:175 +#: src/views/Publication/Services/Icecast.js:154 +#: src/views/Publication/Services/Image2.js:120 +#: src/views/Publication/Services/Linkedin.js:84 +#: src/views/Publication/Services/MPEGTS.js:154 +#: src/views/Publication/Services/Owncast.js:88 +#: src/views/Publication/Services/RTMP.js:122 +#: src/views/Publication/Services/RTSP.js:144 +#: src/views/Publication/Services/Red5.js:105 +#: src/views/Publication/Services/SRT.js:158 +#: src/views/Publication/Services/Telegram.js:79 +#: src/views/Publication/Services/UDP.js:124 +#: src/views/Publication/Services/WOWZA.js:122 +msgid "Protocol" +msgstr "Protokół" + +#: src/views/Publication/Add.js:355 +msgid "Protocols" +msgstr "Protokoły" + +#: src/views/Settings.js:1375 +msgid "Public domain/s" +msgstr "Domena(y) publiczna(e)" + +#: src/views/Publication/Edit.js:107 +#: src/views/Publication/Edit.js:117 +msgid "Publication service not found" +msgstr "Nie znaleziono usługi wydawniczej" + +#: src/views/Playersite.js:319 +msgid "Publication website settings saved" +msgstr "Tworzenie kopii zapasowej ustawień witryny publikacji" + +#: src/views/Main/Publication.js:163 +msgid "Publications" +msgstr "Publikacje" + +#: src/views/Edit/Sources/Network.js:813 +msgid "Pull Mode" +msgstr "Tryb ciągnięcia" + +#: src/views/Edit/Sources/Network.js:812 +msgid "Pull or recieve the data:" +msgstr "Pobierz lub odbierz dane:" + +#: src/misc/Progress.js:90 +#: src/misc/coders/Encoders/video/H264VAAPI.js:140 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:140 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:140 +msgid "Quality" +msgstr "Jakość" + +#: src/views/Edit/Sources/VirtualVideo.js:118 +msgid "RGB test pattern" +msgstr "Wzór testowy RGB" + +#: src/views/Main/index.js:412 +#: src/views/Settings.js:1213 +#: src/views/Settings.js:1830 +msgid "RTMP" +msgstr "RTMP" + +#: src/views/Settings.js:1871 +msgid "RTMP Port" +msgstr "Port RTMP" + +#: src/views/Settings.js:1905 +msgid "RTMP app for publishing." +msgstr "Aplikacja RTMP do publikacji." + +#: src/views/Edit/index.js:498 +msgid "RTMP output" +msgstr "Wyjście RTMP" + +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:93 +#: src/views/Settings.js:1835 +msgid "RTMP server" +msgstr "Serwer RTMP" + +#: src/views/Edit/Sources/Network.js:679 +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:50 +msgid "RTMP server is not enabled" +msgstr "Serwer RTMP nie jest włączony" + +#: src/views/Settings.js:1879 +msgid "RTMP server listen address." +msgstr "Adres nasłuchiwania serwera RTMP." + +#: src/views/Settings.js:1918 +msgid "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" +msgstr "Token RTMP do publikowania i odtwarzania. Token jest wartością parametru zapytania adresu URL \"token”." + +#: src/views/Settings.js:1884 +msgid "RTMPS Port" +msgstr "RTMPS Port" + +#: src/views/Settings.js:1843 +msgid "RTMPS server" +msgstr "Serwer RTMPS" + +#: src/views/Settings.js:1892 +msgid "RTMPS server listen address." +msgstr "Adres nasłuchu serwera RTMPS." + +#: src/views/Edit/Sources/Network.js:483 +msgid "RTSP" +msgstr "RTSP" + +#: src/views/Edit/Sources/Raspicam.js:135 +#: src/views/Edit/Wizard/Sources/Raspicam.js:117 +msgid "Raspberry Pi camera" +msgstr "Kamera Raspberry Pi" + +#: src/misc/coders/Encoders/video/H264NVENC.js:147 +#: src/misc/coders/Encoders/video/H264VAAPI.js:66 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:66 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:66 +msgid "Rate control" +msgstr "Kontrola szybkości" + +#: src/views/Edit/Sources/VirtualVideo.js:161 +msgid "Ratio" +msgstr "Ratio" + +#: src/views/Edit/Sources/Network.js:516 +msgid "Read input at native speed" +msgstr "Odtwarzaj dane wejściowe z natywną prędkością" + +#: src/views/Edit/Sources/Network.js:814 +msgid "Receive Mode" +msgstr "Tryb odbioru" + +#: src/misc/ActionButton.js:32 +#: src/misc/ActionButton.js:53 +#: src/misc/controls/Process.js:46 +msgid "Reconnect" +msgstr "Połączyć ponownie" + +#: src/misc/controls/Process.js:53 +msgid "Reconnect delay (seconds)" +msgstr "Limit czasu ponownego połączenia (sekundy)" + +#: src/views/Main/index.js:369 +#: src/views/Publication/Process.js:68 +#: src/views/Publication/Process.js:81 +msgid "Reconnecting in {0}s" +msgstr "Połącz ponownie za {0}s" + +#: src/views/Settings.js:2150 +msgid "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." +msgstr "Ponowne połączenie z Restreamer Core nie powiodło się w ciągu ostatnich {RETRIES} sekund." + +#: src/views/Password.js:148 +msgid "Reconnecting to Restreamer Core failed." +msgstr "Nie udało się ponownie połączyć z Restreamer Core." + +#: src/views/Edit/Sources/ALSA.js:122 +#: src/views/Edit/Sources/AVFoundation.js:181 +#: src/views/Edit/Sources/V4L.js:120 +#: src/views/Edit/Wizard/Sources/AVFoundation.js:135 +#: src/views/Edit/Wizard/Sources/V4L.js:120 +msgid "Refresh" +msgstr "Odśwież" + +#: src/views/Publication/Services/Restream.js:86 +#: src/views/Publication/Services/Twitch.js:78 +#: src/views/Publication/Services/Twitter.js:150 +#: src/views/Publication/Services/Twitter.js:166 +msgid "Region" +msgstr "Region" + +#: src/views/Password.js:159 +#: src/views/Settings.js:2170 +msgid "Reload" +msgstr "Odnów" + +#: src/views/Settings.js:1707 +msgid "Remove the oldest entries if the /memfs is full" +msgstr "Usuń najstarsze wpisy, jeśli folder /memfs jest pełny" + +#: src/views/Settings.js:1852 +msgid "Requires activation" +msgstr "Wymaga aktywacji" + +#: src/views/Settings.js:1274 +#: src/views/Settings.js:2187 +#: src/views/Settings.js:2200 +#: src/views/Settings.js:2209 +msgid "Restart" +msgstr "Uruchom ponownie" + +#: src/views/Settings.js:2178 +msgid "Restart required" +msgstr "Wymagane jest ponowne uruchomienie" + +#: src/views/Password.js:136 +#: src/views/Settings.js:2138 +msgid "Restarting" +msgstr "Uruchom ponownie" + +#: src/views/Password.js:141 +#: src/views/Settings.js:2143 +msgid "Restarting Restreamer Core ..." +msgstr "Uruchom ponownie Restreamer Core ..." + +#: src/views/Settings.js:1082 +msgid "Restarting the application failed." +msgstr "Ponowne uruchomienie aplikacji nie powiodło się." + +#: src/views/Settings.js:1302 +msgid "Restreamer Service" +msgstr "Usługa Restreamer" + +#: src/views/Main/index.js:267 +msgid "Retrieving stream data ..." +msgstr "Pobieranie danych strumienia ..." + +#: src/views/Edit/Wizard/index.js:1143 +#: src/views/Invalid.js:43 +#: src/views/Settings.js:1183 +msgid "Retry" +msgstr "Spróbuj ponownie" + +#: src/misc/filters/video/Transpose.js:46 +msgid "Rotate" +msgstr "Obrót" + +#: src/views/Edit/Sources/VirtualVideo.js:155 +msgid "Rule" +msgstr "Reguła" + +#: src/views/Main/index.js:422 +#: src/views/Settings.js:1214 +#: src/views/Settings.js:1927 +msgid "SRT" +msgstr "SRT" + +#: src/views/Edit/index.js:517 +msgid "SRT output" +msgstr "Wyjście SRT" + +#: src/views/Edit/Wizard/Sources/InternalSRT.js:93 +#: src/views/Settings.js:1932 +msgid "SRT server" +msgstr "Serwer SRT" + +#: src/views/Edit/Sources/Network.js:728 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:50 +msgid "SRT server is not enabled" +msgstr "Serwer SRT nie jest włączony" + +#: src/views/Settings.js:1953 +msgid "SRT server listen address." +msgstr "Adres nasłuchu serwera SRT." + +#: src/views/Settings.js:1966 +msgid "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" +msgstr "SRT token do publikowania i odtwarzania. Token jest wartością parametru streamid 'token'." + +#: src/misc/coders/settings/Audio.js:148 +#: src/misc/filters/audio/Resample.js:140 +msgid "Sampling" +msgstr "Próbowanie" + +#: src/views/Edit/Wizard/index.js:1102 +#: src/views/Edit/index.js:614 +#: src/views/Playersite.js:804 +#: src/views/Publication/Add.js:498 +#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Player.js:457 +#: src/views/Settings.js:2128 +msgid "Save" +msgstr "Zapisać" + +#: src/views/Edit/Sources/VirtualVideo.js:148 +msgid "Scale" +msgstr "Skala" + +#: src/views/Settings.js:1793 +msgid "Seconds to keep files in cache." +msgstr "Sekundy na przechowywanie plików w pamięci podręcznej." + +#: src/misc/controls/Process.js:59 +msgid "Seconds until a process is restarted." +msgstr "Sekundy do ponownego uruchomienia procesu." + +#: src/misc/controls/Process.js:72 +msgid "Seconds until a staled process is terminated." +msgstr "Sekundy do zakończenia zablokowanego procesu." + +#: src/misc/controls/Snapshot.js:56 +msgid "Seconds until the snapshot/thumbnail of the video source is updated." +msgstr "Sekundy do zaktualizowania migawki/miniaturki źródła wideo." + +#: src/views/Settings.js:1543 +msgid "Security" +msgstr "Bezpieczeństwo" + +#: src/views/Publication/Services/Core.js:145 +msgid "Security passphrase" +msgstr "Hasło zabezpieczające" + +#: src/views/Publication/Services/Core.js:138 +#: src/views/Publication/Services/Livespotting.js:103 +msgid "Security token" +msgstr "Token bezpieczeństwa" + +#: src/views/Publication/Player.js:345 +msgid "Seekbar color" +msgstr "Kolor paska wyszukiwania (Seekbar)" + +#: src/misc/controls/HLS.js:95 +msgid "Segment length (seconds)" +msgstr "Długość segmentu (sekundy)" + +#: src/misc/controls/HLS.js:100 +msgid "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." +msgstr "Po upływie tego opóźnienia segment zostanie wycięty w następnej klatce kluczowej. Zalecana jest wartość 2." + +#: src/views/Publication/Services/DASH.js:429 +#: src/views/Publication/Services/HLS.js:358 +msgid "Segmentation" +msgstr "Segmentacja" + +#: src/views/Publication/Add.js:429 +#: src/views/Publication/Edit.js:470 +msgid "Select RTMP or SRT (if enabled) for less latency." +msgstr "Wybierz RTMP lub SRT (jeśli jest włączony), aby zmniejszyć opóźnienia." + +#: src/views/Edit/Sources/ALSA.js:108 +#: src/views/Edit/Sources/AVFoundation.js:172 +#: src/views/Edit/Sources/Framebuffer.js:99 +#: src/views/Edit/Sources/Raspicam.js:99 +#: src/views/Edit/Sources/V4L.js:106 +#: src/views/Edit/Wizard/Sources/AVFoundation.js:120 +#: src/views/Edit/Wizard/Sources/Raspicam.js:95 +#: src/views/Edit/Wizard/Sources/V4L.js:114 +msgid "Select a device:" +msgstr "Wybierz urządzenie:" + +#: src/views/Edit/Sources/VirtualAudio.js:84 +msgid "Select audio source:" +msgstr "Wybierz źródło dźwięku:" + +#: src/views/Edit/Sources/VirtualVideo.js:114 +msgid "Select source ..." +msgstr "Wybierz źródło ..." + +#: src/views/Edit/Sources/VirtualVideo.js:108 +msgid "Select video source:" +msgstr "Wybierz źródło wideo:" + +#: src/views/Edit/Wizard/index.js:283 +msgid "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." +msgstr "Wybierz, czy pobierasz strumień z <0>źródła sieciowego (np. kamery sieciowej), czy z <1>wewnętrznego serwera RTMP (np. strumienie OBS do Restreamer)." + +#: src/misc/EncodingSelect.js:196 +msgid "Select your encoding setting:" +msgstr "Wybierz ustawienia kodowania:" + +#: src/misc/FilterSelect.js:121 +msgid "Select your filter settings (optional):" +msgstr "Wybierz ustawienia filtra (opcjonalnie):" + +#: src/views/Playersite.js:604 +msgid "Selected" +msgstr "Wybrany" + +#: src/views/Playersite.js:395 +msgid "Selected channel" +msgstr "Wybrany kanał" + +#: src/views/Playersite.js:465 +msgid "Selection" +msgstr "Wybór" + +#: src/views/Settings.js:1258 +msgid "Send anonymous metrics (helps us for future development)" +msgstr "Wysyłaj anonimowe dane (pomaga nam w przyszłym rozwoju)" + +#: src/views/Edit/Sources/Network.js:650 +#: src/views/Edit/Sources/Network.js:696 +#: src/views/Edit/Sources/Network.js:745 +#: src/views/Edit/Wizard/Sources/InternalHLS.js:48 +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:68 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:68 +msgid "Send stream to this address:" +msgstr "Wyślij stream na ten adres:" + +#: src/views/Publication/Services/Framebuffer.js:16 +msgid "Send video to Framebuffer" +msgstr "Wyślij wideo do Framebuffer" + +#: src/views/Publication/Services/DaCast.js:120 +msgid "Server" +msgstr "Serwer" + +#: src/views/Publication/Services/Owncast.js:100 +#: src/views/Publication/Services/Telegram.js:91 +msgid "Server URL" +msgstr "URL serwera" + +#: src/Header.js:257 +#: src/views/Login.js:246 +#: src/views/Settings.js:1207 +#: src/views/Settings.js:1288 +msgid "Service" +msgstr "Usługa" + +#: src/views/Publication/Add.js:387 +#: src/views/Publication/Edit.js:406 +msgid "Service name" +msgstr "Nazwa serwisu" + +#: src/views/Settings.js:1339 +msgid "Service token for monitoring." +msgstr "Token serwisowy do monitorowania." + +#: src/Footer.js:240 +msgid "Sessions" +msgstr "Sesje" + +#: src/views/Settings.js:1470 +msgid "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." +msgstr "Ustawia limit przepustowości w Mbit na sekundę dla wychodzącego transferu danych HLS. Wszystkie usługi, takie jak RTMP i procesy wychodzące, są uwzględniane w kalkulacji. W przypadku przekroczenia przepustowości przeglądarki HLS otrzymują kod stanu HTTP 509 (Przekroczono limit przepustowości). 0 jest nieograniczone." + +#: src/views/Settings.js:1454 +msgid "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." +msgstr "Ustawia limit oglądania dla sesji HLS. W przypadku przekroczenia limitu przeglądarki HLS otrzymują kod stanu HTTP 509 (przekroczono limit przepustowości). Wartość 0 jest nieograniczona." + +#: src/views/Settings.js:1293 +msgid "Setting for connection to the service." +msgstr "Parametr połączenia serwisowego." + +#: src/views/Settings.js:1193 +msgid "Settings" +msgstr "Ustawienia" + +#: src/views/Settings.js:1195 +msgid "Settings (expert mode)" +msgstr "Parametry (tryb eksperta)" + +#: src/views/Settings.js:1723 +msgid "Settings for /data path. The access is protected by" +msgstr "Parametry ścieżki /data. Dostęp jest chroniony przez" + +#: src/views/Settings.js:1650 +msgid "Settings for /memfs path." +msgstr "Parametry ścieżki /memfs." + +#: src/views/Settings.js:1025 +msgid "Settings saved. All changes will be applied after restarting the application." +msgstr "Ustawienia zostały zapisane. Wszystkie zmiany zostaną zastosowane po ponownym uruchomieniu aplikacji." + +#: src/views/Playersite.js:417 +msgid "Share button" +msgstr "Przycisk udostępniania" + +#: src/views/Playersite.js:447 +msgid "Shows a reference to the project." +msgstr "Wyświetla odniesienie do projektu." + +#: src/views/Login.js:332 +msgid "Sign up (free)" +msgstr "Zarejestruj się (bezpłatnie)" + +#: src/views/Edit/Sources/VirtualAudio.js:89 +msgid "Silence" +msgstr "Cisza" + +#: src/views/Edit/Wizard/index.js:913 +msgid "Silence Audio" +msgstr "Wycisz Dźwięk" + +#: src/views/Edit/Sources/VirtualAudio.js:91 +msgid "Sine" +msgstr "Sine" + +#: src/views/Playersite.js:381 +msgid "Sitename" +msgstr "Nazwa Strony" + +#: src/misc/coders/settings/Video.js:201 +msgid "Size" +msgstr "Rozmiar" + +#: src/views/Edit/index.js:536 +#: src/views/Main/index.js:431 +msgid "Snapshot" +msgstr "Snapshot" + +#: src/views/Login.js:316 +msgid "Social-login (OAuth2, 2FA)" +msgstr "Social-login (OAuth2, 2FA)" + +#: src/views/Edit/Sources/Network.js:500 +msgid "Socket timeout (microseconds)" +msgstr "Limit czasu dla gniazd (mikrosekundy)" + +#: src/views/Publication/Add.js:352 +msgid "Software" +msgstr "Oprogramowanie" + +#: src/misc/controls/Source.js:74 +#: src/views/Edit/Sources/VirtualAudio.js:88 +#: src/views/Edit/Sources/VirtualVideo.js:112 +#: src/views/Publication/Add.js:424 +#: src/views/Publication/Edit.js:465 +msgid "Source" +msgstr "Źródło" + +#: src/views/Publication/Add.js:375 +#: src/views/Publication/Add.js:419 +#: src/views/Publication/Edit.js:394 +#: src/views/Publication/Edit.js:460 +msgid "Source & Encoding" +msgstr "Źródło i kodowanie" + +#: src/misc/Progress.js:103 +msgid "Speed" +msgstr "Prędkość" + +#: src/misc/controls/Process.js:67 +msgid "Stale timeout (seconds)" +msgstr "Limit czasu (sekundy)" + +#: src/views/Publication/Player.js:325 +#: src/views/Settings.js:1575 +msgid "Statistics" +msgstr "Statystyki" + +#: src/misc/controls/HLS.js:65 +#: src/views/Settings.js:1212 +#: src/views/Settings.js:1642 +msgid "Storage" +msgstr "Magazynowanie" + +#: src/views/Settings.js:1633 +msgid "Stores the viewer statistics to the disk." +msgstr "Przechowuje statystyki oglądających na dysku." + +#: src/views/Edit/StreamSelect.js:30 +#: src/views/Edit/StreamSelect.js:36 +#: src/views/Edit/StreamSelect.js:81 +#: src/views/Edit/Wizard/index.js:893 +msgid "Stream" +msgstr "Stream" + +#: src/views/Publication/Services/Akamai.js:156 +#: src/views/Publication/Services/CDN77.js:102 +msgid "Stream URL" +msgstr "Adres URL streamu" + +#: src/views/Publication/Services/CDN77.js:113 +#: src/views/Publication/Services/DaCast.js:153 +#: src/views/Publication/Services/Dummy.js:274 +#: src/views/Publication/Services/Instagram.js:84 +#: src/views/Publication/Services/Owncast.js:110 +#: src/views/Publication/Services/Restream.js:116 +#: src/views/Publication/Services/Telegram.js:101 +#: src/views/Publication/Services/Twitch.js:129 +#: src/views/Publication/Services/Twitter.js:175 +#: src/views/Publication/Services/Vimeo.js:73 +#: src/views/Publication/Services/Youtube.js:173 +msgid "Stream key" +msgstr "Klucz strumienia" + +#: src/views/Publication/Services/Brightcove.js:101 +#: src/views/Publication/Services/Core.js:131 +#: src/views/Publication/Services/Red5.js:136 +#: src/views/Publication/Services/WOWZA.js:158 +msgid "Stream name" +msgstr "Nazwa streamu" + +#: src/views/Publication/Services/Akamai.js:167 +msgid "Stream names" +msgstr "Nazwy stream" + +#: src/misc/controls/Source.js:78 +msgid "Stream source for publication service (experimental)." +msgstr "Źródło strumienia dla usługi publikacji (eksperymentalne)." + +#: src/views/Playersite.js:441 +msgid "Support datarhei Restreamer" +msgstr "Wsparcie datarhei Restreamer" + +#: src/views/Edit/Sources/Network.js:427 +#: src/views/Edit/Wizard/Sources/Network.js:72 +msgid "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." +msgstr "Obsługuje HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT i inne." + +#: src/Footer.js:184 +#: src/Header.js:275 +#: src/views/Settings.js:2002 +msgid "System" +msgstr "System" + +#: src/views/Playersite.js:351 +#: src/views/Playersite.js:456 +msgid "Template" +msgstr "Wygłąd" + +#: src/views/Playersite.js:478 +msgid "Template to be used for creating the publication website. The delete button removes the selection from the system." +msgstr "Szablon do wykorzystania przy tworzeniu strony internetowej publikacji. Przycisk Usuń usuwa zaznaczenie z systemu." + +#: src/views/Playersite.js:682 +msgid "Terms" +msgstr "Warunki" + +#: src/views/Edit/Sources/VirtualVideo.js:116 +msgid "Test pattern" +msgstr "Wzór testu" + +#: src/views/Edit/Sources/VirtualVideo.js:117 +msgid "Test pattern (extended)" +msgstr "Wzór testu (rozszerzony)" + +#: src/views/Playersite.js:535 +msgid "Text colors" +msgstr "Kolory tekstu" + +#: src/misc/controls/RTMP.js:61 +msgid "The RTMP output requires the RTMP Server." +msgstr "Wyjście RTMP wymaga serwera RTMP." + +#: src/misc/controls/SRT.js:61 +msgid "The SRT output requires the SRT Server." +msgstr "Wyjście SRT wymaga serwera SRT." + +#: src/views/Edit/Sources/VirtualAudio.js:131 +msgid "The amplitude (0.0 - 1.0) of the generated audio stream" +msgstr "Rozległość (0,0–1,0) generowanego strumienia audio" + +#: src/views/Settings.js:1278 +msgid "The application is using an older version of the settings." +msgstr "Aplikacja korzysta ze starej wersji ustawień." + +#: src/views/Edit/Sources/Network.js:611 +msgid "The available FFmpeg binary doesn't support any of the required protocols." +msgstr "Dostępne binarki FFmpeg nie obsługują żadnego z wymaganych protokołów." + +#: src/misc/coders/settings/Audio.js:40 +msgid "The bitrate of the audio stream." +msgstr "Szybkość transmisji strumienia audio." + +#: src/views/Edit/Sources/VirtualAudio.js:150 +msgid "The carrier frequency" +msgstr "Częstotliwość nośna" + +#: src/views/Edit/index.js:364 +msgid "The channel \"{0}\" could not be deleted" +msgstr "Nie można usunąć kanału \"{0}”" + +#: src/views/Edit/index.js:373 +msgid "The channel \"{0}\" has been deleted" +msgstr "Kanał \"{0}” został usunięty" + +#: src/views/Edit/index.js:658 +msgid "The deletion of this channel can not be recovered. All publications of this channel will be removed." +msgstr "Usunięcia tego kanału nie można odzyskać. Wszystkie posty w tym kanale zostaną usunięte." + +#: src/views/Edit/Wizard/index.js:170 +#: src/views/Edit/index.js:290 +msgid "The input profile is not complete. Please define a video and audio source." +msgstr "Profil wpisu nie jest kompletny. Ustaw źródło wideo i audio." + +#: src/misc/coders/settings/Audio.js:86 +#: src/misc/filters/audio/Resample.js:78 +msgid "The layout of the audio stream." +msgstr "Układ strumienia audio." + +#: src/misc/controls/HLS.js:112 +msgid "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." +msgstr "Maksymalna liczba segmentów na liście odtwarzania. 0 będzie zawierało wszystkie segmenty. 6 jest zalecane." + +#: src/views/Edit/Sources/VirtualAudio.js:119 +msgid "The noise color" +msgstr "Kolor szumu" + +#: src/misc/controls/License/index.js:60 +msgid "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." +msgstr "Osoba, która powiązała utwór z tym aktem, przekazała utwór do domeny publicznej, zrzekając się wszystkich praw do utworu na całym świecie zgodnie z prawem autorskim, w tym wszystkich praw pokrewnych i praw sąsiadów, w zakresie dozwolonym przez prawo. Możesz kopiować, modyfikować, rozpowszechniać i wykonywać pracę, nawet w celach komercyjnych, bez pytania o pozwolenie." + +#: src/views/Settings.js:1383 +msgid "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." +msgstr "Publiczna nazwa domeny hosta, na którym działa ten Restreamer. Poszczególne nazwy domen oddziel przecinkami." + +#: src/views/Publication/Edit.js:278 +msgid "The publication service \"{0}\" could not be deleted" +msgstr "Nie można usunąć usługi publikowania \"{0}”." + +#: src/views/Publication/Add.js:195 +msgid "The publication service \"{0}\" has been created" +msgstr "Usługa publikowania \"{0}” została utworzona." + +#: src/views/Publication/Edit.js:284 +msgid "The publication service \"{0}\" has been deleted" +msgstr "Usługa publikowania \"{0}” została usunięta." + +#: src/views/Publication/Add.js:193 +msgid "The publication service has been created" +msgstr "Powstał serwis wydawniczy" + +#: src/misc/coders/settings/Audio.js:137 +#: src/misc/filters/audio/Resample.js:129 +msgid "The sample rate of the audio stream." +msgstr "Częstotliwość próbkowania strumienia audio." + +#: src/views/Playersite.js:152 +#: src/views/Playersite.js:227 +#: src/views/Publication/Player.js:186 +msgid "The selected file is too big ({0} bytes). Only {1} bytes are allowed." +msgstr "Wybrany plik jest za duży ({0} bajtów). Dozwolonych jest tylko {1} bajtów." + +#: src/views/Playersite.js:141 +#: src/views/Playersite.js:216 +#: src/views/Publication/Player.js:175 +msgid "The selected file type ({0}) is not allowed. Allowed file types are {types}" +msgstr "Wybrany typ pliku ({0}) jest niedozwolony. Dozwolone typy plików to {types}" + +#: src/views/Publication/Edit.js:238 +msgid "The settings for \"{0}\" have been saved" +msgstr "Ustawienia dla \"{0}” zostały zapisane." + +#: src/views/Edit/Wizard/index.js:861 +msgid "The source doesn't provide any audio streams." +msgstr "Źródło nie zapewnia strumienia audio." + +#: src/views/Edit/Profile.js:520 +msgid "The source doesn't provide any audio streams. Please check the <0>probe details." +msgstr "Źródło nie zapewnia strumienia audio. Sprawdź <0>szczegóły sondy." + +#: src/views/Edit/Wizard/index.js:869 +msgid "The source doesn't provide any compatible audio streams." +msgstr "Źródło nie zapewnia kompatybilnego strumienia audio." + +#: src/views/Edit/Wizard/index.js:407 +msgid "The source doesn't provide any compatible video streams. Please check the <0>requirements." +msgstr "Źródło nie zapewnia kompatybilnego strumienia wideo. Sprawdź <0>wymagania." + +#: src/views/Edit/Profile.js:370 +msgid "The source doesn't provide any video streams. Please check the <0>probe details." +msgstr "Źródło nie zapewnia strumienia wideo. Sprawdź <0>szczegóły sondy." + +#: src/views/Edit/Wizard/index.js:399 +msgid "The source doesn't provide any video streams. Please check the device." +msgstr "Źródło nie zapewnia strumienia wideo. Sprawdź urządzenie." + +#: src/views/Edit/Wizard/index.js:880 +msgid "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." +msgstr "Źródło wideo nie zapewnia kompatybilnego strumienia audio. Zalecana jest <0>wyciszenie dźwięku. Usługi takie jak YouTube, Facebook i Spółka wymagają kanału audio." + +#: src/views/Edit/Wizard/index.js:618 +msgid "The video source is compatible. Select the desired resolution:" +msgstr "Źródło wideo jest kompatybilne. Wybierz żądaną rozdzielczość:" + +#: src/views/Settings.js:1250 +msgid "There are updates available. Here you get more information." +msgstr "Dostępne są aktualizacje. Tutaj uzyskasz więcej informacji." + +#: src/views/Settings.js:978 +msgid "There was a problem storing the settings. Settings not saved." +msgstr "Podczas zapisywania ustawień wystąpił problem. Ustawienia nie zostały zapisane." + +#: src/views/Invalid.js:32 +msgid "There was an error connecting to Restreamer Core at {0}." +msgstr "Wystąpił błąd podczas łączenia z Restreamer Core o {0}." + +#: src/views/Playersite.js:165 +#: src/views/Playersite.js:240 +#: src/views/Publication/Player.js:199 +msgid "There was an error during upload: {0}" +msgstr "Wystąpił błąd podczas pobierania: {0}" + +#: src/views/Edit/Wizard/index.js:1138 +msgid "There was an error setting up the stream." +msgstr "Wystąpił błąd podczas konfigurowania strumienia." + +#: src/views/Settings.js:976 +msgid "There were some errors in the settings. Settings not saved." +msgstr "Wystąpiły błędy w ustawieniach. Ustawienia nie zostały zapisane." + +#: src/views/Login.js:257 +msgid "There's no login method available." +msgstr "Nie ma dostępnej metody połączenia." + +#: src/views/Publication/Services/Dummy.js:26 +msgid "This is a dummy service that explains to you the concepts of service." +msgstr "Jest to fikcyjna usługa, która wyjaśnia Ci koncepcje usługi." + +#: src/views/Password.js:151 +msgid "This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart.." +msgstr "Niekoniecznie jest to błąd. Jednak ponowne uruchomienie Restreamer Core może potrwać nieco dłużej..." + +#: src/views/Publication/Services/Dummy.js:31 +msgid "This is to mention the copyright regulations for the target of this service." +msgstr "Ma to na celu wspomnieć o zasadach dotyczących praw autorskich dla celu tej usługi." + +#: src/misc/controls/License/index.js:95 +msgid "This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use." +msgstr "Ta licencja umożliwia ponownemu użytkownikowi kopiowanie i rozpowszechnianie materiału w dowolnym medium lub formacie, wyłącznie w nieodpowiedniej formie, pod warunkiem, że twórca zostanie potwierdzony. Licencja pozwala na wykorzystanie komercyjne." + +#: src/misc/controls/License/index.js:102 +msgid "This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator." +msgstr "Niniejsza licencja umożliwia ponownemu kopiowaniu i rozpowszechnianiu materiału w dowolnym medium lub formacie, wyłącznie w nieodpowiedniej formie, do celów niekomercyjnych i pod warunkiem, że twórca zostanie potwierdzony." + +#: src/misc/controls/License/index.js:81 +msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator." +msgstr "Ta licencja umożliwia ponownemu użytkownikowi rozpowszechnianie, remiksowanie, adaptowanie i używanie materiału w dowolnym medium lub formacie wyłącznie do celów niekomercyjnych, pod warunkiem uznania autora za twórcę." + +#: src/misc/controls/License/index.js:88 +msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." +msgstr "Ta licencja umożliwia ponownemu użytkownikowi rozpowszechnianie, remiksowanie, adaptowanie i używanie materiału w dowolnym medium lub formacie wyłącznie do celów niekomercyjnych, pod warunkiem uznania autora za twórcę. Jeśli remiksujesz, adaptujesz lub rozszerzasz materiał, musisz licencjonować zmodyfikowany materiał na identycznych warunkach." + +#: src/misc/controls/License/index.js:67 +msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use." +msgstr "Ta licencja umożliwia ponownemu użytkownikowi rozpowszechnianie, remiksowanie, adaptowanie i używanie materiału w dowolnym medium lub formacie, pod warunkiem, że twórca zostanie potwierdzony. Licencja pozwala na wykorzystanie komercyjne." + +#: src/misc/controls/License/index.js:74 +msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." +msgstr "Ta licencja umożliwia ponownemu użytkownikowi rozpowszechnianie, remiksowanie, adaptowanie i używanie materiału w dowolnym medium lub formacie, pod warunkiem, że twórca zostanie potwierdzony. Licencja pozwala na wykorzystanie komercyjne. Jeśli remiksujesz, adaptujesz lub rozszerzasz materiał, musisz licencjonować zmodyfikowany materiał na identycznych warunkach." + +#: src/views/Edit/Sources/Network.js:435 +msgid "This protocol is unknown or not supported by the available FFmpeg binary." +msgstr "Ten protokół jest nieznany lub nie jest obsługiwany przez dostępne binarki FFmpeg." + +#: src/views/Edit/index.js:639 +msgid "This source cannot be edited while it is in use. To continue, you have to disconnect the source." +msgstr "Tego źródła nie można edytować podczas używania. Aby kontynuować, musisz odłączyć źródło." + +#: src/views/Incompatible.js:21 +msgid "This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary." +msgstr "Ta wersja interfejsu użytkownika nie obsługuje dostępnego pliku binarnego FFmpeg ({0}). Interfejs użytkownika wymaga {1}. Użyj obsługiwanego pliku binarnego FFmpeg." + +#: src/views/Incompatible.js:14 +msgid "This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI." +msgstr "Ta wersja interfejsu użytkownika nie obsługuje podłączonego Core ({0}). Interfejs użytkownika wymaga {1}. Użyj zgodnej wersji interfejsu użytkownika." + +#: src/views/Incompatible.js:10 +msgid "This version of the UI is compatible." +msgstr "Ta wersja interfejsu użytkownika jest zgodna." + +#: src/views/Settings.js:1620 +msgid "Time until an inactive viewer connection is treated as closed." +msgstr "Czas, po którym nieaktywne połączenie widza jest traktowane jako zamknięte." + +#: src/views/Settings.js:1331 +#: src/views/Settings.js:1910 +#: src/views/Settings.js:1958 +msgid "Token" +msgstr "Token" + +#: src/views/Publication/Services/Telegram.js:13 +msgid "Transmit a Livestream to a Telegram Channel." +msgstr "Przekazuj Livestream na kanał Telegram." + +#: src/views/Publication/Services/Image2.js:25 +msgid "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." +msgstr "Przesyłaj migawki z podstawowego źródła do serwera HTTP/S. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/Icecast.js:21 +msgid "Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here." +msgstr "Przesyła kanał audio z głównego źródła do serwera Icecast. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/HLS.js:29 +msgid "Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło jako HTTP-Live-Streaming (HLS) do serwera HTTP/S. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/DASH.js:27 +msgid "Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło w MPEG-DASH do serwera HTTP/S. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/Brightcove.js:15 +msgid "Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło do usługi Brightcove Live. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/CDN77.js:15 +msgid "Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here." +msgstr "Prześlij główne źródło do usługi CDN77 RTMP. Więcej informacji o konfiguracji <0>tutaj." + +#: src/views/Publication/Services/DaCast.js:18 +msgid "Transmit the main source to an DaCast RTMP Service. More about the setup <0>here." +msgstr "Prześlij główne źródło do usługi DaCast RTMP. Więcej informacji o konfiguracji <0>tutaj." + +#: src/views/Publication/Services/MPEGTS.js:27 +msgid "Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here." +msgstr "Prześlij główne źródło do usługi MPEG-TS. Więcej informacji na temat ustawień znajdziesz tutaj <0>tutaj." + +#: src/views/Publication/Services/RTMP.js:24 +msgid "Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło do serwera RTMP(e|s|t|te|ts). Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/RTSP.js:28 +msgid "Transmit the main source to an RTSP Server. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło do serwera RTSP. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/Red5.js:17 +msgid "Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło do serwera Red5/Pro. Więcej szczegółów na temat ustawień znajdziesz <0>tutaj." + +#: src/views/Publication/Services/SRT.js:25 +msgid "Transmit the main source to an SRT Server. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło do serwera SRT. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/UDP.js:23 +msgid "Transmit the main source to an UDP Server. More details about the settings can be found <0>here." +msgstr "Prześlij źródło podstawowe do serwera UDP. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/WOWZA.js:20 +msgid "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło do serwera WOWZA. Więcej szczegółów na temat ustawień znajdziesz <0>tutaj." + +#: src/views/Publication/Services/Core.js:19 +msgid "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." +msgstr "Przekaż źródło podstawowe do datarhei Core Ressource. Więcej szczegółów na temat ustawień można znaleźć <0>tutaj." + +#: src/views/Publication/Services/Livespotting.js:15 +msgid "Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here." +msgstr "Przekaż główne źródło do Ressource livespotting.com. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/Akamai.js:17 +msgid "Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here." +msgstr "Prześlij podstawowe źródło do usługi Akamai (MSL) Media Services Live. Więcej szczegółów na temat ustawień kodera MSL można znaleźć <0>tutaj." + +#: src/views/Publication/Services/Bitmovin.js:15 +msgid "Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here." +msgstr "Prześlij główne źródło do usługi kodowania w chmurze Bitmovin, potężnego narzędzia do przesyłania strumieniowego na żywo. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/Restream.js:18 +msgid "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." +msgstr "Prześlij główne źródło do usługi Restream RTMP. Więcej szczegółów na temat parametrów znajdziesz <0>tutaj." + +#: src/views/Publication/Services/Azure.js:17 +msgid "Transmit to a Azure Media Services. More details can be found <0>here." +msgstr "Przekazać do usługi Azure Media Services. Więcej szczegółów można znaleźć <0>tutaj." + +#: src/views/Publication/Services/Linkedin.js:16 +msgid "Transmit to linkedIn. More details can be found <0>here." +msgstr "Przekazać do linkedIn. Więcej szczegółów można znaleźć <0>tutaj." + +#: src/views/Publication/Services/Owncast.js:15 +msgid "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." +msgstr "Prześlij swój Livestream na serwer Owncast. <0>Tutaj znajdziesz więcej szczegółów dotyczących ustawień." + +#: src/views/Publication/Services/Youtube.js:21 +msgid "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." +msgstr "Przesyła Twój film jako strumień RTMP z wymaganym kluczem wygenerowanym w YouTube Studio. Więcej informacji na temat konfigurowania transmisji na żywo znajdziesz w witrynie <0>Creator Academy YouTube." + +#: src/views/Publication/Services/Twitter.js:20 +msgid "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." +msgstr "Przesyła strumień wideo z wymaganym kluczem, który został wygenerowany w programie Twitter Producer. Więcej informacji na temat konfigurowania transmisji na żywo można znaleźć na stronie <0>Producent Twittera." + +#: src/misc/coders/Encoders/video/X264.js:93 +#: src/misc/coders/Encoders/video/X265.js:93 +msgid "Tune" +msgstr "Tune" + +#: src/views/Edit/Sources/Network.js:488 +#: src/views/Edit/Wizard/Sources/Network.js:77 +msgid "UDP transport" +msgstr "Transport UDP" + +#: src/views/Settings.js:1178 +msgid "Unable to load the config." +msgstr "Nie udało się wczytać konfiguracji." + +#: src/views/Settings.js:1313 +msgid "Unique ident on the service." +msgstr "Unikalny identyfikator w usłudze." + +#: src/views/Main/Egress.js:96 +msgid "Unknown" +msgstr "Nieznany" + +#: src/views/Playersite.js:613 +msgid "Unselected" +msgstr "Nie zaznaczone" + +#: src/views/Playersite.js:498 +#: src/views/Playersite.js:515 +#: src/views/Playersite.js:650 +#: src/views/Publication/Player.js:376 +msgid "Upload" +msgstr "Upload" + +#: src/views/Playersite.js:281 +msgid "Uploading the file failed" +msgstr "Przesyłanie pliku nie powiodło się" + +#: src/views/Publication/Player.js:229 +msgid "Uploading the logo failed" +msgstr "Nie udało się pobrać logo" + +#: src/Footer.js:165 +#: src/misc/Progress.js:51 +#: src/views/Main/Progress.js:59 +msgid "Uptime" +msgstr "Czas operacyjny" + +#: src/views/Login.js:343 +msgid "Use Auth0 for your running Restreamer Core. More <0>details." +msgstr "Użyj Auth0 dla działającego Restreamera Core. Więcej <0>szczegółów." + +#: src/views/Edit/index.js:438 +msgid "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." +msgstr "Użyj kreatora (<0/>) do szybkiej i łatwej konfiguracji lub edytuj (<1/>) źródła bezpośrednio w trybie niestandardowym." + +#: src/views/Edit/Wizard/index.js:1083 +msgid "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." +msgstr "Wykorzystaj swoje prawa autorskie i wybierz odpowiednią licencję na obraz. Bez względu na to, czy jest darmowy dla wszystkich, czy mocno ograniczony. Krótko omów, co inni mogą zrobić z Twoim wizerunkiem." + +#: src/views/Edit/index.js:584 +msgid "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." +msgstr "Wykorzystaj swoje prawa autorskie i wybierz odpowiednią licencję na obraz. Niezależnie od tego, czy jest to licencja bezpłatna, czy bardzo ograniczona. Krótko omów, co inni mogą zrobić z Twoim wizerunkiem." + +#: src/views/Password.js:86 +msgid "User registration" +msgstr "Rejestracja Użytkownika" + +#: src/views/Edit/Sources/Network.js:448 +#: src/views/Edit/Wizard/Sources/Network.js:84 +#: src/views/Login.js:272 +#: src/views/Publication/Services/DASH.js:195 +#: src/views/Publication/Services/DaCast.js:131 +#: src/views/Publication/Services/HLS.js:184 +#: src/views/Publication/Services/RTSP.js:153 +#: src/views/Publication/Services/Red5.js:146 +#: src/views/Publication/Services/WOWZA.js:168 +#: src/views/Settings.js:1510 +#: src/views/Settings.js:1668 +msgid "Username" +msgstr "Login" + +#: src/views/Settings.js:1516 +#: src/views/Settings.js:1676 +msgid "Username for authorization." +msgstr "Nazwa użytkownika do autoryzacji." + +#: src/views/Edit/Sources/Network.js:453 +#: src/views/Edit/Wizard/Sources/Network.js:90 +msgid "Username for the device." +msgstr "Nazwa użytkownika urządzenia." + +#: src/views/Publication/Services/Livespotting.js:88 +msgid "VPU ID" +msgstr "VPU ID" + +#: src/misc/filters/video/VFlip.js:65 +msgid "Vertical Flip" +msgstr "Przerzucanie pionowe" + +#: src/views/Publication/Add.js:451 +msgid "Video" +msgstr "Wideo" + +#: src/views/Edit/Sources/AVFoundation.js:126 +#: src/views/Edit/Sources/Raspicam.js:92 +#: src/views/Edit/Sources/V4L.js:112 +#: src/views/Edit/Wizard/Sources/AVFoundation.js:82 +#: src/views/Edit/Wizard/Sources/Raspicam.js:86 +#: src/views/Edit/Wizard/Sources/V4L.js:105 +msgid "Video device" +msgstr "Urządzenie wideo" + +#: src/views/Edit/Profile.js:333 +#: src/views/Edit/ProfileSummary.js:66 +#: src/views/Publication/Edit.js:490 +msgid "Video settings" +msgstr "Ustawienia wideo" + +#: src/views/Edit/Wizard/index.js:279 +#: src/views/Edit/Wizard/index.js:369 +#: src/views/Edit/Wizard/index.js:611 +msgid "Video setup" +msgstr "Konfiguracja wideo" + +#: src/views/Edit/Sources/VideoAudio.js:45 +msgid "Video source" +msgstr "Źródło wideo" + +#: src/Footer.js:227 +#: src/Footer.js:232 +#: src/Footer.js:245 +#: src/views/Main/Publication.js:173 +msgid "Viewer" +msgstr "Widz" + +#: src/views/Edit/Sources/VirtualAudio.js:187 +#: src/views/Edit/Sources/VirtualVideo.js:206 +msgid "Virtual source" +msgstr "Wirtualne źródło" + +#: src/misc/filters/audio/Volume.js:44 +msgid "Volume" +msgstr "Tom" + +#: src/views/Welcome.js:27 +msgid "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." +msgstr "Witamy w Restreamer v2, rozwiązanie do szybkiego i łatwego publikowania filmów. Bezpłatnie do użytku prywatnego i komercyjnego. Więcej pomocy w <0>dokumentacji." + +#: src/misc/controls/HLS.js:74 +msgid "Where to store the HLS playlist and segments. In-Memory is recommended." +msgstr "Gdzie ma być przechowywana playlista HLS i segmenty. Zalecane jest In-Memory." + +#: src/views/Settings.js:1655 +msgid "Write protection" +msgstr "Ochrona przed zapisem" + +#: src/views/Edit/Sources/VirtualVideo.js:119 +msgid "YUV test pattern" +msgstr "Tabela testowa YUV" + +#: src/views/Edit/Wizard/index.js:1192 +msgid "Yes" +msgstr "Tak" + +#: src/views/Edit/Wizard/index.js:1174 +msgid "You can't abort the wizard because at least one input must be defined." +msgstr "Nie można przerwać kreatora, ponieważ należy zdefiniować co najmniej jeden wpis." + +#: src/views/Settings.js:2192 +msgid "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" +msgstr "Zmieniłeś konfigurację. Aby zmiany odniosły skutek, musisz ponownie uruchomić aplikację. Czy chcesz teraz ponownie uruchomić?" + +#: src/views/Main/index.js:376 +#: src/views/Publication/Process.js:73 +msgid "You have to reconnect manually" +msgstr "Musisz ponownie połączyć się ręcznie" + +#: src/views/Publication/Edit.js:432 +msgid "You have unsaved changes. Please save them before you can control the service again." +msgstr "Masz niezapisane zmiany. Utwórz ich kopię zapasową, zanim będziesz mógł ponownie kontrolować usługę." + +#: src/views/Edit/Wizard/index.js:631 +msgid "Your stream needs to be encoded, but there's no suitable encoder available." +msgstr "Twój strumień musi być zakodowany, ale nie jest dostępny odpowiedni koder." + +#: src/views/Edit/Wizard/index.js:638 +msgid "Your stream needs to be encoded. Choose the desired encoder:" +msgstr "Twój strumień musi być zakodowany. Wybierz żądany koder:" + +#: src/views/Edit/Sources/VirtualAudio.js:114 +msgid "blue" +msgstr "niebieski" + +#: src/views/Edit/Sources/VirtualAudio.js:113 +msgid "brown" +msgstr "brązowy" + +#: src/views/Publication/Player.js:334 +msgid "iframe code" +msgstr "Kod iframe" + +#: src/misc/Progress.js:77 +#: src/views/Main/Progress.js:69 +#: src/views/Main/Publication.js:184 +msgid "kbit/s" +msgstr "kbit/s" + +#: src/views/Edit/Sources/VirtualAudio.js:112 +msgid "pink" +msgstr "różowy" + +#: src/views/Edit/Sources/VirtualAudio.js:116 +msgid "velvet" +msgstr "aksamitny" + +#: src/views/Edit/Sources/VirtualAudio.js:115 +msgid "violet" +msgstr "fioletowy" + +#: src/views/Edit/Sources/VirtualAudio.js:111 +msgid "white" +msgstr "biały" diff --git a/src/locales/pt/messages.js b/src/locales/pt/messages.js index 092b019..272de9a 100644 --- a/src/locales/pt/messages.js +++ b/src/locales/pt/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"<0>Compatibility list":"<0>Lista de compatibilidade","<0>Show probe details":"<0>Mostrar detalhes da sonda","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Ponto final API não encontrado. Configurações não salvas.","AVFoundation":"AVFoundation","Abort":"Abortar","About":"Sobre","Add":"Adicione","Add Publication":"Adicionar Publicação","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Adicione widgets e estilos externos ao site de publicação. Você pode encontrar alguns exemplos na página de ajuda.","Add new channel":"Adicionar novo canal","Add: {0}":["Adicionar: ",["0"]],"Address":"Endereço","Address for the background image.":"Endereço para a imagem de fundo.","Address to listen on for HTTP requests.":"Endereço para ouvir os pedidos HTTP.","Address to listen on for HTTPS requests.":"Endereço para ouvir os pedidos de HTTPS.","Adjust publication site colors and background as you like.":"Ajuste as cores e o fundo do site de publicação como você quiser.","Advanced monitoring":"Monitoramento avançado","Advanced settings":"Configurações avançadas","Advanced setup":"Configuração avançada","Alerting by email":"Alerta por e-mail","All":"Todos","All important system settings.":"Todas as configurações importantes do sistema.","Allow all referrer":"Permitir a todos os encaminhadores","Allow counting how many viewers the stream has.":"Permitir contar quantos espectadores o fluxo tem.","Amplitude":"Amplitude","An environment variable sets this value.":"Uma variável de ambiente define este valor.","App":"App","Application":"Aplicação","Are you sure you want to abort the wizard?":"Você tem certeza de que quer abortar o feiticeiro?","Audio":"Áudio","Audio Device":"Dispositivo de áudio","Audio device":"Dispositivo de áudio","Audio from device":"Áudio do dispositivo","Audio settings":"Configurações de áudio","Audio setup":"Configuração de áudio","Auth0":"Auth0","Auth0 Tenant":"Auth0 Inquilino","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 não está atualmente disponível porque esta interface é carregada a partir de uma origem insegura.","Author":"Autor","Authorization":"Autorização","Automatic cleanup of all media data":"Limpeza automática de todos os dados da mídia","Autoplay":"Autoplay","Available":"Disponível em","Back":"Voltar","Background colors":"Cores de fundo","Background image":"Imagem de fundo","Backup URL":"URL de backup","Backup server":"Servidor de backup","Backup stream":"Fluxo de backup","Backup stream key":"Chave de fluxo de backup","Bandwidth":"Largura de banda","Bandwidth control":"Controle de largura de banda","Banner":"Banner","Basic":"Básico","Beep factor":"Fator Beep","Bitrate":"Taxa de bits","Briefly describe what the audience will see during the live stream.":"Descrever brevemente o que o público verá durante a transmissão ao vivo.","Button color":"Cor do botão","Cache for files on /data.":"Cache para arquivos em /dados.","Cache time (Seconds)":"Tempo de cache (Segundos)","Cache types":"Tipos de cachês","Capture clicks":"Cliques de captura","Capture cursor":"Captura do cursor","Channel \"{0}\" saved":["Canal \"",["0"],"\" salvo"],"Channels":"Canais","Check for updates":"Verificar por atualizações","Check the requirements":"Verifique os requisitos","Choose a video stream":"Escolha um fluxo de vídeo","Choose an audio stream":"Escolha um fluxo de áudio","Choose an input device ...":"Escolha um dispositivo de entrada ...","Choose codec ...":"Escolha o codec ...","Choose tenant ...":"Escolher inquilino ...","Chunk":"Pedaço","Close":"Fechar","Code injection":"Injeção de código","Codec":"Codec","Color":"Cor","Config":"Config","Confirm password":"Confirmar senha","Connect":"Conecte","Connected device":"Dispositivo conectado","Connected since <0/>":"Conectado desde <0/>","Connecting ...":"Conectando ...","Connecting to Restreamer Core ...":"Conectando-se ao Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"A conexão com o Restreamer Core falhou provavelmente por causa do conteúdo misto.","Content":"Conteúdo","Content URL":"Content URL","Cores":"Núcleos","Create user":"Criar usuário","Creative Commons":"Creative Commons","Custom ...":"Personalizado ...","Custom JSON config for datarhei Core.":"Configuração JSON personalizada para datarhei Core.","Custom audio device":"Dispositivo de áudio personalizado","Custom audio index":"Índice de áudio personalizado","Custom bitrate (kbit/s)":"Taxa de bits personalizada (kbit/s)","Custom code injection":"Injeção de código personalizado","Custom delay":"Atraso personalizado","Custom device":"Dispositivo personalizado","Custom format":"Formato personalizado","Custom framerate":"Framerate personalizado","Custom keyframe interval":"Intervalo de chaveiro personalizado","Custom layout":"Layout personalizado","Custom sampling (Hz)":"Amostragem personalizada (Hz)","Custom scale":"Escala personalizada","Custom size":"Tamanho personalizado","Custom video device":"Dispositivo de vídeo personalizado","Custom video index":"Índice de vídeo personalizado","Data copied to clipboard":"Dados copiados para a prancheta","Death color":"Cor da morte","Decoder":"Decodificador","Default":"Predefinição","Delay":"Atraso","Delay (ms)":"Atraso (ms)","Delete":"Excluir","Deleting a publication service cannot be reversed. The publication stops immediately.":"A eliminação de um serviço de publicação não pode ser revertida. A publicação pára imediatamente.","Delivering mode":"Modo de entrega","Description":"Descrição","Design":"Projeto","Device":"Dispositivo","Disconnect":"Desconectar","Disconnect & Continue":"Desconectar e continuar","Disconnecting ...":"Desconectando ...","Disk":"Disco","Disk cache":"Cache de disco","Disk storage":"Armazenamento em disco","Do you really want to restart the application now?":"Você realmente quer reiniciar a aplicação agora?","Do you want to delete \"{0}\"?":["Você quer excluir \"",["0"],"\"?"],"Do you want to delete {title}?":["Você quer apagar ",["título"],"?"],"Do you want to disconnect \"{0}\"?":["Você quer desconectar \"",["0"],"\"?"],"Docs":"Docs","Documentation":"Documentação","Dup. frames":"Molduras Dup","EDIT: Player":"EDIT: Jogador","EDIT: Publication Website":"EDIT: Site de publicação","Edit":"Editar","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Edite as fontes de áudio e vídeo para a transmissão ao vivo. Adicione uma descrição e defina sua licença de conteúdo desejada.","Edit: {title}":["Edição: ",["título"]],"Embed":"Embutir","Enable RTMP server ...":"Habilitar servidor RTMP ...","Enable a periodic beep every second with this value times the carrier frequency":"Habilitar um bip periódico a cada segundo com este valor vezes a freqüência portadora","Enable backup stream":"Habilitar o fluxo de backup","Enable nerd statistics":"Habilitar estatísticas de nerds","Enable primary stream":"Habilitar o fluxo primário","Enable snapshots":"Habilitar instantâneos","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Aconselha-se vivamente a autorização. Caso contrário, qualquer pessoa pode ter acesso a esta instância.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Aconselha-se vivamente que se habilite a auth básica. Caso contrário, qualquer pessoa poderia escrever dados para /memfs.","Encoder":"Codificador","Encoding":"Codificação","Encryption":"Criptografia","Enter a name for the new channel.":"Digite um nome para o novo canal.","Enter password":"Digite a senha","Enter the address of your network source:":"Digite o endereço de sua fonte de rede:","Enter username":"Digite o nome de usuário","Entropy coder":"Codificador de entropia","Error":"Erro","Error while copying data to clipboard":"Erro ao copiar dados para a prancheta","Error: {0}":["Erro: ",["0"]],"Expands the area above the channel list (live chat).":"Expande a área acima da lista de canais (bate-papo ao vivo).","Expands the area under the channel description (comment boxes).":"Expande a área sob a descrição do canal (caixas de comentários).","Expert mode":"Modo especialista","Extend channel list":"Ampliar a lista de canais","Extend content":"Ampliar o conteúdo","Extend footer":"Ampliar o rodapé","Extend header":"Ampliar cabeçalho","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Falha na criação do serviço de publicação (",["0"],")"],"Failed to create publication website files.":"Falha na criação dos arquivos do site de publicação.","Failed to probe the source. Please check the <0>probe details.":"Falha na sondagem da fonte. Por favor, verifique os <0> detalhes da sonda.","Failed to refresh token: {0}":["Falha em atualizar a ficha: ",["0"]],"Failed to save ingest metadata":"Falha em salvar metadados ingeridos","Failed to stop process":"Falha em interromper o processo","Failed to store player size setting.":"Falha no ajuste do tamanho do jogador.","Failed to store publication service ({0})":["Falha no serviço de publicação de lojas (",["0"],")"],"Failed to update ingest process ({0})":["Falha em atualizar o processo de ingestão (",["0"],")"],"Failed to update the player":"Falha na atualização do jogador","Failed to verify the source. Please check the address.":"Falha na verificação da fonte. Por favor, verifique o endereço.","Finish":"Terminar","Flags":"Bandeiras","For Javascripts.":"Para Javascripts.","For Stylesheets.":"Para Fichas de Estilo.","Force input framerate":"Forçar o frame de entrada","Format":"Formato","Frame drops":"Gotas de moldura","Framebuffer":"Framebuffer","Framerate":"Framerate","Frequency (Hz)":"Freqüência (Hz)","GET":"GET","General":"Geral","Google Analytics ID":"Google Analytics ID","Google Analytics Tracker Name":"Nome do Google Analytics Tracker","HLS":"HLS","HLS statistic for the In-memory storage":"Estatísticas HLS para o armazenamento In-memory","HTTP and HTTPS":"HTTP e HTTPS","HTTP port":"Porta HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Porto HTTPS","Hardware device":"Dispositivo de ferragens","Header":"Cabeçalho","Headline":"Manchete","Hosted Restreamer interface":"Interface Restreamer hospedado","Human readable name on the service.":"Nome legível pelo ser humano no serviço.","IP address":"Endereço IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Se você mudou os portos, pode ser que o Restreamer Core já tenha reiniciado, mas agora ele está disponível em um porto diferente.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Se você ativou Let's Encrypt TLS, pode levar algum tempo para adquirir os certificados. Certifique-se de que o Restreamer Core esteja acessível via porta 80 a partir da Internet. Por favor, verifique o log do console do Restreamer Core.","Ignore IP ranges":"Ignorar as faixas de IP","Image URL":"URL da imagem","Imprint":"Impresso","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Além do jogador, o Restreamer oferece uma página de desembarque completa, que você pode usar para apresentar seu stream ao vivo com facilidade e rapidez.","In-memory":"In-memory","In-memory storage":"Armazenamento em memória","Incompatible":"Incompatível","Inherit":"Inerte","Inject 1":"Injetar 1","Inject 2":"Injetar 2","Inject 3":"Injetar 3","Inject 4":"Injetar 4","Internal HLS server":"Servidor interno HLS","Internal RTMP server":"Servidor RTMP interno","Interval (seconds)":"Intervalo (segundos)","Issue alert":"Alerta de emissão","Keyframe interval (seconds)":"Intervalo do quadro-chave (segundos)","Layout":"Layout","Let's Encrypt certification":"Vamos encriptar a certificação","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Vamos Encriptar requer um ou mais nomes de domínio público e uma porta 80/TCP acessível.","Level":"Nível","Level of system protocol.":"Nível de protocolo do sistema.","License":"Licença","Life color":"Cor da vida","Linecolor":"Linecolor","Link":"Link","Link, mouseover":"Link, mouseover","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Lista de faixas de IP na notação CIDR, por exemplo, 127.0.0.0.1/32, que as estatísticas não registrarão uma faixa IP por linha. Deixe em branco para registrar todas as sessões.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Lista de extensões de arquivo para cache (por exemplo, \".html\"), uma por linha. Deixar vazio para o cache de todos os tipos de arquivo.","List size (segments)":"Tamanho da lista (segmentos)","Live-Streaming to Facebook Live RTMP service":"Live-Streaming para o serviço RTMP ao vivo no Facebook","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Live-Streaming para Instagram Live RTMP Service. A chave de fluxo requer um serviço como <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Live-Streaming para Twitch Live RTMP Service.","Live-Streaming to Vimeo Live RTMP Service":"Live-Streaming para Vimeo Live RTMP Service","Livesource ID":"Identificação de fonte de vida","Log level":"Nível de log","Logging":"Logging","Login":"Login","Login failed: Couldn't load API details":"O login falhou: Não foi possível carregar detalhes API","Login failed: {0}":["O login falhou: ",["0"]],"Login/JWT authorization":"Login/JWT autorização","Logo":"Logotipo","Logout":"Logout","MB":"MB","Main Source":"Fonte principal","Main channel":"Canal principal","Main channel not found":"Canal principal não encontrado","Main channel saved":"Canal principal salvo","Main page channel (index.html).":"Canal da página principal (index.html).","Maintainer:":"Mantenedor:","Maximum allowed cache size, 0 for unlimited.":"Tamanho máximo de cache permitido, 0 para ilimitado.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Máximo permitido de megabytes de RAM para /memfs, 0 para ilimitado.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Consumo máximo permitido de megabytes a partir do disco rígido. 0 por ilimitado.","Maximum bandwidth Mbit/s":"Largura de banda máxima Mbit/s","Maximum delay in milliseconds.":"Atraso máximo em milissegundos.","Maximum file size (Megabytes)":"Tamanho máximo do arquivo (Megabytes)","Maximum file size to put in cache.":"Tamanho máximo de arquivo para colocar em cache.","Maximum log histroy":"Histórico log máximo","Maximum log lines":"Máximo de linhas de toras","Maximum size (Megabytes)":"Tamanho máximo (Megabytes)","Maximum viewer idle time (Seconds)":"Tempo máximo de ociosidade do espectador (segundos)","Maximum viewers":"Máximo de espectadores","Memory":"Memória","Meta information":"Meta informação","Metadata":"Metadados","Mold":"Molde","More about Twitter's copyright <0>here.":"Mais sobre os direitos autorais do Twitter <0>aqui.","More about YouTube's copyright <0>here.":"Mais sobre os direitos autorais do YouTube <0>aqui.","More about licenses here":"Mais sobre licenças aqui","More about the service":"Mais sobre o serviço","Mute":"Mudo","Name":"Nome","Name for the template. If the name already exists, it will be overwritten.":"Nome para o modelo. Se o nome já existir, ele será sobregravado.","Network":"Rede","Network source":"Fonte da rede","Next":"Próximo","Next: Audio":"A seguir: Áudio","Next: Video setup":"A seguir: Configuração do vídeo","No":"Não","No audio":"Sem áudio","No audio stream available":"Nenhum fluxo de áudio disponível","No input device available":"Nenhum dispositivo de entrada disponível","No live stream was detected. Please check the software that sends the stream.":"Nenhum fluxo vivo foi detectado. Por favor, verifique o software que envia o fluxo.","No source selected":"Nenhuma fonte selecionada","No sources available":"Não há fontes disponíveis","No suitable encoder found.":"Não foi encontrado nenhum codificador adequado.","No video":"Nenhum vídeo","No video stream available":"Nenhum fluxo de vídeo disponível","Node ID":"Identificação do nó","Noise":"Ruído","None":"Nenhum","Notes":"Notas","Number of log lines to keep.":"Número de linhas de registro a manter.","Number of logs to keep for each process.":"Número de logs a serem mantidos para cada processo.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Uma referência por linha, por exemplo http://www.example.com","Open":"Aberto","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"A passagem (cópia) só deve ser desativada se necessário. Cada codificação requer recursos adicionais de CPU/GPU.","Password":"Senha","Password for authorization.":"Senha para autorização.","Password for the device.":"Senha para o dispositivo.","Persist viewer statistics":"Estatísticas persistentes dos telespectadores","Pixel format":"Formato Pixel","Plan: <0>Starter":"Plano: <0>Iniciador","Platforms":"Plataformas","Playback":"Reprodução","Player":"Jogador","Player URL":"URL do jogador","Player settings saved":"Configurações do jogador salvas","Playersite":"Playersite","Playlist":"Lista de reprodução","Please check the <0>process log":"Por favor, verifique o <0>log de processo","Please contact the operator of the service and check what happens.":"Favor contatar o operador do serviço e verificar o que acontece.","Please select a file to upload.":"Por favor, selecione um arquivo para carregar.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Favor utilizar \"Passthrough (cópia)\", se possível. A codificação requer recursos adicionais de CPU/GPU.","Please wait. Probe stream data ...":"Por favor, aguarde. Dados do fluxo da sonda ...","Please wait. Setting up the stream ...":"Por favor, aguarde. Preparando o fluxo ...","Port":"Porto","Position":"Posição","Preset":"Predefinição","Primary stream":"Fluxo primário","Primary stream key":"Chave de fluxo primário","Probe":"Sonda","Process":"Processo","Process control":"Controle de processo","Process debug":"Processo de depuração","Process debug report":"Relatório de depuração do processo","Process details":"Detalhes do processo","Process report":"Relatório de processo","Processing & Control":"Processamento e controle","Profile":"Perfil","Protocol":"Protocolo","Protocols":"Protocolos","Public domain/s":"Domínio público/s","Publication service not found":"Serviço de publicação não encontrado","Publication website settings saved":"Configurações do site de publicação salvas","Publications":"Publicações","Pull Mode":"Modo Puxar","Pull or recieve the data:":"Puxar ou receber os dados:","Quality":"Qualidade","RGB test pattern":"Padrão de teste RGB","RTMP app for publishing.":"Aplicação RTMP para publicação.","RTMP server":"Servidor RTMP","RTMP server is not enabled":"O servidor RTMP não está habilitado","RTMP server listen address.":"Endereço de escuta do servidor RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Ficha RTMP para publicação e reprodução. O token é o valor do parâmetro de consulta de URL 'token'","RTMP/S":"RTMP/S","RTMPS server":"Servidor RTMPS","RTSP":"RTSP","Raspberry Pi camera":"Câmera Raspberry Pi","Rate control":"Controle de tarifas","Ratio":"Relação","Read input at native speed":"Ler a entrada em velocidade nativa","Receive Mode":"Modo Receber","Reconnect":"Reconecte","Reconnect delay (seconds)":"Retardo de reconexão (segundos)","Reconnecting in {0}s":["Reconexão em ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["A reconexão ao Restreamer Core falhou durante os últimos ",["RETRIES"]," segundos."],"Reconnecting to Restreamer Core failed.":"A reconexão com o Restreamer Core falhou.","Refresh":"Atualização","Region":"Região","Reload":"Recarregar","Remove the oldest entries if the /memfs is full":"Remover as entradas mais antigas se o /memfs estiver cheio","Requires activation":"Requer ativação","Restart":"Reinicie","Restart required":"Reinício necessário","Restarting":"Reinicialização","Restarting Restreamer Core ...":"Reiniciando o Núcleo de Restreamer ...","Restarting the application failed.":"A reinicialização do pedido falhou.","Restreamer Service":"Serviço de Restreamer","Retrieving stream data ...":"Recuperando dados do fluxo ...","Retry":"Tentativa","Rule":"Regra","Sampling":"Amostragem","Save":"Salvar","Scale":"Escala","Seconds to keep files in cache.":"Segundos para manter os arquivos em cache.","Seconds until a process is restarted.":"Segundos até que um processo seja reiniciado.","Seconds until a staled process is terminated.":"Segundos até o término de um processo parado.","Seconds until the snapshot/thumbnail of the video source is updated.":"Segundos até que o instantâneo/imagem da fonte de vídeo seja atualizado.","Security":"Segurança","Security token":"Ficha de segurança","Seekbar color":"Cor da barra de busca","Segment length (seconds)":"Comprimento do segmento (segundos)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"O segmento será cortado no seguinte quadro-chave após este tempo ter passado. 2 é recomendado.","Segmentation":"Segmentação","Select a device:":"Selecione um dispositivo:","Select audio source:":"Selecione a fonte de áudio:","Select source ...":"Selecione a fonte ...","Select video source:":"Selecione a fonte de vídeo:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Selecione se você puxa o fluxo de uma <0> fonte de rede (como uma câmera de rede) ou o <1> servidor RTMP interno (por exemplo, fluxos OBS para o Restreamer).","Select your encoding setting:":"Selecione sua configuração de codificação:","Selected":"Selecionado","Selected channel":"Canal selecionado","Selection":"Seleção","Send anonymous metrics (helps us for future development)":"Enviar métricas anônimas (nos ajuda para o desenvolvimento futuro)","Send stream to this address:":"Enviar fluxo para este endereço:","Send video to Framebuffer":"Enviar vídeo para Framebuffer","Server":"Servidor","Service":"Serviço","Service name":"Nome do serviço","Service token for monitoring.":"Ficha de serviço para monitoramento.","Sessions":"Sessões","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Define um limite de largura de banda em Mbit por segundo para a transferência de dados HLS de saída. Todos os serviços, tais como RTMP e processos de saída, são incluídos no cálculo. Se a largura de banda for excedida, os visualizadores de HLS recebem o código de status HTTP 509 (Limite de Largura de Banda Excedido). 0 é ilimitado.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Define um limite de visualização para as sessões de HLS. Se o limite for excedido, os espectadores de HLS recebem o código de status HTTP 509 (Limite de Largura de Banda Excedido). 0 é ilimitado.","Setting for connection to the service.":"Configuração para conexão com o serviço.","Settings":"Configurações","Settings (expert mode)":"Configurações (modo especialista)","Settings for /data path. The access is protected by":"Configurações para /dados de caminho. O acesso é protegido por","Settings for /memfs path.":"Configurações para /memfs caminho.","Settings saved. All changes will be applied after restarting the application.":"Configurações salvas. Todas as mudanças serão aplicadas após reiniciar a aplicação.","Share button":"Botão compartilhar","Shows a reference to the project.":"Mostra uma referência ao projeto.","Sign up (free)":"Cadastre-se (gratuito)","Silence":"Silêncio","Silence Audio":"Áudio do silêncio","Sine":"Sine","Sitename":"Nome do Sitename","Size":"Tamanho","Snapshot":"Snapshot","Social-login (OAuth2, 2FA)":"Login social (OAuth2, 2FA)","Socket timeout (microseconds)":"Tempo limite da tomada (microssegundos)","Software":"Software","Source":"Fonte","Speed":"Velocidade","Stale timeout (seconds)":"Tempo esgotado (segundos)","Statistics":"Estatísticas","Storage":"Armazenamento","Stores the viewer statistics to the disk.":"Armazena as estatísticas do telespectador no disco.","Stream":"Corrente","Stream URL":"URL do fluxo","Stream key":"Chave do fluxo","Stream name":"Nome do riacho","Stream names":"Nomes dos fluxos","Support datarhei Restreamer":"Suporte datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Suporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT e muito mais.","System":"Sistema","Template":"Modelo","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Modelo a ser utilizado para a criação do site de publicação. O botão apagar remove a seleção do sistema.","Terms":"Termos","Test pattern":"Padrão de teste","Test pattern (extended)":"Padrão de teste (estendido)","Text colors":"Cores do texto","The amplitude (0.0 - 1.0) of the generated audio stream":"A amplitude (0,0 - 1,0) do fluxo de áudio gerado","The application is using an older version of the settings.":"A aplicação está usando uma versão mais antiga das configurações.","The bitrate of the audio stream.":"A taxa de bits do fluxo de áudio.","The carrier frequency":"A freqüência portadora","The channel \"{0}\" could not be deleted":["O canal \"",["0"],"\" não pôde ser excluído"],"The channel \"{0}\" has been deleted":["O canal \"",["0"],"\" foi excluído"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"A eliminação deste canal não pode ser recuperada. Todas as publicações deste canal serão removidas.","The input profile is not complete. Please define a video and audio source.":"O perfil de entrada não está completo. Por favor, defina uma fonte de vídeo e áudio.","The layout of the audio stream.":"O layout do fluxo de áudio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"O número máximo de segmentos da playlist. 0 conterá todos os segmentos. 6 é recomendado.","The noise color":"A cor do ruído","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"A pessoa que associou uma obra a esta escritura dedicou a obra ao domínio público, renunciando a todos os seus direitos à obra em todo o mundo sob a lei de direitos autorais, incluindo todos os direitos conexos e vizinhos, na medida do permitido por lei. Você pode copiar, modificar, distribuir e executar a obra, mesmo para fins comerciais, tudo sem pedir permissão.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"O nome de domínio acessível ao público do host em que este Restreamer está funcionando. Separe vários nomes de domínio por uma vírgula.","The publication service \"{0}\" could not be deleted":["O serviço de publicação \"",["0"],"\" não pôde ser excluído"],"The publication service \"{0}\" has been created":["Foi criado o serviço de publicação \"",["0"],"\""],"The publication service \"{0}\" has been deleted":["O serviço de publicação \"",["0"],"\" foi eliminado"],"The publication service has been created":"O serviço de publicação foi criado","The sample rate of the audio stream.":"A taxa de amostragem do fluxo de áudio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["O arquivo selecionado é muito grande (",["0"]," bytes). Somente ",["1"]," bytes são permitidos."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["O tipo de arquivo selecionado (",["0"],") não é permitido. Os tipos de arquivo permitidos são ",["types"],"."],"The settings for \"{0}\" have been saved":["As configurações para \"",["0"],"\" foram salvas"],"The source doesn't provide any audio streams.":"A fonte não fornece nenhum fluxo de áudio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"A fonte não fornece nenhum fluxo de áudio. Por favor, verifique os detalhes da <0>probe.","The source doesn't provide any compatible audio streams.":"A fonte não fornece nenhum fluxo de áudio compatível.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"A fonte não fornece nenhuma transmissão de vídeo compatível. Por favor, verifique as <0>requisitos.","The source doesn't provide any video streams. Please check the <0>probe details.":"A fonte não fornece nenhuma transmissão de vídeo. Por favor, verifique os detalhes da <0>probe.","The source doesn't provide any video streams. Please check the device.":"A fonte não fornece nenhuma transmissão de vídeo. Por favor, verifique o dispositivo.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"A fonte de vídeo não fornece nenhum fluxo de áudio compatível. <0>Silêncio de áudio é recomendado. Serviços como, por exemplo, YouTube, Facebook & Co. requerem um canal de áudio.","The video source is compatible. Select the desired resolution:":"A fonte de vídeo é compatível. Selecione a resolução desejada:","There are updates available. Here you get more information.":"Há atualizações disponíveis. Aqui você obtém mais informações.","There was a problem storing the settings. Settings not saved.":"Havia um problema no armazenamento das configurações. As configurações não foram salvas.","There was an error connecting to Restreamer Core at {0}.":["Houve um erro de conexão com o Restreamer Core em ",["0"],"."],"There was an error during upload: {0}":["Houve um erro durante o upload: ",["0"]],"There was an error setting up the stream.":"Houve um erro ao configurar o fluxo.","There were some errors in the settings. Settings not saved.":"Houve alguns erros nas configurações. As configurações não foram salvas.","There's no login method available.":"Não há nenhum método de login disponível.","This is a dummy service that explains to you the concepts of service.":"Este é um serviço fictício que explica a você os conceitos de serviço.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Isto não é necessariamente um erro. Entretanto, pode levar um pouco mais de tempo para que o Restreamer Core reinicie.","This is to mention the copyright regulations for the target of this service.":"Isto para mencionar os regulamentos de direitos autorais para o alvo deste serviço.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Esta licença permite aos reutilizadores copiar e distribuir o material em qualquer meio ou formato apenas de forma desadaptada, e apenas enquanto a atribuição for dada ao criador. A licença permite o uso comercial.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Esta licença permite aos reutilizadores copiar e distribuir o material em qualquer meio ou formato apenas de forma não adaptada, apenas para fins não comerciais, e apenas enquanto a atribuição for dada ao criador.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato apenas para fins não comerciais, e apenas enquanto a atribuição for dada ao criador.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato apenas para fins não comerciais, e apenas enquanto a atribuição for dada ao criador. Se você remixar, adaptar ou construir sobre o material, você deve licenciar o material modificado sob termos idênticos.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato, desde que a atribuição seja dada ao criador. A licença permite o uso comercial.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato, desde que a atribuição seja dada ao criador. A licença permite o uso comercial. Se você remixar, adaptar, ou construir sobre o material, você deve licenciar o material modificado sob termos idênticos.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Esta fonte não pode ser editada enquanto estiver em uso. Para continuar, você tem que desconectar a fonte.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Esta versão da IU não suporta o binário FFmpeg disponível (",["0"],"). A interface de usuário requer ",["1"],". Por favor, use um binário FFmpeg compatível."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Esta versão da IU não suporta o Núcleo conectado (",["0"],"). A interface de usuário requer ",["1"],". Por favor, use uma versão compatível da IU."],"This version of the UI is compatible.":"Esta versão da IU é compatível.","Time until an inactive viewer connection is treated as closed.":"Tempo até que uma conexão inativa do visor seja tratada como fechada.","Token":"Token","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmitir instantâneos da fonte principal para um servidor HTTP/S. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Transmitir o canal de áudio da fonte principal para um servidor Icecast. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal como HTTP-Live-Streaming (HLS) para um servidor HTTP/S. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal como MPEG-DASH para um servidor HTTP/S. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Transmitir a fonte principal a um Serviço Brightcove Live. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Transmitir a fonte principal para um Serviço CDN77 RTMP. Mais sobre a configuração <0>aqui.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Transmitir a fonte principal a um Serviço DaCast RTMP. Mais sobre a configuração <0>aqui.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Transmitir a fonte principal para um serviço MPEG-TS. Mais detalhes sobre as configurações podem ser encontrados aqui <0>aqui.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Transmita a fonte principal para um servidor RTMP(e|s|t|te|ts). Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um servidor RTSP. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um Servidor Red5/Pro. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um servidor SRT. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um servidor UDP. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um servidor WOWZA. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Transmitir a fonte principal a um datarhei Core Ressource. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Transmitir a fonte principal a um livepotting.com Ressource. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Transmita a fonte principal para a Akamai (MSL) Media Services Live. Mais detalhes sobre as configurações do codificador MSL podem ser encontrados em <0>here.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Transmitir a fonte principal para o serviço de codificação em nuvem Bitmovin, uma ferramenta poderosa para o streaming ao vivo. Mais detalhes sobre as configurações podem ser encontrados em <0>here.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Transmitir a fonte principal para o Serviço RTMP da Restream. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Transmite seu vídeo como um fluxo RTMP com a chave necessária gerada no YouTube Studio. Você pode encontrar mais informações sobre a criação de um stream ao vivo no YouTube <0>Creator Academy.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Transmite seu fluxo de vídeo com a chave necessária, que foi gerada no Twitter Producer. Você pode encontrar mais informações sobre a configuração de um fluxo ao vivo no Twitter's <0>Produtor.","Tune":"Tune","UDP transport":"Transporte UDP","Unable to load the config.":"Incapaz de carregar a configuração.","Unique ident on the service.":"Identidade única no serviço.","Unknown":"Desconhecido","Unselected":"Não selecionado","Upload":"Upload","Uploading the file failed":"O upload do arquivo falhou","Uploading the logo failed":"O carregamento do logotipo falhou","Uptime":"Horário de funcionamento","Use Auth0 for your running Restreamer Core. More <0>details.":"Use o Auth0 para seu Restreamer Core em funcionamento. Mais <0>detalhes.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Use o assistente (<0/>) para uma configuração rápida e fácil, ou edite (<1/>) as fontes diretamente no modo personalizado.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use seus direitos autorais e escolha a licença de imagem correta. Seja gratuita para todos ou altamente restrita. Discuta brevemente o que outros estão autorizados a fazer com sua imagem.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use seus direitos autorais e escolha a licença de imagem correta. Seja gratuita para todos ou altamente restrita. Discuta brevemente o que outros estão autorizados a fazer com sua imagem.","User registration":"Registro de usuário","Username":"Nome de usuário","Username for authorization.":"Nome de usuário para autorização.","Username for the device.":"Nome de usuário para o dispositivo.","VPU ID":"ID DA VPU","Video":"Vídeo","Video device":"Dispositivo de vídeo","Video settings":"Configurações de vídeo","Video setup":"Configuração do vídeo","Video source":"Fonte do vídeo","Viewer":"Visualizador","Virtual source":"Fonte virtual","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Bem-vindo à Restreamer v2, a solução para a publicação rápida e fácil de vídeos. Grátis para uso privado e comercial. Mais ajuda no <0>docs.","Write protection":"Proteção de escrita","YUV test pattern":"Padrão de teste YUV","Yes":"Sim","You can't abort the wizard because at least one input must be defined.":"Você não pode abortar o assistente porque pelo menos uma entrada deve ser definida.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Você mudou a configuração. Para que as mudanças tenham efeito, você tem que reiniciar a aplicação. Você quer reiniciar agora?","You have to reconnect manually":"Você tem que reconectar manualmente","You have unsaved changes. Please save them before you can control the service again.":"Você tem mudanças não salvas. Por favor, salve-as antes de poder controlar o serviço novamente.","Your stream needs to be encoded, but there's no suitable encoder available.":"Seu fluxo precisa ser codificado, mas não há um codificador adequado disponível.","Your stream needs to be encoded. Choose the desired encoder:":"Seu fluxo precisa ser codificado. Escolha o codificador desejado:","blue":"azul","brown":"marrom","iframe code":"código iframe","kbit/s":"kbit/s","pink":"rosa","velvet":"veludo","violet":"violeta","white":"branco"}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"6 (+ guaranteed to start with a Key frame)":"6 (+ garantia de começar com um quadro chave)","7 (+ fragmented MP4 format)":"7 (+ formato MP4 fragmentado)","<0>Compatibility list":"<0>Lista de compatibilidade","<0>Show probe details":"<0>Mostrar detalhes da sonda","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Ponto final API não encontrado. Configurações não salvas.","AVFoundation":"AVFoundation","Abort":"Abortar","About":"Sobre","Add":"Adicione","Add Publication":"Adicionar Publicação","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Adicione widgets e estilos externos ao site de publicação. Você pode encontrar alguns exemplos na página de ajuda.","Add new channel":"Adicionar novo canal","Add: {0}":["Adicionar: ",["0"]],"Address":"Endereço","Address for the background image.":"Endereço para a imagem de fundo.","Address to listen on for HTTP requests.":"Endereço para ouvir os pedidos HTTP.","Address to listen on for HTTPS requests.":"Endereço para ouvir os pedidos de HTTPS.","Adjust publication site colors and background as you like.":"Ajuste as cores e o fundo do site de publicação como você quiser.","Advanced monitoring":"Monitoramento avançado","Advanced settings":"Configurações avançadas","Advanced setup":"Configuração avançada","AirPlay":"AirPlay","Alerting by email":"Alerta por e-mail","All":"Todos","All important system settings.":"Todas as configurações importantes do sistema.","Allow all referrer":"Permitir a todos os encaminhadores","Allow counting how many viewers the stream has.":"Permitir contar quantos espectadores o fluxo tem.","Amplitude":"Amplitude","An environment variable sets this value.":"Uma variável de ambiente define este valor.","App":"App","Application":"Aplicação","Are you sure you want to abort the wizard?":"Você tem certeza de que quer abortar o feiticeiro?","Audio":"Áudio","Audio Device":"Dispositivo de áudio","Audio device":"Dispositivo de áudio","Audio from device":"Áudio do dispositivo","Audio settings":"Configurações de áudio","Audio setup":"Configuração de áudio","Auth0":"Auth0","Auth0 Tenant":"Auth0 Inquilino","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 não está atualmente disponível porque esta interface é carregada a partir de uma origem insegura.","Author":"Autor","Authorization":"Autorização","Automatic cleanup of all media data":"Limpeza automática de todos os dados da mídia","Autoplay":"Autoplay","Available":"Disponível em","Back":"Voltar","Background colors":"Cores de fundo","Background image":"Imagem de fundo","Backup URL":"URL de backup","Backup server":"Servidor de backup","Backup stream":"Fluxo de backup","Backup stream key":"Chave de fluxo de backup","Bandwidth":"Largura de banda","Bandwidth control":"Controle de largura de banda","Banner":"Banner","Basic":"Básico","Beep factor":"Fator Beep","Bitrate":"Taxa de bits","Briefly describe what the audience will see during the live stream.":"Descrever brevemente o que o público verá durante a transmissão ao vivo.","Button color":"Cor do botão","Cache for files on /data.":"Cache para arquivos em /dados.","Cache time (Seconds)":"Tempo de cache (Segundos)","Cache types":"Tipos de cachês","Capture clicks":"Cliques de captura","Capture cursor":"Captura do cursor","Channel \"{0}\" saved":["Canal \"",["0"],"\" salvo"],"Channels":"Canais","Check for updates":"Verificar por atualizações","Check the requirements":"Verifique os requisitos","Choose a video stream":"Escolha um fluxo de vídeo","Choose an audio stream":"Escolha um fluxo de áudio","Choose an input device ...":"Escolha um dispositivo de entrada ...","Choose codec ...":"Escolha o codec ...","Choose tenant ...":"Escolher inquilino ...","Chromecast":"Chromecast","Chunk":"Pedaço","Close":"Fechar","Code injection":"Injeção de código","Codec":"Codec","Color":"Cor","Config":"Config","Confirm password":"Confirmar senha","Connect":"Conecte","Connected device":"Dispositivo conectado","Connected since <0/>":"Conectado desde <0/>","Connecting ...":"Conectando ...","Connecting to Restreamer Core ...":"Conectando-se ao Restreamer Core ...","Connecting to Restreamer Core failed probably because of mixed content.":"A conexão com o Restreamer Core falhou provavelmente por causa do conteúdo misto.","Content":"Conteúdo","Content URL":"URL do conteúdo","Cores":"Núcleos","Create user":"Criar usuário","Creative Commons":"Creative Commons","Custom ...":"Personalizado ...","Custom JSON config for datarhei Core.":"Configuração JSON personalizada para datarhei Core.","Custom audio device":"Dispositivo de áudio personalizado","Custom audio index":"Índice de áudio personalizado","Custom bitrate (kbit/s)":"Taxa de bits personalizada (kbit/s)","Custom code injection":"Injeção de código personalizado","Custom delay":"Atraso personalizado","Custom device":"Dispositivo personalizado","Custom format":"Formato personalizado","Custom framerate":"Framerate personalizado","Custom keyframe interval":"Intervalo de chaveiro personalizado","Custom layout":"Layout personalizado","Custom sampling (Hz)":"Amostragem personalizada (Hz)","Custom scale":"Escala personalizada","Custom size":"Tamanho personalizado","Custom video device":"Dispositivo de vídeo personalizado","Custom video index":"Índice de vídeo personalizado","Data copied to clipboard":"Dados copiados para a prancheta","Death color":"Cor da morte","Decibels (dB)":"Decibéis (dB)","Decoder":"Decodificador","Default":"Predefinição","Delay":"Atraso","Delay (ms)":"Atraso (ms)","Delete":"Excluir","Deleting a publication service cannot be reversed. The publication stops immediately.":"A eliminação de um serviço de publicação não pode ser revertida. A publicação pára imediatamente.","Delivering mode":"Modo de entrega","Description":"Descrição","Design":"Projeto","Device":"Dispositivo","Disconnect":"Desconectar","Disconnect & Continue":"Desconectar e continuar","Disconnecting ...":"Desconectando ...","Disk":"Disco","Disk cache":"Cache de disco","Disk storage":"Armazenamento em disco","Do you really want to restart the application now?":"Você realmente quer reiniciar a aplicação agora?","Do you want to delete \"{0}\"?":["Você quer excluir \"",["0"],"\"?"],"Do you want to delete {title}?":["Você quer apagar ",["título"],"?"],"Do you want to disconnect \"{0}\"?":["Você quer desconectar \"",["0"],"\"?"],"Docs":"Docs","Documentation":"Documentação","Dup. frames":"Molduras Dup","EDIT: Player":"EDIT: Jogador","EDIT: Publication Website":"EDIT: Site de publicação","EXT-X-VERSION":"EXT-X-VERSION","Edit":"Editar","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Edite as fontes de áudio e vídeo para a transmissão ao vivo. Adicione uma descrição e defina sua licença de conteúdo desejada.","Edit: {title}":["Edição: ",["título"]],"Embed":"Embutir","Enable":"Habilitar","Enable RTMP server ...":"Habilitar servidor RTMP ...","Enable SRT server ...":"Habilitar servidor SRT ...","Enable a periodic beep every second with this value times the carrier frequency":"Habilitar um bip periódico a cada segundo com este valor vezes a freqüência portadora","Enable backup stream":"Habilitar o fluxo de backup","Enable nerd statistics":"Habilitar estatísticas de nerds","Enable now":"Habilitar agora","Enable primary stream":"Habilitar o fluxo primário","Enable snapshots":"Habilitar instantâneos","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Aconselha-se vivamente a autorização. Caso contrário, qualquer pessoa pode ter acesso a esta instância.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Aconselha-se vivamente que se habilite a auth básica. Caso contrário, qualquer pessoa poderia escrever dados para /memfs.","Encoder":"Codificador","Encoding":"Codificação","Encryption":"Criptografia","Enter a name for the new channel.":"Digite um nome para o novo canal.","Enter password":"Digite a senha","Enter the address of your network source:":"Digite o endereço de sua fonte de rede:","Enter username":"Digite o nome de usuário","Entropy coder":"Codificador de entropia","Error":"Erro","Error while copying data to clipboard":"Erro ao copiar dados para a prancheta","Error: {0}":["Erro: ",["0"]],"Expands the area above the channel list (live chat).":"Expande a área acima da lista de canais (bate-papo ao vivo).","Expands the area under the channel description (comment boxes).":"Expande a área sob a descrição do canal (caixas de comentários).","Expert mode":"Modo especialista","Extend channel list":"Ampliar a lista de canais","Extend content":"Ampliar o conteúdo","Extend footer":"Ampliar o rodapé","Extend header":"Ampliar cabeçalho","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Falha na criação do serviço de publicação (",["0"],")"],"Failed to create publication website files.":"Falha na criação dos arquivos do site de publicação.","Failed to probe the source. Please check the <0>probe details.":"Falha na sondagem da fonte. Por favor, verifique os <0> detalhes da sonda.","Failed to refresh token: {0}":["Falha em atualizar a ficha: ",["0"]],"Failed to save ingest metadata":"Falha em salvar metadados ingeridos","Failed to stop process":"Falha em interromper o processo","Failed to store player size setting.":"Falha no ajuste do tamanho do jogador.","Failed to store publication service ({0})":["Falha no serviço de publicação de lojas (",["0"],")"],"Failed to update ingest process ({0})":["Falha em atualizar o processo de ingestão (",["0"],")"],"Failed to update ingest snapshot process ({0})":["Falha na atualização do processo de ingestão de instantâneos (",["0"],")"],"Failed to update the player":"Falha na atualização do jogador","Failed to update the playersite":"Falha na atualização do site do jogador","Failed to verify the source. Please check the address.":"Falha na verificação da fonte. Por favor, verifique o endereço.","Filter":"Filtro","Finish":"Terminar","Flags":"Bandeiras","For Javascripts.":"Para Javascripts.","For Stylesheets.":"Para Fichas de Estilo.","Force input framerate":"Forçar o frame de entrada","Format":"Formato","Frame drops":"Gotas de moldura","Framebuffer":"Framebuffer","Framerate":"Framerate","Frequency (Hz)":"Freqüência (Hz)","GET":"GET","General":"Geral","Google Analytics ID":"Google Analytics ID","Google Analytics Tracker Name":"Nome do Google Analytics Tracker","HLS":"HLS","HLS output":"Saída HLS","HLS server":"Servidor HLS","HLS statistic for the In-memory storage":"Estatísticas HLS para o armazenamento In-memory","HTTP and HTTPS":"HTTP e HTTPS","HTTP port":"Porta HTTP","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"Porto HTTPS","Hardware device":"Dispositivo de ferragens","Header":"Cabeçalho","Headline":"Manchete","Horizontal Flip":"Horizontal Flip","Hosted Restreamer interface":"Interface Restreamer hospedado","Human readable name on the service.":"Nome legível pelo ser humano no serviço.","IP address":"Endereço IP","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Se você mudou os portos, pode ser que o Restreamer Core já tenha reiniciado, mas agora ele está disponível em um porto diferente.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Se você ativou Let's Encrypt TLS, pode levar algum tempo para adquirir os certificados. Certifique-se de que o Restreamer Core esteja acessível via porta 80 a partir da Internet. Por favor, verifique o log do console do Restreamer Core.","Ignore IP ranges":"Ignorar as faixas de IP","Image URL":"URL da imagem","Imprint":"Impresso","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"Além do jogador, o Restreamer oferece uma página de desembarque completa, que você pode usar para apresentar seu stream ao vivo com facilidade e rapidez.","In-memory":"In-memory","In-memory storage":"Armazenamento em memória","Incompatible":"Incompatível","Inherit":"Inerte","Inject 1":"Injetar 1","Inject 2":"Injetar 2","Inject 3":"Injetar 3","Inject 4":"Injetar 4","Interval (seconds)":"Intervalo (segundos)","Issue alert":"Alerta de emissão","Keyframe interval (seconds)":"Intervalo do quadro-chave (segundos)","Layout":"Layout","Let's Encrypt certification":"Vamos encriptar a certificação","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Vamos Encriptar requer um ou mais nomes de domínio público e uma porta 80/TCP acessível.","Level":"Nível","Level of system protocol.":"Nível de protocolo do sistema.","License":"Licença","Life color":"Cor da vida","Linecolor":"Linecolor","Link":"Link","Link, mouseover":"Link, mouseover","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Lista de faixas de IP na notação CIDR, por exemplo, 127.0.0.0.1/32, que as estatísticas não registrarão uma faixa IP por linha. Deixe em branco para registrar todas as sessões.","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Lista de extensões de arquivo para cache (por exemplo, \".html\"), uma por linha. Deixar vazio para o cache de todos os tipos de arquivo.","List size (segments)":"Tamanho da lista (segmentos)","Live-Streaming to Facebook Live RTMP service":"Live-Streaming para o serviço RTMP ao vivo no Facebook","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Live-Streaming para Instagram Live RTMP Service. A chave de fluxo requer um serviço como <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Live-Streaming para Twitch Live RTMP Service.","Live-Streaming to Vimeo Live RTMP Service":"Live-Streaming para Vimeo Live RTMP Service","Livesource ID":"Identificação de fonte de vida","Log level":"Nível de log","Logging":"Logging","Login":"Login","Login failed: Couldn't load API details":"O login falhou: Não foi possível carregar detalhes API","Login failed: {0}":["O login falhou: ",["0"]],"Login/JWT authorization":"Login/JWT autorização","Logo":"Logotipo","Logout":"Logout","Loudness Normalization":"Normalização do ruído","MB":"MB","Main Source":"Fonte principal","Main channel":"Canal principal","Main channel not found":"Canal principal não encontrado","Main channel saved":"Canal principal salvo","Main page channel (index.html).":"Canal da página principal (index.html).","Maintainer:":"Mantenedor:","Make the channel available as an RTMP stream (experimental).":"Tornar o canal disponível como um fluxo RTMP (experimental).","Make the channel available as an SRT stream (experimental).":"Tornar o canal disponível como um fluxo SRT (experimental).","Master playlist (increases browser/client compatibility)":"Lista de reprodução principal (aumenta a compatibilidade navegador/cliente)","Maximum allowed cache size, 0 for unlimited.":"Tamanho máximo de cache permitido, 0 para ilimitado.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Máximo permitido de megabytes de RAM para /memfs, 0 para ilimitado.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Consumo máximo permitido de megabytes a partir do disco rígido. 0 por ilimitado.","Maximum bandwidth Mbit/s":"Largura de banda máxima Mbit/s","Maximum delay in milliseconds.":"Atraso máximo em milissegundos.","Maximum file size (Megabytes)":"Tamanho máximo do arquivo (Megabytes)","Maximum file size to put in cache.":"Tamanho máximo de arquivo para colocar em cache.","Maximum log histroy":"Histórico log máximo","Maximum log lines":"Máximo de linhas de toras","Maximum size (Megabytes)":"Tamanho máximo (Megabytes)","Maximum viewer idle time (Seconds)":"Tempo máximo de ociosidade do espectador (segundos)","Maximum viewers":"Máximo de espectadores","Memory":"Memória","Meta information":"Meta informação","Metadata":"Metadados","Mold":"Molde","More about Twitter's copyright <0>here.":"Mais sobre os direitos autorais do Twitter <0>aqui.","More about YouTube's copyright <0>here.":"Mais sobre os direitos autorais do YouTube <0>aqui.","More about licenses here":"Mais sobre licenças aqui","More about the service":"Mais sobre o serviço","Mute":"Mudo","Mute a channel.":"Silenciar um canal.","Mute left":"Mudo à esquerda","Mute right":"Direito mudo","Name":"Nome","Name for the template. If the name already exists, it will be overwritten.":"Nome para o modelo. Se o nome já existir, ele será sobregravado.","Network":"Rede","Network source":"Fonte da rede","Next":"Próximo","Next: Audio":"A seguir: Áudio","Next: Video setup":"A seguir: Configuração do vídeo","No":"Não","No audio":"Sem áudio","No audio stream available":"Nenhum fluxo de áudio disponível","No input device available":"Nenhum dispositivo de entrada disponível","No live stream was detected. Please check the software that sends the stream.":"Nenhum fluxo vivo foi detectado. Por favor, verifique o software que envia o fluxo.","No source selected":"Nenhuma fonte selecionada","No sources available":"Não há fontes disponíveis","No suitable encoder found.":"Não foi encontrado nenhum codificador adequado.","No suitable filter found.":"Não foi encontrado nenhum filtro adequado.","No video":"Nenhum vídeo","No video stream available":"Nenhum fluxo de vídeo disponível","Node ID":"Identificação do nó","Noise":"Ruído","None":"Nenhum","Notes":"Notas","Number of log lines to keep.":"Número de linhas de registro a manter.","Number of logs to keep for each process.":"Número de logs a serem mantidos para cada processo.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Uma referência por linha, por exemplo http://www.example.com","Open":"Aberto","Pan":"Pan","Passphrase":"Passphrase","Passphrase for SRT encryption.":"Frases para criptografia SRT.","Passphrase must be between 10 and 79 characters long":"A frase-senha deve ter entre 10 e 79 caracteres","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"A passagem (cópia) só deve ser desativada se necessário. Cada codificação requer recursos adicionais de CPU/GPU.","Password":"Senha","Password for authorization.":"Senha para autorização.","Password for the device.":"Senha para o dispositivo.","Persist viewer statistics":"Estatísticas persistentes dos telespectadores","Pixel format":"Formato Pixel","Plan: <0>Starter":"Plano: <0>Iniciador","Platforms":"Plataformas","Playback":"Reprodução","Player":"Jogador","Player URL":"URL do jogador","Player settings saved":"Configurações do jogador salvas","Playersite":"Playersite","Playlist":"Lista de reprodução","Playlist version (M3U8). Version 3 has the best browser/client compatibility.":"Versão da lista de reprodução (M3U8). A versão 3 tem a melhor compatibilidade navegador/cliente.","Please check the <0>process log":"Por favor, verifique o <0>log de processo","Please contact the operator of the service and check what happens.":"Favor contatar o operador do serviço e verificar o que acontece.","Please get in touch with the operator of the service and check what happens.":"Favor entrar em contato com o operador do serviço e verificar o que acontece.","Please select a file to upload.":"Por favor, selecione um arquivo para carregar.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Favor utilizar \"Passthrough (cópia)\", se possível. A codificação requer recursos adicionais de CPU/GPU.","Please wait. Probe stream data ...":"Por favor, aguarde. Dados do fluxo da sonda ...","Please wait. Setting up the stream ...":"Por favor, aguarde. Preparando o fluxo ...","Port":"Porto","Position":"Posição","Preset":"Predefinição","Primary stream":"Fluxo primário","Primary stream key":"Chave de fluxo primário","Probe":"Sonda","Process":"Processo","Process control":"Controle de processo","Process debug report":"Relatório de depuração do processo","Process details":"Detalhes do processo","Process report":"Relatório de processo","Processing & Control":"Processamento e controle","Profile":"Perfil","Protocol":"Protocolo","Protocols":"Protocolos","Public domain/s":"Domínio público/s","Publication service not found":"Serviço de publicação não encontrado","Publication website settings saved":"Configurações do site de publicação salvas","Publications":"Publicações","Pull Mode":"Modo Puxar","Pull or recieve the data:":"Puxar ou receber os dados:","Quality":"Qualidade","RGB test pattern":"Padrão de teste RGB","RTMP":"RTMP","RTMP Port":"Porto RTMP","RTMP app for publishing.":"Aplicação RTMP para publicação.","RTMP output":"Saída RTMP","RTMP server":"Servidor RTMP","RTMP server is not enabled":"O servidor RTMP não está habilitado","RTMP server listen address.":"Endereço de escuta do servidor RTMP.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Ficha RTMP para publicação e reprodução. O token é o valor do parâmetro de consulta de URL 'token'","RTMPS Port":"Porto RTMPS","RTMPS server":"Servidor RTMPS","RTMPS server listen address.":"Endereço de escuta do servidor RTMPS.","RTSP":"RTSP","Raspberry Pi camera":"Câmera Raspberry Pi","Rate control":"Controle de tarifas","Ratio":"Relação","Read input at native speed":"Ler a entrada em velocidade nativa","Receive Mode":"Modo Receber","Reconnect":"Reconecte","Reconnect delay (seconds)":"Retardo de reconexão (segundos)","Reconnecting in {0}s":["Reconexão em ",["0"],"s"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["A reconexão ao Restreamer Core falhou durante os últimos ",["RETRIES"]," segundos."],"Reconnecting to Restreamer Core failed.":"A reconexão com o Restreamer Core falhou.","Refresh":"Atualização","Region":"Região","Reload":"Recarregar","Remove the oldest entries if the /memfs is full":"Remover as entradas mais antigas se o /memfs estiver cheio","Requires activation":"Requer ativação","Restart":"Reinicie","Restart required":"Reinício necessário","Restarting":"Reinicialização","Restarting Restreamer Core ...":"Reiniciando o Núcleo de Restreamer ...","Restarting the application failed.":"A reinicialização do pedido falhou.","Restreamer Service":"Serviço de Restreamer","Retrieving stream data ...":"Recuperando dados do fluxo ...","Retry":"Tentativa","Rotate":"Girar","Rule":"Regra","SRT":"SRT","SRT output":"Saída SRT","SRT server":"Servidor SRT","SRT server is not enabled":"O servidor SRT não está habilitado","SRT server listen address.":"Endereço de escuta do servidor SRT.","SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'":"Ficha SRT para publicação e reprodução. O token é o valor do parâmetro streamid 'token'.","Sampling":"Amostragem","Save":"Salvar","Scale":"Escala","Seconds to keep files in cache.":"Segundos para manter os arquivos em cache.","Seconds until a process is restarted.":"Segundos até que um processo seja reiniciado.","Seconds until a staled process is terminated.":"Segundos até o término de um processo parado.","Seconds until the snapshot/thumbnail of the video source is updated.":"Segundos até que o instantâneo/imagem da fonte de vídeo seja atualizado.","Security":"Segurança","Security passphrase":"Senha de segurança","Security token":"Ficha de segurança","Seekbar color":"Cor da barra de busca","Segment length (seconds)":"Comprimento do segmento (segundos)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"O segmento será cortado no seguinte quadro-chave após este tempo ter passado. 2 é recomendado.","Segmentation":"Segmentação","Select RTMP or SRT (if enabled) for less latency.":"Selecione RTMP ou SRT (se habilitado) para menos latência.","Select a device:":"Selecione um dispositivo:","Select audio source:":"Selecione a fonte de áudio:","Select source ...":"Selecione a fonte ...","Select video source:":"Selecione a fonte de vídeo:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Selecione se você puxa o fluxo de uma <0> fonte de rede (como uma câmera de rede) ou o <1> servidor RTMP interno (por exemplo, fluxos OBS para o Restreamer).","Select your encoding setting:":"Selecione sua configuração de codificação:","Select your filter settings (optional):":"Selecione suas configurações de filtro (opcional):","Selected":"Selecionado","Selected channel":"Canal selecionado","Selection":"Seleção","Send anonymous metrics (helps us for future development)":"Enviar métricas anônimas (nos ajuda para o desenvolvimento futuro)","Send stream to this address:":"Enviar fluxo para este endereço:","Send video to Framebuffer":"Enviar vídeo para Framebuffer","Server":"Servidor","Server URL":"URL do servidor","Service":"Serviço","Service name":"Nome do serviço","Service token for monitoring.":"Ficha de serviço para monitoramento.","Sessions":"Sessões","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Define um limite de largura de banda em Mbit por segundo para a transferência de dados HLS de saída. Todos os serviços, tais como RTMP e processos de saída, são incluídos no cálculo. Se a largura de banda for excedida, os visualizadores de HLS recebem o código de status HTTP 509 (Limite de Largura de Banda Excedido). 0 é ilimitado.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Define um limite de visualização para as sessões de HLS. Se o limite for excedido, os espectadores de HLS recebem o código de status HTTP 509 (Limite de Largura de Banda Excedido). 0 é ilimitado.","Setting for connection to the service.":"Configuração para conexão com o serviço.","Settings":"Configurações","Settings (expert mode)":"Configurações (modo especialista)","Settings for /data path. The access is protected by":"Configurações para /dados de caminho. O acesso é protegido por","Settings for /memfs path.":"Configurações para /memfs caminho.","Settings saved. All changes will be applied after restarting the application.":"Configurações salvas. Todas as mudanças serão aplicadas após reiniciar a aplicação.","Share button":"Botão compartilhar","Shows a reference to the project.":"Mostra uma referência ao projeto.","Sign up (free)":"Cadastre-se (gratuito)","Silence":"Silêncio","Silence Audio":"Áudio do silêncio","Sine":"Sine","Sitename":"Nome do Sitename","Size":"Tamanho","Snapshot":"Snapshot","Social-login (OAuth2, 2FA)":"Login social (OAuth2, 2FA)","Socket timeout (microseconds)":"Tempo limite da tomada (microssegundos)","Software":"Software","Source":"Fonte","Source & Encoding":"Fonte e Codificação","Speed":"Velocidade","Stale timeout (seconds)":"Tempo esgotado (segundos)","Statistics":"Estatísticas","Storage":"Armazenamento","Stores the viewer statistics to the disk.":"Armazena as estatísticas do telespectador no disco.","Stream":"Corrente","Stream URL":"URL do fluxo","Stream key":"Chave do fluxo","Stream name":"Nome do riacho","Stream names":"Nomes dos fluxos","Stream source for publication service (experimental).":"Fonte de fluxo para o serviço de publicação (experimental).","Support datarhei Restreamer":"Suporte datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Suporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT e muito mais.","System":"Sistema","Template":"Modelo","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Modelo a ser utilizado para a criação do site de publicação. O botão apagar remove a seleção do sistema.","Terms":"Termos","Test pattern":"Padrão de teste","Test pattern (extended)":"Padrão de teste (estendido)","Text colors":"Cores do texto","The RTMP output requires the RTMP Server.":"A saída do RTMP requer o servidor RTMP.","The SRT output requires the SRT Server.":"A saída SRT requer o SRT Server.","The amplitude (0.0 - 1.0) of the generated audio stream":"A amplitude (0,0 - 1,0) do fluxo de áudio gerado","The application is using an older version of the settings.":"A aplicação está usando uma versão mais antiga das configurações.","The available FFmpeg binary doesn't support any of the required protocols.":"O binário FFmpeg disponível não suporta nenhum dos protocolos necessários.","The bitrate of the audio stream.":"A taxa de bits do fluxo de áudio.","The carrier frequency":"A freqüência portadora","The channel \"{0}\" could not be deleted":["O canal \"",["0"],"\" não pôde ser excluído"],"The channel \"{0}\" has been deleted":["O canal \"",["0"],"\" foi excluído"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"A eliminação deste canal não pode ser recuperada. Todas as publicações deste canal serão removidas.","The input profile is not complete. Please define a video and audio source.":"O perfil de entrada não está completo. Por favor, defina uma fonte de vídeo e áudio.","The layout of the audio stream.":"O layout do fluxo de áudio.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"O número máximo de segmentos da playlist. 0 conterá todos os segmentos. 6 é recomendado.","The noise color":"A cor do ruído","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"A pessoa que associou uma obra a esta escritura dedicou a obra ao domínio público, renunciando a todos os seus direitos à obra em todo o mundo sob a lei de direitos autorais, incluindo todos os direitos conexos e vizinhos, na medida do permitido por lei. Você pode copiar, modificar, distribuir e executar a obra, mesmo para fins comerciais, tudo sem pedir permissão.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"O nome de domínio acessível ao público do host em que este Restreamer está funcionando. Separe vários nomes de domínio por uma vírgula.","The publication service \"{0}\" could not be deleted":["O serviço de publicação \"",["0"],"\" não pôde ser excluído"],"The publication service \"{0}\" has been created":["Foi criado o serviço de publicação \"",["0"],"\""],"The publication service \"{0}\" has been deleted":["O serviço de publicação \"",["0"],"\" foi eliminado"],"The publication service has been created":"O serviço de publicação foi criado","The sample rate of the audio stream.":"A taxa de amostragem do fluxo de áudio.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["O arquivo selecionado é muito grande (",["0"]," bytes). Somente ",["1"]," bytes são permitidos."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["O tipo de arquivo selecionado (",["0"],") não é permitido. Os tipos de arquivo permitidos são ",["types"],"."],"The settings for \"{0}\" have been saved":["As configurações para \"",["0"],"\" foram salvas"],"The source doesn't provide any audio streams.":"A fonte não fornece nenhum fluxo de áudio.","The source doesn't provide any audio streams. Please check the <0>probe details.":"A fonte não fornece nenhum fluxo de áudio. Por favor, verifique os detalhes da <0>probe.","The source doesn't provide any compatible audio streams.":"A fonte não fornece nenhum fluxo de áudio compatível.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"A fonte não fornece nenhuma transmissão de vídeo compatível. Por favor, verifique as <0>requisitos.","The source doesn't provide any video streams. Please check the <0>probe details.":"A fonte não fornece nenhuma transmissão de vídeo. Por favor, verifique os detalhes da <0>probe.","The source doesn't provide any video streams. Please check the device.":"A fonte não fornece nenhuma transmissão de vídeo. Por favor, verifique o dispositivo.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"A fonte de vídeo não fornece nenhum fluxo de áudio compatível. <0>Silêncio de áudio é recomendado. Serviços como, por exemplo, YouTube, Facebook & Co. requerem um canal de áudio.","The video source is compatible. Select the desired resolution:":"A fonte de vídeo é compatível. Selecione a resolução desejada:","There are updates available. Here you get more information.":"Há atualizações disponíveis. Aqui você obtém mais informações.","There was a problem storing the settings. Settings not saved.":"Havia um problema no armazenamento das configurações. As configurações não foram salvas.","There was an error connecting to Restreamer Core at {0}.":["Houve um erro de conexão com o Restreamer Core em ",["0"],"."],"There was an error during upload: {0}":["Houve um erro durante o upload: ",["0"]],"There was an error setting up the stream.":"Houve um erro ao configurar o fluxo.","There were some errors in the settings. Settings not saved.":"Houve alguns erros nas configurações. As configurações não foram salvas.","There's no login method available.":"Não há nenhum método de login disponível.","This is a dummy service that explains to you the concepts of service.":"Este é um serviço fictício que explica a você os conceitos de serviço.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Isto não é necessariamente um erro. Entretanto, pode levar um pouco mais de tempo para que o Restreamer Core reinicie.","This is to mention the copyright regulations for the target of this service.":"Isto para mencionar os regulamentos de direitos autorais para o alvo deste serviço.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Esta licença permite aos reutilizadores copiar e distribuir o material em qualquer meio ou formato apenas de forma desadaptada, e apenas enquanto a atribuição for dada ao criador. A licença permite o uso comercial.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Esta licença permite aos reutilizadores copiar e distribuir o material em qualquer meio ou formato apenas de forma não adaptada, apenas para fins não comerciais, e apenas enquanto a atribuição for dada ao criador.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato apenas para fins não comerciais, e apenas enquanto a atribuição for dada ao criador.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato apenas para fins não comerciais, e apenas enquanto a atribuição for dada ao criador. Se você remixar, adaptar ou construir sobre o material, você deve licenciar o material modificado sob termos idênticos.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato, desde que a atribuição seja dada ao criador. A licença permite o uso comercial.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato, desde que a atribuição seja dada ao criador. A licença permite o uso comercial. Se você remixar, adaptar, ou construir sobre o material, você deve licenciar o material modificado sob termos idênticos.","This protocol is unknown or not supported by the available FFmpeg binary.":"Este protocolo é desconhecido ou não suportado pelo binário FFmpeg disponível.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Esta fonte não pode ser editada enquanto estiver em uso. Para continuar, você tem que desconectar a fonte.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Esta versão da IU não suporta o binário FFmpeg disponível (",["0"],"). A interface de usuário requer ",["1"],". Por favor, use um binário FFmpeg compatível."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Esta versão da IU não suporta o Núcleo conectado (",["0"],"). A interface de usuário requer ",["1"],". Por favor, use uma versão compatível da IU."],"This version of the UI is compatible.":"Esta versão da IU é compatível.","Time until an inactive viewer connection is treated as closed.":"Tempo até que uma conexão inativa do visor seja tratada como fechada.","Token":"Token","Transmit a Livestream to a Telegram Channel.":"Transmitir um Livestream para um Canal de Telegramas.","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmitir instantâneos da fonte principal para um servidor HTTP/S. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Transmitir o canal de áudio da fonte principal para um servidor Icecast. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal como HTTP-Live-Streaming (HLS) para um servidor HTTP/S. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal como MPEG-DASH para um servidor HTTP/S. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Transmitir a fonte principal a um Serviço Brightcove Live. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Transmitir a fonte principal para um Serviço CDN77 RTMP. Mais sobre a configuração <0>aqui.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Transmitir a fonte principal a um Serviço DaCast RTMP. Mais sobre a configuração <0>aqui.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Transmitir a fonte principal para um serviço MPEG-TS. Mais detalhes sobre as configurações podem ser encontrados aqui <0>aqui.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Transmita a fonte principal para um servidor RTMP(e|s|t|te|ts). Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um servidor RTSP. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um Servidor Red5/Pro. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um servidor SRT. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um servidor UDP. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Transmitir a fonte principal para um servidor WOWZA. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Transmitir a fonte principal a um datarhei Core Ressource. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Transmitir a fonte principal a um livepotting.com Ressource. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Transmita a fonte principal para a Akamai (MSL) Media Services Live. Mais detalhes sobre as configurações do codificador MSL podem ser encontrados em <0>here.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Transmitir a fonte principal para o serviço de codificação em nuvem Bitmovin, uma ferramenta poderosa para o streaming ao vivo. Mais detalhes sobre as configurações podem ser encontrados em <0>here.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Transmitir a fonte principal para o Serviço RTMP da Restream. Mais detalhes sobre as configurações podem ser encontrados <0>aqui.","Transmit to a Azure Media Services. More details can be found <0>here.":"Transmitir a um Serviço de Mídia Azure. Mais detalhes podem ser encontrados <0>aqui.","Transmit to linkedIn. More details can be found <0>here.":"Transmitir para o linkedIn. Mais detalhes podem ser encontrados <0>aqui.","Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.":"Transmita seu Livestream a um servidor Owncast. <0>Aqui você pode encontrar mais detalhes sobre as configurações.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Transmite seu vídeo como um fluxo RTMP com a chave necessária gerada no YouTube Studio. Você pode encontrar mais informações sobre a criação de um stream ao vivo no YouTube <0>Creator Academy.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Transmite seu fluxo de vídeo com a chave necessária, que foi gerada no Twitter Producer. Você pode encontrar mais informações sobre a configuração de um fluxo ao vivo no Twitter's <0>Produtor.","Tune":"Tune","UDP transport":"Transporte UDP","Unable to load the config.":"Incapaz de carregar a configuração.","Unique ident on the service.":"Identidade única no serviço.","Unknown":"Desconhecido","Unselected":"Não selecionado","Upload":"Upload","Uploading the file failed":"O upload do arquivo falhou","Uploading the logo failed":"O carregamento do logotipo falhou","Uptime":"Horário de funcionamento","Use Auth0 for your running Restreamer Core. More <0>details.":"Use o Auth0 para seu Restreamer Core em funcionamento. Mais <0>detalhes.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Use o assistente (<0/>) para uma configuração rápida e fácil, ou edite (<1/>) as fontes diretamente no modo personalizado.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use seus direitos autorais e escolha a licença de imagem correta. Seja gratuita para todos ou altamente restrita. Discuta brevemente o que outros estão autorizados a fazer com sua imagem.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Use seus direitos autorais e escolha a licença de imagem correta. Seja gratuita para todos ou altamente restrita. Discuta brevemente o que outros estão autorizados a fazer com sua imagem.","User registration":"Registro de usuário","Username":"Nome de usuário","Username for authorization.":"Nome de usuário para autorização.","Username for the device.":"Nome de usuário para o dispositivo.","VPU ID":"ID DA VPU","Vertical Flip":"Vertical Flip","Video":"Vídeo","Video device":"Dispositivo de vídeo","Video settings":"Configurações de vídeo","Video setup":"Configuração do vídeo","Video source":"Fonte do vídeo","Viewer":"Visualizador","Virtual source":"Fonte virtual","Volume":"Volume","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Bem-vindo à Restreamer v2, a solução para a publicação rápida e fácil de vídeos. Grátis para uso privado e comercial. Mais ajuda no <0>docs.","Where to store the HLS playlist and segments. In-Memory is recommended.":"Onde armazenar a lista de reprodução e segmentos da HLS. In-Memory é recomendado.","Write protection":"Proteção de escrita","YUV test pattern":"Padrão de teste YUV","Yes":"Sim","You can't abort the wizard because at least one input must be defined.":"Você não pode abortar o assistente porque pelo menos uma entrada deve ser definida.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Você mudou a configuração. Para que as mudanças tenham efeito, você tem que reiniciar a aplicação. Você quer reiniciar agora?","You have to reconnect manually":"Você tem que reconectar manualmente","You have unsaved changes. Please save them before you can control the service again.":"Você tem mudanças não salvas. Por favor, salve-as antes de poder controlar o serviço novamente.","Your stream needs to be encoded, but there's no suitable encoder available.":"Seu fluxo precisa ser codificado, mas não há um codificador adequado disponível.","Your stream needs to be encoded. Choose the desired encoder:":"Seu fluxo precisa ser codificado. Escolha o codificador desejado:","blue":"azul","brown":"marrom","iframe code":"código iframe","kbit/s":"kbit/s","pink":"rosa","velvet":"veludo","violet":"violeta","white":"branco"}}; \ No newline at end of file diff --git a/src/locales/pt/messages.po b/src/locales/pt/messages.po index 6dbae98..e5811e5 100644 --- a/src/locales/pt/messages.po +++ b/src/locales/pt/messages.po @@ -13,12 +13,20 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: src/misc/controls/HLS.js:81 +msgid "6 (+ guaranteed to start with a Key frame)" +msgstr "6 (+ garantia de começar com um quadro chave)" + +#: src/misc/controls/HLS.js:84 +msgid "7 (+ fragmented MP4 format)" +msgstr "7 (+ formato MP4 fragmentado)" + #: src/misc/EncodingSelect.js:224 msgid "<0>Compatibility list" msgstr "<0>Lista de compatibilidade" -#: src/views/Edit/Profile.js:380 -#: src/views/Edit/Profile.js:510 +#: src/views/Edit/Profile.js:393 +#: src/views/Edit/Profile.js:543 msgid "<0>Show probe details" msgstr "<0>Mostrar detalhes da sonda" @@ -26,7 +34,7 @@ msgstr "<0>Mostrar detalhes da sonda" msgid "ALSA" msgstr "ALSA" -#: src/views/Settings.js:907 +#: src/views/Settings.js:974 msgid "API endpoint not found. Settings not saved." msgstr "Ponto final API não encontrado. Configurações não salvas." @@ -35,16 +43,16 @@ msgid "AVFoundation" msgstr "AVFoundation" #: src/misc/ChannelList.js:356 -#: src/views/Edit/Profile.js:410 -#: src/views/Edit/Wizard/index.js:1153 -#: src/views/Edit/index.js:549 -#: src/views/Edit/index.js:575 -#: src/views/Edit/index.js:594 -#: src/views/Publication/Add.js:362 -#: src/views/Publication/Edit.js:601 -#: src/views/Settings.js:1972 -#: src/views/Settings.js:2031 -#: src/views/Settings.js:2053 +#: src/views/Edit/Profile.js:433 +#: src/views/Edit/Wizard/index.js:1168 +#: src/views/Edit/index.js:603 +#: src/views/Edit/index.js:629 +#: src/views/Edit/index.js:648 +#: src/views/Publication/Add.js:364 +#: src/views/Publication/Edit.js:563 +#: src/views/Settings.js:2123 +#: src/views/Settings.js:2182 +#: src/views/Settings.js:2204 msgid "Abort" msgstr "Abortar" @@ -57,11 +65,11 @@ msgstr "Sobre" msgid "Add" msgstr "Adicione" -#: src/views/Publication/Add.js:321 +#: src/views/Publication/Add.js:323 msgid "Add Publication" msgstr "Adicionar Publicação" -#: src/views/Playersite.js:692 +#: src/views/Playersite.js:708 msgid "Add external widgets and styles to the publication site. You can find some examples on the help page." msgstr "Adicione widgets e estilos externos ao site de publicação. Você pode encontrar alguns exemplos na página de ajuda." @@ -69,18 +77,20 @@ msgstr "Adicione widgets e estilos externos ao site de publicação. Você pode msgid "Add new channel" msgstr "Adicionar novo canal" -#: src/views/Publication/Add.js:324 +#: src/views/Publication/Add.js:326 msgid "Add: {0}" msgstr "Adicionar: {0}" -#: src/views/Edit/Sources/Network.js:355 +#: src/views/Edit/Sources/Network.js:421 #: src/views/Edit/Wizard/Sources/Network.js:66 +#: src/views/Publication/Services/Azure.js:98 #: src/views/Publication/Services/Brightcove.js:95 -#: src/views/Publication/Services/Core.js:100 +#: src/views/Publication/Services/Core.js:116 #: src/views/Publication/Services/DASH.js:192 #: src/views/Publication/Services/HLS.js:181 #: src/views/Publication/Services/Icecast.js:160 #: src/views/Publication/Services/Image2.js:126 +#: src/views/Publication/Services/Linkedin.js:93 #: src/views/Publication/Services/MPEGTS.js:160 #: src/views/Publication/Services/RTMP.js:132 #: src/views/Publication/Services/RTSP.js:150 @@ -88,23 +98,23 @@ msgstr "Adicionar: {0}" #: src/views/Publication/Services/SRT.js:161 #: src/views/Publication/Services/UDP.js:127 #: src/views/Publication/Services/WOWZA.js:132 -#: src/views/Settings.js:1302 +#: src/views/Settings.js:1370 msgid "Address" msgstr "Endereço" -#: src/views/Playersite.js:629 +#: src/views/Playersite.js:645 msgid "Address for the background image." msgstr "Endereço para a imagem de fundo." -#: src/views/Settings.js:1331 +#: src/views/Settings.js:1399 msgid "Address to listen on for HTTP requests." msgstr "Endereço para ouvir os pedidos HTTP." -#: src/views/Settings.js:1344 +#: src/views/Settings.js:1412 msgid "Address to listen on for HTTPS requests." msgstr "Endereço para ouvir os pedidos de HTTPS." -#: src/views/Playersite.js:514 +#: src/views/Playersite.js:530 msgid "Adjust publication site colors and background as you like." msgstr "Ajuste as cores e o fundo do site de publicação como você quiser." @@ -112,7 +122,7 @@ msgstr "Ajuste as cores e o fundo do site de publicação como você quiser." msgid "Advanced monitoring" msgstr "Monitoramento avançado" -#: src/views/Edit/Sources/Network.js:396 +#: src/views/Edit/Sources/Network.js:474 #: src/views/Publication/Services/DASH.js:204 #: src/views/Publication/Services/HLS.js:193 #: src/views/Publication/Services/Icecast.js:170 @@ -125,27 +135,32 @@ msgstr "Monitoramento avançado" msgid "Advanced settings" msgstr "Configurações avançadas" -#: src/views/Edit/Wizard/index.js:287 +#: src/views/Edit/Wizard/index.js:302 msgid "Advanced setup" msgstr "Configuração avançada" +#: src/views/Playersite.js:433 +#: src/views/Publication/Player.js:443 +msgid "AirPlay" +msgstr "AirPlay" + #: src/views/Login.js:325 msgid "Alerting by email" msgstr "Alerta por e-mail" -#: src/views/Publication/Add.js:344 +#: src/views/Publication/Add.js:346 msgid "All" msgstr "Todos" -#: src/views/Settings.js:1163 +#: src/views/Settings.js:1231 msgid "All important system settings." msgstr "Todas as configurações importantes do sistema." -#: src/views/Settings.js:1478 +#: src/views/Settings.js:1548 msgid "Allow all referrer" msgstr "Permitir a todos os encaminhadores" -#: src/views/Settings.js:1518 +#: src/views/Settings.js:1588 msgid "Allow counting how many viewers the stream has." msgstr "Permitir contar quantos espectadores o fluxo tem." @@ -157,8 +172,8 @@ msgstr "Amplitude" msgid "An environment variable sets this value." msgstr "Uma variável de ambiente define este valor." -#: src/views/Publication/Services/Core.js:107 -#: src/views/Settings.js:1816 +#: src/views/Publication/Services/Core.js:124 +#: src/views/Settings.js:1897 msgid "App" msgstr "App" @@ -168,11 +183,11 @@ msgstr "App" msgid "Application" msgstr "Aplicação" -#: src/views/Edit/Wizard/index.js:1172 +#: src/views/Edit/Wizard/index.js:1187 msgid "Are you sure you want to abort the wizard?" msgstr "Você tem certeza de que quer abortar o feiticeiro?" -#: src/views/Publication/Add.js:492 +#: src/views/Publication/Add.js:467 msgid "Audio" msgstr "Áudio" @@ -185,18 +200,18 @@ msgstr "Dispositivo de áudio" msgid "Audio device" msgstr "Dispositivo de áudio" -#: src/views/Edit/Wizard/index.js:875 -#: src/views/Edit/Wizard/index.js:887 +#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:902 msgid "Audio from device" msgstr "Áudio do dispositivo" -#: src/views/Edit/Profile.js:425 +#: src/views/Edit/Profile.js:448 #: src/views/Edit/ProfileSummary.js:90 -#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Edit.js:506 msgid "Audio settings" msgstr "Configurações de áudio" -#: src/views/Edit/Wizard/index.js:828 +#: src/views/Edit/Wizard/index.js:843 msgid "Audio setup" msgstr "Configuração de áudio" @@ -216,39 +231,39 @@ msgstr "Auth0 não está atualmente disponível porque esta interface é carrega msgid "Author" msgstr "Autor" -#: src/views/Settings.js:1143 -#: src/views/Settings.js:1415 +#: src/views/Settings.js:1210 +#: src/views/Settings.js:1483 msgid "Authorization" msgstr "Autorização" -#: src/misc/controls/HLS.js:83 +#: src/misc/controls/HLS.js:123 msgid "Automatic cleanup of all media data" msgstr "Limpeza automática de todos os dados da mídia" -#: src/views/Publication/Player.js:437 +#: src/views/Publication/Player.js:440 msgid "Autoplay" msgstr "Autoplay" -#: src/views/Playersite.js:445 +#: src/views/Playersite.js:461 msgid "Available" msgstr "Disponível em" -#: src/views/Edit/Profile.js:541 -#: src/views/Edit/Wizard/index.js:408 -#: src/views/Edit/Wizard/index.js:647 -#: src/views/Edit/Wizard/index.js:912 -#: src/views/Edit/Wizard/index.js:1024 -#: src/views/Edit/Wizard/index.js:1082 -#: src/views/Edit/Wizard/index.js:1164 -#: src/views/Publication/Add.js:528 +#: src/views/Edit/Profile.js:584 +#: src/views/Edit/Wizard/index.js:423 +#: src/views/Edit/Wizard/index.js:662 +#: src/views/Edit/Wizard/index.js:927 +#: src/views/Edit/Wizard/index.js:1039 +#: src/views/Edit/Wizard/index.js:1097 +#: src/views/Edit/Wizard/index.js:1179 +#: src/views/Publication/Add.js:492 msgid "Back" msgstr "Voltar" -#: src/views/Playersite.js:563 +#: src/views/Playersite.js:579 msgid "Background colors" msgstr "Cores de fundo" -#: src/views/Playersite.js:616 +#: src/views/Playersite.js:632 msgid "Background image" msgstr "Imagem de fundo" @@ -273,7 +288,7 @@ msgstr "Chave de fluxo de backup" msgid "Bandwidth" msgstr "Largura de banda" -#: src/views/Settings.js:1373 +#: src/views/Settings.js:1441 msgid "Bandwidth control" msgstr "Controle de largura de banda" @@ -282,7 +297,7 @@ msgid "Banner" msgstr "Banner" #: src/views/Login.js:241 -#: src/views/Settings.js:1420 +#: src/views/Settings.js:1488 msgid "Basic" msgstr "Básico" @@ -295,24 +310,24 @@ msgstr "Fator Beep" msgid "Bitrate" msgstr "Taxa de bits" -#: src/views/Edit/Wizard/index.js:1013 -#: src/views/Edit/index.js:510 +#: src/views/Edit/Wizard/index.js:1028 +#: src/views/Edit/index.js:564 msgid "Briefly describe what the audience will see during the live stream." msgstr "Descrever brevemente o que o público verá durante a transmissão ao vivo." -#: src/views/Publication/Player.js:352 +#: src/views/Publication/Player.js:355 msgid "Button color" msgstr "Cor do botão" -#: src/views/Settings.js:1687 +#: src/views/Settings.js:1757 msgid "Cache for files on /data." msgstr "Cache para arquivos em /dados." -#: src/views/Settings.js:1715 +#: src/views/Settings.js:1785 msgid "Cache time (Seconds)" msgstr "Tempo de cache (Segundos)" -#: src/views/Settings.js:1743 +#: src/views/Settings.js:1813 msgid "Cache types" msgstr "Tipos de cachês" @@ -324,7 +339,7 @@ msgstr "Cliques de captura" msgid "Capture cursor" msgstr "Captura do cursor" -#: src/views/Edit/index.js:327 +#: src/views/Edit/index.js:339 msgid "Channel \"{0}\" saved" msgstr "Canal \"{0}\" salvo" @@ -332,11 +347,11 @@ msgstr "Canal \"{0}\" salvo" msgid "Channels" msgstr "Canais" -#: src/views/Settings.js:1172 +#: src/views/Settings.js:1240 msgid "Check for updates" msgstr "Verificar por atualizações" -#: src/views/Publication/Add.js:272 +#: src/views/Publication/Add.js:276 msgid "Check the requirements" msgstr "Verifique os requisitos" @@ -350,8 +365,8 @@ msgstr "Escolha um fluxo de áudio" #: src/views/Edit/Sources/ALSA.js:96 #: src/views/Edit/Sources/Framebuffer.js:80 -#: src/views/Edit/Sources/Raspicam.js:84 -#: src/views/Edit/Sources/V4L.js:90 +#: src/views/Edit/Sources/Raspicam.js:87 +#: src/views/Edit/Sources/V4L.js:93 msgid "Choose an input device ..." msgstr "Escolha um dispositivo de entrada ..." @@ -363,16 +378,21 @@ msgstr "Escolha o codec ..." msgid "Choose tenant ..." msgstr "Escolher inquilino ..." +#: src/views/Playersite.js:425 +#: src/views/Publication/Player.js:442 +msgid "Chromecast" +msgstr "Chromecast" + #: src/views/Publication/Services/DASH.js:309 #: src/views/Publication/Services/HLS.js:249 msgid "Chunk" msgstr "Pedaço" #: src/misc/ModalContent.js:77 -#: src/views/Playersite.js:782 -#: src/views/Publication/Add.js:525 -#: src/views/Publication/Edit.js:565 -#: src/views/Publication/Player.js:447 +#: src/views/Playersite.js:798 +#: src/views/Publication/Add.js:489 +#: src/views/Publication/Edit.js:527 +#: src/views/Publication/Player.js:452 msgid "Close" msgstr "Fechar" @@ -385,11 +405,11 @@ msgid "Codec" msgstr "Codec" #: src/views/Edit/Sources/VirtualAudio.js:110 -#: src/views/Publication/Player.js:320 +#: src/views/Publication/Player.js:323 msgid "Color" msgstr "Cor" -#: src/views/Settings.js:1282 +#: src/views/Settings.js:1350 msgid "Config" msgstr "Config" @@ -410,7 +430,7 @@ msgid "Connected since <0/>" msgstr "Conectado desde <0/>" #: src/misc/ActionButton.js:12 -#: src/views/Main/index.js:305 +#: src/views/Main/index.js:334 #: src/views/Publication/Process.js:40 msgid "Connecting ..." msgstr "Conectando ..." @@ -424,14 +444,14 @@ msgid "Connecting to Restreamer Core failed probably because of mixed content." msgstr "A conexão com o Restreamer Core falhou provavelmente por causa do conteúdo misto." #: src/misc/controls/Metadata.js:70 -#: src/views/Playersite.js:659 -#: src/views/Playersite.js:676 +#: src/views/Playersite.js:675 +#: src/views/Playersite.js:692 msgid "Content" msgstr "Conteúdo" -#: src/views/Main/index.js:365 +#: src/views/Main/index.js:394 msgid "Content URL" -msgstr "" +msgstr "URL do conteúdo" #: src/Footer.js:193 msgid "Cores" @@ -445,7 +465,7 @@ msgstr "Criar usuário" msgid "Creative Commons" msgstr "Creative Commons" -#: src/misc/coders/Encoders/audio/Opus.js:59 +#: src/misc/coders/Encoders/audio/Opus.js:61 #: src/misc/coders/settings/Audio.js:25 #: src/misc/coders/settings/Audio.js:71 #: src/misc/coders/settings/Audio.js:122 @@ -454,14 +474,17 @@ msgstr "Creative Commons" #: src/misc/coders/settings/Video.js:115 #: src/misc/coders/settings/Video.js:181 #: src/misc/coders/settings/Video.js:220 +#: src/misc/filters/audio/Resample.js:63 +#: src/misc/filters/audio/Resample.js:114 +#: src/misc/filters/audio/Volume.js:58 #: src/views/Edit/Sources/ALSA.js:101 #: src/views/Edit/Sources/AVFoundation.js:120 #: src/views/Edit/Sources/AVFoundation.js:153 -#: src/views/Edit/Sources/V4L.js:96 +#: src/views/Edit/Sources/V4L.js:99 msgid "Custom ..." msgstr "Personalizado ..." -#: src/views/Settings.js:1288 +#: src/views/Settings.js:1356 msgid "Custom JSON config for datarhei Core." msgstr "Configuração JSON personalizada para datarhei Core." @@ -478,11 +501,11 @@ msgstr "Índice de áudio personalizado" msgid "Custom bitrate (kbit/s)" msgstr "Taxa de bits personalizada (kbit/s)" -#: src/views/Playersite.js:687 +#: src/views/Playersite.js:703 msgid "Custom code injection" msgstr "Injeção de código personalizado" -#: src/misc/coders/Encoders/audio/Opus.js:85 +#: src/misc/coders/Encoders/audio/Opus.js:87 msgid "Custom delay" msgstr "Atraso personalizado" @@ -503,10 +526,12 @@ msgid "Custom keyframe interval" msgstr "Intervalo de chaveiro personalizado" #: src/misc/coders/settings/Audio.js:98 +#: src/misc/filters/audio/Resample.js:90 msgid "Custom layout" msgstr "Layout personalizado" #: src/misc/coders/settings/Audio.js:149 +#: src/misc/filters/audio/Resample.js:141 msgid "Custom sampling (Hz)" msgstr "Amostragem personalizada (Hz)" @@ -518,7 +543,7 @@ msgstr "Escala personalizada" msgid "Custom size" msgstr "Tamanho personalizado" -#: src/views/Edit/Sources/V4L.js:110 +#: src/views/Edit/Sources/V4L.js:113 msgid "Custom video device" msgstr "Dispositivo de vídeo personalizado" @@ -536,8 +561,12 @@ msgstr "Dados copiados para a prancheta" msgid "Death color" msgstr "Cor da morte" +#: src/misc/filters/audio/Volume.js:74 +msgid "Decibels (dB)" +msgstr "Decibéis (dB)" + #: src/misc/EncodingSelect.js:210 -#: src/views/Edit/Wizard/index.js:628 +#: src/views/Edit/Wizard/index.js:643 msgid "Decoder" msgstr "Decodificador" @@ -545,13 +574,13 @@ msgstr "Decodificador" #: src/views/Edit/Sources/AVFoundation.js:149 #: src/views/Edit/Wizard/Sources/AVFoundation.js:76 #: src/views/Edit/Wizard/Sources/AVFoundation.js:105 -#: src/views/Playersite.js:451 -#: src/views/Playersite.js:526 -#: src/views/Playersite.js:570 +#: src/views/Playersite.js:467 +#: src/views/Playersite.js:542 +#: src/views/Playersite.js:586 msgid "Default" msgstr "Predefinição" -#: src/misc/coders/Encoders/audio/Opus.js:84 +#: src/misc/coders/Encoders/audio/Opus.js:86 msgid "Delay" msgstr "Atraso" @@ -559,15 +588,15 @@ msgstr "Atraso" msgid "Delay (ms)" msgstr "Atraso (ms)" -#: src/views/Edit/index.js:563 -#: src/views/Edit/index.js:599 -#: src/views/Playersite.js:474 -#: src/views/Publication/Edit.js:574 -#: src/views/Publication/Edit.js:606 +#: src/views/Edit/index.js:617 +#: src/views/Edit/index.js:653 +#: src/views/Playersite.js:490 +#: src/views/Publication/Edit.js:536 +#: src/views/Publication/Edit.js:568 msgid "Delete" msgstr "Excluir" -#: src/views/Publication/Edit.js:611 +#: src/views/Publication/Edit.js:573 msgid "Deleting a publication service cannot be reversed. The publication stops immediately." msgstr "A eliminação de um serviço de publicação não pode ser revertida. A publicação pára imediatamente." @@ -582,12 +611,12 @@ msgid "Description" msgstr "Descrição" #: src/views/Playersite.js:352 -#: src/views/Playersite.js:509 +#: src/views/Playersite.js:525 msgid "Design" msgstr "Projeto" #: src/views/Edit/Sources/Framebuffer.js:87 -#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:905 #: src/views/Publication/Services/Framebuffer.js:93 msgid "Device" msgstr "Dispositivo" @@ -598,7 +627,7 @@ msgstr "Dispositivo" msgid "Disconnect" msgstr "Desconectar" -#: src/views/Edit/index.js:580 +#: src/views/Edit/index.js:634 msgid "Disconnect & Continue" msgstr "Desconectar e continuar" @@ -607,12 +636,13 @@ msgstr "Desconectar e continuar" msgid "Disconnecting ..." msgstr "Desconectando ..." -#: src/views/Settings.js:1650 +#: src/misc/controls/HLS.js:70 +#: src/views/Settings.js:1720 msgid "Disk" msgstr "Disco" -#: src/views/Settings.js:1684 -#: src/views/Settings.js:1692 +#: src/views/Settings.js:1754 +#: src/views/Settings.js:1762 msgid "Disk cache" msgstr "Cache de disco" @@ -621,19 +651,19 @@ msgstr "Cache de disco" msgid "Disk storage" msgstr "Armazenamento em disco" -#: src/views/Settings.js:2063 +#: src/views/Settings.js:2214 msgid "Do you really want to restart the application now?" msgstr "Você realmente quer reiniciar a aplicação agora?" -#: src/views/Edit/index.js:591 +#: src/views/Edit/index.js:645 msgid "Do you want to delete \"{0}\"?" msgstr "Você quer excluir \"{0}\"?" -#: src/views/Publication/Edit.js:598 +#: src/views/Publication/Edit.js:560 msgid "Do you want to delete {title}?" msgstr "Você quer apagar {título}?" -#: src/views/Edit/index.js:572 +#: src/views/Edit/index.js:626 msgid "Do you want to disconnect \"{0}\"?" msgstr "Você quer desconectar \"{0}\"?" @@ -658,7 +688,7 @@ msgstr "Documentação" msgid "Dup. frames" msgstr "Molduras Dup" -#: src/views/Publication/Player.js:285 +#: src/views/Publication/Player.js:288 msgid "EDIT: Player" msgstr "EDIT: Jogador" @@ -666,27 +696,41 @@ msgstr "EDIT: Jogador" msgid "EDIT: Publication Website" msgstr "EDIT: Site de publicação" -#: src/views/Edit/index.js:391 +#: src/misc/controls/HLS.js:78 +msgid "EXT-X-VERSION" +msgstr "EXT-X-VERSION" + +#: src/views/Edit/index.js:403 msgid "Edit" msgstr "Editar" -#: src/views/Edit/index.js:417 +#: src/views/Edit/index.js:429 msgid "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." msgstr "Edite as fontes de áudio e vídeo para a transmissão ao vivo. Adicione uma descrição e defina sua licença de conteúdo desejada." -#: src/views/Publication/Edit.js:377 +#: src/views/Publication/Edit.js:384 msgid "Edit: {title}" msgstr "Edição: {título}" -#: src/views/Publication/Player.js:319 +#: src/views/Publication/Player.js:322 msgid "Embed" msgstr "Embutir" -#: src/views/Edit/Sources/Network.js:577 +#: src/misc/controls/RTMP.js:48 +#: src/misc/controls/SRT.js:48 +msgid "Enable" +msgstr "Habilitar" + +#: src/views/Edit/Sources/Network.js:684 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:55 msgid "Enable RTMP server ..." msgstr "Habilitar servidor RTMP ..." +#: src/views/Edit/Sources/Network.js:733 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:55 +msgid "Enable SRT server ..." +msgstr "Habilitar servidor SRT ..." + #: src/views/Edit/Sources/VirtualAudio.js:162 msgid "Enable a periodic beep every second with this value times the carrier frequency" msgstr "Habilitar um bip periódico a cada segundo com este valor vezes a freqüência portadora" @@ -696,10 +740,15 @@ msgstr "Habilitar um bip periódico a cada segundo com este valor vezes a freqü msgid "Enable backup stream" msgstr "Habilitar o fluxo de backup" -#: src/views/Publication/Player.js:427 +#: src/views/Publication/Player.js:430 msgid "Enable nerd statistics" msgstr "Habilitar estatísticas de nerds" +#: src/misc/controls/RTMP.js:70 +#: src/misc/controls/SRT.js:70 +msgid "Enable now" +msgstr "Habilitar agora" + #: src/views/Publication/Services/Dummy.js:277 #: src/views/Publication/Services/Facebook.js:138 msgid "Enable primary stream" @@ -709,23 +758,21 @@ msgstr "Habilitar o fluxo primário" msgid "Enable snapshots" msgstr "Habilitar instantâneos" -#: src/views/Settings.js:1433 +#: src/views/Settings.js:1503 msgid "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." msgstr "Aconselha-se vivamente a autorização. Caso contrário, qualquer pessoa pode ter acesso a esta instância." -#: src/views/Settings.js:1593 +#: src/views/Settings.js:1663 msgid "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." msgstr "Aconselha-se vivamente que se habilite a auth básica. Caso contrário, qualquer pessoa poderia escrever dados para /memfs." -#: src/views/Edit/Wizard/index.js:634 +#: src/views/Edit/Wizard/index.js:649 msgid "Encoder" msgstr "Codificador" -#: src/views/Edit/Summary.js:66 -#: src/views/Publication/Add.js:374 -#: src/views/Publication/Add.js:466 -#: src/views/Publication/Edit.js:388 -#: src/views/Publication/Edit.js:505 +#: src/views/Edit/Summary.js:95 +#: src/views/Publication/Add.js:441 +#: src/views/Publication/Edit.js:478 msgid "Encoding" msgstr "Codificação" @@ -743,7 +790,7 @@ msgstr "Digite um nome para o novo canal." msgid "Enter password" msgstr "Digite a senha" -#: src/views/Edit/Sources/Network.js:348 +#: src/views/Edit/Sources/Network.js:414 #: src/views/Edit/Wizard/Sources/Network.js:59 msgid "Enter the address of your network source:" msgstr "Digite o endereço de sua fonte de rede:" @@ -752,15 +799,15 @@ msgstr "Digite o endereço de sua fonte de rede:" msgid "Enter username" msgstr "Digite o nome de usuário" -#: src/misc/coders/Encoders/video/H264VideoToolbox.js:61 +#: src/misc/coders/Encoders/video/H264VideoToolbox.js:64 msgid "Entropy coder" msgstr "Codificador de entropia" -#: src/views/Edit/Wizard/index.js:1118 +#: src/views/Edit/Wizard/index.js:1133 #: src/views/Incompatible.js:30 #: src/views/Invalid.js:29 #: src/views/Publication/Process.js:63 -#: src/views/Settings.js:1109 +#: src/views/Settings.js:1176 msgid "Error" msgstr "Erro" @@ -770,40 +817,40 @@ msgstr "Erro" msgid "Error while copying data to clipboard" msgstr "Erro ao copiar dados para a prancheta" -#: src/views/Main/index.js:324 +#: src/views/Main/index.js:353 #: src/views/Publication/Process.js:64 msgid "Error: {0}" msgstr "Erro: {0}" -#: src/views/Playersite.js:732 +#: src/views/Playersite.js:748 msgid "Expands the area above the channel list (live chat)." msgstr "Expande a área acima da lista de canais (bate-papo ao vivo)." -#: src/views/Playersite.js:752 +#: src/views/Playersite.js:768 msgid "Expands the area under the channel description (comment boxes)." msgstr "Expande a área sob a descrição do canal (caixas de comentários)." -#: src/views/Settings.js:1199 +#: src/views/Settings.js:1267 msgid "Expert mode" msgstr "Modo especialista" -#: src/views/Playersite.js:717 +#: src/views/Playersite.js:733 msgid "Extend channel list" msgstr "Ampliar a lista de canais" -#: src/views/Playersite.js:737 +#: src/views/Playersite.js:753 msgid "Extend content" msgstr "Ampliar o conteúdo" -#: src/views/Playersite.js:757 +#: src/views/Playersite.js:773 msgid "Extend footer" msgstr "Ampliar o rodapé" -#: src/views/Playersite.js:697 +#: src/views/Playersite.js:713 msgid "Extend header" msgstr "Ampliar cabeçalho" -#: src/views/Settings.js:1936 +#: src/views/Settings.js:2087 msgid "FFmpeg" msgstr "FFmpeg" @@ -812,7 +859,7 @@ msgstr "FFmpeg" msgid "FPS" msgstr "FPS" -#: src/views/Publication/Add.js:180 +#: src/views/Publication/Add.js:187 msgid "Failed to create publication service ({0})" msgstr "Falha na criação do serviço de publicação ({0})" @@ -820,12 +867,12 @@ msgstr "Falha na criação do serviço de publicação ({0})" msgid "Failed to create publication website files." msgstr "Falha na criação dos arquivos do site de publicação." -#: src/views/Edit/Profile.js:341 -#: src/views/Edit/Profile.js:471 +#: src/views/Edit/Profile.js:354 +#: src/views/Edit/Profile.js:504 msgid "Failed to probe the source. Please check the <0>probe details." msgstr "Falha na sondagem da fonte. Por favor, verifique os <0> detalhes da sonda." -#: src/utils/restreamer.js:434 +#: src/utils/restreamer.js:446 msgid "Failed to refresh token: {0}" msgstr "Falha em atualizar a ficha: {0}" @@ -841,7 +888,7 @@ msgstr "Falha em interromper o processo" msgid "Failed to store player size setting." msgstr "Falha no ajuste do tamanho do jogador." -#: src/views/Publication/Edit.js:222 +#: src/views/Publication/Edit.js:230 msgid "Failed to store publication service ({0})" msgstr "Falha no serviço de publicação de lojas ({0})" @@ -850,15 +897,27 @@ msgid "Failed to update ingest process ({0})" msgstr "Falha em atualizar o processo de ingestão ({0})" #: src/views/Edit/index.js:310 +msgid "Failed to update ingest snapshot process ({0})" +msgstr "Falha na atualização do processo de ingestão de instantâneos ({0})" + +#: src/views/Edit/index.js:316 msgid "Failed to update the player" msgstr "Falha na atualização do jogador" -#: src/views/Edit/Wizard/index.js:375 -#: src/views/Edit/Wizard/index.js:838 +#: src/views/Edit/index.js:322 +msgid "Failed to update the playersite" +msgstr "Falha na atualização do site do jogador" + +#: src/views/Edit/Wizard/index.js:390 +#: src/views/Edit/Wizard/index.js:853 msgid "Failed to verify the source. Please check the address." msgstr "Falha na verificação da fonte. Por favor, verifique o endereço." -#: src/views/Edit/Profile.js:549 +#: src/views/Edit/Summary.js:101 +msgid "Filter" +msgstr "Filtro" + +#: src/views/Edit/Profile.js:592 msgid "Finish" msgstr "Terminar" @@ -866,15 +925,15 @@ msgstr "Terminar" msgid "Flags" msgstr "Bandeiras" -#: src/views/Playersite.js:772 +#: src/views/Playersite.js:788 msgid "For Javascripts." msgstr "Para Javascripts." -#: src/views/Playersite.js:712 +#: src/views/Playersite.js:728 msgid "For Stylesheets." msgstr "Para Fichas de Estilo." -#: src/views/Edit/Sources/Network.js:439 +#: src/views/Edit/Sources/Network.js:521 msgid "Force input framerate" msgstr "Forçar o frame de entrada" @@ -891,7 +950,7 @@ msgid "Framebuffer" msgstr "Framebuffer" #: src/misc/coders/settings/Video.js:135 -#: src/views/Edit/Sources/Network.js:452 +#: src/views/Edit/Sources/Network.js:534 msgid "Framerate" msgstr "Framerate" @@ -899,7 +958,7 @@ msgstr "Framerate" msgid "Frequency (Hz)" msgstr "Freqüência (Hz)" -#: src/views/Publication/Services/Core.js:129 +#: src/views/Publication/Services/Core.js:154 #: src/views/Publication/Services/Facebook.js:115 #: src/views/Publication/Services/Facebook.js:133 #: src/views/Publication/Services/Instagram.js:88 @@ -910,13 +969,13 @@ msgstr "Freqüência (Hz)" msgid "GET" msgstr "GET" -#: src/views/Edit/Sources/Network.js:471 -#: src/views/Edit/index.js:400 +#: src/views/Edit/Sources/Network.js:553 #: src/views/Edit/index.js:412 +#: src/views/Edit/index.js:424 #: src/views/Playersite.js:350 #: src/views/Playersite.js:363 -#: src/views/Publication/Add.js:372 -#: src/views/Publication/Edit.js:386 +#: src/views/Publication/Add.js:374 +#: src/views/Publication/Edit.js:393 #: src/views/Publication/Services/DASH.js:211 #: src/views/Publication/Services/HLS.js:200 #: src/views/Publication/Services/Icecast.js:177 @@ -924,62 +983,73 @@ msgstr "GET" #: src/views/Publication/Services/RTMP.js:145 #: src/views/Publication/Services/RTSP.js:169 #: src/views/Publication/Services/SRT.js:177 -#: src/views/Settings.js:1138 -#: src/views/Settings.js:1158 +#: src/views/Settings.js:1205 +#: src/views/Settings.js:1226 msgid "General" msgstr "Geral" -#: src/views/Publication/Player.js:410 +#: src/views/Publication/Player.js:413 msgid "Google Analytics ID" msgstr "Google Analytics ID" -#: src/views/Publication/Player.js:420 +#: src/views/Publication/Player.js:423 msgid "Google Analytics Tracker Name" msgstr "Nome do Google Analytics Tracker" -#: src/views/Edit/index.js:471 -#: src/views/Main/index.js:369 +#: src/views/Main/index.js:403 msgid "HLS" msgstr "HLS" -#: src/views/Settings.js:1510 +#: src/views/Edit/index.js:483 +msgid "HLS output" +msgstr "Saída HLS" + +#: src/views/Edit/Wizard/Sources/InternalHLS.js:73 +msgid "HLS server" +msgstr "Servidor HLS" + +#: src/views/Settings.js:1580 msgid "HLS statistic for the In-memory storage" msgstr "Estatísticas HLS para o armazenamento In-memory" -#: src/views/Edit/Sources/Network.js:429 +#: src/views/Edit/Sources/Network.js:511 msgid "HTTP and HTTPS" msgstr "HTTP e HTTPS" -#: src/views/Settings.js:1323 +#: src/views/Settings.js:1391 msgid "HTTP port" msgstr "Porta HTTP" -#: src/views/Settings.js:1352 +#: src/views/Settings.js:1420 msgid "HTTPS (SSL/TLS)" msgstr "HTTPS (SSL/TLS)" -#: src/views/Settings.js:1336 +#: src/views/Settings.js:1404 msgid "HTTPS port" msgstr "Porto HTTPS" -#: src/views/Edit/Sources/V4L.js:151 +#: src/views/Edit/Sources/V4L.js:154 #: src/views/Edit/Wizard/Sources/V4L.js:140 msgid "Hardware device" msgstr "Dispositivo de ferragens" -#: src/views/Playersite.js:579 +#: src/views/Playersite.js:595 msgid "Header" msgstr "Cabeçalho" -#: src/views/Playersite.js:535 +#: src/views/Playersite.js:551 msgid "Headline" msgstr "Manchete" +#: src/misc/filters/video/HFlip.js:65 +msgid "Horizontal Flip" +msgstr "Horizontal Flip" + #: src/views/Login.js:319 msgid "Hosted Restreamer interface" msgstr "Interface Restreamer hospedado" -#: src/views/Settings.js:1258 +#: src/views/Settings.js:1326 msgid "Human readable name on the service." msgstr "Nome legível pelo ser humano no serviço." @@ -987,24 +1057,24 @@ msgstr "Nome legível pelo ser humano no serviço." msgid "IP address" msgstr "Endereço IP" -#: src/views/Settings.js:2008 +#: src/views/Settings.js:2159 msgid "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." msgstr "Se você mudou os portos, pode ser que o Restreamer Core já tenha reiniciado, mas agora ele está disponível em um porto diferente." -#: src/views/Settings.js:2002 +#: src/views/Settings.js:2153 msgid "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." msgstr "Se você ativou Let's Encrypt TLS, pode levar algum tempo para adquirir os certificados. Certifique-se de que o Restreamer Core esteja acessível via porta 80 a partir da Internet. Por favor, verifique o log do console do Restreamer Core." -#: src/views/Settings.js:1525 +#: src/views/Settings.js:1595 msgid "Ignore IP ranges" msgstr "Ignorar as faixas de IP" -#: src/views/Playersite.js:624 -#: src/views/Publication/Player.js:366 +#: src/views/Playersite.js:640 +#: src/views/Publication/Player.js:369 msgid "Image URL" msgstr "URL da imagem" -#: src/views/Playersite.js:649 +#: src/views/Playersite.js:665 msgid "Imprint" msgstr "Impresso" @@ -1012,7 +1082,8 @@ msgstr "Impresso" msgid "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." msgstr "Além do jogador, o Restreamer oferece uma página de desembarque completa, que você pode usar para apresentar seu stream ao vivo com facilidade e rapidez." -#: src/views/Settings.js:1577 +#: src/misc/controls/HLS.js:67 +#: src/views/Settings.js:1647 msgid "In-memory" msgstr "In-memory" @@ -1021,39 +1092,35 @@ msgstr "In-memory" msgid "In-memory storage" msgstr "Armazenamento em memória" -#: src/views/Publication/Add.js:269 +#: src/views/Publication/Add.js:273 msgid "Incompatible" msgstr "Incompatível" #: src/misc/coders/settings/Audio.js:67 #: src/misc/coders/settings/Audio.js:118 +#: src/misc/filters/audio/Pan.js:47 +#: src/misc/filters/audio/Resample.js:59 +#: src/misc/filters/audio/Resample.js:110 +#: src/misc/filters/audio/Volume.js:46 msgid "Inherit" msgstr "Inerte" -#: src/views/Playersite.js:707 +#: src/views/Playersite.js:723 msgid "Inject 1" msgstr "Injetar 1" -#: src/views/Playersite.js:727 +#: src/views/Playersite.js:743 msgid "Inject 2" msgstr "Injetar 2" -#: src/views/Playersite.js:747 +#: src/views/Playersite.js:763 msgid "Inject 3" msgstr "Injetar 3" -#: src/views/Playersite.js:767 +#: src/views/Playersite.js:783 msgid "Inject 4" msgstr "Injetar 4" -#: src/views/Edit/Wizard/Sources/InternalHLS.js:75 -msgid "Internal HLS server" -msgstr "Servidor interno HLS" - -#: src/views/Edit/Wizard/Sources/InternalRTMP.js:95 -msgid "Internal RTMP server" -msgstr "Servidor RTMP interno" - #: src/misc/controls/Snapshot.js:50 msgid "Interval (seconds)" msgstr "Intervalo (segundos)" @@ -1068,28 +1135,29 @@ msgid "Keyframe interval (seconds)" msgstr "Intervalo do quadro-chave (segundos)" #: src/misc/coders/settings/Audio.js:97 +#: src/misc/filters/audio/Resample.js:89 msgid "Layout" msgstr "Layout" -#: src/views/Settings.js:1357 +#: src/views/Settings.js:1425 msgid "Let's Encrypt certification" msgstr "Vamos encriptar a certificação" -#: src/views/Settings.js:1365 +#: src/views/Settings.js:1433 msgid "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." msgstr "Vamos Encriptar requer um ou mais nomes de domínio público e uma porta 80/TCP acessível." -#: src/misc/coders/Encoders/video/H264NVENC.js:109 +#: src/misc/coders/Encoders/video/H264NVENC.js:112 msgid "Level" msgstr "Nível" -#: src/views/Settings.js:1918 +#: src/views/Settings.js:2069 msgid "Level of system protocol." msgstr "Nível de protocolo do sistema." -#: src/views/Edit/Wizard/index.js:1061 -#: src/views/Edit/index.js:403 -#: src/views/Edit/index.js:525 +#: src/views/Edit/Wizard/index.js:1076 +#: src/views/Edit/index.js:415 +#: src/views/Edit/index.js:579 msgid "License" msgstr "Licença" @@ -1097,28 +1165,28 @@ msgstr "Licença" msgid "Life color" msgstr "Cor da vida" -#: src/views/Playersite.js:606 +#: src/views/Playersite.js:622 msgid "Linecolor" msgstr "Linecolor" -#: src/views/Playersite.js:544 -#: src/views/Publication/Player.js:396 +#: src/views/Playersite.js:560 +#: src/views/Publication/Player.js:399 msgid "Link" msgstr "Link" -#: src/views/Playersite.js:553 +#: src/views/Playersite.js:569 msgid "Link, mouseover" msgstr "Link, mouseover" -#: src/views/Settings.js:1533 +#: src/views/Settings.js:1603 msgid "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." msgstr "Lista de faixas de IP na notação CIDR, por exemplo, 127.0.0.0.1/32, que as estatísticas não registrarão uma faixa IP por linha. Deixe em branco para registrar todas as sessões." -#: src/views/Settings.js:1751 +#: src/views/Settings.js:1821 msgid "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." msgstr "Lista de extensões de arquivo para cache (por exemplo, \".html\"), uma por linha. Deixar vazio para o cache de todos os tipos de arquivo." -#: src/misc/controls/HLS.js:74 +#: src/misc/controls/HLS.js:107 msgid "List size (segments)" msgstr "Tamanho da lista (segmentos)" @@ -1142,13 +1210,13 @@ msgstr "Live-Streaming para Vimeo Live RTMP Service" msgid "Livesource ID" msgstr "Identificação de fonte de vida" -#: src/views/Settings.js:1870 +#: src/views/Settings.js:2021 msgid "Log level" msgstr "Nível de log" #: src/misc/modals/Process.js:90 -#: src/views/Settings.js:1147 -#: src/views/Settings.js:1846 +#: src/views/Settings.js:1215 +#: src/views/Settings.js:1997 msgid "Logging" msgstr "Logging" @@ -1159,23 +1227,23 @@ msgstr "Logging" msgid "Login" msgstr "Login" -#: src/utils/restreamer.js:263 #: src/utils/restreamer.js:268 -#: src/utils/restreamer.js:297 +#: src/utils/restreamer.js:273 #: src/utils/restreamer.js:302 +#: src/utils/restreamer.js:307 msgid "Login failed: Couldn't load API details" msgstr "O login falhou: Não foi possível carregar detalhes API" -#: src/utils/restreamer.js:254 -#: src/utils/restreamer.js:288 +#: src/utils/restreamer.js:259 +#: src/utils/restreamer.js:293 msgid "Login failed: {0}" msgstr "O login falhou: {0}" -#: src/views/Settings.js:1425 +#: src/views/Settings.js:1493 msgid "Login/JWT authorization" msgstr "Login/JWT autorização" -#: src/views/Publication/Player.js:321 +#: src/views/Publication/Player.js:324 msgid "Logo" msgstr "Logotipo" @@ -1183,24 +1251,28 @@ msgstr "Logotipo" msgid "Logout" msgstr "Logout" +#: src/misc/filters/audio/Loudnorm.js:66 +msgid "Loudness Normalization" +msgstr "Normalização do ruído" + #: src/Footer.js:208 msgid "MB" msgstr "MB" -#: src/views/Edit/index.js:380 +#: src/views/Edit/index.js:392 msgid "Main Source" msgstr "Fonte principal" -#: src/views/Main/index.js:260 +#: src/views/Main/index.js:289 #: src/views/Playersite.js:389 msgid "Main channel" msgstr "Canal principal" -#: src/views/Publication/Player.js:102 +#: src/views/Publication/Player.js:99 msgid "Main channel not found" msgstr "Canal principal não encontrado" -#: src/views/Edit/Wizard/index.js:188 +#: src/views/Edit/Wizard/index.js:194 msgid "Main channel saved" msgstr "Canal principal salvo" @@ -1208,63 +1280,70 @@ msgstr "Canal principal salvo" msgid "Main page channel (index.html)." msgstr "Canal da página principal (index.html)." -#: src/views/Publication/Add.js:411 -#: src/views/Publication/Add.js:444 -#: src/views/Publication/Add.js:511 -#: src/views/Publication/Edit.js:419 -#: src/views/Publication/Edit.js:483 -#: src/views/Publication/Edit.js:552 +#: src/views/Publication/TabContent.js:49 msgid "Maintainer:" msgstr "Mantenedor:" -#: src/views/Settings.js:1710 +#: src/misc/controls/RTMP.js:54 +msgid "Make the channel available as an RTMP stream (experimental)." +msgstr "Tornar o canal disponível como um fluxo RTMP (experimental)." + +#: src/misc/controls/SRT.js:54 +msgid "Make the channel available as an SRT stream (experimental)." +msgstr "Tornar o canal disponível como um fluxo SRT (experimental)." + +#: src/misc/controls/HLS.js:117 +msgid "Master playlist (increases browser/client compatibility)" +msgstr "Lista de reprodução principal (aumenta a compatibilidade navegador/cliente)" + +#: src/views/Settings.js:1780 msgid "Maximum allowed cache size, 0 for unlimited." msgstr "Tamanho máximo de cache permitido, 0 para ilimitado." -#: src/views/Settings.js:1632 +#: src/views/Settings.js:1702 msgid "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." msgstr "Máximo permitido de megabytes de RAM para /memfs, 0 para ilimitado." -#: src/views/Settings.js:1676 +#: src/views/Settings.js:1746 msgid "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." msgstr "Consumo máximo permitido de megabytes a partir do disco rígido. 0 por ilimitado." -#: src/views/Settings.js:1394 +#: src/views/Settings.js:1462 msgid "Maximum bandwidth Mbit/s" msgstr "Largura de banda máxima Mbit/s" -#: src/misc/coders/Encoders/audio/Opus.js:74 +#: src/misc/coders/Encoders/audio/Opus.js:76 msgid "Maximum delay in milliseconds." msgstr "Atraso máximo em milissegundos." -#: src/views/Settings.js:1728 +#: src/views/Settings.js:1798 msgid "Maximum file size (Megabytes)" msgstr "Tamanho máximo do arquivo (Megabytes)" -#: src/views/Settings.js:1736 +#: src/views/Settings.js:1806 msgid "Maximum file size to put in cache." msgstr "Tamanho máximo de arquivo para colocar em cache." -#: src/views/Settings.js:1954 +#: src/views/Settings.js:2105 msgid "Maximum log histroy" msgstr "Histórico log máximo" -#: src/views/Settings.js:1923 -#: src/views/Settings.js:1941 +#: src/views/Settings.js:2074 +#: src/views/Settings.js:2092 msgid "Maximum log lines" msgstr "Máximo de linhas de toras" -#: src/views/Settings.js:1624 -#: src/views/Settings.js:1668 -#: src/views/Settings.js:1702 +#: src/views/Settings.js:1694 +#: src/views/Settings.js:1738 +#: src/views/Settings.js:1772 msgid "Maximum size (Megabytes)" msgstr "Tamanho máximo (Megabytes)" -#: src/views/Settings.js:1542 +#: src/views/Settings.js:1612 msgid "Maximum viewer idle time (Seconds)" msgstr "Tempo máximo de ociosidade do espectador (segundos)" -#: src/views/Settings.js:1378 +#: src/views/Settings.js:1446 msgid "Maximum viewers" msgstr "Máximo de espectadores" @@ -1272,12 +1351,12 @@ msgstr "Máximo de espectadores" msgid "Memory" msgstr "Memória" -#: src/views/Edit/index.js:402 +#: src/views/Edit/index.js:414 msgid "Meta information" msgstr "Meta informação" -#: src/views/Edit/Wizard/index.js:1006 -#: src/views/Edit/index.js:505 +#: src/views/Edit/Wizard/index.js:1021 +#: src/views/Edit/index.js:559 msgid "Metadata" msgstr "Metadados" @@ -1299,44 +1378,56 @@ msgstr "Mais sobre os direitos autorais do YouTube <0>aqui." msgid "More about licenses here" msgstr "Mais sobre licenças aqui" -#: src/views/Settings.js:1227 +#: src/views/Settings.js:1295 msgid "More about the service" msgstr "Mais sobre o serviço" -#: src/views/Publication/Player.js:438 +#: src/views/Publication/Player.js:441 msgid "Mute" msgstr "Mudo" +#: src/misc/filters/audio/Pan.js:57 +msgid "Mute a channel." +msgstr "Silenciar um canal." + +#: src/misc/filters/audio/Pan.js:50 +msgid "Mute left" +msgstr "Mudo à esquerda" + +#: src/misc/filters/audio/Pan.js:53 +msgid "Mute right" +msgstr "Direito mudo" + #: src/misc/ChannelList.js:380 #: src/misc/controls/Metadata.js:76 #: src/misc/controls/Metadata.js:98 -#: src/views/Playersite.js:489 -#: src/views/Settings.js:1250 +#: src/views/Playersite.js:505 +#: src/views/Settings.js:1318 msgid "Name" msgstr "Nome" -#: src/views/Playersite.js:494 +#: src/views/Playersite.js:510 msgid "Name for the template. If the name already exists, it will be overwritten." msgstr "Nome para o modelo. Se o nome já existir, ele será sobregravado." -#: src/views/Settings.js:1142 -#: src/views/Settings.js:1297 +#: src/views/Settings.js:1209 +#: src/views/Settings.js:1365 msgid "Network" msgstr "Rede" -#: src/views/Edit/Sources/Network.js:684 -#: src/views/Edit/Wizard/Sources/Network.js:110 +#: src/views/Edit/Sources/Network.js:840 +#: src/views/Edit/Wizard/Sources/Network.js:123 msgid "Network source" msgstr "Fonte da rede" -#: src/views/Edit/Wizard/index.js:413 -#: src/views/Edit/Wizard/index.js:652 -#: src/views/Edit/Wizard/index.js:917 -#: src/views/Edit/Wizard/index.js:1029 +#: src/views/Edit/Wizard/index.js:428 +#: src/views/Edit/Wizard/index.js:667 +#: src/views/Edit/Wizard/index.js:932 +#: src/views/Edit/Wizard/index.js:1044 msgid "Next" msgstr "Próximo" -#: src/views/Edit/Profile.js:413 +#: src/views/Edit/Profile.js:436 msgid "Next: Audio" msgstr "A seguir: Áudio" @@ -1344,12 +1435,12 @@ msgstr "A seguir: Áudio" msgid "Next: Video setup" msgstr "A seguir: Configuração do vídeo" -#: src/views/Edit/Wizard/index.js:1182 +#: src/views/Edit/Wizard/index.js:1197 msgid "No" msgstr "Não" #: src/views/Edit/Sources/NoAudio.js:45 -#: src/views/Edit/Wizard/index.js:901 +#: src/views/Edit/Wizard/index.js:916 msgid "No audio" msgstr "Sem áudio" @@ -1362,11 +1453,11 @@ msgstr "Nenhum fluxo de áudio disponível" msgid "No input device available" msgstr "Nenhum dispositivo de entrada disponível" -#: src/views/Edit/Wizard/index.js:373 +#: src/views/Edit/Wizard/index.js:388 msgid "No live stream was detected. Please check the software that sends the stream." msgstr "Nenhum fluxo vivo foi detectado. Por favor, verifique o software que envia o fluxo." -#: src/views/Edit/Summary.js:28 +#: src/views/Edit/Summary.js:29 msgid "No source selected" msgstr "Nenhuma fonte selecionada" @@ -1378,8 +1469,12 @@ msgstr "Não há fontes disponíveis" msgid "No suitable encoder found." msgstr "Não foi encontrado nenhum codificador adequado." -#: src/views/Main/index.js:286 -#: src/views/Publication/Player.js:294 +#: src/misc/FilterSelect.js:106 +msgid "No suitable filter found." +msgstr "Não foi encontrado nenhum filtro adequado." + +#: src/views/Main/index.js:315 +#: src/views/Publication/Player.js:297 msgid "No video" msgstr "Nenhum vídeo" @@ -1387,7 +1482,7 @@ msgstr "Nenhum vídeo" msgid "No video stream available" msgstr "Nenhum fluxo de vídeo disponível" -#: src/views/Settings.js:1243 +#: src/views/Settings.js:1311 msgid "Node ID" msgstr "Identificação do nó" @@ -1396,44 +1491,61 @@ msgid "Noise" msgstr "Ruído" #: src/views/Edit/Sources/AVFoundation.js:145 -#: src/views/Edit/Summary.js:30 +#: src/views/Edit/Summary.js:31 +#: src/views/Edit/Summary.js:107 #: src/views/Edit/Wizard/Sources/AVFoundation.js:98 msgid "None" msgstr "Nenhum" #: src/views/Playersite.js:353 -#: src/views/Playersite.js:644 +#: src/views/Playersite.js:660 msgid "Notes" msgstr "Notas" -#: src/views/Settings.js:1931 -#: src/views/Settings.js:1949 +#: src/views/Settings.js:2082 +#: src/views/Settings.js:2100 msgid "Number of log lines to keep." msgstr "Número de linhas de registro a manter." -#: src/views/Settings.js:1962 +#: src/views/Settings.js:2113 msgid "Number of logs to keep for each process." msgstr "Número de logs a serem mantidos para cada processo." -#: src/views/Playersite.js:813 -#: src/views/Publication/Player.js:466 +#: src/views/Playersite.js:829 +#: src/views/Publication/Player.js:471 msgid "OK" msgstr "OK" -#: src/views/Settings.js:1497 +#: src/views/Settings.js:1567 msgid "One referrer per line, e.g. http://www.example.com" msgstr "Uma referência por linha, por exemplo http://www.example.com" -#: src/views/Playersite.js:798 +#: src/views/Playersite.js:814 msgid "Open" msgstr "Aberto" -#: src/views/Publication/Edit.js:510 +#: src/misc/filters/audio/Pan.js:45 +msgid "Pan" +msgstr "Pan" + +#: src/views/Settings.js:1971 +msgid "Passphrase" +msgstr "Passphrase" + +#: src/views/Settings.js:1988 +msgid "Passphrase for SRT encryption." +msgstr "Frases para criptografia SRT." + +#: src/views/Settings.js:1980 +msgid "Passphrase must be between 10 and 79 characters long" +msgstr "A frase-senha deve ter entre 10 e 79 caracteres" + +#: src/views/Publication/Edit.js:483 msgid "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." msgstr "A passagem (cópia) só deve ser desativada se necessário. Cada codificação requer recursos adicionais de CPU/GPU." -#: src/views/Edit/Sources/Network.js:382 -#: src/views/Edit/Wizard/Sources/Network.js:88 +#: src/views/Edit/Sources/Network.js:460 +#: src/views/Edit/Wizard/Sources/Network.js:97 #: src/views/Login.js:282 #: src/views/Publication/Services/Akamai.js:134 #: src/views/Publication/Services/DASH.js:198 @@ -1442,22 +1554,22 @@ msgstr "A passagem (cópia) só deve ser desativada se necessário. Cada codific #: src/views/Publication/Services/RTSP.js:156 #: src/views/Publication/Services/Red5.js:157 #: src/views/Publication/Services/WOWZA.js:178 -#: src/views/Settings.js:1453 -#: src/views/Settings.js:1611 +#: src/views/Settings.js:1523 +#: src/views/Settings.js:1681 msgid "Password" msgstr "Senha" -#: src/views/Settings.js:1459 -#: src/views/Settings.js:1619 +#: src/views/Settings.js:1529 +#: src/views/Settings.js:1689 msgid "Password for authorization." msgstr "Senha para autorização." -#: src/views/Edit/Sources/Network.js:387 -#: src/views/Edit/Wizard/Sources/Network.js:90 +#: src/views/Edit/Sources/Network.js:465 +#: src/views/Edit/Wizard/Sources/Network.js:103 msgid "Password for the device." msgstr "Senha para o dispositivo." -#: src/views/Settings.js:1555 +#: src/views/Settings.js:1625 msgid "Persist viewer statistics" msgstr "Estatísticas persistentes dos telespectadores" @@ -1469,25 +1581,25 @@ msgstr "Formato Pixel" msgid "Plan: <0>Starter" msgstr "Plano: <0>Iniciador" -#: src/views/Publication/Add.js:347 +#: src/views/Publication/Add.js:349 msgid "Platforms" msgstr "Plataformas" -#: src/views/Publication/Player.js:323 -#: src/views/Settings.js:1144 -#: src/views/Settings.js:1468 +#: src/views/Publication/Player.js:326 +#: src/views/Settings.js:1211 +#: src/views/Settings.js:1538 msgid "Playback" msgstr "Reprodução" -#: src/views/Main/Egress.js:95 +#: src/views/Main/Egress.js:100 msgid "Player" msgstr "Jogador" -#: src/views/Publication/Player.js:328 +#: src/views/Publication/Player.js:331 msgid "Player URL" msgstr "URL do jogador" -#: src/views/Publication/Player.js:257 +#: src/views/Publication/Player.js:254 msgid "Player settings saved" msgstr "Configurações do jogador salvas" @@ -1501,20 +1613,26 @@ msgstr "Playersite" msgid "Playlist" msgstr "Lista de reprodução" -#: src/views/Main/index.js:329 +#: src/misc/controls/HLS.js:88 +msgid "Playlist version (M3U8). Version 3 has the best browser/client compatibility." +msgstr "Versão da lista de reprodução (M3U8). A versão 3 tem a melhor compatibilidade navegador/cliente." + +#: src/views/Main/index.js:358 msgid "Please check the <0>process log" msgstr "Por favor, verifique o <0>log de processo" #: src/views/Publication/Services/Akamai.js:29 +#: src/views/Publication/Services/Azure.js:29 #: src/views/Publication/Services/Bitmovin.js:23 #: src/views/Publication/Services/Brightcove.js:23 #: src/views/Publication/Services/CDN77.js:23 -#: src/views/Publication/Services/Core.js:26 +#: src/views/Publication/Services/Core.js:27 #: src/views/Publication/Services/DASH.js:35 #: src/views/Publication/Services/DaCast.js:26 #: src/views/Publication/Services/HLS.js:37 #: src/views/Publication/Services/Icecast.js:29 #: src/views/Publication/Services/Image2.js:33 +#: src/views/Publication/Services/Linkedin.js:24 #: src/views/Publication/Services/Livespotting.js:23 #: src/views/Publication/Services/MPEGTS.js:35 #: src/views/Publication/Services/RTMP.js:32 @@ -1527,37 +1645,42 @@ msgstr "Por favor, verifique o <0>log de processo" msgid "Please contact the operator of the service and check what happens." msgstr "Favor contatar o operador do serviço e verificar o que acontece." +#: src/views/Publication/Services/Owncast.js:23 +#: src/views/Publication/Services/Telegram.js:14 +msgid "Please get in touch with the operator of the service and check what happens." +msgstr "Favor entrar em contato com o operador do serviço e verificar o que acontece." + #: src/views/Playersite.js:122 #: src/views/Playersite.js:197 -#: src/views/Publication/Player.js:159 +#: src/views/Publication/Player.js:156 msgid "Please select a file to upload." msgstr "Por favor, selecione um arquivo para carregar." -#: src/views/Publication/Add.js:471 +#: src/views/Publication/Add.js:446 msgid "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." msgstr "Favor utilizar \"Passthrough (cópia)\", se possível. A codificação requer recursos adicionais de CPU/GPU." -#: src/views/Edit/Wizard/index.js:435 -#: src/views/Edit/Wizard/index.js:933 +#: src/views/Edit/Wizard/index.js:450 +#: src/views/Edit/Wizard/index.js:948 msgid "Please wait. Probe stream data ..." msgstr "Por favor, aguarde. Dados do fluxo da sonda ..." -#: src/views/Edit/Wizard/index.js:1103 +#: src/views/Edit/Wizard/index.js:1118 msgid "Please wait. Setting up the stream ..." msgstr "Por favor, aguarde. Preparando o fluxo ..." #: src/views/Publication/Services/Bitmovin.js:92 -#: src/views/Settings.js:1803 +#: src/views/Settings.js:1945 msgid "Port" msgstr "Porto" -#: src/views/Publication/Player.js:381 +#: src/views/Publication/Player.js:384 msgid "Position" msgstr "Posição" -#: src/misc/coders/Encoders/video/H264NVENC.js:67 -#: src/misc/coders/Encoders/video/X264.js:62 -#: src/misc/coders/Encoders/video/X265.js:62 +#: src/misc/coders/Encoders/video/H264NVENC.js:70 +#: src/misc/coders/Encoders/video/X264.js:72 +#: src/misc/coders/Encoders/video/X265.js:72 msgid "Preset" msgstr "Predefinição" @@ -1572,92 +1695,96 @@ msgstr "Chave de fluxo primário" #: src/views/Edit/Sources/ALSA.js:136 #: src/views/Edit/Sources/AVFoundation.js:201 #: src/views/Edit/Sources/Framebuffer.js:110 -#: src/views/Edit/Sources/Network.js:505 -#: src/views/Edit/Sources/Network.js:552 -#: src/views/Edit/Sources/Network.js:599 -#: src/views/Edit/Sources/Raspicam.js:113 -#: src/views/Edit/Sources/V4L.js:131 +#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:660 +#: src/views/Edit/Sources/Network.js:706 +#: src/views/Edit/Sources/Network.js:755 +#: src/views/Edit/Sources/Raspicam.js:116 +#: src/views/Edit/Sources/V4L.js:134 #: src/views/Edit/Sources/VirtualAudio.js:169 #: src/views/Edit/Sources/VirtualVideo.js:188 msgid "Probe" msgstr "Sonda" -#: src/views/Edit/index.js:493 -#: src/views/Publication/Add.js:433 -#: src/views/Publication/Edit.js:441 +#: src/views/Edit/index.js:547 +#: src/views/Publication/Add.js:407 +#: src/views/Publication/Edit.js:420 msgid "Process" msgstr "Processo" -#: src/views/Publication/Add.js:373 -#: src/views/Publication/Edit.js:387 +#: src/views/Publication/Add.js:376 +#: src/views/Publication/Edit.js:395 msgid "Process control" msgstr "Controle de processo" -#: src/views/Publication/Edit.js:471 -msgid "Process debug" -msgstr "Processo de depuração" - -#: src/views/Main/index.js:413 -#: src/views/Publication/Edit.js:591 +#: src/views/Main/index.js:472 +#: src/views/Publication/Edit.js:553 msgid "Process debug report" msgstr "Relatório de depuração do processo" -#: src/views/Main/index.js:389 -#: src/views/Main/index.js:405 -#: src/views/Publication/Edit.js:468 -#: src/views/Publication/Edit.js:583 +#: src/views/Main/index.js:448 +#: src/views/Main/index.js:464 +#: src/views/Publication/Edit.js:444 +#: src/views/Publication/Edit.js:545 msgid "Process details" msgstr "Detalhes do processo" -#: src/views/Main/index.js:392 +#: src/views/Main/index.js:451 +#: src/views/Publication/Edit.js:447 msgid "Process report" msgstr "Relatório de processo" -#: src/views/Edit/index.js:401 -#: src/views/Edit/index.js:463 +#: src/views/Edit/index.js:413 +#: src/views/Edit/index.js:475 msgid "Processing & Control" msgstr "Processamento e controle" -#: src/misc/coders/Encoders/video/H264NVENC.js:92 -#: src/misc/coders/Encoders/video/H264VAAPI.js:82 +#: src/misc/coders/Encoders/video/H264NVENC.js:95 +#: src/misc/coders/Encoders/video/H264VAAPI.js:85 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:85 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:85 #: src/misc/coders/settings/Video.js:142 -#: src/views/Edit/Wizard/index.js:607 +#: src/views/Edit/Wizard/index.js:622 msgid "Profile" msgstr "Perfil" -#: src/views/Edit/Sources/Network.js:520 +#: src/views/Edit/Sources/Network.js:623 #: src/views/Publication/Services/Akamai.js:144 #: src/views/Publication/Services/Akamai.js:182 +#: src/views/Publication/Services/Azure.js:89 #: src/views/Publication/Services/Bitmovin.js:86 #: src/views/Publication/Services/Brightcove.js:87 #: src/views/Publication/Services/CDN77.js:90 -#: src/views/Publication/Services/Core.js:91 +#: src/views/Publication/Services/Core.js:106 #: src/views/Publication/Services/DASH.js:186 #: src/views/Publication/Services/DaCast.js:110 #: src/views/Publication/Services/DaCast.js:168 #: src/views/Publication/Services/HLS.js:175 #: src/views/Publication/Services/Icecast.js:154 #: src/views/Publication/Services/Image2.js:120 +#: src/views/Publication/Services/Linkedin.js:84 #: src/views/Publication/Services/MPEGTS.js:154 +#: src/views/Publication/Services/Owncast.js:88 #: src/views/Publication/Services/RTMP.js:122 #: src/views/Publication/Services/RTSP.js:144 #: src/views/Publication/Services/Red5.js:105 #: src/views/Publication/Services/SRT.js:158 +#: src/views/Publication/Services/Telegram.js:79 #: src/views/Publication/Services/UDP.js:124 #: src/views/Publication/Services/WOWZA.js:122 msgid "Protocol" msgstr "Protocolo" -#: src/views/Publication/Add.js:353 +#: src/views/Publication/Add.js:355 msgid "Protocols" msgstr "Protocolos" -#: src/views/Settings.js:1307 +#: src/views/Settings.js:1375 msgid "Public domain/s" msgstr "Domínio público/s" -#: src/views/Publication/Edit.js:113 -#: src/views/Publication/Edit.js:123 +#: src/views/Publication/Edit.js:107 +#: src/views/Publication/Edit.js:117 msgid "Publication service not found" msgstr "Serviço de publicação não encontrado" @@ -1669,16 +1796,18 @@ msgstr "Configurações do site de publicação salvas" msgid "Publications" msgstr "Publicações" -#: src/views/Edit/Sources/Network.js:657 +#: src/views/Edit/Sources/Network.js:813 msgid "Pull Mode" msgstr "Modo Puxar" -#: src/views/Edit/Sources/Network.js:656 +#: src/views/Edit/Sources/Network.js:812 msgid "Pull or recieve the data:" msgstr "Puxar ou receber os dados:" #: src/misc/Progress.js:90 -#: src/misc/coders/Encoders/video/H264VAAPI.js:137 +#: src/misc/coders/Encoders/video/H264VAAPI.js:140 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:140 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:140 msgid "Quality" msgstr "Qualidade" @@ -1686,47 +1815,67 @@ msgstr "Qualidade" msgid "RGB test pattern" msgstr "Padrão de teste RGB" -#: src/views/Settings.js:1824 +#: src/views/Main/index.js:412 +#: src/views/Settings.js:1213 +#: src/views/Settings.js:1830 +msgid "RTMP" +msgstr "RTMP" + +#: src/views/Settings.js:1871 +msgid "RTMP Port" +msgstr "Porto RTMP" + +#: src/views/Settings.js:1905 msgid "RTMP app for publishing." msgstr "Aplicação RTMP para publicação." -#: src/views/Settings.js:1765 +#: src/views/Edit/index.js:498 +msgid "RTMP output" +msgstr "Saída RTMP" + +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:93 +#: src/views/Settings.js:1835 msgid "RTMP server" msgstr "Servidor RTMP" -#: src/views/Edit/Sources/Network.js:572 +#: src/views/Edit/Sources/Network.js:679 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:50 msgid "RTMP server is not enabled" msgstr "O servidor RTMP não está habilitado" -#: src/views/Settings.js:1811 +#: src/views/Settings.js:1879 msgid "RTMP server listen address." msgstr "Endereço de escuta do servidor RTMP." -#: src/views/Settings.js:1837 +#: src/views/Settings.js:1918 msgid "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" msgstr "Ficha RTMP para publicação e reprodução. O token é o valor do parâmetro de consulta de URL 'token'" -#: src/views/Settings.js:1146 -#: src/views/Settings.js:1760 -msgid "RTMP/S" -msgstr "RTMP/S" +#: src/views/Settings.js:1884 +msgid "RTMPS Port" +msgstr "Porto RTMPS" -#: src/views/Settings.js:1772 +#: src/views/Settings.js:1843 msgid "RTMPS server" msgstr "Servidor RTMPS" -#: src/views/Edit/Sources/Network.js:405 +#: src/views/Settings.js:1892 +msgid "RTMPS server listen address." +msgstr "Endereço de escuta do servidor RTMPS." + +#: src/views/Edit/Sources/Network.js:483 msgid "RTSP" msgstr "RTSP" -#: src/views/Edit/Sources/Raspicam.js:132 +#: src/views/Edit/Sources/Raspicam.js:135 #: src/views/Edit/Wizard/Sources/Raspicam.js:117 msgid "Raspberry Pi camera" msgstr "Câmera Raspberry Pi" -#: src/misc/coders/Encoders/video/H264NVENC.js:144 -#: src/misc/coders/Encoders/video/H264VAAPI.js:63 +#: src/misc/coders/Encoders/video/H264NVENC.js:147 +#: src/misc/coders/Encoders/video/H264VAAPI.js:66 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:66 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:66 msgid "Rate control" msgstr "Controle de tarifas" @@ -1734,11 +1883,11 @@ msgstr "Controle de tarifas" msgid "Ratio" msgstr "Relação" -#: src/views/Edit/Sources/Network.js:434 +#: src/views/Edit/Sources/Network.js:516 msgid "Read input at native speed" msgstr "Ler a entrada em velocidade nativa" -#: src/views/Edit/Sources/Network.js:658 +#: src/views/Edit/Sources/Network.js:814 msgid "Receive Mode" msgstr "Modo Receber" @@ -1752,13 +1901,13 @@ msgstr "Reconecte" msgid "Reconnect delay (seconds)" msgstr "Retardo de reconexão (segundos)" -#: src/views/Main/index.js:340 +#: src/views/Main/index.js:369 #: src/views/Publication/Process.js:68 #: src/views/Publication/Process.js:81 msgid "Reconnecting in {0}s" msgstr "Reconexão em {0}s" -#: src/views/Settings.js:1999 +#: src/views/Settings.js:2150 msgid "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." msgstr "A reconexão ao Restreamer Core falhou durante os últimos {RETRIES} segundos." @@ -1768,7 +1917,7 @@ msgstr "A reconexão com o Restreamer Core falhou." #: src/views/Edit/Sources/ALSA.js:122 #: src/views/Edit/Sources/AVFoundation.js:181 -#: src/views/Edit/Sources/V4L.js:117 +#: src/views/Edit/Sources/V4L.js:120 #: src/views/Edit/Wizard/Sources/AVFoundation.js:135 #: src/views/Edit/Wizard/Sources/V4L.js:120 msgid "Refresh" @@ -1782,72 +1931,105 @@ msgid "Region" msgstr "Região" #: src/views/Password.js:159 -#: src/views/Settings.js:2019 +#: src/views/Settings.js:2170 msgid "Reload" msgstr "Recarregar" -#: src/views/Settings.js:1637 +#: src/views/Settings.js:1707 msgid "Remove the oldest entries if the /memfs is full" msgstr "Remover as entradas mais antigas se o /memfs estiver cheio" -#: src/views/Settings.js:1784 +#: src/views/Settings.js:1852 msgid "Requires activation" msgstr "Requer ativação" -#: src/views/Settings.js:1206 -#: src/views/Settings.js:2036 -#: src/views/Settings.js:2049 -#: src/views/Settings.js:2058 +#: src/views/Settings.js:1274 +#: src/views/Settings.js:2187 +#: src/views/Settings.js:2200 +#: src/views/Settings.js:2209 msgid "Restart" msgstr "Reinicie" -#: src/views/Settings.js:2027 +#: src/views/Settings.js:2178 msgid "Restart required" msgstr "Reinício necessário" #: src/views/Password.js:136 -#: src/views/Settings.js:1987 +#: src/views/Settings.js:2138 msgid "Restarting" msgstr "Reinicialização" #: src/views/Password.js:141 -#: src/views/Settings.js:1992 +#: src/views/Settings.js:2143 msgid "Restarting Restreamer Core ..." msgstr "Reiniciando o Núcleo de Restreamer ..." -#: src/views/Settings.js:1015 +#: src/views/Settings.js:1082 msgid "Restarting the application failed." msgstr "A reinicialização do pedido falhou." -#: src/views/Settings.js:1234 +#: src/views/Settings.js:1302 msgid "Restreamer Service" msgstr "Serviço de Restreamer" -#: src/views/Main/index.js:239 +#: src/views/Main/index.js:267 msgid "Retrieving stream data ..." msgstr "Recuperando dados do fluxo ..." -#: src/views/Edit/Wizard/index.js:1128 +#: src/views/Edit/Wizard/index.js:1143 #: src/views/Invalid.js:43 -#: src/views/Settings.js:1116 +#: src/views/Settings.js:1183 msgid "Retry" msgstr "Tentativa" +#: src/misc/filters/video/Transpose.js:46 +msgid "Rotate" +msgstr "Girar" + #: src/views/Edit/Sources/VirtualVideo.js:155 msgid "Rule" msgstr "Regra" +#: src/views/Main/index.js:422 +#: src/views/Settings.js:1214 +#: src/views/Settings.js:1927 +msgid "SRT" +msgstr "SRT" + +#: src/views/Edit/index.js:517 +msgid "SRT output" +msgstr "Saída SRT" + +#: src/views/Edit/Wizard/Sources/InternalSRT.js:93 +#: src/views/Settings.js:1932 +msgid "SRT server" +msgstr "Servidor SRT" + +#: src/views/Edit/Sources/Network.js:728 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:50 +msgid "SRT server is not enabled" +msgstr "O servidor SRT não está habilitado" + +#: src/views/Settings.js:1953 +msgid "SRT server listen address." +msgstr "Endereço de escuta do servidor SRT." + +#: src/views/Settings.js:1966 +msgid "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" +msgstr "Ficha SRT para publicação e reprodução. O token é o valor do parâmetro streamid 'token'." + #: src/misc/coders/settings/Audio.js:148 +#: src/misc/filters/audio/Resample.js:140 msgid "Sampling" msgstr "Amostragem" -#: src/views/Edit/Wizard/index.js:1087 -#: src/views/Edit/index.js:560 -#: src/views/Playersite.js:788 -#: src/views/Publication/Add.js:534 -#: src/views/Publication/Edit.js:571 -#: src/views/Publication/Player.js:452 -#: src/views/Settings.js:1977 +#: src/views/Edit/Wizard/index.js:1102 +#: src/views/Edit/index.js:614 +#: src/views/Playersite.js:804 +#: src/views/Publication/Add.js:498 +#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Player.js:457 +#: src/views/Settings.js:2128 msgid "Save" msgstr "Salvar" @@ -1855,7 +2037,7 @@ msgstr "Salvar" msgid "Scale" msgstr "Escala" -#: src/views/Settings.js:1723 +#: src/views/Settings.js:1793 msgid "Seconds to keep files in cache." msgstr "Segundos para manter os arquivos em cache." @@ -1871,24 +2053,28 @@ msgstr "Segundos até o término de um processo parado." msgid "Seconds until the snapshot/thumbnail of the video source is updated." msgstr "Segundos até que o instantâneo/imagem da fonte de vídeo seja atualizado." -#: src/views/Settings.js:1473 +#: src/views/Settings.js:1543 msgid "Security" msgstr "Segurança" -#: src/views/Publication/Services/Core.js:122 +#: src/views/Publication/Services/Core.js:145 +msgid "Security passphrase" +msgstr "Senha de segurança" + +#: src/views/Publication/Services/Core.js:138 #: src/views/Publication/Services/Livespotting.js:103 msgid "Security token" msgstr "Ficha de segurança" -#: src/views/Publication/Player.js:342 +#: src/views/Publication/Player.js:345 msgid "Seekbar color" msgstr "Cor da barra de busca" -#: src/misc/controls/HLS.js:62 +#: src/misc/controls/HLS.js:95 msgid "Segment length (seconds)" msgstr "Comprimento do segmento (segundos)" -#: src/misc/controls/HLS.js:67 +#: src/misc/controls/HLS.js:100 msgid "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." msgstr "O segmento será cortado no seguinte quadro-chave após este tempo ter passado. 2 é recomendado." @@ -1897,11 +2083,16 @@ msgstr "O segmento será cortado no seguinte quadro-chave após este tempo ter p msgid "Segmentation" msgstr "Segmentação" +#: src/views/Publication/Add.js:429 +#: src/views/Publication/Edit.js:470 +msgid "Select RTMP or SRT (if enabled) for less latency." +msgstr "Selecione RTMP ou SRT (se habilitado) para menos latência." + #: src/views/Edit/Sources/ALSA.js:108 #: src/views/Edit/Sources/AVFoundation.js:172 #: src/views/Edit/Sources/Framebuffer.js:99 -#: src/views/Edit/Sources/Raspicam.js:96 -#: src/views/Edit/Sources/V4L.js:103 +#: src/views/Edit/Sources/Raspicam.js:99 +#: src/views/Edit/Sources/V4L.js:106 #: src/views/Edit/Wizard/Sources/AVFoundation.js:120 #: src/views/Edit/Wizard/Sources/Raspicam.js:95 #: src/views/Edit/Wizard/Sources/V4L.js:114 @@ -1920,7 +2111,7 @@ msgstr "Selecione a fonte ..." msgid "Select video source:" msgstr "Selecione a fonte de vídeo:" -#: src/views/Edit/Wizard/index.js:268 +#: src/views/Edit/Wizard/index.js:283 msgid "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." msgstr "Selecione se você puxa o fluxo de uma <0> fonte de rede (como uma câmera de rede) ou o <1> servidor RTMP interno (por exemplo, fluxos OBS para o Restreamer)." @@ -1928,7 +2119,11 @@ msgstr "Selecione se você puxa o fluxo de uma <0> fonte de rede (como uma c msgid "Select your encoding setting:" msgstr "Selecione sua configuração de codificação:" -#: src/views/Playersite.js:588 +#: src/misc/FilterSelect.js:121 +msgid "Select your filter settings (optional):" +msgstr "Selecione suas configurações de filtro (opcional):" + +#: src/views/Playersite.js:604 msgid "Selected" msgstr "Selecionado" @@ -1936,18 +2131,20 @@ msgstr "Selecionado" msgid "Selected channel" msgstr "Canal selecionado" -#: src/views/Playersite.js:449 +#: src/views/Playersite.js:465 msgid "Selection" msgstr "Seleção" -#: src/views/Settings.js:1190 +#: src/views/Settings.js:1258 msgid "Send anonymous metrics (helps us for future development)" msgstr "Enviar métricas anônimas (nos ajuda para o desenvolvimento futuro)" -#: src/views/Edit/Sources/Network.js:542 -#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:650 +#: src/views/Edit/Sources/Network.js:696 +#: src/views/Edit/Sources/Network.js:745 #: src/views/Edit/Wizard/Sources/InternalHLS.js:48 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:68 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:68 msgid "Send stream to this address:" msgstr "Enviar fluxo para este endereço:" @@ -1959,19 +2156,24 @@ msgstr "Enviar vídeo para Framebuffer" msgid "Server" msgstr "Servidor" +#: src/views/Publication/Services/Owncast.js:100 +#: src/views/Publication/Services/Telegram.js:91 +msgid "Server URL" +msgstr "URL do servidor" + #: src/Header.js:257 #: src/views/Login.js:246 -#: src/views/Settings.js:1140 -#: src/views/Settings.js:1220 +#: src/views/Settings.js:1207 +#: src/views/Settings.js:1288 msgid "Service" msgstr "Serviço" -#: src/views/Publication/Add.js:392 +#: src/views/Publication/Add.js:387 #: src/views/Publication/Edit.js:406 msgid "Service name" msgstr "Nome do serviço" -#: src/views/Settings.js:1271 +#: src/views/Settings.js:1339 msgid "Service token for monitoring." msgstr "Ficha de serviço para monitoramento." @@ -1979,35 +2181,35 @@ msgstr "Ficha de serviço para monitoramento." msgid "Sessions" msgstr "Sessões" -#: src/views/Settings.js:1402 +#: src/views/Settings.js:1470 msgid "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Define um limite de largura de banda em Mbit por segundo para a transferência de dados HLS de saída. Todos os serviços, tais como RTMP e processos de saída, são incluídos no cálculo. Se a largura de banda for excedida, os visualizadores de HLS recebem o código de status HTTP 509 (Limite de Largura de Banda Excedido). 0 é ilimitado." -#: src/views/Settings.js:1386 +#: src/views/Settings.js:1454 msgid "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Define um limite de visualização para as sessões de HLS. Se o limite for excedido, os espectadores de HLS recebem o código de status HTTP 509 (Limite de Largura de Banda Excedido). 0 é ilimitado." -#: src/views/Settings.js:1225 +#: src/views/Settings.js:1293 msgid "Setting for connection to the service." msgstr "Configuração para conexão com o serviço." -#: src/views/Settings.js:1126 +#: src/views/Settings.js:1193 msgid "Settings" msgstr "Configurações" -#: src/views/Settings.js:1128 +#: src/views/Settings.js:1195 msgid "Settings (expert mode)" msgstr "Configurações (modo especialista)" -#: src/views/Settings.js:1653 +#: src/views/Settings.js:1723 msgid "Settings for /data path. The access is protected by" msgstr "Configurações para /dados de caminho. O acesso é protegido por" -#: src/views/Settings.js:1580 +#: src/views/Settings.js:1650 msgid "Settings for /memfs path." msgstr "Configurações para /memfs caminho." -#: src/views/Settings.js:958 +#: src/views/Settings.js:1025 msgid "Settings saved. All changes will be applied after restarting the application." msgstr "Configurações salvas. Todas as mudanças serão aplicadas após reiniciar a aplicação." @@ -2015,7 +2217,7 @@ msgstr "Configurações salvas. Todas as mudanças serão aplicadas após reinic msgid "Share button" msgstr "Botão compartilhar" -#: src/views/Playersite.js:431 +#: src/views/Playersite.js:447 msgid "Shows a reference to the project." msgstr "Mostra uma referência ao projeto." @@ -2027,7 +2229,7 @@ msgstr "Cadastre-se (gratuito)" msgid "Silence" msgstr "Silêncio" -#: src/views/Edit/Wizard/index.js:898 +#: src/views/Edit/Wizard/index.js:913 msgid "Silence Audio" msgstr "Áudio do silêncio" @@ -2043,8 +2245,8 @@ msgstr "Nome do Sitename" msgid "Size" msgstr "Tamanho" -#: src/views/Edit/index.js:482 -#: src/views/Main/index.js:372 +#: src/views/Edit/index.js:536 +#: src/views/Main/index.js:431 msgid "Snapshot" msgstr "Snapshot" @@ -2052,19 +2254,29 @@ msgstr "Snapshot" msgid "Social-login (OAuth2, 2FA)" msgstr "Login social (OAuth2, 2FA)" -#: src/views/Edit/Sources/Network.js:418 +#: src/views/Edit/Sources/Network.js:500 msgid "Socket timeout (microseconds)" msgstr "Tempo limite da tomada (microssegundos)" -#: src/views/Publication/Add.js:350 +#: src/views/Publication/Add.js:352 msgid "Software" msgstr "Software" +#: src/misc/controls/Source.js:74 #: src/views/Edit/Sources/VirtualAudio.js:88 #: src/views/Edit/Sources/VirtualVideo.js:112 +#: src/views/Publication/Add.js:424 +#: src/views/Publication/Edit.js:465 msgid "Source" msgstr "Fonte" +#: src/views/Publication/Add.js:375 +#: src/views/Publication/Add.js:419 +#: src/views/Publication/Edit.js:394 +#: src/views/Publication/Edit.js:460 +msgid "Source & Encoding" +msgstr "Fonte e Codificação" + #: src/misc/Progress.js:103 msgid "Speed" msgstr "Velocidade" @@ -2073,24 +2285,25 @@ msgstr "Velocidade" msgid "Stale timeout (seconds)" msgstr "Tempo esgotado (segundos)" -#: src/views/Publication/Player.js:322 -#: src/views/Settings.js:1505 +#: src/views/Publication/Player.js:325 +#: src/views/Settings.js:1575 msgid "Statistics" msgstr "Estatísticas" -#: src/views/Settings.js:1145 -#: src/views/Settings.js:1572 +#: src/misc/controls/HLS.js:65 +#: src/views/Settings.js:1212 +#: src/views/Settings.js:1642 msgid "Storage" msgstr "Armazenamento" -#: src/views/Settings.js:1563 +#: src/views/Settings.js:1633 msgid "Stores the viewer statistics to the disk." msgstr "Armazena as estatísticas do telespectador no disco." #: src/views/Edit/StreamSelect.js:30 #: src/views/Edit/StreamSelect.js:36 #: src/views/Edit/StreamSelect.js:81 -#: src/views/Edit/Wizard/index.js:878 +#: src/views/Edit/Wizard/index.js:893 msgid "Stream" msgstr "Corrente" @@ -2103,7 +2316,9 @@ msgstr "URL do fluxo" #: src/views/Publication/Services/DaCast.js:153 #: src/views/Publication/Services/Dummy.js:274 #: src/views/Publication/Services/Instagram.js:84 +#: src/views/Publication/Services/Owncast.js:110 #: src/views/Publication/Services/Restream.js:116 +#: src/views/Publication/Services/Telegram.js:101 #: src/views/Publication/Services/Twitch.js:129 #: src/views/Publication/Services/Twitter.js:175 #: src/views/Publication/Services/Vimeo.js:73 @@ -2112,7 +2327,7 @@ msgid "Stream key" msgstr "Chave do fluxo" #: src/views/Publication/Services/Brightcove.js:101 -#: src/views/Publication/Services/Core.js:113 +#: src/views/Publication/Services/Core.js:131 #: src/views/Publication/Services/Red5.js:136 #: src/views/Publication/Services/WOWZA.js:158 msgid "Stream name" @@ -2122,31 +2337,35 @@ msgstr "Nome do riacho" msgid "Stream names" msgstr "Nomes dos fluxos" -#: src/views/Playersite.js:425 +#: src/misc/controls/Source.js:78 +msgid "Stream source for publication service (experimental)." +msgstr "Fonte de fluxo para o serviço de publicação (experimental)." + +#: src/views/Playersite.js:441 msgid "Support datarhei Restreamer" msgstr "Suporte datarhei Restreamer" -#: src/views/Edit/Sources/Network.js:361 +#: src/views/Edit/Sources/Network.js:427 #: src/views/Edit/Wizard/Sources/Network.js:72 msgid "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." msgstr "Suporta HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT e muito mais." #: src/Footer.js:184 #: src/Header.js:275 -#: src/views/Settings.js:1851 +#: src/views/Settings.js:2002 msgid "System" msgstr "Sistema" #: src/views/Playersite.js:351 -#: src/views/Playersite.js:440 +#: src/views/Playersite.js:456 msgid "Template" msgstr "Modelo" -#: src/views/Playersite.js:462 +#: src/views/Playersite.js:478 msgid "Template to be used for creating the publication website. The delete button removes the selection from the system." msgstr "Modelo a ser utilizado para a criação do site de publicação. O botão apagar remove a seleção do sistema." -#: src/views/Playersite.js:666 +#: src/views/Playersite.js:682 msgid "Terms" msgstr "Termos" @@ -2158,18 +2377,30 @@ msgstr "Padrão de teste" msgid "Test pattern (extended)" msgstr "Padrão de teste (estendido)" -#: src/views/Playersite.js:519 +#: src/views/Playersite.js:535 msgid "Text colors" msgstr "Cores do texto" +#: src/misc/controls/RTMP.js:61 +msgid "The RTMP output requires the RTMP Server." +msgstr "A saída do RTMP requer o servidor RTMP." + +#: src/misc/controls/SRT.js:61 +msgid "The SRT output requires the SRT Server." +msgstr "A saída SRT requer o SRT Server." + #: src/views/Edit/Sources/VirtualAudio.js:131 msgid "The amplitude (0.0 - 1.0) of the generated audio stream" msgstr "A amplitude (0,0 - 1,0) do fluxo de áudio gerado" -#: src/views/Settings.js:1210 +#: src/views/Settings.js:1278 msgid "The application is using an older version of the settings." msgstr "A aplicação está usando uma versão mais antiga das configurações." +#: src/views/Edit/Sources/Network.js:611 +msgid "The available FFmpeg binary doesn't support any of the required protocols." +msgstr "O binário FFmpeg disponível não suporta nenhum dos protocolos necessários." + #: src/misc/coders/settings/Audio.js:40 msgid "The bitrate of the audio stream." msgstr "A taxa de bits do fluxo de áudio." @@ -2178,15 +2409,15 @@ msgstr "A taxa de bits do fluxo de áudio." msgid "The carrier frequency" msgstr "A freqüência portadora" -#: src/views/Edit/index.js:352 +#: src/views/Edit/index.js:364 msgid "The channel \"{0}\" could not be deleted" msgstr "O canal \"{0}\" não pôde ser excluído" -#: src/views/Edit/index.js:361 +#: src/views/Edit/index.js:373 msgid "The channel \"{0}\" has been deleted" msgstr "O canal \"{0}\" foi excluído" -#: src/views/Edit/index.js:604 +#: src/views/Edit/index.js:658 msgid "The deletion of this channel can not be recovered. All publications of this channel will be removed." msgstr "A eliminação deste canal não pode ser recuperada. Todas as publicações deste canal serão removidas." @@ -2196,10 +2427,11 @@ msgid "The input profile is not complete. Please define a video and audio source msgstr "O perfil de entrada não está completo. Por favor, defina uma fonte de vídeo e áudio." #: src/misc/coders/settings/Audio.js:86 +#: src/misc/filters/audio/Resample.js:78 msgid "The layout of the audio stream." msgstr "O layout do fluxo de áudio." -#: src/misc/controls/HLS.js:79 +#: src/misc/controls/HLS.js:112 msgid "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." msgstr "O número máximo de segmentos da playlist. 0 conterá todos os segmentos. 6 é recomendado." @@ -2211,83 +2443,84 @@ msgstr "A cor do ruído" msgid "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." msgstr "A pessoa que associou uma obra a esta escritura dedicou a obra ao domínio público, renunciando a todos os seus direitos à obra em todo o mundo sob a lei de direitos autorais, incluindo todos os direitos conexos e vizinhos, na medida do permitido por lei. Você pode copiar, modificar, distribuir e executar a obra, mesmo para fins comerciais, tudo sem pedir permissão." -#: src/views/Settings.js:1315 +#: src/views/Settings.js:1383 msgid "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." msgstr "O nome de domínio acessível ao público do host em que este Restreamer está funcionando. Separe vários nomes de domínio por uma vírgula." -#: src/views/Publication/Edit.js:270 +#: src/views/Publication/Edit.js:278 msgid "The publication service \"{0}\" could not be deleted" msgstr "O serviço de publicação \"{0}\" não pôde ser excluído" -#: src/views/Publication/Add.js:188 +#: src/views/Publication/Add.js:195 msgid "The publication service \"{0}\" has been created" msgstr "Foi criado o serviço de publicação \"{0}\"" -#: src/views/Publication/Edit.js:276 +#: src/views/Publication/Edit.js:284 msgid "The publication service \"{0}\" has been deleted" msgstr "O serviço de publicação \"{0}\" foi eliminado" -#: src/views/Publication/Add.js:186 +#: src/views/Publication/Add.js:193 msgid "The publication service has been created" msgstr "O serviço de publicação foi criado" #: src/misc/coders/settings/Audio.js:137 +#: src/misc/filters/audio/Resample.js:129 msgid "The sample rate of the audio stream." msgstr "A taxa de amostragem do fluxo de áudio." #: src/views/Playersite.js:152 #: src/views/Playersite.js:227 -#: src/views/Publication/Player.js:189 +#: src/views/Publication/Player.js:186 msgid "The selected file is too big ({0} bytes). Only {1} bytes are allowed." msgstr "O arquivo selecionado é muito grande ({0} bytes). Somente {1} bytes são permitidos." #: src/views/Playersite.js:141 #: src/views/Playersite.js:216 -#: src/views/Publication/Player.js:178 +#: src/views/Publication/Player.js:175 msgid "The selected file type ({0}) is not allowed. Allowed file types are {types}" msgstr "O tipo de arquivo selecionado ({0}) não é permitido. Os tipos de arquivo permitidos são {types}." -#: src/views/Publication/Edit.js:230 +#: src/views/Publication/Edit.js:238 msgid "The settings for \"{0}\" have been saved" msgstr "As configurações para \"{0}\" foram salvas" -#: src/views/Edit/Wizard/index.js:846 +#: src/views/Edit/Wizard/index.js:861 msgid "The source doesn't provide any audio streams." msgstr "A fonte não fornece nenhum fluxo de áudio." -#: src/views/Edit/Profile.js:487 +#: src/views/Edit/Profile.js:520 msgid "The source doesn't provide any audio streams. Please check the <0>probe details." msgstr "A fonte não fornece nenhum fluxo de áudio. Por favor, verifique os detalhes da <0>probe." -#: src/views/Edit/Wizard/index.js:854 +#: src/views/Edit/Wizard/index.js:869 msgid "The source doesn't provide any compatible audio streams." msgstr "A fonte não fornece nenhum fluxo de áudio compatível." -#: src/views/Edit/Wizard/index.js:392 +#: src/views/Edit/Wizard/index.js:407 msgid "The source doesn't provide any compatible video streams. Please check the <0>requirements." msgstr "A fonte não fornece nenhuma transmissão de vídeo compatível. Por favor, verifique as <0>requisitos." -#: src/views/Edit/Profile.js:357 +#: src/views/Edit/Profile.js:370 msgid "The source doesn't provide any video streams. Please check the <0>probe details." msgstr "A fonte não fornece nenhuma transmissão de vídeo. Por favor, verifique os detalhes da <0>probe." -#: src/views/Edit/Wizard/index.js:384 +#: src/views/Edit/Wizard/index.js:399 msgid "The source doesn't provide any video streams. Please check the device." msgstr "A fonte não fornece nenhuma transmissão de vídeo. Por favor, verifique o dispositivo." -#: src/views/Edit/Wizard/index.js:865 +#: src/views/Edit/Wizard/index.js:880 msgid "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." msgstr "A fonte de vídeo não fornece nenhum fluxo de áudio compatível. <0>Silêncio de áudio é recomendado. Serviços como, por exemplo, YouTube, Facebook & Co. requerem um canal de áudio." -#: src/views/Edit/Wizard/index.js:603 +#: src/views/Edit/Wizard/index.js:618 msgid "The video source is compatible. Select the desired resolution:" msgstr "A fonte de vídeo é compatível. Selecione a resolução desejada:" -#: src/views/Settings.js:1182 +#: src/views/Settings.js:1250 msgid "There are updates available. Here you get more information." msgstr "Há atualizações disponíveis. Aqui você obtém mais informações." -#: src/views/Settings.js:911 +#: src/views/Settings.js:978 msgid "There was a problem storing the settings. Settings not saved." msgstr "Havia um problema no armazenamento das configurações. As configurações não foram salvas." @@ -2297,15 +2530,15 @@ msgstr "Houve um erro de conexão com o Restreamer Core em {0}." #: src/views/Playersite.js:165 #: src/views/Playersite.js:240 -#: src/views/Publication/Player.js:202 +#: src/views/Publication/Player.js:199 msgid "There was an error during upload: {0}" msgstr "Houve um erro durante o upload: {0}" -#: src/views/Edit/Wizard/index.js:1123 +#: src/views/Edit/Wizard/index.js:1138 msgid "There was an error setting up the stream." msgstr "Houve um erro ao configurar o fluxo." -#: src/views/Settings.js:909 +#: src/views/Settings.js:976 msgid "There were some errors in the settings. Settings not saved." msgstr "Houve alguns erros nas configurações. As configurações não foram salvas." @@ -2349,7 +2582,11 @@ msgstr "Esta licença permite aos reutilizadores distribuir, remixar, adaptar e msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." msgstr "Esta licença permite aos reutilizadores distribuir, remixar, adaptar e construir sobre o material em qualquer meio ou formato, desde que a atribuição seja dada ao criador. A licença permite o uso comercial. Se você remixar, adaptar, ou construir sobre o material, você deve licenciar o material modificado sob termos idênticos." -#: src/views/Edit/index.js:585 +#: src/views/Edit/Sources/Network.js:435 +msgid "This protocol is unknown or not supported by the available FFmpeg binary." +msgstr "Este protocolo é desconhecido ou não suportado pelo binário FFmpeg disponível." + +#: src/views/Edit/index.js:639 msgid "This source cannot be edited while it is in use. To continue, you have to disconnect the source." msgstr "Esta fonte não pode ser editada enquanto estiver em uso. Para continuar, você tem que desconectar a fonte." @@ -2365,15 +2602,20 @@ msgstr "Esta versão da IU não suporta o Núcleo conectado ({0}). A interface d msgid "This version of the UI is compatible." msgstr "Esta versão da IU é compatível." -#: src/views/Settings.js:1550 +#: src/views/Settings.js:1620 msgid "Time until an inactive viewer connection is treated as closed." msgstr "Tempo até que uma conexão inativa do visor seja tratada como fechada." -#: src/views/Settings.js:1263 -#: src/views/Settings.js:1829 +#: src/views/Settings.js:1331 +#: src/views/Settings.js:1910 +#: src/views/Settings.js:1958 msgid "Token" msgstr "Token" +#: src/views/Publication/Services/Telegram.js:13 +msgid "Transmit a Livestream to a Telegram Channel." +msgstr "Transmitir um Livestream para um Canal de Telegramas." + #: src/views/Publication/Services/Image2.js:25 msgid "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." msgstr "Transmitir instantâneos da fonte principal para um servidor HTTP/S. Mais detalhes sobre as configurações podem ser encontrados <0>aqui." @@ -2430,7 +2672,7 @@ msgstr "Transmitir a fonte principal para um servidor UDP. Mais detalhes sobre a msgid "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." msgstr "Transmitir a fonte principal para um servidor WOWZA. Mais detalhes sobre as configurações podem ser encontrados <0>aqui." -#: src/views/Publication/Services/Core.js:18 +#: src/views/Publication/Services/Core.js:19 msgid "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." msgstr "Transmitir a fonte principal a um datarhei Core Ressource. Mais detalhes sobre as configurações podem ser encontrados <0>aqui." @@ -2450,6 +2692,18 @@ msgstr "Transmitir a fonte principal para o serviço de codificação em nuvem B msgid "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." msgstr "Transmitir a fonte principal para o Serviço RTMP da Restream. Mais detalhes sobre as configurações podem ser encontrados <0>aqui." +#: src/views/Publication/Services/Azure.js:17 +msgid "Transmit to a Azure Media Services. More details can be found <0>here." +msgstr "Transmitir a um Serviço de Mídia Azure. Mais detalhes podem ser encontrados <0>aqui." + +#: src/views/Publication/Services/Linkedin.js:16 +msgid "Transmit to linkedIn. More details can be found <0>here." +msgstr "Transmitir para o linkedIn. Mais detalhes podem ser encontrados <0>aqui." + +#: src/views/Publication/Services/Owncast.js:15 +msgid "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." +msgstr "Transmita seu Livestream a um servidor Owncast. <0>Aqui você pode encontrar mais detalhes sobre as configurações." + #: src/views/Publication/Services/Youtube.js:21 msgid "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." msgstr "Transmite seu vídeo como um fluxo RTMP com a chave necessária gerada no YouTube Studio. Você pode encontrar mais informações sobre a criação de um stream ao vivo no YouTube <0>Creator Academy." @@ -2458,36 +2712,36 @@ msgstr "Transmite seu vídeo como um fluxo RTMP com a chave necessária gerada n msgid "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." msgstr "Transmite seu fluxo de vídeo com a chave necessária, que foi gerada no Twitter Producer. Você pode encontrar mais informações sobre a configuração de um fluxo ao vivo no Twitter's <0>Produtor." -#: src/misc/coders/Encoders/video/X264.js:83 -#: src/misc/coders/Encoders/video/X265.js:83 +#: src/misc/coders/Encoders/video/X264.js:93 +#: src/misc/coders/Encoders/video/X265.js:93 msgid "Tune" msgstr "Tune" -#: src/views/Edit/Sources/Network.js:409 +#: src/views/Edit/Sources/Network.js:488 #: src/views/Edit/Wizard/Sources/Network.js:77 msgid "UDP transport" msgstr "Transporte UDP" -#: src/views/Settings.js:1111 +#: src/views/Settings.js:1178 msgid "Unable to load the config." msgstr "Incapaz de carregar a configuração." -#: src/views/Settings.js:1245 +#: src/views/Settings.js:1313 msgid "Unique ident on the service." msgstr "Identidade única no serviço." -#: src/views/Main/Egress.js:91 +#: src/views/Main/Egress.js:96 msgid "Unknown" msgstr "Desconhecido" -#: src/views/Playersite.js:597 +#: src/views/Playersite.js:613 msgid "Unselected" msgstr "Não selecionado" -#: src/views/Playersite.js:482 -#: src/views/Playersite.js:499 -#: src/views/Playersite.js:634 -#: src/views/Publication/Player.js:373 +#: src/views/Playersite.js:498 +#: src/views/Playersite.js:515 +#: src/views/Playersite.js:650 +#: src/views/Publication/Player.js:376 msgid "Upload" msgstr "Upload" @@ -2495,7 +2749,7 @@ msgstr "Upload" msgid "Uploading the file failed" msgstr "O upload do arquivo falhou" -#: src/views/Publication/Player.js:232 +#: src/views/Publication/Player.js:229 msgid "Uploading the logo failed" msgstr "O carregamento do logotipo falhou" @@ -2509,15 +2763,15 @@ msgstr "Horário de funcionamento" msgid "Use Auth0 for your running Restreamer Core. More <0>details." msgstr "Use o Auth0 para seu Restreamer Core em funcionamento. Mais <0>detalhes." -#: src/views/Edit/index.js:426 +#: src/views/Edit/index.js:438 msgid "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." msgstr "Use o assistente (<0/>) para uma configuração rápida e fácil, ou edite (<1/>) as fontes diretamente no modo personalizado." -#: src/views/Edit/Wizard/index.js:1068 +#: src/views/Edit/Wizard/index.js:1083 msgid "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Use seus direitos autorais e escolha a licença de imagem correta. Seja gratuita para todos ou altamente restrita. Discuta brevemente o que outros estão autorizados a fazer com sua imagem." -#: src/views/Edit/index.js:530 +#: src/views/Edit/index.js:584 msgid "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Use seus direitos autorais e escolha a licença de imagem correta. Seja gratuita para todos ou altamente restrita. Discuta brevemente o que outros estão autorizados a fazer com sua imagem." @@ -2525,8 +2779,8 @@ msgstr "Use seus direitos autorais e escolha a licença de imagem correta. Seja msgid "User registration" msgstr "Registro de usuário" -#: src/views/Edit/Sources/Network.js:370 -#: src/views/Edit/Wizard/Sources/Network.js:81 +#: src/views/Edit/Sources/Network.js:448 +#: src/views/Edit/Wizard/Sources/Network.js:84 #: src/views/Login.js:272 #: src/views/Publication/Services/DASH.js:195 #: src/views/Publication/Services/DaCast.js:131 @@ -2534,18 +2788,18 @@ msgstr "Registro de usuário" #: src/views/Publication/Services/RTSP.js:153 #: src/views/Publication/Services/Red5.js:146 #: src/views/Publication/Services/WOWZA.js:168 -#: src/views/Settings.js:1440 -#: src/views/Settings.js:1598 +#: src/views/Settings.js:1510 +#: src/views/Settings.js:1668 msgid "Username" msgstr "Nome de usuário" -#: src/views/Settings.js:1446 -#: src/views/Settings.js:1606 +#: src/views/Settings.js:1516 +#: src/views/Settings.js:1676 msgid "Username for authorization." msgstr "Nome de usuário para autorização." -#: src/views/Edit/Sources/Network.js:375 -#: src/views/Edit/Wizard/Sources/Network.js:83 +#: src/views/Edit/Sources/Network.js:453 +#: src/views/Edit/Wizard/Sources/Network.js:90 msgid "Username for the device." msgstr "Nome de usuário para o dispositivo." @@ -2553,28 +2807,32 @@ msgstr "Nome de usuário para o dispositivo." msgid "VPU ID" msgstr "ID DA VPU" -#: src/views/Publication/Add.js:476 +#: src/misc/filters/video/VFlip.js:65 +msgid "Vertical Flip" +msgstr "Vertical Flip" + +#: src/views/Publication/Add.js:451 msgid "Video" msgstr "Vídeo" #: src/views/Edit/Sources/AVFoundation.js:126 -#: src/views/Edit/Sources/Raspicam.js:89 -#: src/views/Edit/Sources/V4L.js:109 +#: src/views/Edit/Sources/Raspicam.js:92 +#: src/views/Edit/Sources/V4L.js:112 #: src/views/Edit/Wizard/Sources/AVFoundation.js:82 #: src/views/Edit/Wizard/Sources/Raspicam.js:86 #: src/views/Edit/Wizard/Sources/V4L.js:105 msgid "Video device" msgstr "Dispositivo de vídeo" -#: src/views/Edit/Profile.js:320 +#: src/views/Edit/Profile.js:333 #: src/views/Edit/ProfileSummary.js:66 -#: src/views/Publication/Edit.js:517 +#: src/views/Publication/Edit.js:490 msgid "Video settings" msgstr "Configurações de vídeo" -#: src/views/Edit/Wizard/index.js:264 -#: src/views/Edit/Wizard/index.js:354 -#: src/views/Edit/Wizard/index.js:596 +#: src/views/Edit/Wizard/index.js:279 +#: src/views/Edit/Wizard/index.js:369 +#: src/views/Edit/Wizard/index.js:611 msgid "Video setup" msgstr "Configuração do vídeo" @@ -2594,11 +2852,19 @@ msgstr "Visualizador" msgid "Virtual source" msgstr "Fonte virtual" +#: src/misc/filters/audio/Volume.js:44 +msgid "Volume" +msgstr "Volume" + #: src/views/Welcome.js:27 msgid "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." msgstr "Bem-vindo à Restreamer v2, a solução para a publicação rápida e fácil de vídeos. Grátis para uso privado e comercial. Mais ajuda no <0>docs." -#: src/views/Settings.js:1585 +#: src/misc/controls/HLS.js:74 +msgid "Where to store the HLS playlist and segments. In-Memory is recommended." +msgstr "Onde armazenar a lista de reprodução e segmentos da HLS. In-Memory é recomendado." + +#: src/views/Settings.js:1655 msgid "Write protection" msgstr "Proteção de escrita" @@ -2606,32 +2872,32 @@ msgstr "Proteção de escrita" msgid "YUV test pattern" msgstr "Padrão de teste YUV" -#: src/views/Edit/Wizard/index.js:1177 +#: src/views/Edit/Wizard/index.js:1192 msgid "Yes" msgstr "Sim" -#: src/views/Edit/Wizard/index.js:1159 +#: src/views/Edit/Wizard/index.js:1174 msgid "You can't abort the wizard because at least one input must be defined." msgstr "Você não pode abortar o assistente porque pelo menos uma entrada deve ser definida." -#: src/views/Settings.js:2041 +#: src/views/Settings.js:2192 msgid "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" msgstr "Você mudou a configuração. Para que as mudanças tenham efeito, você tem que reiniciar a aplicação. Você quer reiniciar agora?" -#: src/views/Main/index.js:347 +#: src/views/Main/index.js:376 #: src/views/Publication/Process.js:73 msgid "You have to reconnect manually" msgstr "Você tem que reconectar manualmente" -#: src/views/Publication/Edit.js:456 +#: src/views/Publication/Edit.js:432 msgid "You have unsaved changes. Please save them before you can control the service again." msgstr "Você tem mudanças não salvas. Por favor, salve-as antes de poder controlar o serviço novamente." -#: src/views/Edit/Wizard/index.js:616 +#: src/views/Edit/Wizard/index.js:631 msgid "Your stream needs to be encoded, but there's no suitable encoder available." msgstr "Seu fluxo precisa ser codificado, mas não há um codificador adequado disponível." -#: src/views/Edit/Wizard/index.js:623 +#: src/views/Edit/Wizard/index.js:638 msgid "Your stream needs to be encoded. Choose the desired encoder:" msgstr "Seu fluxo precisa ser codificado. Escolha o codificador desejado:" @@ -2643,7 +2909,7 @@ msgstr "azul" msgid "brown" msgstr "marrom" -#: src/views/Publication/Player.js:331 +#: src/views/Publication/Player.js:334 msgid "iframe code" msgstr "código iframe" diff --git a/src/locales/ru/messages.js b/src/locales/ru/messages.js index 0f85f5f..f3829b5 100644 --- a/src/locales/ru/messages.js +++ b/src/locales/ru/messages.js @@ -1 +1 @@ -/*eslint-disable*/module.exports={messages:{"<0>Compatibility list":"<0>Список совместимости","<0>Show probe details":"<0>Показать подробности","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Конечная точка API не найдена. Настройки не сохранены.","AVFoundation":"AVFoundation","Abort":"Отменить","About":"О","Add":"Добавить","Add Publication":"Добавить публикацию","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Добавьте внешние виджеты и стили на сайт публикации. Вы можете найти несколько примеров на странице помощи.","Add new channel":"Добавить новый канал","Add: {0}":["Добавить: ",["0"]],"Address":"Адрес","Address for the background image.":"Адрес для фонового изображения.","Address to listen on for HTTP requests.":"Адрес для прослушивания HTTP-запросов.","Address to listen on for HTTPS requests.":"Адрес для прослушивания HTTPS-запросов.","Adjust publication site colors and background as you like.":"Настройте цвета и фон сайта публикации по своему усмотрению.","Advanced monitoring":"Расширенный мониторинг","Advanced settings":"Расширенные настройки","Advanced setup":"Advanced Setup","Alerting by email":"Оповещение по электронной почте","All":"Все","All important system settings.":"Все важные системные настройки.","Allow all referrer":"Разрешить всех рефералов","Allow counting how many viewers the stream has.":"Разрешить подсчет количества зрителей у трансляции.","Amplitude":"Амплитуда","An environment variable sets this value.":"Переменная среды задает это значение.","App":"Приложение","Application":"Приложение","Are you sure you want to abort the wizard?":"Вы уверены, что хотите прервать работу мастера настройки?","Audio":"Аудио","Audio Device":"Аудио-устройство","Audio device":"Аудио-устройство","Audio from device":"Звук с устройства","Audio settings":"Настройки звука","Audio setup":"Настройка звука","Auth0":"Auth0","Auth0 Tenant":"Клиент Auth0","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 в настоящее время недоступен, так как этот интерфейс загружается из небезопасного источника.","Author":"Автор","Authorization":"Авторизация","Automatic cleanup of all media data":"Автоматическая очистка всех медиаданных","Autoplay":"Авто-плей","Available":"Доступный","Back":"Назад","Background colors":"Цвета фона","Background image":"Фоновая картинка","Backup URL":"Резервный URL-адрес","Backup server":"Резервный сервер","Backup stream":"Резервный поток","Backup stream key":"Резервный ключ потока","Bandwidth":"Пропускная способность","Bandwidth control":"Контроль пропускной способности","Banner":"Баннер","Basic":"Базовый","Beep factor":"Звуковой фактор","Bitrate":"Битрейт","Briefly describe what the audience will see during the live stream.":"Кратко опишите, что зрители увидят во время прямой трансляции.","Button color":"Цвет кнопки","Cache for files on /data.":"Кэш для файлов в /data.","Cache time (Seconds)":"Время кэширования (сек)","Cache types":"Типы кеша","Capture clicks":"Захват кликов","Capture cursor":"Захват курсора","Channel \"{0}\" saved":["Канал \"",["0"],"\" сохранен"],"Channels":"Каналы","Check for updates":"Проверять наличие обновлений","Check the requirements":"Проверьте требования","Choose a video stream":"Выберите видеопоток","Choose an audio stream":"Выберите аудиопоток","Choose an input device ...":"Выберите устройство ввода...","Choose codec ...":"Выберите кодек...","Choose tenant ...":"Выбрать клиента...","Chunk":"Чанк","Close":"Закрыть","Code injection":"Внедрение кода","Codec":"Кодек","Color":"Цвет","Config":"Конфигурация","Confirm password":"Подтвердить пароль","Connect":"Подключить","Connected device":"Подключенное устройство","Connected since <0/>":"Подключено с <0/>","Connecting ...":"Подключение...","Connecting to Restreamer Core ...":"Подключение к ядру Restreamer...","Connecting to Restreamer Core failed probably because of mixed content.":"Не удалось подключиться к ядру Restreamer, вероятно, из-за смешанного контента.","Content":"Контент","Content URL":"Content URL","Cores":"Ядра","Create user":"Создать пользователя","Creative Commons":"Creative Commons","Custom ...":"Пользовательский...","Custom JSON config for datarhei Core.":"Пользовательская конфигурация JSON для ядра datarhei.","Custom audio device":"Пользовательское аудиоустройство","Custom audio index":"Пользовательский звуковой индекс","Custom bitrate (kbit/s)":"Пользовательский битрейт (кбит/с)","Custom code injection":"Внедрение пользовательского кода","Custom delay":"Пользовательская задержка","Custom device":"Пользовательское устройство","Custom format":"Пользовательский формат","Custom framerate":"Пользовательская частота кадров","Custom keyframe interval":"Пользовательский интервал ключевых кадров","Custom layout":"Пользовательский макет","Custom sampling (Hz)":"Пользовательская выборка (Гц)","Custom scale":"Пользовательский масштаб","Custom size":"Пользовательский размер","Custom video device":"Пользовательское видеоустройство","Custom video index":"Пользовательский индекс видео","Data copied to clipboard":"Данные скопированы в буфер обмена","Death color":"Цвет смерти","Decoder":"Декодер","Default":"По умолчанию","Delay":"Задержка","Delay (ms)":"Задержка (мс)","Delete":"Удалить","Deleting a publication service cannot be reversed. The publication stops immediately.":"Удаление службы публикации нельзя отменить. Публикация сразу прекращается.","Delivering mode":"Режим доставки","Description":"Описание","Design":"Дизайн","Device":"Устройство","Disconnect":"Отключить","Disconnect & Continue":"Отключить и продолжить","Disconnecting ...":"Отключение...","Disk":"Диск","Disk cache":"Кэш диска","Disk storage":"Дисковое хранилище","Do you really want to restart the application now?":"Вы действительно хотите перезапустить приложение сейчас?","Do you want to delete \"{0}\"?":["Вы хотите удалить \"",["0"],"\"?"],"Do you want to delete {title}?":["Вы хотите удалить ",["title"],"?"],"Do you want to disconnect \"{0}\"?":["Вы хотите отключить \"",["0"],"\"?"],"Docs":"Документы","Documentation":"Документация","Dup. frames":"Дуп. кадры","EDIT: Player":"РЕДАКТИРОВАТЬ: Плеер","EDIT: Publication Website":"РЕДАКТИРОВАТЬ: Сайт публикации","Edit":"Редактировать","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Отредактируйте аудио и видеоисточники для прямой трансляции. Добавьте описание и установите желаемую лицензию на содержимое.","Edit: {title}":["Изменить: ",["title"]],"Embed":"Встроить","Enable RTMP server ...":"Включить RTMP-сервер...","Enable a periodic beep every second with this value times the carrier frequency":"Включить периодический звуковой сигнал каждую секунду с этим значением, умноженным на несущую частоту","Enable backup stream":"Включить резервный поток","Enable nerd statistics":"Включить статистику ботаников","Enable primary stream":"Включить основной поток","Enable snapshots":"Включить снимки","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Настоятельно рекомендуется включить авторизацию. В противном случае любой может получить доступ к этому экземпляру.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Настоятельно рекомендуется включить базовую аутентификацию. В противном случае любой может записать данные в /memfs.","Encoder":"Кодер","Encoding":"Кодирование","Encryption":"Шифрование","Enter a name for the new channel.":"Введите имя для нового канала.","Enter password":"Введите пароль","Enter the address of your network source:":"Введите адрес вашего сетевого источника:","Enter username":"Введите имя пользователя","Entropy coder":"Энтропийный кодер","Error":"Ошибка","Error while copying data to clipboard":"Ошибка при копировании данных в буфер обмена","Error: {0}":["Ошибка: ",["0"]],"Expands the area above the channel list (live chat).":"Расширяет область над списком каналов (живой чат).","Expands the area under the channel description (comment boxes).":"Расширяет область под описанием канала (окна комментариев).","Expert mode":"Режим эксперта","Extend channel list":"Расширить список каналов","Extend content":"Расширить содержимое","Extend footer":"Расширить нижний колонтитул","Extend header":"Расширить заголовок","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Не удалось создать службу публикации (",["0"],")"],"Failed to create publication website files.":"Не удалось создать файлы веб-сайта публикации.","Failed to probe the source. Please check the <0>probe details.":"Не удалось проверить источник. Пожалуйста, проверьте <0>подробности.","Failed to refresh token: {0}":["Не удалось обновить токен: ",["0"]],"Failed to save ingest metadata":"Не удалось сохранить импортированные метаданные","Failed to stop process":"Не удалось остановить процесс","Failed to store player size setting.":"Не удалось сохранить настройку размера проигрывателя.","Failed to store publication service ({0})":["Не удалось сохранить службу публикации (",["0"],")"],"Failed to update ingest process ({0})":["Не удалось обновить процесс загрузки (",["0"],")"],"Failed to update the player":"Не удалось обновить плеер","Failed to verify the source. Please check the address.":"Не удалось проверить источник. Пожалуйста, проверьте адрес.","Finish":"Закончить","Flags":"Флаги","For Javascripts.":"Для Javascripts.","For Stylesheets.":"Для таблиц стилей.","Force input framerate":"Принудительная частота кадров на входе","Format":"Формат","Frame drops":"Потеря кадров","Framebuffer":"Кадровый буфер","Framerate":"Частота кадров","Frequency (Hz)":"Частота (Гц)","GET":"GET","General":"Общие","Google Analytics ID":"Идентификатор Google Аналитики","Google Analytics Tracker Name":"Название трекера Google Аналитики","HLS":"HLS","HLS statistic for the In-memory storage":"Статистика HLS для хранилища в памяти","HTTP and HTTPS":"HTTP и HTTPS","HTTP port":"HTTP-порт","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"HTTPS-порт","Hardware device":"Аппаратное устройство","Header":"Заголовок","Headline":"Заголовок","Hosted Restreamer interface":"Размещенный интерфейс Restreamer","Human readable name on the service.":"Человекочитаемое имя на сервисе.","IP address":"IP адрес","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Если вы изменили порты, возможно, ядро Restreamer уже перезапустилось, но теперь он доступен на другом порту.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Если вы включили Let's Encrypt TLS, получение сертификатов может занять некоторое время. Убедитесь, что ядро Restreamer доступно через порт 80 из Интернета. Пожалуйста, проверьте журнал консоли ядра Restreamer.","Ignore IP ranges":"Игнорировать диапазоны IP-адресов","Image URL":"URL изображения","Imprint":"Выходные данные","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"В дополнение к плееру Restreamer предлагает полноценную целевую страницу, которую вы можете использовать для простого и быстрого представления своей прямой трансляции.","In-memory":"В памяти","In-memory storage":"Хранилище в памяти","Incompatible":"Несовместимо","Inherit":"Наследовать","Inject 1":"Встраивание 1","Inject 2":"Встраивание 2","Inject 3":"Встраивание 3","Inject 4":"Встраивание 4","Internal HLS server":"Внутренний HLS-сервер","Internal RTMP server":"Внутренний RTMP-сервер","Interval (seconds)":"Интервал (секунды)","Issue alert":"Оповещение о проблеме","Keyframe interval (seconds)":"Интервал между ключевыми кадрами (секунды)","Layout":"Макет","Let's Encrypt certification":"Сертификат Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Для работы Let's Encrypt требуется одно или несколько общедоступных доменных имен и доступный порт 80/TCP.","Level":"Уровень","Level of system protocol.":"Уровень системного протокола.","License":"Лицензия","Life color":"Цвет жизни","Linecolor":"Цвет линии","Link":"Ссылка","Link, mouseover":"Ссылка, наведение курсора","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Список диапазонов IP адресов в нотации CIDR, напр., 127.0.0.1/32, которые не будут записываться статистикой — по одному диапазону IP адресов на строку. Оставьте пустым для записи всех сеансов..","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Список расширений файлов для кэширования (напр.. \".html\"), по одному в строке. Оставьте пустым, чтобы кэшировать все типы файлов.","List size (segments)":"Размер списка (сегменты)","Live-Streaming to Facebook Live RTMP service":"Прямая трансляция на сервис Facebook Live RTMP","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Прямая трансляция на сервис Instagram Live RTMP. Для ключа потока требуется такая служба, как <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Прямая трансляция на сервис Twitch Live RTMP.","Live-Streaming to Vimeo Live RTMP Service":"Прямая трансляция на RTMP-сервис Vimeo Live","Livesource ID":"Livesource ID","Log level":"Уровень журнала","Logging":"Логирование","Login":"Авторизоваться","Login failed: Couldn't load API details":"Ошибка входа: не удалось загрузить сведения об API","Login failed: {0}":["Ошибка входа: ",["0"]],"Login/JWT authorization":"Вход/JWT-авторизация","Logo":"Логотип","Logout":"Выйти","MB":"MB","Main Source":"Главный источник","Main channel":"Основной канал","Main channel not found":"Основной канал не найден","Main channel saved":"Основной канал сохранен","Main page channel (index.html).":"Канал главной страницы (index.html).","Maintainer:":"Сопровождающий:","Maximum allowed cache size, 0 for unlimited.":"Максимально допустимый размер кеша, 0 для неограниченного.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Максимально допустимо мегабайт ОЗУ для /memfs, 0 для неограниченного.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Максимально разрешенное количество мегабайт для использования с жесткого диска. 0 без ограничений.","Maximum bandwidth Mbit/s":"Максимальная пропускная способность Мбит/с","Maximum delay in milliseconds.":"Максимальная задержка в миллисекундах.","Maximum file size (Megabytes)":"Максимальный размер файла (Мегабайты)","Maximum file size to put in cache.":"Максимальный размер файла для кэширования.","Maximum log histroy":"Максимальная история журнала","Maximum log lines":"Максимальное количество строк журнала","Maximum size (Megabytes)":"Максимальный размер (Мегабайты)","Maximum viewer idle time (Seconds)":"Максимальное время простоя зрителя (в секундах)","Maximum viewers":"Максимальное количество зрителей","Memory":"Память","Meta information":"Мета информация","Metadata":"Метаданные","Mold":"Плесень","More about Twitter's copyright <0>here.":"Подробнее об авторских правах Twitter <0>здесь.","More about YouTube's copyright <0>here.":"Подробнее об авторских правах YouTube <0>здесь.","More about licenses here":"Подробнее о лицензиях здесь","More about the service":"Подробнее о сервисе","Mute":"Без звука","Name":"Имя","Name for the template. If the name already exists, it will be overwritten.":"Имя для шаблона. Если имя уже существует, оно будет перезаписано.","Network":"Сеть","Network source":"Сетевой источник","Next":"Далее","Next: Audio":"Далее: Аудио","Next: Video setup":"Далее: Настройка видео","No":"Нет","No audio":"Нет звука","No audio stream available":"Аудиопоток недоступен","No input device available":"Устройство ввода недоступно","No live stream was detected. Please check the software that sends the stream.":"Прямая трансляция не обнаружена. Пожалуйста, проверьте программное обеспечение, которое отправляет поток.","No source selected":"Источник не выбран","No sources available":"Нет доступных источников","No suitable encoder found.":"Подходящий энкодер не найден.","No video":"Нет видео","No video stream available":"Видеопоток недоступен","Node ID":"Node ID","Noise":"Шум","None":"Никто","Notes":"Заметки","Number of log lines to keep.":"Количество строк журнала для сохранения.","Number of logs to keep for each process.":"Количество журналов для каждого процесса.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Один реферер на строку, напр.. http://www.example.com","Open":"Открыть","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Сквозную \"Passthrough (copy)\" следует отключать только в случае необходимости. Каждое кодирование требует дополнительных ресурсов CPU/GPU.","Password":"Пароль","Password for authorization.":"Пароль для авторизации.","Password for the device.":"Пароль для устройства.","Persist viewer statistics":"Сохранять статистику просмотров","Pixel format":"Пиксельный формат","Plan: <0>Starter":"План: <0>Начальный","Platforms":"Платформы","Playback":"Воспроизведение","Player":"Плеер","Player URL":"URL-адрес плеера","Player settings saved":"Настройки плеера сохранены","Playersite":"Сайт плеера","Playlist":"Плейлист","Please check the <0>process log":"Пожалуйста, проверьте <0>журнал процесса","Please contact the operator of the service and check what happens.":"Пожалуйста, свяжитесь с оператором сервиса и проверьте, что происходит.","Please select a file to upload.":"Пожалуйста, выберите файл для загрузки.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Пожалуйста, используйте \"Passthrough (copy)\", если это возможно. Кодирование требует дополнительных ресурсов CPU/GPU.","Please wait. Probe stream data ...":"Пожалуйста подождите. Данные о потоке...","Please wait. Setting up the stream ...":"Пожалуйста подождите. Настройка потока...","Port":"Порт","Position":"Позиция","Preset":"Пресет","Primary stream":"Основной поток","Primary stream key":"Основной ключ потока","Probe":"Зонд","Process":"Процесс","Process control":"Контроль процесса","Process debug":"Отладка процесса","Process debug report":"Отчет об отладке процесса","Process details":"Детали процесса","Process report":"Отчет о процессе","Processing & Control":"Обработка и контроль","Profile":"Профиль","Protocol":"Протокол","Protocols":"Протоколы","Public domain/s":"Публичный домен/ы","Publication service not found":"Служба публикации не найдены","Publication website settings saved":"Настройки сайта публикации сохранены","Publications":"Публикации","Pull Mode":"Режим вытягивания","Pull or recieve the data:":"Вытяните или получите данные:","Quality":"Качество","RGB test pattern":"Тестовый шаблон RGB","RTMP app for publishing.":"Приложение RTMP для публикации.","RTMP server":"RTMP-сервер","RTMP server is not enabled":"RTMP-сервер не включен","RTMP server listen address.":"Адрес прослушивания RTMP-сервера.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Токен RTMP для публикации и воспроизведения. Токен – это значение параметра запроса URL-адреса token.","RTMP/S":"RTMP/S","RTMPS server":"RTMPS-сервер","RTSP":"RTSP","Raspberry Pi camera":"Камера Raspberry Pi","Rate control":"Контроль скорости","Ratio":"Соотношение","Read input at native speed":"Чтение ввода на исходной скорости","Receive Mode":"Режим приема","Reconnect":"Повторное подключение","Reconnect delay (seconds)":"Задержка повторного подключения (в секундах)","Reconnecting in {0}s":["Повторное подключение через ",["0"],"с"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["Не удалось повторно подключиться к ядру Restreamer в течение последних ",["RETRIES"]," секунд."],"Reconnecting to Restreamer Core failed.":"Повторное подключение к ядру Restreamer не удалось.","Refresh":"Обновление","Region":"Регион","Reload":"Перезагрузка","Remove the oldest entries if the /memfs is full":"Удалите самые старые записи, если /memfs заполнен","Requires activation":"Требуется активация","Restart":"Перезапустить","Restart required":"Требуется перезагрузка","Restarting":"Перезапуск","Restarting Restreamer Core ...":"Перезапуск ядра Restreamer...","Restarting the application failed.":"Не удалось перезапустить приложение.","Restreamer Service":"Сервис Restreamer","Retrieving stream data ...":"Получение данных потока...","Retry":"Повторить попытку","Rule":"Правило","Sampling":"Выборка","Save":"Сохранить","Scale":"Масштаб","Seconds to keep files in cache.":"Секунд для хранения файлов в кеше.","Seconds until a process is restarted.":"Секунд до перезапуска процесса.","Seconds until a staled process is terminated.":"Секунд до завершения зависшего процесса.","Seconds until the snapshot/thumbnail of the video source is updated.":"Секунд до обновления моментального снимка/миниатюры источника видео.","Security":"Безопасность","Security token":"Токен безопасности","Seekbar color":"Цвет панели поиска","Segment length (seconds)":"Длина сегмента (секунды)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Сегмент будет обрезан на следующем ключевом кадре по истечении этого времени. 2 рекомендуется.","Segmentation":"Сегментация","Select a device:":"Выберите устройство:","Select audio source:":"Выберите источник звука:","Select source ...":"Выберите источник...","Select video source:":"Выберите источник видео:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Выберите, извлекаете ли вы поток из <0>сетевого источника (например, сетевой камеры) или <1>внутреннего RTMP-сервера (например, потоки OBS на Restreamer)...","Select your encoding setting:":"Выберите настройку кодировки:","Selected":"Выбрано","Selected channel":"Выбранный канал","Selection":"Выбор","Send anonymous metrics (helps us for future development)":"Отправляйте анонимные метрики (помогает нам в будущем развитии)","Send stream to this address:":"Отправить поток на этот адрес:","Send video to Framebuffer":"Отправить видео в фреймбуфер","Server":"Сервер","Service":"Обслуживание","Service name":"Имя службы","Service token for monitoring.":"Токен сервиса для мониторинга.","Sessions":"Сессии","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Устанавливает ограничение пропускной способности в Мбит/с для исходящей передачи данных HLS. Все услуги, такие как RTMP и исходящие процессы, включены в расчет. Если пропускная способность превышена, средства просмотра HLS получают код состояния HTTP 509 (превышен предел пропускной способности). 0 неограничен.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Устанавливает лимит зрителей для сеансов HLS. Если ограничение превышено, средства просмотра HLS получают код состояния HTTP 509 (превышен предел пропускной способности). 0 неограничен.","Setting for connection to the service.":"Настройка подключения к сервису.","Settings":"Настройки","Settings (expert mode)":"Настройки (режим эксперта)","Settings for /data path. The access is protected by":"Настройки пути /data. Доступ защищен","Settings for /memfs path.":"Настройки для пути /memfs.","Settings saved. All changes will be applied after restarting the application.":"Настройки сохранены. Все изменения вступят в силу после перезапуска приложения.","Share button":"Кнопка поделиться","Shows a reference to the project.":"Показывает ссылку на проект.","Sign up (free)":"Регистрация (бесплатно)","Silence":"Тишина","Silence Audio":"Тишина Аудио","Sine":"Синус","Sitename":"Название сайта","Size":"Размер","Snapshot":"Снимок","Social-login (OAuth2, 2FA)":"Регистрация (OAuth2, 2FA)","Socket timeout (microseconds)":"Время ожидания сокета (микросекунды)","Software":"Программного обеспечения","Source":"Источник","Speed":"Скорость","Stale timeout (seconds)":"Время ожидания ожидания (секунды)","Statistics":"Статистика","Storage":"Хранилище","Stores the viewer statistics to the disk.":"Сохраняет статистику просмотра на диск.","Stream":"Поток","Stream URL":"URL-адрес потока","Stream key":"Ключ потока","Stream name":"Название потока","Stream names":"Имена потоков","Support datarhei Restreamer":"Поддержка datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Поддерживает HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT и другие.","System":"Система","Template":"Шаблон","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Шаблон, который будет использоваться для создания веб-сайта публикации. Кнопка удаления удаляет выделение из системы.","Terms":"Условия","Test pattern":"Тестовый шаблон","Test pattern (extended)":"Тестовый шаблон (расширенный)","Text colors":"Цвета текста","The amplitude (0.0 - 1.0) of the generated audio stream":"Амплитуда (0.0 - 1.0) генерируемого аудиопотока","The application is using an older version of the settings.":"Приложение использует более старую версию настроек.","The bitrate of the audio stream.":"Битрейт аудиопотока.","The carrier frequency":"Несущая частота","The channel \"{0}\" could not be deleted":["Канал \"",["0"],"\" не может быть удален"],"The channel \"{0}\" has been deleted":["Канал \"",["0"],"\" удален"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"Удаление этого канала не может быть восстановлено. Все публикации этого канала будут удалены.","The input profile is not complete. Please define a video and audio source.":"Входной профиль не завершен. Укажите источник видео и аудио.","The layout of the audio stream.":"Схема аудиопотока.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Максимальное количество сегментов плейлиста. 0 будет содержать все сегменты. 6 рекомендуется.","The noise color":"Цвет шума","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"Лицо, связавшее произведение с этим документом, сделало произведение общественным достоянием, отказавшись от всех своих прав на произведение во всем мире в соответствии с законом об авторском праве, включая все смежные и смежные права, в той мере, в какой это разрешено законом. Вы можете копировать, изменять, распространять и выполнять работу даже в коммерческих целях, не спрашивая разрешения.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Общедоступное доменное имя хоста, на котором работает Restreamer. Разделяйте несколько доменных имен запятой.","The publication service \"{0}\" could not be deleted":["Службу публикации \"",["0"],"\" не удалось удалить"],"The publication service \"{0}\" has been created":["Служба публикации \"",["0"],"\" создана"],"The publication service \"{0}\" has been deleted":["Служба публикации \"",["0"],"\" удалена"],"The publication service has been created":"Создан сервис публикации","The sample rate of the audio stream.":"Частота дискретизации аудиопотока.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Выбранный файл слишком велик (",["0"]," байт). Допускается только ",["1"]," байт."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Выбранный тип файла (",["0"],") не разрешен. Разрешенными типами файлов являются ",["types"]],"The settings for \"{0}\" have been saved":["Настройки для \"",["0"],"\" сохранены"],"The source doesn't provide any audio streams.":"Источник не предоставляет никаких аудиопотоков.","The source doesn't provide any audio streams. Please check the <0>probe details.":"Источник не предоставляет никаких аудиопотоков. Пожалуйста, проверьте <0>подробнее.","The source doesn't provide any compatible audio streams.":"Источник не предоставляет совместимых аудиопотоков.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"Источник не предоставляет совместимых видеопотоков. Ознакомьтесь с <0>требованиями.","The source doesn't provide any video streams. Please check the <0>probe details.":"Источник не предоставляет никаких видеопотоков. Пожалуйста, проверьте <0>подробнее.","The source doesn't provide any video streams. Please check the device.":"Источник не предоставляет никаких видеопотоков. Пожалуйста, проверьте устройство.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"Источник видео не обеспечивает совместимый аудиопоток. Рекомендуется <0>отключить звук. Сервисы YouTube, Facebook и другие компании требуют наличия аудиоканала....","The video source is compatible. Select the desired resolution:":"Источник видео совместим. Выберите нужное разрешение:","There are updates available. Here you get more information.":"Доступны обновления. Здесь вы получите больше информации.","There was a problem storing the settings. Settings not saved.":"Не удалось сохранить настройки. Настройки не сохранены.","There was an error connecting to Restreamer Core at {0}.":["Произошла ошибка при подключении к ядру Restreamer на ",["0"],"."],"There was an error during upload: {0}":["При загрузке произошла ошибка: ",["0"]],"There was an error setting up the stream.":"Не удалось настроить поток.","There were some errors in the settings. Settings not saved.":"Были некоторые ошибки в настройках. Настройки не сохранены.","There's no login method available.":"Метод входа недоступен.","This is a dummy service that explains to you the concepts of service.":"Это фиктивный сервис, который объясняет вам концепции сервиса.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Это не обязательно ошибка. Однако перезапуск ядра Restreamer может занять немного больше времени..","This is to mention the copyright regulations for the target of this service.":"Это должно упомянуть положения об авторском праве для цели этой службы.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Эта лицензия позволяет повторным пользователям копировать и распространять материал на любом носителе или в любом формате только в неадаптированной форме и только при условии указания авторства. Лицензия разрешает коммерческое использование.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Эта лицензия позволяет повторным пользователям копировать и распространять материал на любом носителе или в любом формате только в неадаптированной форме, только в некоммерческих целях и только при условии указания авторства.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате только в некоммерческих целях и только при условии указания авторства.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате только в некоммерческих целях и только при условии указания авторства. Если вы микшируете, адаптируете или развиваете материал, вы должны лицензировать измененный материал на тех же условиях.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате при условии указания авторства. Лицензия разрешает коммерческое использование.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате при условии указания авторства. Лицензия разрешает коммерческое использование. Если вы микшируете, адаптируете или развиваете материал, вы должны лицензировать измененный материал на тех же условиях.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Этот источник нельзя редактировать, пока он используется. Чтобы продолжить, вы должны отключить источник.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Эта версия пользовательского интерфейса не поддерживает доступный двоичный файл FFmpeg (",["0"],"). Пользовательский интерфейс требует ",["1"],". Пожалуйста, используйте поддерживаемый двоичный файл FFmpeg."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Эта версия пользовательского интерфейса не поддерживает подключенное ядро (",["0"],"). Пользовательский интерфейс требует ",["1"],". Пожалуйста, используйте совместимую версию пользовательского интерфейса."],"This version of the UI is compatible.":"Эта версия пользовательского интерфейса совместима.","Time until an inactive viewer connection is treated as closed.":"Время до того, как неактивное соединение со зрителем будет считаться закрытым.","Token":"Токен","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Передача моментальных снимков основного источника на сервер HTTP/S. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Передайте аудиоканал основного источника на сервер Icecast. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Передайте основной источник как HTTP-Live-Streaming (HLS) на сервер HTTP/S. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Передайте основной источник как MPEG-DASH на сервер HTTP/S. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Передайте основной источник в Brightcove Live Service. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Передайте основной источник в службу CDN77 RTMP. Подробнее о настройке <0>здесь.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Передайте основной источник в службу DaCast RTMP. Подробнее о настройке <0>здесь.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Передать основной источник в службу MPEG-TS. Подробнее о настройках можно узнать здесь <0>здесь.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер RTMP(e|s|t|te|ts). Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер RTSP. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Передача основного источника на сервер Red5/Pro Server. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер SRT. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер UDP. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер WOWZA. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Передайте основной источник на основной ресурс datarhei. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Передайте основной источник на ресурс livespotting.com. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Передайте основной источник в Akamai (MSL) Media Services Live. Более подробную информацию о настройках MSL Encoder можно найти <0>здесь.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Передайте основной источник в облачный сервис кодирования Bitmovin, мощный инструмент для прямой трансляции. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Передайте основной источник в службу Restream RTMP. Более подробную информацию о настройках можно найти <0>здесь.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Передает ваше видео в виде RTMP-потока с необходимым ключом, сгенерированным в YouTube Studio. Дополнительную информацию о настройке прямых трансляций можно найти в <0>Академии для авторов YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Передает ваш видеопоток с нужным ключом, сгенерированным в Twitter Producer. Дополнительную информацию о настройке прямой трансляции можно найти на странице <0>Producer в Твиттере.","Tune":"Мелодия","UDP transport":"Транспорт UDP","Unable to load the config.":"Не удалось загрузить конфиг.","Unique ident on the service.":"Уникальный идентификатор на сервисе.","Unknown":"Неизвестный","Unselected":"Не выбрано","Upload":"Загрузить","Uploading the file failed":"Загрузка файла не удалась","Uploading the logo failed":"Не удалось загрузить логотип","Uptime":"Время безотказной работы","Use Auth0 for your running Restreamer Core. More <0>details.":"Используйте Auth0 для работающего ядра Restreamer. Больше <0>подробностей.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Воспользуйтесь мастером (<0/>) для быстрой и простой настройки или отредактируйте (<1/>) источники непосредственно в пользовательском режиме.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Используйте свои авторские права и выберите правильную лицензию на изображение. Независимо от того, бесплатно для всех или сильно ограничено. Кратко обсудите, что другим разрешено делать с вашим изображением.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Используйте свои авторские права и выберите правильную лицензию на изображение. Независимо от того, бесплатно для всех или сильно ограничено. Кратко обсудите, что другим разрешено делать с вашим изображением.","User registration":"Регистрация пользователя","Username":"Имя пользователя","Username for authorization.":"Имя пользователя для авторизации.","Username for the device.":"Имя пользователя для устройства.","VPU ID":"VPU ID","Video":"Видео","Video device":"Видеоустройство","Video settings":"Настройки видео","Video setup":"Настройка видео","Video source":"Источник видео","Viewer":"Зрителей","Virtual source":"Виртуальный источник","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Добро пожаловать в Restreamer v2, решение для быстрой и простой публикации видео. Бесплатно для частного и коммерческого использования. Дополнительная помощь в <0>документах.","Write protection":"Защита от записи","YUV test pattern":"Тестовый образец YUV","Yes":"Да","You can't abort the wizard because at least one input must be defined.":"Вы не можете прервать работу мастера, так как должен быть настроен хотя бы один источник.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Вы изменили конфигурацию. Чтобы изменения вступили в силу, необходимо перезапустить приложение. Вы хотите перезапустить сейчас?","You have to reconnect manually":"Вы должны повторно подключиться вручную","You have unsaved changes. Please save them before you can control the service again.":"У вас есть несохраненные изменения. Пожалуйста, сохраните их, прежде чем вы сможете снова управлять сервисом.","Your stream needs to be encoded, but there's no suitable encoder available.":"Ваш поток необходимо закодировать, но подходящего кодировщика нет.","Your stream needs to be encoded. Choose the desired encoder:":"Ваш поток должен быть закодирован. Выберите нужный энкодер:","blue":"синий","brown":"коричневый","iframe code":"код iframe","kbit/s":"кбит/с","pink":"розовый","velvet":"вельветовый","violet":"фиолетовый","white":"белый"}}; \ No newline at end of file +/*eslint-disable*/module.exports={messages:{"6 (+ guaranteed to start with a Key frame)":"6 (+ гарантированное начало с ключевого кадра)","7 (+ fragmented MP4 format)":"7 (+ фрагментированный формат MP4)","<0>Compatibility list":"<0>Список совместимости","<0>Show probe details":"<0>Показать подробности","ALSA":"ALSA","API endpoint not found. Settings not saved.":"Конечная точка API не найдена. Настройки не сохранены.","AVFoundation":"AVFoundation","Abort":"Отменить","About":"О","Add":"Добавить","Add Publication":"Добавить публикацию","Add external widgets and styles to the publication site. You can find some examples on the help page.":"Добавьте внешние виджеты и стили на сайт публикации. Вы можете найти несколько примеров на странице помощи.","Add new channel":"Добавить новый канал","Add: {0}":["Добавить: ",["0"]],"Address":"Адрес","Address for the background image.":"Адрес для фонового изображения.","Address to listen on for HTTP requests.":"Адрес для прослушивания HTTP-запросов.","Address to listen on for HTTPS requests.":"Адрес для прослушивания HTTPS-запросов.","Adjust publication site colors and background as you like.":"Настройте цвета и фон сайта публикации по своему усмотрению.","Advanced monitoring":"Расширенный мониторинг","Advanced settings":"Расширенные настройки","Advanced setup":"Advanced Setup","AirPlay":"AirPlay","Alerting by email":"Оповещение по электронной почте","All":"Все","All important system settings.":"Все важные системные настройки.","Allow all referrer":"Разрешить всех рефералов","Allow counting how many viewers the stream has.":"Разрешить подсчет количества зрителей у трансляции.","Amplitude":"Амплитуда","An environment variable sets this value.":"Переменная среды задает это значение.","App":"Приложение","Application":"Приложение","Are you sure you want to abort the wizard?":"Вы уверены, что хотите прервать работу мастера настройки?","Audio":"Аудио","Audio Device":"Аудио-устройство","Audio device":"Аудио-устройство","Audio from device":"Звук с устройства","Audio settings":"Настройки звука","Audio setup":"Настройка звука","Auth0":"Auth0","Auth0 Tenant":"Клиент Auth0","Auth0 is currently not available because this interface is loaded from an insecure origin.":"Auth0 в настоящее время недоступен, так как этот интерфейс загружается из небезопасного источника.","Author":"Автор","Authorization":"Авторизация","Automatic cleanup of all media data":"Автоматическая очистка всех медиаданных","Autoplay":"Авто-плей","Available":"Доступный","Back":"Назад","Background colors":"Цвета фона","Background image":"Фоновая картинка","Backup URL":"Резервный URL-адрес","Backup server":"Резервный сервер","Backup stream":"Резервный поток","Backup stream key":"Резервный ключ потока","Bandwidth":"Пропускная способность","Bandwidth control":"Контроль пропускной способности","Banner":"Баннер","Basic":"Базовый","Beep factor":"Звуковой фактор","Bitrate":"Битрейт","Briefly describe what the audience will see during the live stream.":"Кратко опишите, что зрители увидят во время прямой трансляции.","Button color":"Цвет кнопки","Cache for files on /data.":"Кэш для файлов в /data.","Cache time (Seconds)":"Время кэширования (сек)","Cache types":"Типы кеша","Capture clicks":"Захват кликов","Capture cursor":"Захват курсора","Channel \"{0}\" saved":["Канал \"",["0"],"\" сохранен"],"Channels":"Каналы","Check for updates":"Проверять наличие обновлений","Check the requirements":"Проверьте требования","Choose a video stream":"Выберите видеопоток","Choose an audio stream":"Выберите аудиопоток","Choose an input device ...":"Выберите устройство ввода...","Choose codec ...":"Выберите кодек...","Choose tenant ...":"Выбрать клиента...","Chromecast":"Chromecast","Chunk":"Чанк","Close":"Закрыть","Code injection":"Внедрение кода","Codec":"Кодек","Color":"Цвет","Config":"Конфигурация","Confirm password":"Подтвердить пароль","Connect":"Подключить","Connected device":"Подключенное устройство","Connected since <0/>":"Подключено с <0/>","Connecting ...":"Подключение...","Connecting to Restreamer Core ...":"Подключение к ядру Restreamer...","Connecting to Restreamer Core failed probably because of mixed content.":"Не удалось подключиться к ядру Restreamer, вероятно, из-за смешанного контента.","Content":"Контент","Content URL":"URL содержимого","Cores":"Ядра","Create user":"Создать пользователя","Creative Commons":"Creative Commons","Custom ...":"Пользовательский...","Custom JSON config for datarhei Core.":"Пользовательская конфигурация JSON для ядра datarhei.","Custom audio device":"Пользовательское аудиоустройство","Custom audio index":"Пользовательский звуковой индекс","Custom bitrate (kbit/s)":"Пользовательский битрейт (кбит/с)","Custom code injection":"Внедрение пользовательского кода","Custom delay":"Пользовательская задержка","Custom device":"Пользовательское устройство","Custom format":"Пользовательский формат","Custom framerate":"Пользовательская частота кадров","Custom keyframe interval":"Пользовательский интервал ключевых кадров","Custom layout":"Пользовательский макет","Custom sampling (Hz)":"Пользовательская выборка (Гц)","Custom scale":"Пользовательский масштаб","Custom size":"Пользовательский размер","Custom video device":"Пользовательское видеоустройство","Custom video index":"Пользовательский индекс видео","Data copied to clipboard":"Данные скопированы в буфер обмена","Death color":"Цвет смерти","Decibels (dB)":"Децибелы (дБ)","Decoder":"Декодер","Default":"По умолчанию","Delay":"Задержка","Delay (ms)":"Задержка (мс)","Delete":"Удалить","Deleting a publication service cannot be reversed. The publication stops immediately.":"Удаление службы публикации нельзя отменить. Публикация сразу прекращается.","Delivering mode":"Режим доставки","Description":"Описание","Design":"Дизайн","Device":"Устройство","Disconnect":"Отключить","Disconnect & Continue":"Отключить и продолжить","Disconnecting ...":"Отключение...","Disk":"Диск","Disk cache":"Кэш диска","Disk storage":"Дисковое хранилище","Do you really want to restart the application now?":"Вы действительно хотите перезапустить приложение сейчас?","Do you want to delete \"{0}\"?":["Вы хотите удалить \"",["0"],"\"?"],"Do you want to delete {title}?":["Вы хотите удалить ",["title"],"?"],"Do you want to disconnect \"{0}\"?":["Вы хотите отключить \"",["0"],"\"?"],"Docs":"Документы","Documentation":"Документация","Dup. frames":"Дуп. кадры","EDIT: Player":"РЕДАКТИРОВАТЬ: Плеер","EDIT: Publication Website":"РЕДАКТИРОВАТЬ: Сайт публикации","EXT-X-VERSION":"EXT-X-VERSION","Edit":"Редактировать","Edit the audio and video sources for the live stream. Add a description, and set your desired content license.":"Отредактируйте аудио и видеоисточники для прямой трансляции. Добавьте описание и установите желаемую лицензию на содержимое.","Edit: {title}":["Изменить: ",["title"]],"Embed":"Встроить","Enable":"Включить","Enable RTMP server ...":"Включить RTMP-сервер...","Enable SRT server ...":"Включить сервер SRT ...","Enable a periodic beep every second with this value times the carrier frequency":"Включить периодический звуковой сигнал каждую секунду с этим значением, умноженным на несущую частоту","Enable backup stream":"Включить резервный поток","Enable nerd statistics":"Включить статистику ботаников","Enable now":"Включить сейчас","Enable primary stream":"Включить основной поток","Enable snapshots":"Включить снимки","Enabling authorization is strongly advised. Otherwise, anybody can access this instance.":"Настоятельно рекомендуется включить авторизацию. В противном случае любой может получить доступ к этому экземпляру.","Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs.":"Настоятельно рекомендуется включить базовую аутентификацию. В противном случае любой может записать данные в /memfs.","Encoder":"Кодер","Encoding":"Кодирование","Encryption":"Шифрование","Enter a name for the new channel.":"Введите имя для нового канала.","Enter password":"Введите пароль","Enter the address of your network source:":"Введите адрес вашего сетевого источника:","Enter username":"Введите имя пользователя","Entropy coder":"Энтропийный кодер","Error":"Ошибка","Error while copying data to clipboard":"Ошибка при копировании данных в буфер обмена","Error: {0}":["Ошибка: ",["0"]],"Expands the area above the channel list (live chat).":"Расширяет область над списком каналов (живой чат).","Expands the area under the channel description (comment boxes).":"Расширяет область под описанием канала (окна комментариев).","Expert mode":"Режим эксперта","Extend channel list":"Расширить список каналов","Extend content":"Расширить содержимое","Extend footer":"Расширить нижний колонтитул","Extend header":"Расширить заголовок","FFmpeg":"FFmpeg","FPS":"FPS","Failed to create publication service ({0})":["Не удалось создать службу публикации (",["0"],")"],"Failed to create publication website files.":"Не удалось создать файлы веб-сайта публикации.","Failed to probe the source. Please check the <0>probe details.":"Не удалось проверить источник. Пожалуйста, проверьте <0>подробности.","Failed to refresh token: {0}":["Не удалось обновить токен: ",["0"]],"Failed to save ingest metadata":"Не удалось сохранить импортированные метаданные","Failed to stop process":"Не удалось остановить процесс","Failed to store player size setting.":"Не удалось сохранить настройку размера проигрывателя.","Failed to store publication service ({0})":["Не удалось сохранить службу публикации (",["0"],")"],"Failed to update ingest process ({0})":["Не удалось обновить процесс загрузки (",["0"],")"],"Failed to update ingest snapshot process ({0})":["Не удалось обновить процесс создания моментального снимка (",["0"],")"],"Failed to update the player":"Не удалось обновить плеер","Failed to update the playersite":"Не удалось обновить сайт игроков","Failed to verify the source. Please check the address.":"Не удалось проверить источник. Пожалуйста, проверьте адрес.","Filter":"Фильтр","Finish":"Закончить","Flags":"Флаги","For Javascripts.":"Для Javascripts.","For Stylesheets.":"Для таблиц стилей.","Force input framerate":"Принудительная частота кадров на входе","Format":"Формат","Frame drops":"Потеря кадров","Framebuffer":"Кадровый буфер","Framerate":"Частота кадров","Frequency (Hz)":"Частота (Гц)","GET":"GET","General":"Общие","Google Analytics ID":"Идентификатор Google Аналитики","Google Analytics Tracker Name":"Название трекера Google Аналитики","HLS":"HLS","HLS output":"Выход HLS","HLS server":"Сервер HLS","HLS statistic for the In-memory storage":"Статистика HLS для хранилища в памяти","HTTP and HTTPS":"HTTP и HTTPS","HTTP port":"HTTP-порт","HTTPS (SSL/TLS)":"HTTPS (SSL/TLS)","HTTPS port":"HTTPS-порт","Hardware device":"Аппаратное устройство","Header":"Заголовок","Headline":"Заголовок","Horizontal Flip":"Горизонтальный переворот","Hosted Restreamer interface":"Размещенный интерфейс Restreamer","Human readable name on the service.":"Человекочитаемое имя на сервисе.","IP address":"IP адрес","If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port.":"Если вы изменили порты, возможно, ядро Restreamer уже перезапустилось, но теперь он доступен на другом порту.","If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core.":"Если вы включили Let's Encrypt TLS, получение сертификатов может занять некоторое время. Убедитесь, что ядро Restreamer доступно через порт 80 из Интернета. Пожалуйста, проверьте журнал консоли ядра Restreamer.","Ignore IP ranges":"Игнорировать диапазоны IP-адресов","Image URL":"URL изображения","Imprint":"Выходные данные","In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly.":"В дополнение к плееру Restreamer предлагает полноценную целевую страницу, которую вы можете использовать для простого и быстрого представления своей прямой трансляции.","In-memory":"В памяти","In-memory storage":"Хранилище в памяти","Incompatible":"Несовместимо","Inherit":"Наследовать","Inject 1":"Встраивание 1","Inject 2":"Встраивание 2","Inject 3":"Встраивание 3","Inject 4":"Встраивание 4","Interval (seconds)":"Интервал (секунды)","Issue alert":"Оповещение о проблеме","Keyframe interval (seconds)":"Интервал между ключевыми кадрами (секунды)","Layout":"Макет","Let's Encrypt certification":"Сертификат Let's Encrypt","Let's Encrypt requires one or more public domain names and an accessible port 80/TCP.":"Для работы Let's Encrypt требуется одно или несколько общедоступных доменных имен и доступный порт 80/TCP.","Level":"Уровень","Level of system protocol.":"Уровень системного протокола.","License":"Лицензия","Life color":"Цвет жизни","Linecolor":"Цвет линии","Link":"Ссылка","Link, mouseover":"Ссылка, наведение курсора","List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions.":"Список диапазонов IP адресов в нотации CIDR, напр., 127.0.0.1/32, которые не будут записываться статистикой — по одному диапазону IP адресов на строку. Оставьте пустым для записи всех сеансов..","List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types.":"Список расширений файлов для кэширования (напр.. \".html\"), по одному в строке. Оставьте пустым, чтобы кэшировать все типы файлов.","List size (segments)":"Размер списка (сегменты)","Live-Streaming to Facebook Live RTMP service":"Прямая трансляция на сервис Facebook Live RTMP","Live-Streaming to Instagram Live RTMP Service. The stream key requires a service such as <0>Yellow Duck.":"Прямая трансляция на сервис Instagram Live RTMP. Для ключа потока требуется такая служба, как <0>Yellow Duck.","Live-Streaming to Twitch Live RTMP Service.":"Прямая трансляция на сервис Twitch Live RTMP.","Live-Streaming to Vimeo Live RTMP Service":"Прямая трансляция на RTMP-сервис Vimeo Live","Livesource ID":"Livesource ID","Log level":"Уровень журнала","Logging":"Логирование","Login":"Авторизоваться","Login failed: Couldn't load API details":"Ошибка входа: не удалось загрузить сведения об API","Login failed: {0}":["Ошибка входа: ",["0"]],"Login/JWT authorization":"Вход/JWT-авторизация","Logo":"Логотип","Logout":"Выйти","Loudness Normalization":"Нормализация громкости","MB":"MB","Main Source":"Главный источник","Main channel":"Основной канал","Main channel not found":"Основной канал не найден","Main channel saved":"Основной канал сохранен","Main page channel (index.html).":"Канал главной страницы (index.html).","Maintainer:":"Сопровождающий:","Make the channel available as an RTMP stream (experimental).":"Сделать канал доступным в виде RTMP-потока (экспериментально).","Make the channel available as an SRT stream (experimental).":"Сделать канал доступным в виде SRT-потока (экспериментально).","Master playlist (increases browser/client compatibility)":"Главный список воспроизведения (повышает совместимость с браузерами/клиентами)","Maximum allowed cache size, 0 for unlimited.":"Максимально допустимый размер кеша, 0 для неограниченного.","Maximum allowed megabytes of RAM for /memfs, 0 for unlimited.":"Максимально допустимо мегабайт ОЗУ для /memfs, 0 для неограниченного.","Maximum allowed megabytes to consume from hard disk. 0 for unlimited.":"Максимально разрешенное количество мегабайт для использования с жесткого диска. 0 без ограничений.","Maximum bandwidth Mbit/s":"Максимальная пропускная способность Мбит/с","Maximum delay in milliseconds.":"Максимальная задержка в миллисекундах.","Maximum file size (Megabytes)":"Максимальный размер файла (Мегабайты)","Maximum file size to put in cache.":"Максимальный размер файла для кэширования.","Maximum log histroy":"Максимальная история журнала","Maximum log lines":"Максимальное количество строк журнала","Maximum size (Megabytes)":"Максимальный размер (Мегабайты)","Maximum viewer idle time (Seconds)":"Максимальное время простоя зрителя (в секундах)","Maximum viewers":"Максимальное количество зрителей","Memory":"Память","Meta information":"Мета информация","Metadata":"Метаданные","Mold":"Плесень","More about Twitter's copyright <0>here.":"Подробнее об авторских правах Twitter <0>здесь.","More about YouTube's copyright <0>here.":"Подробнее об авторских правах YouTube <0>здесь.","More about licenses here":"Подробнее о лицензиях здесь","More about the service":"Подробнее о сервисе","Mute":"Без звука","Mute a channel.":"Отключить звук на канале.","Mute left":"Выключить звук слева","Mute right":"Отключить звук справа","Name":"Имя","Name for the template. If the name already exists, it will be overwritten.":"Имя для шаблона. Если имя уже существует, оно будет перезаписано.","Network":"Сеть","Network source":"Сетевой источник","Next":"Далее","Next: Audio":"Далее: Аудио","Next: Video setup":"Далее: Настройка видео","No":"Нет","No audio":"Нет звука","No audio stream available":"Аудиопоток недоступен","No input device available":"Устройство ввода недоступно","No live stream was detected. Please check the software that sends the stream.":"Прямая трансляция не обнаружена. Пожалуйста, проверьте программное обеспечение, которое отправляет поток.","No source selected":"Источник не выбран","No sources available":"Нет доступных источников","No suitable encoder found.":"Подходящий энкодер не найден.","No suitable filter found.":"Не найден подходящий фильтр.","No video":"Нет видео","No video stream available":"Видеопоток недоступен","Node ID":"Node ID","Noise":"Шум","None":"Никто","Notes":"Заметки","Number of log lines to keep.":"Количество строк журнала для сохранения.","Number of logs to keep for each process.":"Количество журналов для каждого процесса.","OK":"OK","One referrer per line, e.g. http://www.example.com":"Один реферер на строку, напр.. http://www.example.com","Open":"Открыть","Pan":"Пан","Passphrase":"Пассфраза","Passphrase for SRT encryption.":"Парольная фраза для шифрования SRT.","Passphrase must be between 10 and 79 characters long":"Длина парольной фразы должна составлять от 10 до 79 символов","Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources.":"Сквозную \"Passthrough (copy)\" следует отключать только в случае необходимости. Каждое кодирование требует дополнительных ресурсов CPU/GPU.","Password":"Пароль","Password for authorization.":"Пароль для авторизации.","Password for the device.":"Пароль для устройства.","Persist viewer statistics":"Сохранять статистику просмотров","Pixel format":"Пиксельный формат","Plan: <0>Starter":"План: <0>Начальный","Platforms":"Платформы","Playback":"Воспроизведение","Player":"Плеер","Player URL":"URL-адрес плеера","Player settings saved":"Настройки плеера сохранены","Playersite":"Сайт плеера","Playlist":"Плейлист","Playlist version (M3U8). Version 3 has the best browser/client compatibility.":"Версия плейлиста (M3U8). Версия 3 имеет наилучшую совместимость с браузерами/клиентами.","Please check the <0>process log":"Пожалуйста, проверьте <0>журнал процесса","Please contact the operator of the service and check what happens.":"Пожалуйста, свяжитесь с оператором сервиса и проверьте, что происходит.","Please get in touch with the operator of the service and check what happens.":"Пожалуйста, свяжитесь с оператором службы и проверьте, что происходит.","Please select a file to upload.":"Пожалуйста, выберите файл для загрузки.","Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources.":"Пожалуйста, используйте \"Passthrough (copy)\", если это возможно. Кодирование требует дополнительных ресурсов CPU/GPU.","Please wait. Probe stream data ...":"Пожалуйста подождите. Данные о потоке...","Please wait. Setting up the stream ...":"Пожалуйста подождите. Настройка потока...","Port":"Порт","Position":"Позиция","Preset":"Пресет","Primary stream":"Основной поток","Primary stream key":"Основной ключ потока","Probe":"Зонд","Process":"Процесс","Process control":"Контроль процесса","Process debug report":"Отчет об отладке процесса","Process details":"Детали процесса","Process report":"Отчет о процессе","Processing & Control":"Обработка и контроль","Profile":"Профиль","Protocol":"Протокол","Protocols":"Протоколы","Public domain/s":"Публичный домен/ы","Publication service not found":"Служба публикации не найдены","Publication website settings saved":"Настройки сайта публикации сохранены","Publications":"Публикации","Pull Mode":"Режим вытягивания","Pull or recieve the data:":"Вытяните или получите данные:","Quality":"Качество","RGB test pattern":"Тестовый шаблон RGB","RTMP":"RTMP","RTMP Port":"Порт RTMP","RTMP app for publishing.":"Приложение RTMP для публикации.","RTMP output":"Выход RTMP","RTMP server":"RTMP-сервер","RTMP server is not enabled":"RTMP-сервер не включен","RTMP server listen address.":"Адрес прослушивания RTMP-сервера.","RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'":"Токен RTMP для публикации и воспроизведения. Токен – это значение параметра запроса URL-адреса token.","RTMPS Port":"Порт RTMPS","RTMPS server":"RTMPS-сервер","RTMPS server listen address.":"Адрес прослушивания сервера RTMPS.","RTSP":"RTSP","Raspberry Pi camera":"Камера Raspberry Pi","Rate control":"Контроль скорости","Ratio":"Соотношение","Read input at native speed":"Чтение ввода на исходной скорости","Receive Mode":"Режим приема","Reconnect":"Повторное подключение","Reconnect delay (seconds)":"Задержка повторного подключения (в секундах)","Reconnecting in {0}s":["Повторное подключение через ",["0"],"с"],"Reconnecting to Restreamer Core failed for the last {RETRIES} seconds.":["Не удалось повторно подключиться к ядру Restreamer в течение последних ",["RETRIES"]," секунд."],"Reconnecting to Restreamer Core failed.":"Повторное подключение к ядру Restreamer не удалось.","Refresh":"Обновление","Region":"Регион","Reload":"Перезагрузка","Remove the oldest entries if the /memfs is full":"Удалите самые старые записи, если /memfs заполнен","Requires activation":"Требуется активация","Restart":"Перезапустить","Restart required":"Требуется перезагрузка","Restarting":"Перезапуск","Restarting Restreamer Core ...":"Перезапуск ядра Restreamer...","Restarting the application failed.":"Не удалось перезапустить приложение.","Restreamer Service":"Сервис Restreamer","Retrieving stream data ...":"Получение данных потока...","Retry":"Повторить попытку","Rotate":"Повернуть","Rule":"Правило","SRT":"SRT","SRT output":"Выход SRT","SRT server":"Сервер SRT","SRT server is not enabled":"Сервер SRT не включен","SRT server listen address.":"Адрес прослушивания сервера SRT.","SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'":"SRT-токен для публикации и воспроизведения. Токен - это значение параметра streamid 'token'.","Sampling":"Выборка","Save":"Сохранить","Scale":"Масштаб","Seconds to keep files in cache.":"Секунд для хранения файлов в кеше.","Seconds until a process is restarted.":"Секунд до перезапуска процесса.","Seconds until a staled process is terminated.":"Секунд до завершения зависшего процесса.","Seconds until the snapshot/thumbnail of the video source is updated.":"Секунд до обновления моментального снимка/миниатюры источника видео.","Security":"Безопасность","Security passphrase":"Парольная фраза безопасности","Security token":"Токен безопасности","Seekbar color":"Цвет панели поиска","Segment length (seconds)":"Длина сегмента (секунды)","Segment will be cut on the following keyframe after this time has passed. 2 is recommended.":"Сегмент будет обрезан на следующем ключевом кадре по истечении этого времени. 2 рекомендуется.","Segmentation":"Сегментация","Select RTMP or SRT (if enabled) for less latency.":"Выберите RTMP или SRT (если включено) для меньшей задержки.","Select a device:":"Выберите устройство:","Select audio source:":"Выберите источник звука:","Select source ...":"Выберите источник...","Select video source:":"Выберите источник видео:","Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer).":"Выберите, извлекаете ли вы поток из <0>сетевого источника (например, сетевой камеры) или <1>внутреннего RTMP-сервера (например, потоки OBS на Restreamer)...","Select your encoding setting:":"Выберите настройку кодировки:","Select your filter settings (optional):":"Выберите настройки фильтра (необязательно):","Selected":"Выбрано","Selected channel":"Выбранный канал","Selection":"Выбор","Send anonymous metrics (helps us for future development)":"Отправляйте анонимные метрики (помогает нам в будущем развитии)","Send stream to this address:":"Отправить поток на этот адрес:","Send video to Framebuffer":"Отправить видео в фреймбуфер","Server":"Сервер","Server URL":"URL сервера","Service":"Обслуживание","Service name":"Имя службы","Service token for monitoring.":"Токен сервиса для мониторинга.","Sessions":"Сессии","Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Устанавливает ограничение пропускной способности в Мбит/с для исходящей передачи данных HLS. Все услуги, такие как RTMP и исходящие процессы, включены в расчет. Если пропускная способность превышена, средства просмотра HLS получают код состояния HTTP 509 (превышен предел пропускной способности). 0 неограничен.","Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited.":"Устанавливает лимит зрителей для сеансов HLS. Если ограничение превышено, средства просмотра HLS получают код состояния HTTP 509 (превышен предел пропускной способности). 0 неограничен.","Setting for connection to the service.":"Настройка подключения к сервису.","Settings":"Настройки","Settings (expert mode)":"Настройки (режим эксперта)","Settings for /data path. The access is protected by":"Настройки пути /data. Доступ защищен","Settings for /memfs path.":"Настройки для пути /memfs.","Settings saved. All changes will be applied after restarting the application.":"Настройки сохранены. Все изменения вступят в силу после перезапуска приложения.","Share button":"Кнопка поделиться","Shows a reference to the project.":"Показывает ссылку на проект.","Sign up (free)":"Регистрация (бесплатно)","Silence":"Тишина","Silence Audio":"Тишина Аудио","Sine":"Синус","Sitename":"Название сайта","Size":"Размер","Snapshot":"Снимок","Social-login (OAuth2, 2FA)":"Регистрация (OAuth2, 2FA)","Socket timeout (microseconds)":"Время ожидания сокета (микросекунды)","Software":"Программного обеспечения","Source":"Источник","Source & Encoding":"Источник и кодирование","Speed":"Скорость","Stale timeout (seconds)":"Время ожидания ожидания (секунды)","Statistics":"Статистика","Storage":"Хранилище","Stores the viewer statistics to the disk.":"Сохраняет статистику просмотра на диск.","Stream":"Поток","Stream URL":"URL-адрес потока","Stream key":"Ключ потока","Stream name":"Название потока","Stream names":"Имена потоков","Stream source for publication service (experimental).":"Источник потока для службы публикации (экспериментальный).","Support datarhei Restreamer":"Поддержка datarhei Restreamer","Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more.":"Поддерживает HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT и другие.","System":"Система","Template":"Шаблон","Template to be used for creating the publication website. The delete button removes the selection from the system.":"Шаблон, который будет использоваться для создания веб-сайта публикации. Кнопка удаления удаляет выделение из системы.","Terms":"Условия","Test pattern":"Тестовый шаблон","Test pattern (extended)":"Тестовый шаблон (расширенный)","Text colors":"Цвета текста","The RTMP output requires the RTMP Server.":"Для вывода RTMP требуется сервер RTMP.","The SRT output requires the SRT Server.":"Для вывода SRT требуется сервер SRT Server.","The amplitude (0.0 - 1.0) of the generated audio stream":"Амплитуда (0.0 - 1.0) генерируемого аудиопотока","The application is using an older version of the settings.":"Приложение использует более старую версию настроек.","The available FFmpeg binary doesn't support any of the required protocols.":"Доступный двоичный файл FFmpeg не поддерживает ни один из требуемых протоколов.","The bitrate of the audio stream.":"Битрейт аудиопотока.","The carrier frequency":"Несущая частота","The channel \"{0}\" could not be deleted":["Канал \"",["0"],"\" не может быть удален"],"The channel \"{0}\" has been deleted":["Канал \"",["0"],"\" удален"],"The deletion of this channel can not be recovered. All publications of this channel will be removed.":"Удаление этого канала не может быть восстановлено. Все публикации этого канала будут удалены.","The input profile is not complete. Please define a video and audio source.":"Входной профиль не завершен. Укажите источник видео и аудио.","The layout of the audio stream.":"Схема аудиопотока.","The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended.":"Максимальное количество сегментов плейлиста. 0 будет содержать все сегменты. 6 рекомендуется.","The noise color":"Цвет шума","The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission.":"Лицо, связавшее произведение с этим документом, сделало произведение общественным достоянием, отказавшись от всех своих прав на произведение во всем мире в соответствии с законом об авторском праве, включая все смежные и смежные права, в той мере, в какой это разрешено законом. Вы можете копировать, изменять, распространять и выполнять работу даже в коммерческих целях, не спрашивая разрешения.","The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma.":"Общедоступное доменное имя хоста, на котором работает Restreamer. Разделяйте несколько доменных имен запятой.","The publication service \"{0}\" could not be deleted":["Службу публикации \"",["0"],"\" не удалось удалить"],"The publication service \"{0}\" has been created":["Служба публикации \"",["0"],"\" создана"],"The publication service \"{0}\" has been deleted":["Служба публикации \"",["0"],"\" удалена"],"The publication service has been created":"Создан сервис публикации","The sample rate of the audio stream.":"Частота дискретизации аудиопотока.","The selected file is too big ({0} bytes). Only {1} bytes are allowed.":["Выбранный файл слишком велик (",["0"]," байт). Допускается только ",["1"]," байт."],"The selected file type ({0}) is not allowed. Allowed file types are {types}":["Выбранный тип файла (",["0"],") не разрешен. Разрешенными типами файлов являются ",["types"]],"The settings for \"{0}\" have been saved":["Настройки для \"",["0"],"\" сохранены"],"The source doesn't provide any audio streams.":"Источник не предоставляет никаких аудиопотоков.","The source doesn't provide any audio streams. Please check the <0>probe details.":"Источник не предоставляет никаких аудиопотоков. Пожалуйста, проверьте <0>подробнее.","The source doesn't provide any compatible audio streams.":"Источник не предоставляет совместимых аудиопотоков.","The source doesn't provide any compatible video streams. Please check the <0>requirements.":"Источник не предоставляет совместимых видеопотоков. Ознакомьтесь с <0>требованиями.","The source doesn't provide any video streams. Please check the <0>probe details.":"Источник не предоставляет никаких видеопотоков. Пожалуйста, проверьте <0>подробнее.","The source doesn't provide any video streams. Please check the device.":"Источник не предоставляет никаких видеопотоков. Пожалуйста, проверьте устройство.","The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel.":"Источник видео не обеспечивает совместимый аудиопоток. Рекомендуется <0>отключить звук. Сервисы YouTube, Facebook и другие компании требуют наличия аудиоканала....","The video source is compatible. Select the desired resolution:":"Источник видео совместим. Выберите нужное разрешение:","There are updates available. Here you get more information.":"Доступны обновления. Здесь вы получите больше информации.","There was a problem storing the settings. Settings not saved.":"Не удалось сохранить настройки. Настройки не сохранены.","There was an error connecting to Restreamer Core at {0}.":["Произошла ошибка при подключении к ядру Restreamer на ",["0"],"."],"There was an error during upload: {0}":["При загрузке произошла ошибка: ",["0"]],"There was an error setting up the stream.":"Не удалось настроить поток.","There were some errors in the settings. Settings not saved.":"Были некоторые ошибки в настройках. Настройки не сохранены.","There's no login method available.":"Метод входа недоступен.","This is a dummy service that explains to you the concepts of service.":"Это фиктивный сервис, который объясняет вам концепции сервиса.","This is not necessarily an error. However, it may take a bit longer for Restreamer Core to restart..":"Это не обязательно ошибка. Однако перезапуск ядра Restreamer может занять немного больше времени..","This is to mention the copyright regulations for the target of this service.":"Это должно упомянуть положения об авторском праве для цели этой службы.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, and only so long as attribution is given to the creator. The license allows for commercial use.":"Эта лицензия позволяет повторным пользователям копировать и распространять материал на любом носителе или в любом формате только в неадаптированной форме и только при условии указания авторства. Лицензия разрешает коммерческое использование.","This license allows reusers to copy and distribute the material in any medium or format in unadapted form only, for noncommercial purposes only, and only so long as attribution is given to the creator.":"Эта лицензия позволяет повторным пользователям копировать и распространять материал на любом носителе или в любом формате только в неадаптированной форме, только в некоммерческих целях и только при условии указания авторства.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator.":"Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате только в некоммерческих целях и только при условии указания авторства.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format for noncommercial purposes only, and only so long as attribution is given to the creator. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате только в некоммерческих целях и только при условии указания авторства. Если вы микшируете, адаптируете или развиваете материал, вы должны лицензировать измененный материал на тех же условиях.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use.":"Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате при условии указания авторства. Лицензия разрешает коммерческое использование.","This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms.":"Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате при условии указания авторства. Лицензия разрешает коммерческое использование. Если вы микшируете, адаптируете или развиваете материал, вы должны лицензировать измененный материал на тех же условиях.","This protocol is unknown or not supported by the available FFmpeg binary.":"Этот протокол неизвестен или не поддерживается имеющимся двоичным файлом FFmpeg.","This source cannot be edited while it is in use. To continue, you have to disconnect the source.":"Этот источник нельзя редактировать, пока он используется. Чтобы продолжить, вы должны отключить источник.","This version of the UI doesn't support the available FFmpeg binary ({0}). The UI requires {1}. Please use a supported FFmpeg binary.":["Эта версия пользовательского интерфейса не поддерживает доступный двоичный файл FFmpeg (",["0"],"). Пользовательский интерфейс требует ",["1"],". Пожалуйста, используйте поддерживаемый двоичный файл FFmpeg."],"This version of the UI doesn't support the connected Core ({0}). The UI requires {1}. Please use a compatible version of the UI.":["Эта версия пользовательского интерфейса не поддерживает подключенное ядро (",["0"],"). Пользовательский интерфейс требует ",["1"],". Пожалуйста, используйте совместимую версию пользовательского интерфейса."],"This version of the UI is compatible.":"Эта версия пользовательского интерфейса совместима.","Time until an inactive viewer connection is treated as closed.":"Время до того, как неактивное соединение со зрителем будет считаться закрытым.","Token":"Токен","Transmit a Livestream to a Telegram Channel.":"Передача Livestream в канал Telegram.","Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here.":"Передача моментальных снимков основного источника на сервер HTTP/S. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the audio channel of the main source to an Icecast Server. More details about the settings can be found <0>here.":"Передайте аудиоканал основного источника на сервер Icecast. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source as HTTP-Live-Streaming (HLS) to an HTTP/S Server. More details about the settings can be found <0>here.":"Передайте основной источник как HTTP-Live-Streaming (HLS) на сервер HTTP/S. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source as MPEG-DASH to an HTTP/S Server. More details about the settings can be found <0>here.":"Передайте основной источник как MPEG-DASH на сервер HTTP/S. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to a Brightcove Live Service. More details about the settings can be found <0>here.":"Передайте основной источник в Brightcove Live Service. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an CDN77 RTMP Service. More about the setup <0>here.":"Передайте основной источник в службу CDN77 RTMP. Подробнее о настройке <0>здесь.","Transmit the main source to an DaCast RTMP Service. More about the setup <0>here.":"Передайте основной источник в службу DaCast RTMP. Подробнее о настройке <0>здесь.","Transmit the main source to an MPEG-TS Service. More details about the settings can be found here <0>here.":"Передать основной источник в службу MPEG-TS. Подробнее о настройках можно узнать здесь <0>здесь.","Transmit the main source to an RTMP(e|s|t|te|ts) Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер RTMP(e|s|t|te|ts). Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an RTSP Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер RTSP. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an Red5/Pro Server. More details about the settings can be found <0>here.":"Передача основного источника на сервер Red5/Pro Server. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an SRT Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер SRT. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an UDP Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер UDP. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here.":"Передайте основной источник на сервер WOWZA. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here.":"Передайте основной источник на основной ресурс datarhei. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to an livespotting.com Ressource. More details about the settings can be found <0>here.":"Передайте основной источник на ресурс livespotting.com. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to the Akamai (MSL) Media Services Live. More details about the MSL Encoder settings can be found on <0>here.":"Передайте основной источник в Akamai (MSL) Media Services Live. Более подробную информацию о настройках MSL Encoder можно найти <0>здесь.","Transmit the main source to the Bitmovin cloud encoding service, a powerful tool for live streaming. More details about the settings can be founds <0>here.":"Передайте основной источник в облачный сервис кодирования Bitmovin, мощный инструмент для прямой трансляции. Более подробную информацию о настройках можно найти <0>здесь.","Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here.":"Передайте основной источник в службу Restream RTMP. Более подробную информацию о настройках можно найти <0>здесь.","Transmit to a Azure Media Services. More details can be found <0>here.":"Передача на Azure Media Services. Более подробную информацию можно найти <0>здесь.","Transmit to linkedIn. More details can be found <0>here.":"Передайте в linkedIn. Более подробную информацию можно найти <0>здесь.","Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings.":"Передайте ваш Livestream на сервер Owncast. <0>Здесь вы можете найти более подробную информацию о настройках.","Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy.":"Передает ваше видео в виде RTMP-потока с необходимым ключом, сгенерированным в YouTube Studio. Дополнительную информацию о настройке прямых трансляций можно найти в <0>Академии для авторов YouTube.","Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer.":"Передает ваш видеопоток с нужным ключом, сгенерированным в Twitter Producer. Дополнительную информацию о настройке прямой трансляции можно найти на странице <0>Producer в Твиттере.","Tune":"Мелодия","UDP transport":"Транспорт UDP","Unable to load the config.":"Не удалось загрузить конфиг.","Unique ident on the service.":"Уникальный идентификатор на сервисе.","Unknown":"Неизвестный","Unselected":"Не выбрано","Upload":"Загрузить","Uploading the file failed":"Загрузка файла не удалась","Uploading the logo failed":"Не удалось загрузить логотип","Uptime":"Время безотказной работы","Use Auth0 for your running Restreamer Core. More <0>details.":"Используйте Auth0 для работающего ядра Restreamer. Больше <0>подробностей.","Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode.":"Воспользуйтесь мастером (<0/>) для быстрой и простой настройки или отредактируйте (<1/>) источники непосредственно в пользовательском режиме.","Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Используйте свои авторские права и выберите правильную лицензию на изображение. Независимо от того, бесплатно для всех или сильно ограничено. Кратко обсудите, что другим разрешено делать с вашим изображением.","Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image.":"Используйте свои авторские права и выберите правильную лицензию на изображение. Независимо от того, бесплатно для всех или сильно ограничено. Кратко обсудите, что другим разрешено делать с вашим изображением.","User registration":"Регистрация пользователя","Username":"Имя пользователя","Username for authorization.":"Имя пользователя для авторизации.","Username for the device.":"Имя пользователя для устройства.","VPU ID":"VPU ID","Vertical Flip":"Вертикальное сальто","Video":"Видео","Video device":"Видеоустройство","Video settings":"Настройки видео","Video setup":"Настройка видео","Video source":"Источник видео","Viewer":"Зрителей","Virtual source":"Виртуальный источник","Volume":"Объем","Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs.":"Добро пожаловать в Restreamer v2, решение для быстрой и простой публикации видео. Бесплатно для частного и коммерческого использования. Дополнительная помощь в <0>документах.","Where to store the HLS playlist and segments. In-Memory is recommended.":"Где хранить список воспроизведения HLS и сегменты. Рекомендуется использовать In-Memory.","Write protection":"Защита от записи","YUV test pattern":"Тестовый образец YUV","Yes":"Да","You can't abort the wizard because at least one input must be defined.":"Вы не можете прервать работу мастера, так как должен быть настроен хотя бы один источник.","You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?":"Вы изменили конфигурацию. Чтобы изменения вступили в силу, необходимо перезапустить приложение. Вы хотите перезапустить сейчас?","You have to reconnect manually":"Вы должны повторно подключиться вручную","You have unsaved changes. Please save them before you can control the service again.":"У вас есть несохраненные изменения. Пожалуйста, сохраните их, прежде чем вы сможете снова управлять сервисом.","Your stream needs to be encoded, but there's no suitable encoder available.":"Ваш поток необходимо закодировать, но подходящего кодировщика нет.","Your stream needs to be encoded. Choose the desired encoder:":"Ваш поток должен быть закодирован. Выберите нужный энкодер:","blue":"синий","brown":"коричневый","iframe code":"код iframe","kbit/s":"кбит/с","pink":"розовый","velvet":"вельветовый","violet":"фиолетовый","white":"белый"}}; \ No newline at end of file diff --git a/src/locales/ru/messages.po b/src/locales/ru/messages.po index 342d11f..9b6c2da 100644 --- a/src/locales/ru/messages.po +++ b/src/locales/ru/messages.po @@ -13,12 +13,20 @@ msgstr "" "Language-Team: \n" "Plural-Forms: \n" +#: src/misc/controls/HLS.js:81 +msgid "6 (+ guaranteed to start with a Key frame)" +msgstr "6 (+ гарантированное начало с ключевого кадра)" + +#: src/misc/controls/HLS.js:84 +msgid "7 (+ fragmented MP4 format)" +msgstr "7 (+ фрагментированный формат MP4)" + #: src/misc/EncodingSelect.js:224 msgid "<0>Compatibility list" msgstr "<0>Список совместимости" -#: src/views/Edit/Profile.js:380 -#: src/views/Edit/Profile.js:510 +#: src/views/Edit/Profile.js:393 +#: src/views/Edit/Profile.js:543 msgid "<0>Show probe details" msgstr "<0>Показать подробности" @@ -26,7 +34,7 @@ msgstr "<0>Показать подробности" msgid "ALSA" msgstr "ALSA" -#: src/views/Settings.js:907 +#: src/views/Settings.js:974 msgid "API endpoint not found. Settings not saved." msgstr "Конечная точка API не найдена. Настройки не сохранены." @@ -35,16 +43,16 @@ msgid "AVFoundation" msgstr "AVFoundation" #: src/misc/ChannelList.js:356 -#: src/views/Edit/Profile.js:410 -#: src/views/Edit/Wizard/index.js:1153 -#: src/views/Edit/index.js:549 -#: src/views/Edit/index.js:575 -#: src/views/Edit/index.js:594 -#: src/views/Publication/Add.js:362 -#: src/views/Publication/Edit.js:601 -#: src/views/Settings.js:1972 -#: src/views/Settings.js:2031 -#: src/views/Settings.js:2053 +#: src/views/Edit/Profile.js:433 +#: src/views/Edit/Wizard/index.js:1168 +#: src/views/Edit/index.js:603 +#: src/views/Edit/index.js:629 +#: src/views/Edit/index.js:648 +#: src/views/Publication/Add.js:364 +#: src/views/Publication/Edit.js:563 +#: src/views/Settings.js:2123 +#: src/views/Settings.js:2182 +#: src/views/Settings.js:2204 msgid "Abort" msgstr "Отменить" @@ -57,11 +65,11 @@ msgstr "О" msgid "Add" msgstr "Добавить" -#: src/views/Publication/Add.js:321 +#: src/views/Publication/Add.js:323 msgid "Add Publication" msgstr "Добавить публикацию" -#: src/views/Playersite.js:692 +#: src/views/Playersite.js:708 msgid "Add external widgets and styles to the publication site. You can find some examples on the help page." msgstr "Добавьте внешние виджеты и стили на сайт публикации. Вы можете найти несколько примеров на странице помощи." @@ -69,18 +77,20 @@ msgstr "Добавьте внешние виджеты и стили на сай msgid "Add new channel" msgstr "Добавить новый канал" -#: src/views/Publication/Add.js:324 +#: src/views/Publication/Add.js:326 msgid "Add: {0}" msgstr "Добавить: {0}" -#: src/views/Edit/Sources/Network.js:355 +#: src/views/Edit/Sources/Network.js:421 #: src/views/Edit/Wizard/Sources/Network.js:66 +#: src/views/Publication/Services/Azure.js:98 #: src/views/Publication/Services/Brightcove.js:95 -#: src/views/Publication/Services/Core.js:100 +#: src/views/Publication/Services/Core.js:116 #: src/views/Publication/Services/DASH.js:192 #: src/views/Publication/Services/HLS.js:181 #: src/views/Publication/Services/Icecast.js:160 #: src/views/Publication/Services/Image2.js:126 +#: src/views/Publication/Services/Linkedin.js:93 #: src/views/Publication/Services/MPEGTS.js:160 #: src/views/Publication/Services/RTMP.js:132 #: src/views/Publication/Services/RTSP.js:150 @@ -88,23 +98,23 @@ msgstr "Добавить: {0}" #: src/views/Publication/Services/SRT.js:161 #: src/views/Publication/Services/UDP.js:127 #: src/views/Publication/Services/WOWZA.js:132 -#: src/views/Settings.js:1302 +#: src/views/Settings.js:1370 msgid "Address" msgstr "Адрес" -#: src/views/Playersite.js:629 +#: src/views/Playersite.js:645 msgid "Address for the background image." msgstr "Адрес для фонового изображения." -#: src/views/Settings.js:1331 +#: src/views/Settings.js:1399 msgid "Address to listen on for HTTP requests." msgstr "Адрес для прослушивания HTTP-запросов." -#: src/views/Settings.js:1344 +#: src/views/Settings.js:1412 msgid "Address to listen on for HTTPS requests." msgstr "Адрес для прослушивания HTTPS-запросов." -#: src/views/Playersite.js:514 +#: src/views/Playersite.js:530 msgid "Adjust publication site colors and background as you like." msgstr "Настройте цвета и фон сайта публикации по своему усмотрению." @@ -112,7 +122,7 @@ msgstr "Настройте цвета и фон сайта публикации msgid "Advanced monitoring" msgstr "Расширенный мониторинг" -#: src/views/Edit/Sources/Network.js:396 +#: src/views/Edit/Sources/Network.js:474 #: src/views/Publication/Services/DASH.js:204 #: src/views/Publication/Services/HLS.js:193 #: src/views/Publication/Services/Icecast.js:170 @@ -125,27 +135,32 @@ msgstr "Расширенный мониторинг" msgid "Advanced settings" msgstr "Расширенные настройки" -#: src/views/Edit/Wizard/index.js:287 +#: src/views/Edit/Wizard/index.js:302 msgid "Advanced setup" msgstr "Advanced Setup" +#: src/views/Playersite.js:433 +#: src/views/Publication/Player.js:443 +msgid "AirPlay" +msgstr "AirPlay" + #: src/views/Login.js:325 msgid "Alerting by email" msgstr "Оповещение по электронной почте" -#: src/views/Publication/Add.js:344 +#: src/views/Publication/Add.js:346 msgid "All" msgstr "Все" -#: src/views/Settings.js:1163 +#: src/views/Settings.js:1231 msgid "All important system settings." msgstr "Все важные системные настройки." -#: src/views/Settings.js:1478 +#: src/views/Settings.js:1548 msgid "Allow all referrer" msgstr "Разрешить всех рефералов" -#: src/views/Settings.js:1518 +#: src/views/Settings.js:1588 msgid "Allow counting how many viewers the stream has." msgstr "Разрешить подсчет количества зрителей у трансляции." @@ -157,8 +172,8 @@ msgstr "Амплитуда" msgid "An environment variable sets this value." msgstr "Переменная среды задает это значение." -#: src/views/Publication/Services/Core.js:107 -#: src/views/Settings.js:1816 +#: src/views/Publication/Services/Core.js:124 +#: src/views/Settings.js:1897 msgid "App" msgstr "Приложение" @@ -168,11 +183,11 @@ msgstr "Приложение" msgid "Application" msgstr "Приложение" -#: src/views/Edit/Wizard/index.js:1172 +#: src/views/Edit/Wizard/index.js:1187 msgid "Are you sure you want to abort the wizard?" msgstr "Вы уверены, что хотите прервать работу мастера настройки?" -#: src/views/Publication/Add.js:492 +#: src/views/Publication/Add.js:467 msgid "Audio" msgstr "Аудио" @@ -185,18 +200,18 @@ msgstr "Аудио-устройство" msgid "Audio device" msgstr "Аудио-устройство" -#: src/views/Edit/Wizard/index.js:875 -#: src/views/Edit/Wizard/index.js:887 +#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:902 msgid "Audio from device" msgstr "Звук с устройства" -#: src/views/Edit/Profile.js:425 +#: src/views/Edit/Profile.js:448 #: src/views/Edit/ProfileSummary.js:90 -#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Edit.js:506 msgid "Audio settings" msgstr "Настройки звука" -#: src/views/Edit/Wizard/index.js:828 +#: src/views/Edit/Wizard/index.js:843 msgid "Audio setup" msgstr "Настройка звука" @@ -216,39 +231,39 @@ msgstr "Auth0 в настоящее время недоступен, так ка msgid "Author" msgstr "Автор" -#: src/views/Settings.js:1143 -#: src/views/Settings.js:1415 +#: src/views/Settings.js:1210 +#: src/views/Settings.js:1483 msgid "Authorization" msgstr "Авторизация" -#: src/misc/controls/HLS.js:83 +#: src/misc/controls/HLS.js:123 msgid "Automatic cleanup of all media data" msgstr "Автоматическая очистка всех медиаданных" -#: src/views/Publication/Player.js:437 +#: src/views/Publication/Player.js:440 msgid "Autoplay" msgstr "Авто-плей" -#: src/views/Playersite.js:445 +#: src/views/Playersite.js:461 msgid "Available" msgstr "Доступный" -#: src/views/Edit/Profile.js:541 -#: src/views/Edit/Wizard/index.js:408 -#: src/views/Edit/Wizard/index.js:647 -#: src/views/Edit/Wizard/index.js:912 -#: src/views/Edit/Wizard/index.js:1024 -#: src/views/Edit/Wizard/index.js:1082 -#: src/views/Edit/Wizard/index.js:1164 -#: src/views/Publication/Add.js:528 +#: src/views/Edit/Profile.js:584 +#: src/views/Edit/Wizard/index.js:423 +#: src/views/Edit/Wizard/index.js:662 +#: src/views/Edit/Wizard/index.js:927 +#: src/views/Edit/Wizard/index.js:1039 +#: src/views/Edit/Wizard/index.js:1097 +#: src/views/Edit/Wizard/index.js:1179 +#: src/views/Publication/Add.js:492 msgid "Back" msgstr "Назад" -#: src/views/Playersite.js:563 +#: src/views/Playersite.js:579 msgid "Background colors" msgstr "Цвета фона" -#: src/views/Playersite.js:616 +#: src/views/Playersite.js:632 msgid "Background image" msgstr "Фоновая картинка" @@ -273,7 +288,7 @@ msgstr "Резервный ключ потока" msgid "Bandwidth" msgstr "Пропускная способность" -#: src/views/Settings.js:1373 +#: src/views/Settings.js:1441 msgid "Bandwidth control" msgstr "Контроль пропускной способности" @@ -282,7 +297,7 @@ msgid "Banner" msgstr "Баннер" #: src/views/Login.js:241 -#: src/views/Settings.js:1420 +#: src/views/Settings.js:1488 msgid "Basic" msgstr "Базовый" @@ -295,24 +310,24 @@ msgstr "Звуковой фактор" msgid "Bitrate" msgstr "Битрейт" -#: src/views/Edit/Wizard/index.js:1013 -#: src/views/Edit/index.js:510 +#: src/views/Edit/Wizard/index.js:1028 +#: src/views/Edit/index.js:564 msgid "Briefly describe what the audience will see during the live stream." msgstr "Кратко опишите, что зрители увидят во время прямой трансляции." -#: src/views/Publication/Player.js:352 +#: src/views/Publication/Player.js:355 msgid "Button color" msgstr "Цвет кнопки" -#: src/views/Settings.js:1687 +#: src/views/Settings.js:1757 msgid "Cache for files on /data." msgstr "Кэш для файлов в /data." -#: src/views/Settings.js:1715 +#: src/views/Settings.js:1785 msgid "Cache time (Seconds)" msgstr "Время кэширования (сек)" -#: src/views/Settings.js:1743 +#: src/views/Settings.js:1813 msgid "Cache types" msgstr "Типы кеша" @@ -324,7 +339,7 @@ msgstr "Захват кликов" msgid "Capture cursor" msgstr "Захват курсора" -#: src/views/Edit/index.js:327 +#: src/views/Edit/index.js:339 msgid "Channel \"{0}\" saved" msgstr "Канал \"{0}\" сохранен" @@ -332,11 +347,11 @@ msgstr "Канал \"{0}\" сохранен" msgid "Channels" msgstr "Каналы" -#: src/views/Settings.js:1172 +#: src/views/Settings.js:1240 msgid "Check for updates" msgstr "Проверять наличие обновлений" -#: src/views/Publication/Add.js:272 +#: src/views/Publication/Add.js:276 msgid "Check the requirements" msgstr "Проверьте требования" @@ -350,8 +365,8 @@ msgstr "Выберите аудиопоток" #: src/views/Edit/Sources/ALSA.js:96 #: src/views/Edit/Sources/Framebuffer.js:80 -#: src/views/Edit/Sources/Raspicam.js:84 -#: src/views/Edit/Sources/V4L.js:90 +#: src/views/Edit/Sources/Raspicam.js:87 +#: src/views/Edit/Sources/V4L.js:93 msgid "Choose an input device ..." msgstr "Выберите устройство ввода..." @@ -363,16 +378,21 @@ msgstr "Выберите кодек..." msgid "Choose tenant ..." msgstr "Выбрать клиента..." +#: src/views/Playersite.js:425 +#: src/views/Publication/Player.js:442 +msgid "Chromecast" +msgstr "Chromecast" + #: src/views/Publication/Services/DASH.js:309 #: src/views/Publication/Services/HLS.js:249 msgid "Chunk" msgstr "Чанк" #: src/misc/ModalContent.js:77 -#: src/views/Playersite.js:782 -#: src/views/Publication/Add.js:525 -#: src/views/Publication/Edit.js:565 -#: src/views/Publication/Player.js:447 +#: src/views/Playersite.js:798 +#: src/views/Publication/Add.js:489 +#: src/views/Publication/Edit.js:527 +#: src/views/Publication/Player.js:452 msgid "Close" msgstr "Закрыть" @@ -385,11 +405,11 @@ msgid "Codec" msgstr "Кодек" #: src/views/Edit/Sources/VirtualAudio.js:110 -#: src/views/Publication/Player.js:320 +#: src/views/Publication/Player.js:323 msgid "Color" msgstr "Цвет" -#: src/views/Settings.js:1282 +#: src/views/Settings.js:1350 msgid "Config" msgstr "Конфигурация" @@ -410,7 +430,7 @@ msgid "Connected since <0/>" msgstr "Подключено с <0/>" #: src/misc/ActionButton.js:12 -#: src/views/Main/index.js:305 +#: src/views/Main/index.js:334 #: src/views/Publication/Process.js:40 msgid "Connecting ..." msgstr "Подключение..." @@ -424,14 +444,14 @@ msgid "Connecting to Restreamer Core failed probably because of mixed content." msgstr "Не удалось подключиться к ядру Restreamer, вероятно, из-за смешанного контента." #: src/misc/controls/Metadata.js:70 -#: src/views/Playersite.js:659 -#: src/views/Playersite.js:676 +#: src/views/Playersite.js:675 +#: src/views/Playersite.js:692 msgid "Content" msgstr "Контент" -#: src/views/Main/index.js:365 +#: src/views/Main/index.js:394 msgid "Content URL" -msgstr "" +msgstr "URL содержимого" #: src/Footer.js:193 msgid "Cores" @@ -445,7 +465,7 @@ msgstr "Создать пользователя" msgid "Creative Commons" msgstr "Creative Commons" -#: src/misc/coders/Encoders/audio/Opus.js:59 +#: src/misc/coders/Encoders/audio/Opus.js:61 #: src/misc/coders/settings/Audio.js:25 #: src/misc/coders/settings/Audio.js:71 #: src/misc/coders/settings/Audio.js:122 @@ -454,14 +474,17 @@ msgstr "Creative Commons" #: src/misc/coders/settings/Video.js:115 #: src/misc/coders/settings/Video.js:181 #: src/misc/coders/settings/Video.js:220 +#: src/misc/filters/audio/Resample.js:63 +#: src/misc/filters/audio/Resample.js:114 +#: src/misc/filters/audio/Volume.js:58 #: src/views/Edit/Sources/ALSA.js:101 #: src/views/Edit/Sources/AVFoundation.js:120 #: src/views/Edit/Sources/AVFoundation.js:153 -#: src/views/Edit/Sources/V4L.js:96 +#: src/views/Edit/Sources/V4L.js:99 msgid "Custom ..." msgstr "Пользовательский..." -#: src/views/Settings.js:1288 +#: src/views/Settings.js:1356 msgid "Custom JSON config for datarhei Core." msgstr "Пользовательская конфигурация JSON для ядра datarhei." @@ -478,11 +501,11 @@ msgstr "Пользовательский звуковой индекс" msgid "Custom bitrate (kbit/s)" msgstr "Пользовательский битрейт (кбит/с)" -#: src/views/Playersite.js:687 +#: src/views/Playersite.js:703 msgid "Custom code injection" msgstr "Внедрение пользовательского кода" -#: src/misc/coders/Encoders/audio/Opus.js:85 +#: src/misc/coders/Encoders/audio/Opus.js:87 msgid "Custom delay" msgstr "Пользовательская задержка" @@ -503,10 +526,12 @@ msgid "Custom keyframe interval" msgstr "Пользовательский интервал ключевых кадров" #: src/misc/coders/settings/Audio.js:98 +#: src/misc/filters/audio/Resample.js:90 msgid "Custom layout" msgstr "Пользовательский макет" #: src/misc/coders/settings/Audio.js:149 +#: src/misc/filters/audio/Resample.js:141 msgid "Custom sampling (Hz)" msgstr "Пользовательская выборка (Гц)" @@ -518,7 +543,7 @@ msgstr "Пользовательский масштаб" msgid "Custom size" msgstr "Пользовательский размер" -#: src/views/Edit/Sources/V4L.js:110 +#: src/views/Edit/Sources/V4L.js:113 msgid "Custom video device" msgstr "Пользовательское видеоустройство" @@ -536,8 +561,12 @@ msgstr "Данные скопированы в буфер обмена" msgid "Death color" msgstr "Цвет смерти" +#: src/misc/filters/audio/Volume.js:74 +msgid "Decibels (dB)" +msgstr "Децибелы (дБ)" + #: src/misc/EncodingSelect.js:210 -#: src/views/Edit/Wizard/index.js:628 +#: src/views/Edit/Wizard/index.js:643 msgid "Decoder" msgstr "Декодер" @@ -545,13 +574,13 @@ msgstr "Декодер" #: src/views/Edit/Sources/AVFoundation.js:149 #: src/views/Edit/Wizard/Sources/AVFoundation.js:76 #: src/views/Edit/Wizard/Sources/AVFoundation.js:105 -#: src/views/Playersite.js:451 -#: src/views/Playersite.js:526 -#: src/views/Playersite.js:570 +#: src/views/Playersite.js:467 +#: src/views/Playersite.js:542 +#: src/views/Playersite.js:586 msgid "Default" msgstr "По умолчанию" -#: src/misc/coders/Encoders/audio/Opus.js:84 +#: src/misc/coders/Encoders/audio/Opus.js:86 msgid "Delay" msgstr "Задержка" @@ -559,15 +588,15 @@ msgstr "Задержка" msgid "Delay (ms)" msgstr "Задержка (мс)" -#: src/views/Edit/index.js:563 -#: src/views/Edit/index.js:599 -#: src/views/Playersite.js:474 -#: src/views/Publication/Edit.js:574 -#: src/views/Publication/Edit.js:606 +#: src/views/Edit/index.js:617 +#: src/views/Edit/index.js:653 +#: src/views/Playersite.js:490 +#: src/views/Publication/Edit.js:536 +#: src/views/Publication/Edit.js:568 msgid "Delete" msgstr "Удалить" -#: src/views/Publication/Edit.js:611 +#: src/views/Publication/Edit.js:573 msgid "Deleting a publication service cannot be reversed. The publication stops immediately." msgstr "Удаление службы публикации нельзя отменить. Публикация сразу прекращается." @@ -582,12 +611,12 @@ msgid "Description" msgstr "Описание" #: src/views/Playersite.js:352 -#: src/views/Playersite.js:509 +#: src/views/Playersite.js:525 msgid "Design" msgstr "Дизайн" #: src/views/Edit/Sources/Framebuffer.js:87 -#: src/views/Edit/Wizard/index.js:890 +#: src/views/Edit/Wizard/index.js:905 #: src/views/Publication/Services/Framebuffer.js:93 msgid "Device" msgstr "Устройство" @@ -598,7 +627,7 @@ msgstr "Устройство" msgid "Disconnect" msgstr "Отключить" -#: src/views/Edit/index.js:580 +#: src/views/Edit/index.js:634 msgid "Disconnect & Continue" msgstr "Отключить и продолжить" @@ -607,12 +636,13 @@ msgstr "Отключить и продолжить" msgid "Disconnecting ..." msgstr "Отключение..." -#: src/views/Settings.js:1650 +#: src/misc/controls/HLS.js:70 +#: src/views/Settings.js:1720 msgid "Disk" msgstr "Диск" -#: src/views/Settings.js:1684 -#: src/views/Settings.js:1692 +#: src/views/Settings.js:1754 +#: src/views/Settings.js:1762 msgid "Disk cache" msgstr "Кэш диска" @@ -621,19 +651,19 @@ msgstr "Кэш диска" msgid "Disk storage" msgstr "Дисковое хранилище" -#: src/views/Settings.js:2063 +#: src/views/Settings.js:2214 msgid "Do you really want to restart the application now?" msgstr "Вы действительно хотите перезапустить приложение сейчас?" -#: src/views/Edit/index.js:591 +#: src/views/Edit/index.js:645 msgid "Do you want to delete \"{0}\"?" msgstr "Вы хотите удалить \"{0}\"?" -#: src/views/Publication/Edit.js:598 +#: src/views/Publication/Edit.js:560 msgid "Do you want to delete {title}?" msgstr "Вы хотите удалить {title}?" -#: src/views/Edit/index.js:572 +#: src/views/Edit/index.js:626 msgid "Do you want to disconnect \"{0}\"?" msgstr "Вы хотите отключить \"{0}\"?" @@ -658,7 +688,7 @@ msgstr "Документация" msgid "Dup. frames" msgstr "Дуп. кадры" -#: src/views/Publication/Player.js:285 +#: src/views/Publication/Player.js:288 msgid "EDIT: Player" msgstr "РЕДАКТИРОВАТЬ: Плеер" @@ -666,27 +696,41 @@ msgstr "РЕДАКТИРОВАТЬ: Плеер" msgid "EDIT: Publication Website" msgstr "РЕДАКТИРОВАТЬ: Сайт публикации" -#: src/views/Edit/index.js:391 +#: src/misc/controls/HLS.js:78 +msgid "EXT-X-VERSION" +msgstr "EXT-X-VERSION" + +#: src/views/Edit/index.js:403 msgid "Edit" msgstr "Редактировать" -#: src/views/Edit/index.js:417 +#: src/views/Edit/index.js:429 msgid "Edit the audio and video sources for the live stream. Add a description, and set your desired content license." msgstr "Отредактируйте аудио и видеоисточники для прямой трансляции. Добавьте описание и установите желаемую лицензию на содержимое." -#: src/views/Publication/Edit.js:377 +#: src/views/Publication/Edit.js:384 msgid "Edit: {title}" msgstr "Изменить: {title}" -#: src/views/Publication/Player.js:319 +#: src/views/Publication/Player.js:322 msgid "Embed" msgstr "Встроить" -#: src/views/Edit/Sources/Network.js:577 +#: src/misc/controls/RTMP.js:48 +#: src/misc/controls/SRT.js:48 +msgid "Enable" +msgstr "Включить" + +#: src/views/Edit/Sources/Network.js:684 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:55 msgid "Enable RTMP server ..." msgstr "Включить RTMP-сервер..." +#: src/views/Edit/Sources/Network.js:733 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:55 +msgid "Enable SRT server ..." +msgstr "Включить сервер SRT ..." + #: src/views/Edit/Sources/VirtualAudio.js:162 msgid "Enable a periodic beep every second with this value times the carrier frequency" msgstr "Включить периодический звуковой сигнал каждую секунду с этим значением, умноженным на несущую частоту" @@ -696,10 +740,15 @@ msgstr "Включить периодический звуковой сигна msgid "Enable backup stream" msgstr "Включить резервный поток" -#: src/views/Publication/Player.js:427 +#: src/views/Publication/Player.js:430 msgid "Enable nerd statistics" msgstr "Включить статистику ботаников" +#: src/misc/controls/RTMP.js:70 +#: src/misc/controls/SRT.js:70 +msgid "Enable now" +msgstr "Включить сейчас" + #: src/views/Publication/Services/Dummy.js:277 #: src/views/Publication/Services/Facebook.js:138 msgid "Enable primary stream" @@ -709,23 +758,21 @@ msgstr "Включить основной поток" msgid "Enable snapshots" msgstr "Включить снимки" -#: src/views/Settings.js:1433 +#: src/views/Settings.js:1503 msgid "Enabling authorization is strongly advised. Otherwise, anybody can access this instance." msgstr "Настоятельно рекомендуется включить авторизацию. В противном случае любой может получить доступ к этому экземпляру." -#: src/views/Settings.js:1593 +#: src/views/Settings.js:1663 msgid "Enabling basic auth is strongly advised. Otherwise, anybody could write data to /memfs." msgstr "Настоятельно рекомендуется включить базовую аутентификацию. В противном случае любой может записать данные в /memfs." -#: src/views/Edit/Wizard/index.js:634 +#: src/views/Edit/Wizard/index.js:649 msgid "Encoder" msgstr "Кодер" -#: src/views/Edit/Summary.js:66 -#: src/views/Publication/Add.js:374 -#: src/views/Publication/Add.js:466 -#: src/views/Publication/Edit.js:388 -#: src/views/Publication/Edit.js:505 +#: src/views/Edit/Summary.js:95 +#: src/views/Publication/Add.js:441 +#: src/views/Publication/Edit.js:478 msgid "Encoding" msgstr "Кодирование" @@ -743,7 +790,7 @@ msgstr "Введите имя для нового канала." msgid "Enter password" msgstr "Введите пароль" -#: src/views/Edit/Sources/Network.js:348 +#: src/views/Edit/Sources/Network.js:414 #: src/views/Edit/Wizard/Sources/Network.js:59 msgid "Enter the address of your network source:" msgstr "Введите адрес вашего сетевого источника:" @@ -752,15 +799,15 @@ msgstr "Введите адрес вашего сетевого источник msgid "Enter username" msgstr "Введите имя пользователя" -#: src/misc/coders/Encoders/video/H264VideoToolbox.js:61 +#: src/misc/coders/Encoders/video/H264VideoToolbox.js:64 msgid "Entropy coder" msgstr "Энтропийный кодер" -#: src/views/Edit/Wizard/index.js:1118 +#: src/views/Edit/Wizard/index.js:1133 #: src/views/Incompatible.js:30 #: src/views/Invalid.js:29 #: src/views/Publication/Process.js:63 -#: src/views/Settings.js:1109 +#: src/views/Settings.js:1176 msgid "Error" msgstr "Ошибка" @@ -770,40 +817,40 @@ msgstr "Ошибка" msgid "Error while copying data to clipboard" msgstr "Ошибка при копировании данных в буфер обмена" -#: src/views/Main/index.js:324 +#: src/views/Main/index.js:353 #: src/views/Publication/Process.js:64 msgid "Error: {0}" msgstr "Ошибка: {0}" -#: src/views/Playersite.js:732 +#: src/views/Playersite.js:748 msgid "Expands the area above the channel list (live chat)." msgstr "Расширяет область над списком каналов (живой чат)." -#: src/views/Playersite.js:752 +#: src/views/Playersite.js:768 msgid "Expands the area under the channel description (comment boxes)." msgstr "Расширяет область под описанием канала (окна комментариев)." -#: src/views/Settings.js:1199 +#: src/views/Settings.js:1267 msgid "Expert mode" msgstr "Режим эксперта" -#: src/views/Playersite.js:717 +#: src/views/Playersite.js:733 msgid "Extend channel list" msgstr "Расширить список каналов" -#: src/views/Playersite.js:737 +#: src/views/Playersite.js:753 msgid "Extend content" msgstr "Расширить содержимое" -#: src/views/Playersite.js:757 +#: src/views/Playersite.js:773 msgid "Extend footer" msgstr "Расширить нижний колонтитул" -#: src/views/Playersite.js:697 +#: src/views/Playersite.js:713 msgid "Extend header" msgstr "Расширить заголовок" -#: src/views/Settings.js:1936 +#: src/views/Settings.js:2087 msgid "FFmpeg" msgstr "FFmpeg" @@ -812,7 +859,7 @@ msgstr "FFmpeg" msgid "FPS" msgstr "FPS" -#: src/views/Publication/Add.js:180 +#: src/views/Publication/Add.js:187 msgid "Failed to create publication service ({0})" msgstr "Не удалось создать службу публикации ({0})" @@ -820,12 +867,12 @@ msgstr "Не удалось создать службу публикации ({0 msgid "Failed to create publication website files." msgstr "Не удалось создать файлы веб-сайта публикации." -#: src/views/Edit/Profile.js:341 -#: src/views/Edit/Profile.js:471 +#: src/views/Edit/Profile.js:354 +#: src/views/Edit/Profile.js:504 msgid "Failed to probe the source. Please check the <0>probe details." msgstr "Не удалось проверить источник. Пожалуйста, проверьте <0>подробности." -#: src/utils/restreamer.js:434 +#: src/utils/restreamer.js:446 msgid "Failed to refresh token: {0}" msgstr "Не удалось обновить токен: {0}" @@ -841,7 +888,7 @@ msgstr "Не удалось остановить процесс" msgid "Failed to store player size setting." msgstr "Не удалось сохранить настройку размера проигрывателя." -#: src/views/Publication/Edit.js:222 +#: src/views/Publication/Edit.js:230 msgid "Failed to store publication service ({0})" msgstr "Не удалось сохранить службу публикации ({0})" @@ -850,15 +897,27 @@ msgid "Failed to update ingest process ({0})" msgstr "Не удалось обновить процесс загрузки ({0})" #: src/views/Edit/index.js:310 +msgid "Failed to update ingest snapshot process ({0})" +msgstr "Не удалось обновить процесс создания моментального снимка ({0})" + +#: src/views/Edit/index.js:316 msgid "Failed to update the player" msgstr "Не удалось обновить плеер" -#: src/views/Edit/Wizard/index.js:375 -#: src/views/Edit/Wizard/index.js:838 +#: src/views/Edit/index.js:322 +msgid "Failed to update the playersite" +msgstr "Не удалось обновить сайт игроков" + +#: src/views/Edit/Wizard/index.js:390 +#: src/views/Edit/Wizard/index.js:853 msgid "Failed to verify the source. Please check the address." msgstr "Не удалось проверить источник. Пожалуйста, проверьте адрес." -#: src/views/Edit/Profile.js:549 +#: src/views/Edit/Summary.js:101 +msgid "Filter" +msgstr "Фильтр" + +#: src/views/Edit/Profile.js:592 msgid "Finish" msgstr "Закончить" @@ -866,15 +925,15 @@ msgstr "Закончить" msgid "Flags" msgstr "Флаги" -#: src/views/Playersite.js:772 +#: src/views/Playersite.js:788 msgid "For Javascripts." msgstr "Для Javascripts." -#: src/views/Playersite.js:712 +#: src/views/Playersite.js:728 msgid "For Stylesheets." msgstr "Для таблиц стилей." -#: src/views/Edit/Sources/Network.js:439 +#: src/views/Edit/Sources/Network.js:521 msgid "Force input framerate" msgstr "Принудительная частота кадров на входе" @@ -891,7 +950,7 @@ msgid "Framebuffer" msgstr "Кадровый буфер" #: src/misc/coders/settings/Video.js:135 -#: src/views/Edit/Sources/Network.js:452 +#: src/views/Edit/Sources/Network.js:534 msgid "Framerate" msgstr "Частота кадров" @@ -899,7 +958,7 @@ msgstr "Частота кадров" msgid "Frequency (Hz)" msgstr "Частота (Гц)" -#: src/views/Publication/Services/Core.js:129 +#: src/views/Publication/Services/Core.js:154 #: src/views/Publication/Services/Facebook.js:115 #: src/views/Publication/Services/Facebook.js:133 #: src/views/Publication/Services/Instagram.js:88 @@ -910,13 +969,13 @@ msgstr "Частота (Гц)" msgid "GET" msgstr "GET" -#: src/views/Edit/Sources/Network.js:471 -#: src/views/Edit/index.js:400 +#: src/views/Edit/Sources/Network.js:553 #: src/views/Edit/index.js:412 +#: src/views/Edit/index.js:424 #: src/views/Playersite.js:350 #: src/views/Playersite.js:363 -#: src/views/Publication/Add.js:372 -#: src/views/Publication/Edit.js:386 +#: src/views/Publication/Add.js:374 +#: src/views/Publication/Edit.js:393 #: src/views/Publication/Services/DASH.js:211 #: src/views/Publication/Services/HLS.js:200 #: src/views/Publication/Services/Icecast.js:177 @@ -924,62 +983,73 @@ msgstr "GET" #: src/views/Publication/Services/RTMP.js:145 #: src/views/Publication/Services/RTSP.js:169 #: src/views/Publication/Services/SRT.js:177 -#: src/views/Settings.js:1138 -#: src/views/Settings.js:1158 +#: src/views/Settings.js:1205 +#: src/views/Settings.js:1226 msgid "General" msgstr "Общие" -#: src/views/Publication/Player.js:410 +#: src/views/Publication/Player.js:413 msgid "Google Analytics ID" msgstr "Идентификатор Google Аналитики" -#: src/views/Publication/Player.js:420 +#: src/views/Publication/Player.js:423 msgid "Google Analytics Tracker Name" msgstr "Название трекера Google Аналитики" -#: src/views/Edit/index.js:471 -#: src/views/Main/index.js:369 +#: src/views/Main/index.js:403 msgid "HLS" msgstr "HLS" -#: src/views/Settings.js:1510 +#: src/views/Edit/index.js:483 +msgid "HLS output" +msgstr "Выход HLS" + +#: src/views/Edit/Wizard/Sources/InternalHLS.js:73 +msgid "HLS server" +msgstr "Сервер HLS" + +#: src/views/Settings.js:1580 msgid "HLS statistic for the In-memory storage" msgstr "Статистика HLS для хранилища в памяти" -#: src/views/Edit/Sources/Network.js:429 +#: src/views/Edit/Sources/Network.js:511 msgid "HTTP and HTTPS" msgstr "HTTP и HTTPS" -#: src/views/Settings.js:1323 +#: src/views/Settings.js:1391 msgid "HTTP port" msgstr "HTTP-порт" -#: src/views/Settings.js:1352 +#: src/views/Settings.js:1420 msgid "HTTPS (SSL/TLS)" msgstr "HTTPS (SSL/TLS)" -#: src/views/Settings.js:1336 +#: src/views/Settings.js:1404 msgid "HTTPS port" msgstr "HTTPS-порт" -#: src/views/Edit/Sources/V4L.js:151 +#: src/views/Edit/Sources/V4L.js:154 #: src/views/Edit/Wizard/Sources/V4L.js:140 msgid "Hardware device" msgstr "Аппаратное устройство" -#: src/views/Playersite.js:579 +#: src/views/Playersite.js:595 msgid "Header" msgstr "Заголовок" -#: src/views/Playersite.js:535 +#: src/views/Playersite.js:551 msgid "Headline" msgstr "Заголовок" +#: src/misc/filters/video/HFlip.js:65 +msgid "Horizontal Flip" +msgstr "Горизонтальный переворот" + #: src/views/Login.js:319 msgid "Hosted Restreamer interface" msgstr "Размещенный интерфейс Restreamer" -#: src/views/Settings.js:1258 +#: src/views/Settings.js:1326 msgid "Human readable name on the service." msgstr "Человекочитаемое имя на сервисе." @@ -987,24 +1057,24 @@ msgstr "Человекочитаемое имя на сервисе." msgid "IP address" msgstr "IP адрес" -#: src/views/Settings.js:2008 +#: src/views/Settings.js:2159 msgid "If you changed the ports, it might be that Restreamer Core restarted already, but it is now available on a different port." msgstr "Если вы изменили порты, возможно, ядро Restreamer уже перезапустилось, но теперь он доступен на другом порту." -#: src/views/Settings.js:2002 +#: src/views/Settings.js:2153 msgid "If you enabled Let's Encrypt TLS it might take some time to acquire the certificates. Make sure that Restreamer Core is reachable via port 80 from the internet. Please check the console log of Restreamer Core." msgstr "Если вы включили Let's Encrypt TLS, получение сертификатов может занять некоторое время. Убедитесь, что ядро Restreamer доступно через порт 80 из Интернета. Пожалуйста, проверьте журнал консоли ядра Restreamer." -#: src/views/Settings.js:1525 +#: src/views/Settings.js:1595 msgid "Ignore IP ranges" msgstr "Игнорировать диапазоны IP-адресов" -#: src/views/Playersite.js:624 -#: src/views/Publication/Player.js:366 +#: src/views/Playersite.js:640 +#: src/views/Publication/Player.js:369 msgid "Image URL" msgstr "URL изображения" -#: src/views/Playersite.js:649 +#: src/views/Playersite.js:665 msgid "Imprint" msgstr "Выходные данные" @@ -1012,7 +1082,8 @@ msgstr "Выходные данные" msgid "In addition to the player, the Restreamer offers a complete landingpage, which you can use to present your live stream easily and quickly." msgstr "В дополнение к плееру Restreamer предлагает полноценную целевую страницу, которую вы можете использовать для простого и быстрого представления своей прямой трансляции." -#: src/views/Settings.js:1577 +#: src/misc/controls/HLS.js:67 +#: src/views/Settings.js:1647 msgid "In-memory" msgstr "В памяти" @@ -1021,39 +1092,35 @@ msgstr "В памяти" msgid "In-memory storage" msgstr "Хранилище в памяти" -#: src/views/Publication/Add.js:269 +#: src/views/Publication/Add.js:273 msgid "Incompatible" msgstr "Несовместимо" #: src/misc/coders/settings/Audio.js:67 #: src/misc/coders/settings/Audio.js:118 +#: src/misc/filters/audio/Pan.js:47 +#: src/misc/filters/audio/Resample.js:59 +#: src/misc/filters/audio/Resample.js:110 +#: src/misc/filters/audio/Volume.js:46 msgid "Inherit" msgstr "Наследовать" -#: src/views/Playersite.js:707 +#: src/views/Playersite.js:723 msgid "Inject 1" msgstr "Встраивание 1" -#: src/views/Playersite.js:727 +#: src/views/Playersite.js:743 msgid "Inject 2" msgstr "Встраивание 2" -#: src/views/Playersite.js:747 +#: src/views/Playersite.js:763 msgid "Inject 3" msgstr "Встраивание 3" -#: src/views/Playersite.js:767 +#: src/views/Playersite.js:783 msgid "Inject 4" msgstr "Встраивание 4" -#: src/views/Edit/Wizard/Sources/InternalHLS.js:75 -msgid "Internal HLS server" -msgstr "Внутренний HLS-сервер" - -#: src/views/Edit/Wizard/Sources/InternalRTMP.js:95 -msgid "Internal RTMP server" -msgstr "Внутренний RTMP-сервер" - #: src/misc/controls/Snapshot.js:50 msgid "Interval (seconds)" msgstr "Интервал (секунды)" @@ -1068,28 +1135,29 @@ msgid "Keyframe interval (seconds)" msgstr "Интервал между ключевыми кадрами (секунды)" #: src/misc/coders/settings/Audio.js:97 +#: src/misc/filters/audio/Resample.js:89 msgid "Layout" msgstr "Макет" -#: src/views/Settings.js:1357 +#: src/views/Settings.js:1425 msgid "Let's Encrypt certification" msgstr "Сертификат Let's Encrypt" -#: src/views/Settings.js:1365 +#: src/views/Settings.js:1433 msgid "Let's Encrypt requires one or more public domain names and an accessible port 80/TCP." msgstr "Для работы Let's Encrypt требуется одно или несколько общедоступных доменных имен и доступный порт 80/TCP." -#: src/misc/coders/Encoders/video/H264NVENC.js:109 +#: src/misc/coders/Encoders/video/H264NVENC.js:112 msgid "Level" msgstr "Уровень" -#: src/views/Settings.js:1918 +#: src/views/Settings.js:2069 msgid "Level of system protocol." msgstr "Уровень системного протокола." -#: src/views/Edit/Wizard/index.js:1061 -#: src/views/Edit/index.js:403 -#: src/views/Edit/index.js:525 +#: src/views/Edit/Wizard/index.js:1076 +#: src/views/Edit/index.js:415 +#: src/views/Edit/index.js:579 msgid "License" msgstr "Лицензия" @@ -1097,28 +1165,28 @@ msgstr "Лицензия" msgid "Life color" msgstr "Цвет жизни" -#: src/views/Playersite.js:606 +#: src/views/Playersite.js:622 msgid "Linecolor" msgstr "Цвет линии" -#: src/views/Playersite.js:544 -#: src/views/Publication/Player.js:396 +#: src/views/Playersite.js:560 +#: src/views/Publication/Player.js:399 msgid "Link" msgstr "Ссылка" -#: src/views/Playersite.js:553 +#: src/views/Playersite.js:569 msgid "Link, mouseover" msgstr "Ссылка, наведение курсора" -#: src/views/Settings.js:1533 +#: src/views/Settings.js:1603 msgid "List of IP ranges in CIDR notation, e.g., 127.0.0.1/32, that the statistics will not record—one IP range per line. Leave empty to record all sessions." msgstr "Список диапазонов IP адресов в нотации CIDR, напр., 127.0.0.1/32, которые не будут записываться статистикой — по одному диапазону IP адресов на строку. Оставьте пустым для записи всех сеансов.." -#: src/views/Settings.js:1751 +#: src/views/Settings.js:1821 msgid "List of file extensions to cache (e.g. \".html\"), one per line. Leave empty to cache all file types." msgstr "Список расширений файлов для кэширования (напр.. \".html\"), по одному в строке. Оставьте пустым, чтобы кэшировать все типы файлов." -#: src/misc/controls/HLS.js:74 +#: src/misc/controls/HLS.js:107 msgid "List size (segments)" msgstr "Размер списка (сегменты)" @@ -1142,13 +1210,13 @@ msgstr "Прямая трансляция на RTMP-сервис Vimeo Live" msgid "Livesource ID" msgstr "Livesource ID" -#: src/views/Settings.js:1870 +#: src/views/Settings.js:2021 msgid "Log level" msgstr "Уровень журнала" #: src/misc/modals/Process.js:90 -#: src/views/Settings.js:1147 -#: src/views/Settings.js:1846 +#: src/views/Settings.js:1215 +#: src/views/Settings.js:1997 msgid "Logging" msgstr "Логирование" @@ -1159,23 +1227,23 @@ msgstr "Логирование" msgid "Login" msgstr "Авторизоваться" -#: src/utils/restreamer.js:263 #: src/utils/restreamer.js:268 -#: src/utils/restreamer.js:297 +#: src/utils/restreamer.js:273 #: src/utils/restreamer.js:302 +#: src/utils/restreamer.js:307 msgid "Login failed: Couldn't load API details" msgstr "Ошибка входа: не удалось загрузить сведения об API" -#: src/utils/restreamer.js:254 -#: src/utils/restreamer.js:288 +#: src/utils/restreamer.js:259 +#: src/utils/restreamer.js:293 msgid "Login failed: {0}" msgstr "Ошибка входа: {0}" -#: src/views/Settings.js:1425 +#: src/views/Settings.js:1493 msgid "Login/JWT authorization" msgstr "Вход/JWT-авторизация" -#: src/views/Publication/Player.js:321 +#: src/views/Publication/Player.js:324 msgid "Logo" msgstr "Логотип" @@ -1183,24 +1251,28 @@ msgstr "Логотип" msgid "Logout" msgstr "Выйти" +#: src/misc/filters/audio/Loudnorm.js:66 +msgid "Loudness Normalization" +msgstr "Нормализация громкости" + #: src/Footer.js:208 msgid "MB" msgstr "MB" -#: src/views/Edit/index.js:380 +#: src/views/Edit/index.js:392 msgid "Main Source" msgstr "Главный источник" -#: src/views/Main/index.js:260 +#: src/views/Main/index.js:289 #: src/views/Playersite.js:389 msgid "Main channel" msgstr "Основной канал" -#: src/views/Publication/Player.js:102 +#: src/views/Publication/Player.js:99 msgid "Main channel not found" msgstr "Основной канал не найден" -#: src/views/Edit/Wizard/index.js:188 +#: src/views/Edit/Wizard/index.js:194 msgid "Main channel saved" msgstr "Основной канал сохранен" @@ -1208,63 +1280,70 @@ msgstr "Основной канал сохранен" msgid "Main page channel (index.html)." msgstr "Канал главной страницы (index.html)." -#: src/views/Publication/Add.js:411 -#: src/views/Publication/Add.js:444 -#: src/views/Publication/Add.js:511 -#: src/views/Publication/Edit.js:419 -#: src/views/Publication/Edit.js:483 -#: src/views/Publication/Edit.js:552 +#: src/views/Publication/TabContent.js:49 msgid "Maintainer:" msgstr "Сопровождающий:" -#: src/views/Settings.js:1710 +#: src/misc/controls/RTMP.js:54 +msgid "Make the channel available as an RTMP stream (experimental)." +msgstr "Сделать канал доступным в виде RTMP-потока (экспериментально)." + +#: src/misc/controls/SRT.js:54 +msgid "Make the channel available as an SRT stream (experimental)." +msgstr "Сделать канал доступным в виде SRT-потока (экспериментально)." + +#: src/misc/controls/HLS.js:117 +msgid "Master playlist (increases browser/client compatibility)" +msgstr "Главный список воспроизведения (повышает совместимость с браузерами/клиентами)" + +#: src/views/Settings.js:1780 msgid "Maximum allowed cache size, 0 for unlimited." msgstr "Максимально допустимый размер кеша, 0 для неограниченного." -#: src/views/Settings.js:1632 +#: src/views/Settings.js:1702 msgid "Maximum allowed megabytes of RAM for /memfs, 0 for unlimited." msgstr "Максимально допустимо мегабайт ОЗУ для /memfs, 0 для неограниченного." -#: src/views/Settings.js:1676 +#: src/views/Settings.js:1746 msgid "Maximum allowed megabytes to consume from hard disk. 0 for unlimited." msgstr "Максимально разрешенное количество мегабайт для использования с жесткого диска. 0 без ограничений." -#: src/views/Settings.js:1394 +#: src/views/Settings.js:1462 msgid "Maximum bandwidth Mbit/s" msgstr "Максимальная пропускная способность Мбит/с" -#: src/misc/coders/Encoders/audio/Opus.js:74 +#: src/misc/coders/Encoders/audio/Opus.js:76 msgid "Maximum delay in milliseconds." msgstr "Максимальная задержка в миллисекундах." -#: src/views/Settings.js:1728 +#: src/views/Settings.js:1798 msgid "Maximum file size (Megabytes)" msgstr "Максимальный размер файла (Мегабайты)" -#: src/views/Settings.js:1736 +#: src/views/Settings.js:1806 msgid "Maximum file size to put in cache." msgstr "Максимальный размер файла для кэширования." -#: src/views/Settings.js:1954 +#: src/views/Settings.js:2105 msgid "Maximum log histroy" msgstr "Максимальная история журнала" -#: src/views/Settings.js:1923 -#: src/views/Settings.js:1941 +#: src/views/Settings.js:2074 +#: src/views/Settings.js:2092 msgid "Maximum log lines" msgstr "Максимальное количество строк журнала" -#: src/views/Settings.js:1624 -#: src/views/Settings.js:1668 -#: src/views/Settings.js:1702 +#: src/views/Settings.js:1694 +#: src/views/Settings.js:1738 +#: src/views/Settings.js:1772 msgid "Maximum size (Megabytes)" msgstr "Максимальный размер (Мегабайты)" -#: src/views/Settings.js:1542 +#: src/views/Settings.js:1612 msgid "Maximum viewer idle time (Seconds)" msgstr "Максимальное время простоя зрителя (в секундах)" -#: src/views/Settings.js:1378 +#: src/views/Settings.js:1446 msgid "Maximum viewers" msgstr "Максимальное количество зрителей" @@ -1272,12 +1351,12 @@ msgstr "Максимальное количество зрителей" msgid "Memory" msgstr "Память" -#: src/views/Edit/index.js:402 +#: src/views/Edit/index.js:414 msgid "Meta information" msgstr "Мета информация" -#: src/views/Edit/Wizard/index.js:1006 -#: src/views/Edit/index.js:505 +#: src/views/Edit/Wizard/index.js:1021 +#: src/views/Edit/index.js:559 msgid "Metadata" msgstr "Метаданные" @@ -1299,44 +1378,56 @@ msgstr "Подробнее об авторских правах YouTube <0>зд msgid "More about licenses here" msgstr "Подробнее о лицензиях здесь" -#: src/views/Settings.js:1227 +#: src/views/Settings.js:1295 msgid "More about the service" msgstr "Подробнее о сервисе" -#: src/views/Publication/Player.js:438 +#: src/views/Publication/Player.js:441 msgid "Mute" msgstr "Без звука" +#: src/misc/filters/audio/Pan.js:57 +msgid "Mute a channel." +msgstr "Отключить звук на канале." + +#: src/misc/filters/audio/Pan.js:50 +msgid "Mute left" +msgstr "Выключить звук слева" + +#: src/misc/filters/audio/Pan.js:53 +msgid "Mute right" +msgstr "Отключить звук справа" + #: src/misc/ChannelList.js:380 #: src/misc/controls/Metadata.js:76 #: src/misc/controls/Metadata.js:98 -#: src/views/Playersite.js:489 -#: src/views/Settings.js:1250 +#: src/views/Playersite.js:505 +#: src/views/Settings.js:1318 msgid "Name" msgstr "Имя" -#: src/views/Playersite.js:494 +#: src/views/Playersite.js:510 msgid "Name for the template. If the name already exists, it will be overwritten." msgstr "Имя для шаблона. Если имя уже существует, оно будет перезаписано." -#: src/views/Settings.js:1142 -#: src/views/Settings.js:1297 +#: src/views/Settings.js:1209 +#: src/views/Settings.js:1365 msgid "Network" msgstr "Сеть" -#: src/views/Edit/Sources/Network.js:684 -#: src/views/Edit/Wizard/Sources/Network.js:110 +#: src/views/Edit/Sources/Network.js:840 +#: src/views/Edit/Wizard/Sources/Network.js:123 msgid "Network source" msgstr "Сетевой источник" -#: src/views/Edit/Wizard/index.js:413 -#: src/views/Edit/Wizard/index.js:652 -#: src/views/Edit/Wizard/index.js:917 -#: src/views/Edit/Wizard/index.js:1029 +#: src/views/Edit/Wizard/index.js:428 +#: src/views/Edit/Wizard/index.js:667 +#: src/views/Edit/Wizard/index.js:932 +#: src/views/Edit/Wizard/index.js:1044 msgid "Next" msgstr "Далее" -#: src/views/Edit/Profile.js:413 +#: src/views/Edit/Profile.js:436 msgid "Next: Audio" msgstr "Далее: Аудио" @@ -1344,12 +1435,12 @@ msgstr "Далее: Аудио" msgid "Next: Video setup" msgstr "Далее: Настройка видео" -#: src/views/Edit/Wizard/index.js:1182 +#: src/views/Edit/Wizard/index.js:1197 msgid "No" msgstr "Нет" #: src/views/Edit/Sources/NoAudio.js:45 -#: src/views/Edit/Wizard/index.js:901 +#: src/views/Edit/Wizard/index.js:916 msgid "No audio" msgstr "Нет звука" @@ -1362,11 +1453,11 @@ msgstr "Аудиопоток недоступен" msgid "No input device available" msgstr "Устройство ввода недоступно" -#: src/views/Edit/Wizard/index.js:373 +#: src/views/Edit/Wizard/index.js:388 msgid "No live stream was detected. Please check the software that sends the stream." msgstr "Прямая трансляция не обнаружена. Пожалуйста, проверьте программное обеспечение, которое отправляет поток." -#: src/views/Edit/Summary.js:28 +#: src/views/Edit/Summary.js:29 msgid "No source selected" msgstr "Источник не выбран" @@ -1378,8 +1469,12 @@ msgstr "Нет доступных источников" msgid "No suitable encoder found." msgstr "Подходящий энкодер не найден." -#: src/views/Main/index.js:286 -#: src/views/Publication/Player.js:294 +#: src/misc/FilterSelect.js:106 +msgid "No suitable filter found." +msgstr "Не найден подходящий фильтр." + +#: src/views/Main/index.js:315 +#: src/views/Publication/Player.js:297 msgid "No video" msgstr "Нет видео" @@ -1387,7 +1482,7 @@ msgstr "Нет видео" msgid "No video stream available" msgstr "Видеопоток недоступен" -#: src/views/Settings.js:1243 +#: src/views/Settings.js:1311 msgid "Node ID" msgstr "Node ID" @@ -1396,44 +1491,61 @@ msgid "Noise" msgstr "Шум" #: src/views/Edit/Sources/AVFoundation.js:145 -#: src/views/Edit/Summary.js:30 +#: src/views/Edit/Summary.js:31 +#: src/views/Edit/Summary.js:107 #: src/views/Edit/Wizard/Sources/AVFoundation.js:98 msgid "None" msgstr "Никто" #: src/views/Playersite.js:353 -#: src/views/Playersite.js:644 +#: src/views/Playersite.js:660 msgid "Notes" msgstr "Заметки" -#: src/views/Settings.js:1931 -#: src/views/Settings.js:1949 +#: src/views/Settings.js:2082 +#: src/views/Settings.js:2100 msgid "Number of log lines to keep." msgstr "Количество строк журнала для сохранения." -#: src/views/Settings.js:1962 +#: src/views/Settings.js:2113 msgid "Number of logs to keep for each process." msgstr "Количество журналов для каждого процесса." -#: src/views/Playersite.js:813 -#: src/views/Publication/Player.js:466 +#: src/views/Playersite.js:829 +#: src/views/Publication/Player.js:471 msgid "OK" msgstr "OK" -#: src/views/Settings.js:1497 +#: src/views/Settings.js:1567 msgid "One referrer per line, e.g. http://www.example.com" msgstr "Один реферер на строку, напр.. http://www.example.com" -#: src/views/Playersite.js:798 +#: src/views/Playersite.js:814 msgid "Open" msgstr "Открыть" -#: src/views/Publication/Edit.js:510 +#: src/misc/filters/audio/Pan.js:45 +msgid "Pan" +msgstr "Пан" + +#: src/views/Settings.js:1971 +msgid "Passphrase" +msgstr "Пассфраза" + +#: src/views/Settings.js:1988 +msgid "Passphrase for SRT encryption." +msgstr "Парольная фраза для шифрования SRT." + +#: src/views/Settings.js:1980 +msgid "Passphrase must be between 10 and 79 characters long" +msgstr "Длина парольной фразы должна составлять от 10 до 79 символов" + +#: src/views/Publication/Edit.js:483 msgid "Passthrough (copy) should only be disabled if necessary. Each encoding requires additional CPU/GPU resources." msgstr "Сквозную \"Passthrough (copy)\" следует отключать только в случае необходимости. Каждое кодирование требует дополнительных ресурсов CPU/GPU." -#: src/views/Edit/Sources/Network.js:382 -#: src/views/Edit/Wizard/Sources/Network.js:88 +#: src/views/Edit/Sources/Network.js:460 +#: src/views/Edit/Wizard/Sources/Network.js:97 #: src/views/Login.js:282 #: src/views/Publication/Services/Akamai.js:134 #: src/views/Publication/Services/DASH.js:198 @@ -1442,22 +1554,22 @@ msgstr "Сквозную \"Passthrough (copy)\" следует отключат #: src/views/Publication/Services/RTSP.js:156 #: src/views/Publication/Services/Red5.js:157 #: src/views/Publication/Services/WOWZA.js:178 -#: src/views/Settings.js:1453 -#: src/views/Settings.js:1611 +#: src/views/Settings.js:1523 +#: src/views/Settings.js:1681 msgid "Password" msgstr "Пароль" -#: src/views/Settings.js:1459 -#: src/views/Settings.js:1619 +#: src/views/Settings.js:1529 +#: src/views/Settings.js:1689 msgid "Password for authorization." msgstr "Пароль для авторизации." -#: src/views/Edit/Sources/Network.js:387 -#: src/views/Edit/Wizard/Sources/Network.js:90 +#: src/views/Edit/Sources/Network.js:465 +#: src/views/Edit/Wizard/Sources/Network.js:103 msgid "Password for the device." msgstr "Пароль для устройства." -#: src/views/Settings.js:1555 +#: src/views/Settings.js:1625 msgid "Persist viewer statistics" msgstr "Сохранять статистику просмотров" @@ -1469,25 +1581,25 @@ msgstr "Пиксельный формат" msgid "Plan: <0>Starter" msgstr "План: <0>Начальный" -#: src/views/Publication/Add.js:347 +#: src/views/Publication/Add.js:349 msgid "Platforms" msgstr "Платформы" -#: src/views/Publication/Player.js:323 -#: src/views/Settings.js:1144 -#: src/views/Settings.js:1468 +#: src/views/Publication/Player.js:326 +#: src/views/Settings.js:1211 +#: src/views/Settings.js:1538 msgid "Playback" msgstr "Воспроизведение" -#: src/views/Main/Egress.js:95 +#: src/views/Main/Egress.js:100 msgid "Player" msgstr "Плеер" -#: src/views/Publication/Player.js:328 +#: src/views/Publication/Player.js:331 msgid "Player URL" msgstr "URL-адрес плеера" -#: src/views/Publication/Player.js:257 +#: src/views/Publication/Player.js:254 msgid "Player settings saved" msgstr "Настройки плеера сохранены" @@ -1501,20 +1613,26 @@ msgstr "Сайт плеера" msgid "Playlist" msgstr "Плейлист" -#: src/views/Main/index.js:329 +#: src/misc/controls/HLS.js:88 +msgid "Playlist version (M3U8). Version 3 has the best browser/client compatibility." +msgstr "Версия плейлиста (M3U8). Версия 3 имеет наилучшую совместимость с браузерами/клиентами." + +#: src/views/Main/index.js:358 msgid "Please check the <0>process log" msgstr "Пожалуйста, проверьте <0>журнал процесса" #: src/views/Publication/Services/Akamai.js:29 +#: src/views/Publication/Services/Azure.js:29 #: src/views/Publication/Services/Bitmovin.js:23 #: src/views/Publication/Services/Brightcove.js:23 #: src/views/Publication/Services/CDN77.js:23 -#: src/views/Publication/Services/Core.js:26 +#: src/views/Publication/Services/Core.js:27 #: src/views/Publication/Services/DASH.js:35 #: src/views/Publication/Services/DaCast.js:26 #: src/views/Publication/Services/HLS.js:37 #: src/views/Publication/Services/Icecast.js:29 #: src/views/Publication/Services/Image2.js:33 +#: src/views/Publication/Services/Linkedin.js:24 #: src/views/Publication/Services/Livespotting.js:23 #: src/views/Publication/Services/MPEGTS.js:35 #: src/views/Publication/Services/RTMP.js:32 @@ -1527,37 +1645,42 @@ msgstr "Пожалуйста, проверьте <0>журнал процесс msgid "Please contact the operator of the service and check what happens." msgstr "Пожалуйста, свяжитесь с оператором сервиса и проверьте, что происходит." +#: src/views/Publication/Services/Owncast.js:23 +#: src/views/Publication/Services/Telegram.js:14 +msgid "Please get in touch with the operator of the service and check what happens." +msgstr "Пожалуйста, свяжитесь с оператором службы и проверьте, что происходит." + #: src/views/Playersite.js:122 #: src/views/Playersite.js:197 -#: src/views/Publication/Player.js:159 +#: src/views/Publication/Player.js:156 msgid "Please select a file to upload." msgstr "Пожалуйста, выберите файл для загрузки." -#: src/views/Publication/Add.js:471 +#: src/views/Publication/Add.js:446 msgid "Please use \"Passthrough (copy)\" if possible. Encoding requires additional CPU/GPU resources." msgstr "Пожалуйста, используйте \"Passthrough (copy)\", если это возможно. Кодирование требует дополнительных ресурсов CPU/GPU." -#: src/views/Edit/Wizard/index.js:435 -#: src/views/Edit/Wizard/index.js:933 +#: src/views/Edit/Wizard/index.js:450 +#: src/views/Edit/Wizard/index.js:948 msgid "Please wait. Probe stream data ..." msgstr "Пожалуйста подождите. Данные о потоке..." -#: src/views/Edit/Wizard/index.js:1103 +#: src/views/Edit/Wizard/index.js:1118 msgid "Please wait. Setting up the stream ..." msgstr "Пожалуйста подождите. Настройка потока..." #: src/views/Publication/Services/Bitmovin.js:92 -#: src/views/Settings.js:1803 +#: src/views/Settings.js:1945 msgid "Port" msgstr "Порт" -#: src/views/Publication/Player.js:381 +#: src/views/Publication/Player.js:384 msgid "Position" msgstr "Позиция" -#: src/misc/coders/Encoders/video/H264NVENC.js:67 -#: src/misc/coders/Encoders/video/X264.js:62 -#: src/misc/coders/Encoders/video/X265.js:62 +#: src/misc/coders/Encoders/video/H264NVENC.js:70 +#: src/misc/coders/Encoders/video/X264.js:72 +#: src/misc/coders/Encoders/video/X265.js:72 msgid "Preset" msgstr "Пресет" @@ -1572,92 +1695,96 @@ msgstr "Основной ключ потока" #: src/views/Edit/Sources/ALSA.js:136 #: src/views/Edit/Sources/AVFoundation.js:201 #: src/views/Edit/Sources/Framebuffer.js:110 -#: src/views/Edit/Sources/Network.js:505 -#: src/views/Edit/Sources/Network.js:552 -#: src/views/Edit/Sources/Network.js:599 -#: src/views/Edit/Sources/Raspicam.js:113 -#: src/views/Edit/Sources/V4L.js:131 +#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:660 +#: src/views/Edit/Sources/Network.js:706 +#: src/views/Edit/Sources/Network.js:755 +#: src/views/Edit/Sources/Raspicam.js:116 +#: src/views/Edit/Sources/V4L.js:134 #: src/views/Edit/Sources/VirtualAudio.js:169 #: src/views/Edit/Sources/VirtualVideo.js:188 msgid "Probe" msgstr "Зонд" -#: src/views/Edit/index.js:493 -#: src/views/Publication/Add.js:433 -#: src/views/Publication/Edit.js:441 +#: src/views/Edit/index.js:547 +#: src/views/Publication/Add.js:407 +#: src/views/Publication/Edit.js:420 msgid "Process" msgstr "Процесс" -#: src/views/Publication/Add.js:373 -#: src/views/Publication/Edit.js:387 +#: src/views/Publication/Add.js:376 +#: src/views/Publication/Edit.js:395 msgid "Process control" msgstr "Контроль процесса" -#: src/views/Publication/Edit.js:471 -msgid "Process debug" -msgstr "Отладка процесса" - -#: src/views/Main/index.js:413 -#: src/views/Publication/Edit.js:591 +#: src/views/Main/index.js:472 +#: src/views/Publication/Edit.js:553 msgid "Process debug report" msgstr "Отчет об отладке процесса" -#: src/views/Main/index.js:389 -#: src/views/Main/index.js:405 -#: src/views/Publication/Edit.js:468 -#: src/views/Publication/Edit.js:583 +#: src/views/Main/index.js:448 +#: src/views/Main/index.js:464 +#: src/views/Publication/Edit.js:444 +#: src/views/Publication/Edit.js:545 msgid "Process details" msgstr "Детали процесса" -#: src/views/Main/index.js:392 +#: src/views/Main/index.js:451 +#: src/views/Publication/Edit.js:447 msgid "Process report" msgstr "Отчет о процессе" -#: src/views/Edit/index.js:401 -#: src/views/Edit/index.js:463 +#: src/views/Edit/index.js:413 +#: src/views/Edit/index.js:475 msgid "Processing & Control" msgstr "Обработка и контроль" -#: src/misc/coders/Encoders/video/H264NVENC.js:92 -#: src/misc/coders/Encoders/video/H264VAAPI.js:82 +#: src/misc/coders/Encoders/video/H264NVENC.js:95 +#: src/misc/coders/Encoders/video/H264VAAPI.js:85 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:85 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:85 #: src/misc/coders/settings/Video.js:142 -#: src/views/Edit/Wizard/index.js:607 +#: src/views/Edit/Wizard/index.js:622 msgid "Profile" msgstr "Профиль" -#: src/views/Edit/Sources/Network.js:520 +#: src/views/Edit/Sources/Network.js:623 #: src/views/Publication/Services/Akamai.js:144 #: src/views/Publication/Services/Akamai.js:182 +#: src/views/Publication/Services/Azure.js:89 #: src/views/Publication/Services/Bitmovin.js:86 #: src/views/Publication/Services/Brightcove.js:87 #: src/views/Publication/Services/CDN77.js:90 -#: src/views/Publication/Services/Core.js:91 +#: src/views/Publication/Services/Core.js:106 #: src/views/Publication/Services/DASH.js:186 #: src/views/Publication/Services/DaCast.js:110 #: src/views/Publication/Services/DaCast.js:168 #: src/views/Publication/Services/HLS.js:175 #: src/views/Publication/Services/Icecast.js:154 #: src/views/Publication/Services/Image2.js:120 +#: src/views/Publication/Services/Linkedin.js:84 #: src/views/Publication/Services/MPEGTS.js:154 +#: src/views/Publication/Services/Owncast.js:88 #: src/views/Publication/Services/RTMP.js:122 #: src/views/Publication/Services/RTSP.js:144 #: src/views/Publication/Services/Red5.js:105 #: src/views/Publication/Services/SRT.js:158 +#: src/views/Publication/Services/Telegram.js:79 #: src/views/Publication/Services/UDP.js:124 #: src/views/Publication/Services/WOWZA.js:122 msgid "Protocol" msgstr "Протокол" -#: src/views/Publication/Add.js:353 +#: src/views/Publication/Add.js:355 msgid "Protocols" msgstr "Протоколы" -#: src/views/Settings.js:1307 +#: src/views/Settings.js:1375 msgid "Public domain/s" msgstr "Публичный домен/ы" -#: src/views/Publication/Edit.js:113 -#: src/views/Publication/Edit.js:123 +#: src/views/Publication/Edit.js:107 +#: src/views/Publication/Edit.js:117 msgid "Publication service not found" msgstr "Служба публикации не найдены" @@ -1669,16 +1796,18 @@ msgstr "Настройки сайта публикации сохранены" msgid "Publications" msgstr "Публикации" -#: src/views/Edit/Sources/Network.js:657 +#: src/views/Edit/Sources/Network.js:813 msgid "Pull Mode" msgstr "Режим вытягивания" -#: src/views/Edit/Sources/Network.js:656 +#: src/views/Edit/Sources/Network.js:812 msgid "Pull or recieve the data:" msgstr "Вытяните или получите данные:" #: src/misc/Progress.js:90 -#: src/misc/coders/Encoders/video/H264VAAPI.js:137 +#: src/misc/coders/Encoders/video/H264VAAPI.js:140 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:140 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:140 msgid "Quality" msgstr "Качество" @@ -1686,47 +1815,67 @@ msgstr "Качество" msgid "RGB test pattern" msgstr "Тестовый шаблон RGB" -#: src/views/Settings.js:1824 +#: src/views/Main/index.js:412 +#: src/views/Settings.js:1213 +#: src/views/Settings.js:1830 +msgid "RTMP" +msgstr "RTMP" + +#: src/views/Settings.js:1871 +msgid "RTMP Port" +msgstr "Порт RTMP" + +#: src/views/Settings.js:1905 msgid "RTMP app for publishing." msgstr "Приложение RTMP для публикации." -#: src/views/Settings.js:1765 +#: src/views/Edit/index.js:498 +msgid "RTMP output" +msgstr "Выход RTMP" + +#: src/views/Edit/Wizard/Sources/InternalRTMP.js:93 +#: src/views/Settings.js:1835 msgid "RTMP server" msgstr "RTMP-сервер" -#: src/views/Edit/Sources/Network.js:572 +#: src/views/Edit/Sources/Network.js:679 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:50 msgid "RTMP server is not enabled" msgstr "RTMP-сервер не включен" -#: src/views/Settings.js:1811 +#: src/views/Settings.js:1879 msgid "RTMP server listen address." msgstr "Адрес прослушивания RTMP-сервера." -#: src/views/Settings.js:1837 +#: src/views/Settings.js:1918 msgid "RTMP token for publishing and playing. The token is the value of the URL query parameter 'token.'" msgstr "Токен RTMP для публикации и воспроизведения. Токен – это значение параметра запроса URL-адреса token." -#: src/views/Settings.js:1146 -#: src/views/Settings.js:1760 -msgid "RTMP/S" -msgstr "RTMP/S" +#: src/views/Settings.js:1884 +msgid "RTMPS Port" +msgstr "Порт RTMPS" -#: src/views/Settings.js:1772 +#: src/views/Settings.js:1843 msgid "RTMPS server" msgstr "RTMPS-сервер" -#: src/views/Edit/Sources/Network.js:405 +#: src/views/Settings.js:1892 +msgid "RTMPS server listen address." +msgstr "Адрес прослушивания сервера RTMPS." + +#: src/views/Edit/Sources/Network.js:483 msgid "RTSP" msgstr "RTSP" -#: src/views/Edit/Sources/Raspicam.js:132 +#: src/views/Edit/Sources/Raspicam.js:135 #: src/views/Edit/Wizard/Sources/Raspicam.js:117 msgid "Raspberry Pi camera" msgstr "Камера Raspberry Pi" -#: src/misc/coders/Encoders/video/H264NVENC.js:144 -#: src/misc/coders/Encoders/video/H264VAAPI.js:63 +#: src/misc/coders/Encoders/video/H264NVENC.js:147 +#: src/misc/coders/Encoders/video/H264VAAPI.js:66 +#: src/misc/coders/Encoders/video/HEVCVAAPI.js:66 +#: src/misc/coders/Encoders/video/VP9VAAPI.js:66 msgid "Rate control" msgstr "Контроль скорости" @@ -1734,11 +1883,11 @@ msgstr "Контроль скорости" msgid "Ratio" msgstr "Соотношение" -#: src/views/Edit/Sources/Network.js:434 +#: src/views/Edit/Sources/Network.js:516 msgid "Read input at native speed" msgstr "Чтение ввода на исходной скорости" -#: src/views/Edit/Sources/Network.js:658 +#: src/views/Edit/Sources/Network.js:814 msgid "Receive Mode" msgstr "Режим приема" @@ -1752,13 +1901,13 @@ msgstr "Повторное подключение" msgid "Reconnect delay (seconds)" msgstr "Задержка повторного подключения (в секундах)" -#: src/views/Main/index.js:340 +#: src/views/Main/index.js:369 #: src/views/Publication/Process.js:68 #: src/views/Publication/Process.js:81 msgid "Reconnecting in {0}s" msgstr "Повторное подключение через {0}с" -#: src/views/Settings.js:1999 +#: src/views/Settings.js:2150 msgid "Reconnecting to Restreamer Core failed for the last {RETRIES} seconds." msgstr "Не удалось повторно подключиться к ядру Restreamer в течение последних {RETRIES} секунд." @@ -1768,7 +1917,7 @@ msgstr "Повторное подключение к ядру Restreamer не у #: src/views/Edit/Sources/ALSA.js:122 #: src/views/Edit/Sources/AVFoundation.js:181 -#: src/views/Edit/Sources/V4L.js:117 +#: src/views/Edit/Sources/V4L.js:120 #: src/views/Edit/Wizard/Sources/AVFoundation.js:135 #: src/views/Edit/Wizard/Sources/V4L.js:120 msgid "Refresh" @@ -1782,72 +1931,105 @@ msgid "Region" msgstr "Регион" #: src/views/Password.js:159 -#: src/views/Settings.js:2019 +#: src/views/Settings.js:2170 msgid "Reload" msgstr "Перезагрузка" -#: src/views/Settings.js:1637 +#: src/views/Settings.js:1707 msgid "Remove the oldest entries if the /memfs is full" msgstr "Удалите самые старые записи, если /memfs заполнен" -#: src/views/Settings.js:1784 +#: src/views/Settings.js:1852 msgid "Requires activation" msgstr "Требуется активация" -#: src/views/Settings.js:1206 -#: src/views/Settings.js:2036 -#: src/views/Settings.js:2049 -#: src/views/Settings.js:2058 +#: src/views/Settings.js:1274 +#: src/views/Settings.js:2187 +#: src/views/Settings.js:2200 +#: src/views/Settings.js:2209 msgid "Restart" msgstr "Перезапустить" -#: src/views/Settings.js:2027 +#: src/views/Settings.js:2178 msgid "Restart required" msgstr "Требуется перезагрузка" #: src/views/Password.js:136 -#: src/views/Settings.js:1987 +#: src/views/Settings.js:2138 msgid "Restarting" msgstr "Перезапуск" #: src/views/Password.js:141 -#: src/views/Settings.js:1992 +#: src/views/Settings.js:2143 msgid "Restarting Restreamer Core ..." msgstr "Перезапуск ядра Restreamer..." -#: src/views/Settings.js:1015 +#: src/views/Settings.js:1082 msgid "Restarting the application failed." msgstr "Не удалось перезапустить приложение." -#: src/views/Settings.js:1234 +#: src/views/Settings.js:1302 msgid "Restreamer Service" msgstr "Сервис Restreamer" -#: src/views/Main/index.js:239 +#: src/views/Main/index.js:267 msgid "Retrieving stream data ..." msgstr "Получение данных потока..." -#: src/views/Edit/Wizard/index.js:1128 +#: src/views/Edit/Wizard/index.js:1143 #: src/views/Invalid.js:43 -#: src/views/Settings.js:1116 +#: src/views/Settings.js:1183 msgid "Retry" msgstr "Повторить попытку" +#: src/misc/filters/video/Transpose.js:46 +msgid "Rotate" +msgstr "Повернуть" + #: src/views/Edit/Sources/VirtualVideo.js:155 msgid "Rule" msgstr "Правило" +#: src/views/Main/index.js:422 +#: src/views/Settings.js:1214 +#: src/views/Settings.js:1927 +msgid "SRT" +msgstr "SRT" + +#: src/views/Edit/index.js:517 +msgid "SRT output" +msgstr "Выход SRT" + +#: src/views/Edit/Wizard/Sources/InternalSRT.js:93 +#: src/views/Settings.js:1932 +msgid "SRT server" +msgstr "Сервер SRT" + +#: src/views/Edit/Sources/Network.js:728 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:50 +msgid "SRT server is not enabled" +msgstr "Сервер SRT не включен" + +#: src/views/Settings.js:1953 +msgid "SRT server listen address." +msgstr "Адрес прослушивания сервера SRT." + +#: src/views/Settings.js:1966 +msgid "SRT token for publishing and playing. The token is the value of the streamid parameter 'token.'" +msgstr "SRT-токен для публикации и воспроизведения. Токен - это значение параметра streamid 'token'." + #: src/misc/coders/settings/Audio.js:148 +#: src/misc/filters/audio/Resample.js:140 msgid "Sampling" msgstr "Выборка" -#: src/views/Edit/Wizard/index.js:1087 -#: src/views/Edit/index.js:560 -#: src/views/Playersite.js:788 -#: src/views/Publication/Add.js:534 -#: src/views/Publication/Edit.js:571 -#: src/views/Publication/Player.js:452 -#: src/views/Settings.js:1977 +#: src/views/Edit/Wizard/index.js:1102 +#: src/views/Edit/index.js:614 +#: src/views/Playersite.js:804 +#: src/views/Publication/Add.js:498 +#: src/views/Publication/Edit.js:533 +#: src/views/Publication/Player.js:457 +#: src/views/Settings.js:2128 msgid "Save" msgstr "Сохранить" @@ -1855,7 +2037,7 @@ msgstr "Сохранить" msgid "Scale" msgstr "Масштаб" -#: src/views/Settings.js:1723 +#: src/views/Settings.js:1793 msgid "Seconds to keep files in cache." msgstr "Секунд для хранения файлов в кеше." @@ -1871,24 +2053,28 @@ msgstr "Секунд до завершения зависшего процесс msgid "Seconds until the snapshot/thumbnail of the video source is updated." msgstr "Секунд до обновления моментального снимка/миниатюры источника видео." -#: src/views/Settings.js:1473 +#: src/views/Settings.js:1543 msgid "Security" msgstr "Безопасность" -#: src/views/Publication/Services/Core.js:122 +#: src/views/Publication/Services/Core.js:145 +msgid "Security passphrase" +msgstr "Парольная фраза безопасности" + +#: src/views/Publication/Services/Core.js:138 #: src/views/Publication/Services/Livespotting.js:103 msgid "Security token" msgstr "Токен безопасности" -#: src/views/Publication/Player.js:342 +#: src/views/Publication/Player.js:345 msgid "Seekbar color" msgstr "Цвет панели поиска" -#: src/misc/controls/HLS.js:62 +#: src/misc/controls/HLS.js:95 msgid "Segment length (seconds)" msgstr "Длина сегмента (секунды)" -#: src/misc/controls/HLS.js:67 +#: src/misc/controls/HLS.js:100 msgid "Segment will be cut on the following keyframe after this time has passed. 2 is recommended." msgstr "Сегмент будет обрезан на следующем ключевом кадре по истечении этого времени. 2 рекомендуется." @@ -1897,11 +2083,16 @@ msgstr "Сегмент будет обрезан на следующем клю msgid "Segmentation" msgstr "Сегментация" +#: src/views/Publication/Add.js:429 +#: src/views/Publication/Edit.js:470 +msgid "Select RTMP or SRT (if enabled) for less latency." +msgstr "Выберите RTMP или SRT (если включено) для меньшей задержки." + #: src/views/Edit/Sources/ALSA.js:108 #: src/views/Edit/Sources/AVFoundation.js:172 #: src/views/Edit/Sources/Framebuffer.js:99 -#: src/views/Edit/Sources/Raspicam.js:96 -#: src/views/Edit/Sources/V4L.js:103 +#: src/views/Edit/Sources/Raspicam.js:99 +#: src/views/Edit/Sources/V4L.js:106 #: src/views/Edit/Wizard/Sources/AVFoundation.js:120 #: src/views/Edit/Wizard/Sources/Raspicam.js:95 #: src/views/Edit/Wizard/Sources/V4L.js:114 @@ -1920,7 +2111,7 @@ msgstr "Выберите источник..." msgid "Select video source:" msgstr "Выберите источник видео:" -#: src/views/Edit/Wizard/index.js:268 +#: src/views/Edit/Wizard/index.js:283 msgid "Select whether you pull the stream from a <0>network source (such as a network camera) or the <1>internal RTMP server (e.g., OBS streams to the Restreamer)." msgstr "Выберите, извлекаете ли вы поток из <0>сетевого источника (например, сетевой камеры) или <1>внутреннего RTMP-сервера (например, потоки OBS на Restreamer)..." @@ -1928,7 +2119,11 @@ msgstr "Выберите, извлекаете ли вы поток из <0>се msgid "Select your encoding setting:" msgstr "Выберите настройку кодировки:" -#: src/views/Playersite.js:588 +#: src/misc/FilterSelect.js:121 +msgid "Select your filter settings (optional):" +msgstr "Выберите настройки фильтра (необязательно):" + +#: src/views/Playersite.js:604 msgid "Selected" msgstr "Выбрано" @@ -1936,18 +2131,20 @@ msgstr "Выбрано" msgid "Selected channel" msgstr "Выбранный канал" -#: src/views/Playersite.js:449 +#: src/views/Playersite.js:465 msgid "Selection" msgstr "Выбор" -#: src/views/Settings.js:1190 +#: src/views/Settings.js:1258 msgid "Send anonymous metrics (helps us for future development)" msgstr "Отправляйте анонимные метрики (помогает нам в будущем развитии)" -#: src/views/Edit/Sources/Network.js:542 -#: src/views/Edit/Sources/Network.js:589 +#: src/views/Edit/Sources/Network.js:650 +#: src/views/Edit/Sources/Network.js:696 +#: src/views/Edit/Sources/Network.js:745 #: src/views/Edit/Wizard/Sources/InternalHLS.js:48 #: src/views/Edit/Wizard/Sources/InternalRTMP.js:68 +#: src/views/Edit/Wizard/Sources/InternalSRT.js:68 msgid "Send stream to this address:" msgstr "Отправить поток на этот адрес:" @@ -1959,19 +2156,24 @@ msgstr "Отправить видео в фреймбуфер" msgid "Server" msgstr "Сервер" +#: src/views/Publication/Services/Owncast.js:100 +#: src/views/Publication/Services/Telegram.js:91 +msgid "Server URL" +msgstr "URL сервера" + #: src/Header.js:257 #: src/views/Login.js:246 -#: src/views/Settings.js:1140 -#: src/views/Settings.js:1220 +#: src/views/Settings.js:1207 +#: src/views/Settings.js:1288 msgid "Service" msgstr "Обслуживание" -#: src/views/Publication/Add.js:392 +#: src/views/Publication/Add.js:387 #: src/views/Publication/Edit.js:406 msgid "Service name" msgstr "Имя службы" -#: src/views/Settings.js:1271 +#: src/views/Settings.js:1339 msgid "Service token for monitoring." msgstr "Токен сервиса для мониторинга." @@ -1979,35 +2181,35 @@ msgstr "Токен сервиса для мониторинга." msgid "Sessions" msgstr "Сессии" -#: src/views/Settings.js:1402 +#: src/views/Settings.js:1470 msgid "Sets a bandwidth limit in Mbit per second for outgoing HLS data transfer. All services, such as RTMP and outgoing processes, are included in the calculation. If the bandwidth is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Устанавливает ограничение пропускной способности в Мбит/с для исходящей передачи данных HLS. Все услуги, такие как RTMP и исходящие процессы, включены в расчет. Если пропускная способность превышена, средства просмотра HLS получают код состояния HTTP 509 (превышен предел пропускной способности). 0 неограничен." -#: src/views/Settings.js:1386 +#: src/views/Settings.js:1454 msgid "Sets a viewer limit for HLS sessions. If the limit is exceeded, HLS viewers receive the HTTP status code 509 (Bandwidth Limit Exceeded). 0 is unlimited." msgstr "Устанавливает лимит зрителей для сеансов HLS. Если ограничение превышено, средства просмотра HLS получают код состояния HTTP 509 (превышен предел пропускной способности). 0 неограничен." -#: src/views/Settings.js:1225 +#: src/views/Settings.js:1293 msgid "Setting for connection to the service." msgstr "Настройка подключения к сервису." -#: src/views/Settings.js:1126 +#: src/views/Settings.js:1193 msgid "Settings" msgstr "Настройки" -#: src/views/Settings.js:1128 +#: src/views/Settings.js:1195 msgid "Settings (expert mode)" msgstr "Настройки (режим эксперта)" -#: src/views/Settings.js:1653 +#: src/views/Settings.js:1723 msgid "Settings for /data path. The access is protected by" msgstr "Настройки пути /data. Доступ защищен" -#: src/views/Settings.js:1580 +#: src/views/Settings.js:1650 msgid "Settings for /memfs path." msgstr "Настройки для пути /memfs." -#: src/views/Settings.js:958 +#: src/views/Settings.js:1025 msgid "Settings saved. All changes will be applied after restarting the application." msgstr "Настройки сохранены. Все изменения вступят в силу после перезапуска приложения." @@ -2015,7 +2217,7 @@ msgstr "Настройки сохранены. Все изменения вст msgid "Share button" msgstr "Кнопка поделиться" -#: src/views/Playersite.js:431 +#: src/views/Playersite.js:447 msgid "Shows a reference to the project." msgstr "Показывает ссылку на проект." @@ -2027,7 +2229,7 @@ msgstr "Регистрация (бесплатно)" msgid "Silence" msgstr "Тишина" -#: src/views/Edit/Wizard/index.js:898 +#: src/views/Edit/Wizard/index.js:913 msgid "Silence Audio" msgstr "Тишина Аудио" @@ -2043,8 +2245,8 @@ msgstr "Название сайта" msgid "Size" msgstr "Размер" -#: src/views/Edit/index.js:482 -#: src/views/Main/index.js:372 +#: src/views/Edit/index.js:536 +#: src/views/Main/index.js:431 msgid "Snapshot" msgstr "Снимок" @@ -2052,19 +2254,29 @@ msgstr "Снимок" msgid "Social-login (OAuth2, 2FA)" msgstr "Регистрация (OAuth2, 2FA)" -#: src/views/Edit/Sources/Network.js:418 +#: src/views/Edit/Sources/Network.js:500 msgid "Socket timeout (microseconds)" msgstr "Время ожидания сокета (микросекунды)" -#: src/views/Publication/Add.js:350 +#: src/views/Publication/Add.js:352 msgid "Software" msgstr "Программного обеспечения" +#: src/misc/controls/Source.js:74 #: src/views/Edit/Sources/VirtualAudio.js:88 #: src/views/Edit/Sources/VirtualVideo.js:112 +#: src/views/Publication/Add.js:424 +#: src/views/Publication/Edit.js:465 msgid "Source" msgstr "Источник" +#: src/views/Publication/Add.js:375 +#: src/views/Publication/Add.js:419 +#: src/views/Publication/Edit.js:394 +#: src/views/Publication/Edit.js:460 +msgid "Source & Encoding" +msgstr "Источник и кодирование" + #: src/misc/Progress.js:103 msgid "Speed" msgstr "Скорость" @@ -2073,24 +2285,25 @@ msgstr "Скорость" msgid "Stale timeout (seconds)" msgstr "Время ожидания ожидания (секунды)" -#: src/views/Publication/Player.js:322 -#: src/views/Settings.js:1505 +#: src/views/Publication/Player.js:325 +#: src/views/Settings.js:1575 msgid "Statistics" msgstr "Статистика" -#: src/views/Settings.js:1145 -#: src/views/Settings.js:1572 +#: src/misc/controls/HLS.js:65 +#: src/views/Settings.js:1212 +#: src/views/Settings.js:1642 msgid "Storage" msgstr "Хранилище" -#: src/views/Settings.js:1563 +#: src/views/Settings.js:1633 msgid "Stores the viewer statistics to the disk." msgstr "Сохраняет статистику просмотра на диск." #: src/views/Edit/StreamSelect.js:30 #: src/views/Edit/StreamSelect.js:36 #: src/views/Edit/StreamSelect.js:81 -#: src/views/Edit/Wizard/index.js:878 +#: src/views/Edit/Wizard/index.js:893 msgid "Stream" msgstr "Поток" @@ -2103,7 +2316,9 @@ msgstr "URL-адрес потока" #: src/views/Publication/Services/DaCast.js:153 #: src/views/Publication/Services/Dummy.js:274 #: src/views/Publication/Services/Instagram.js:84 +#: src/views/Publication/Services/Owncast.js:110 #: src/views/Publication/Services/Restream.js:116 +#: src/views/Publication/Services/Telegram.js:101 #: src/views/Publication/Services/Twitch.js:129 #: src/views/Publication/Services/Twitter.js:175 #: src/views/Publication/Services/Vimeo.js:73 @@ -2112,7 +2327,7 @@ msgid "Stream key" msgstr "Ключ потока" #: src/views/Publication/Services/Brightcove.js:101 -#: src/views/Publication/Services/Core.js:113 +#: src/views/Publication/Services/Core.js:131 #: src/views/Publication/Services/Red5.js:136 #: src/views/Publication/Services/WOWZA.js:158 msgid "Stream name" @@ -2122,31 +2337,35 @@ msgstr "Название потока" msgid "Stream names" msgstr "Имена потоков" -#: src/views/Playersite.js:425 +#: src/misc/controls/Source.js:78 +msgid "Stream source for publication service (experimental)." +msgstr "Источник потока для службы публикации (экспериментальный)." + +#: src/views/Playersite.js:441 msgid "Support datarhei Restreamer" msgstr "Поддержка datarhei Restreamer" -#: src/views/Edit/Sources/Network.js:361 +#: src/views/Edit/Sources/Network.js:427 #: src/views/Edit/Wizard/Sources/Network.js:72 msgid "Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more." msgstr "Поддерживает HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT и другие." #: src/Footer.js:184 #: src/Header.js:275 -#: src/views/Settings.js:1851 +#: src/views/Settings.js:2002 msgid "System" msgstr "Система" #: src/views/Playersite.js:351 -#: src/views/Playersite.js:440 +#: src/views/Playersite.js:456 msgid "Template" msgstr "Шаблон" -#: src/views/Playersite.js:462 +#: src/views/Playersite.js:478 msgid "Template to be used for creating the publication website. The delete button removes the selection from the system." msgstr "Шаблон, который будет использоваться для создания веб-сайта публикации. Кнопка удаления удаляет выделение из системы." -#: src/views/Playersite.js:666 +#: src/views/Playersite.js:682 msgid "Terms" msgstr "Условия" @@ -2158,18 +2377,30 @@ msgstr "Тестовый шаблон" msgid "Test pattern (extended)" msgstr "Тестовый шаблон (расширенный)" -#: src/views/Playersite.js:519 +#: src/views/Playersite.js:535 msgid "Text colors" msgstr "Цвета текста" +#: src/misc/controls/RTMP.js:61 +msgid "The RTMP output requires the RTMP Server." +msgstr "Для вывода RTMP требуется сервер RTMP." + +#: src/misc/controls/SRT.js:61 +msgid "The SRT output requires the SRT Server." +msgstr "Для вывода SRT требуется сервер SRT Server." + #: src/views/Edit/Sources/VirtualAudio.js:131 msgid "The amplitude (0.0 - 1.0) of the generated audio stream" msgstr "Амплитуда (0.0 - 1.0) генерируемого аудиопотока" -#: src/views/Settings.js:1210 +#: src/views/Settings.js:1278 msgid "The application is using an older version of the settings." msgstr "Приложение использует более старую версию настроек." +#: src/views/Edit/Sources/Network.js:611 +msgid "The available FFmpeg binary doesn't support any of the required protocols." +msgstr "Доступный двоичный файл FFmpeg не поддерживает ни один из требуемых протоколов." + #: src/misc/coders/settings/Audio.js:40 msgid "The bitrate of the audio stream." msgstr "Битрейт аудиопотока." @@ -2178,15 +2409,15 @@ msgstr "Битрейт аудиопотока." msgid "The carrier frequency" msgstr "Несущая частота" -#: src/views/Edit/index.js:352 +#: src/views/Edit/index.js:364 msgid "The channel \"{0}\" could not be deleted" msgstr "Канал \"{0}\" не может быть удален" -#: src/views/Edit/index.js:361 +#: src/views/Edit/index.js:373 msgid "The channel \"{0}\" has been deleted" msgstr "Канал \"{0}\" удален" -#: src/views/Edit/index.js:604 +#: src/views/Edit/index.js:658 msgid "The deletion of this channel can not be recovered. All publications of this channel will be removed." msgstr "Удаление этого канала не может быть восстановлено. Все публикации этого канала будут удалены." @@ -2196,10 +2427,11 @@ msgid "The input profile is not complete. Please define a video and audio source msgstr "Входной профиль не завершен. Укажите источник видео и аудио." #: src/misc/coders/settings/Audio.js:86 +#: src/misc/filters/audio/Resample.js:78 msgid "The layout of the audio stream." msgstr "Схема аудиопотока." -#: src/misc/controls/HLS.js:79 +#: src/misc/controls/HLS.js:112 msgid "The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended." msgstr "Максимальное количество сегментов плейлиста. 0 будет содержать все сегменты. 6 рекомендуется." @@ -2211,83 +2443,84 @@ msgstr "Цвет шума" msgid "The person who associated a work with this deed has dedicated the work to the public domain by waiving all of his or her rights to the work worldwide under copyright law, including all related and neighboring rights, to the extent allowed by law. You can copy, modify, distribute and perform the work, even for commercial purposes, all without asking permission." msgstr "Лицо, связавшее произведение с этим документом, сделало произведение общественным достоянием, отказавшись от всех своих прав на произведение во всем мире в соответствии с законом об авторском праве, включая все смежные и смежные права, в той мере, в какой это разрешено законом. Вы можете копировать, изменять, распространять и выполнять работу даже в коммерческих целях, не спрашивая разрешения." -#: src/views/Settings.js:1315 +#: src/views/Settings.js:1383 msgid "The public reachable domain name of the host this Restreamer is running on. Separate multiple domain names by a comma." msgstr "Общедоступное доменное имя хоста, на котором работает Restreamer. Разделяйте несколько доменных имен запятой." -#: src/views/Publication/Edit.js:270 +#: src/views/Publication/Edit.js:278 msgid "The publication service \"{0}\" could not be deleted" msgstr "Службу публикации \"{0}\" не удалось удалить" -#: src/views/Publication/Add.js:188 +#: src/views/Publication/Add.js:195 msgid "The publication service \"{0}\" has been created" msgstr "Служба публикации \"{0}\" создана" -#: src/views/Publication/Edit.js:276 +#: src/views/Publication/Edit.js:284 msgid "The publication service \"{0}\" has been deleted" msgstr "Служба публикации \"{0}\" удалена" -#: src/views/Publication/Add.js:186 +#: src/views/Publication/Add.js:193 msgid "The publication service has been created" msgstr "Создан сервис публикации" #: src/misc/coders/settings/Audio.js:137 +#: src/misc/filters/audio/Resample.js:129 msgid "The sample rate of the audio stream." msgstr "Частота дискретизации аудиопотока." #: src/views/Playersite.js:152 #: src/views/Playersite.js:227 -#: src/views/Publication/Player.js:189 +#: src/views/Publication/Player.js:186 msgid "The selected file is too big ({0} bytes). Only {1} bytes are allowed." msgstr "Выбранный файл слишком велик ({0} байт). Допускается только {1} байт." #: src/views/Playersite.js:141 #: src/views/Playersite.js:216 -#: src/views/Publication/Player.js:178 +#: src/views/Publication/Player.js:175 msgid "The selected file type ({0}) is not allowed. Allowed file types are {types}" msgstr "Выбранный тип файла ({0}) не разрешен. Разрешенными типами файлов являются {types}" -#: src/views/Publication/Edit.js:230 +#: src/views/Publication/Edit.js:238 msgid "The settings for \"{0}\" have been saved" msgstr "Настройки для \"{0}\" сохранены" -#: src/views/Edit/Wizard/index.js:846 +#: src/views/Edit/Wizard/index.js:861 msgid "The source doesn't provide any audio streams." msgstr "Источник не предоставляет никаких аудиопотоков." -#: src/views/Edit/Profile.js:487 +#: src/views/Edit/Profile.js:520 msgid "The source doesn't provide any audio streams. Please check the <0>probe details." msgstr "Источник не предоставляет никаких аудиопотоков. Пожалуйста, проверьте <0>подробнее." -#: src/views/Edit/Wizard/index.js:854 +#: src/views/Edit/Wizard/index.js:869 msgid "The source doesn't provide any compatible audio streams." msgstr "Источник не предоставляет совместимых аудиопотоков." -#: src/views/Edit/Wizard/index.js:392 +#: src/views/Edit/Wizard/index.js:407 msgid "The source doesn't provide any compatible video streams. Please check the <0>requirements." msgstr "Источник не предоставляет совместимых видеопотоков. Ознакомьтесь с <0>требованиями." -#: src/views/Edit/Profile.js:357 +#: src/views/Edit/Profile.js:370 msgid "The source doesn't provide any video streams. Please check the <0>probe details." msgstr "Источник не предоставляет никаких видеопотоков. Пожалуйста, проверьте <0>подробнее." -#: src/views/Edit/Wizard/index.js:384 +#: src/views/Edit/Wizard/index.js:399 msgid "The source doesn't provide any video streams. Please check the device." msgstr "Источник не предоставляет никаких видеопотоков. Пожалуйста, проверьте устройство." -#: src/views/Edit/Wizard/index.js:865 +#: src/views/Edit/Wizard/index.js:880 msgid "The video source doesn't provide any compatible audio stream. <0>Silence audio is recommended. Services e.g. YouTube, Facebook & Co. require an audio channel." msgstr "Источник видео не обеспечивает совместимый аудиопоток. Рекомендуется <0>отключить звук. Сервисы YouTube, Facebook и другие компании требуют наличия аудиоканала...." -#: src/views/Edit/Wizard/index.js:603 +#: src/views/Edit/Wizard/index.js:618 msgid "The video source is compatible. Select the desired resolution:" msgstr "Источник видео совместим. Выберите нужное разрешение:" -#: src/views/Settings.js:1182 +#: src/views/Settings.js:1250 msgid "There are updates available. Here you get more information." msgstr "Доступны обновления. Здесь вы получите больше информации." -#: src/views/Settings.js:911 +#: src/views/Settings.js:978 msgid "There was a problem storing the settings. Settings not saved." msgstr "Не удалось сохранить настройки. Настройки не сохранены." @@ -2297,15 +2530,15 @@ msgstr "Произошла ошибка при подключении к ядр #: src/views/Playersite.js:165 #: src/views/Playersite.js:240 -#: src/views/Publication/Player.js:202 +#: src/views/Publication/Player.js:199 msgid "There was an error during upload: {0}" msgstr "При загрузке произошла ошибка: {0}" -#: src/views/Edit/Wizard/index.js:1123 +#: src/views/Edit/Wizard/index.js:1138 msgid "There was an error setting up the stream." msgstr "Не удалось настроить поток." -#: src/views/Settings.js:909 +#: src/views/Settings.js:976 msgid "There were some errors in the settings. Settings not saved." msgstr "Были некоторые ошибки в настройках. Настройки не сохранены." @@ -2349,7 +2582,11 @@ msgstr "Эта лицензия позволяет повторным польз msgid "This license allows reusers to distribute, remix, adapt, and build upon the material in any medium or format, so long as attribution is given to the creator. The license allows for commercial use. If you remix, adapt, or build upon the material, you must license the modified material under identical terms." msgstr "Эта лицензия позволяет повторным пользователям распространять, микшировать, адаптировать и использовать материал на любом носителе или в любом формате при условии указания авторства. Лицензия разрешает коммерческое использование. Если вы микшируете, адаптируете или развиваете материал, вы должны лицензировать измененный материал на тех же условиях." -#: src/views/Edit/index.js:585 +#: src/views/Edit/Sources/Network.js:435 +msgid "This protocol is unknown or not supported by the available FFmpeg binary." +msgstr "Этот протокол неизвестен или не поддерживается имеющимся двоичным файлом FFmpeg." + +#: src/views/Edit/index.js:639 msgid "This source cannot be edited while it is in use. To continue, you have to disconnect the source." msgstr "Этот источник нельзя редактировать, пока он используется. Чтобы продолжить, вы должны отключить источник." @@ -2365,15 +2602,20 @@ msgstr "Эта версия пользовательского интерфей msgid "This version of the UI is compatible." msgstr "Эта версия пользовательского интерфейса совместима." -#: src/views/Settings.js:1550 +#: src/views/Settings.js:1620 msgid "Time until an inactive viewer connection is treated as closed." msgstr "Время до того, как неактивное соединение со зрителем будет считаться закрытым." -#: src/views/Settings.js:1263 -#: src/views/Settings.js:1829 +#: src/views/Settings.js:1331 +#: src/views/Settings.js:1910 +#: src/views/Settings.js:1958 msgid "Token" msgstr "Токен" +#: src/views/Publication/Services/Telegram.js:13 +msgid "Transmit a Livestream to a Telegram Channel." +msgstr "Передача Livestream в канал Telegram." + #: src/views/Publication/Services/Image2.js:25 msgid "Transmit snapshots of the main source to an HTTP/S Server. More details about the settings can be found <0>here." msgstr "Передача моментальных снимков основного источника на сервер HTTP/S. Более подробную информацию о настройках можно найти <0>здесь." @@ -2430,7 +2672,7 @@ msgstr "Передайте основной источник на сервер U msgid "Transmit the main source to an WOWZA Server. More details about the settings can be found <0>here." msgstr "Передайте основной источник на сервер WOWZA. Более подробную информацию о настройках можно найти <0>здесь." -#: src/views/Publication/Services/Core.js:18 +#: src/views/Publication/Services/Core.js:19 msgid "Transmit the main source to an datarhei Core Ressource. More details about the settings can be found <0>here." msgstr "Передайте основной источник на основной ресурс datarhei. Более подробную информацию о настройках можно найти <0>здесь." @@ -2450,6 +2692,18 @@ msgstr "Передайте основной источник в облачный msgid "Transmit the main source to the Restream RTMP Service. More details about the settings can be found <0>here." msgstr "Передайте основной источник в службу Restream RTMP. Более подробную информацию о настройках можно найти <0>здесь." +#: src/views/Publication/Services/Azure.js:17 +msgid "Transmit to a Azure Media Services. More details can be found <0>here." +msgstr "Передача на Azure Media Services. Более подробную информацию можно найти <0>здесь." + +#: src/views/Publication/Services/Linkedin.js:16 +msgid "Transmit to linkedIn. More details can be found <0>here." +msgstr "Передайте в linkedIn. Более подробную информацию можно найти <0>здесь." + +#: src/views/Publication/Services/Owncast.js:15 +msgid "Transmit your Livestream to an Owncast server. <0>Here you can find more details about the settings." +msgstr "Передайте ваш Livestream на сервер Owncast. <0>Здесь вы можете найти более подробную информацию о настройках." + #: src/views/Publication/Services/Youtube.js:21 msgid "Transmits your video as an RTMP stream with the required key generated in YouTube Studio. You can find more information on setting up a live stream at YouTube's <0>Creator Academy." msgstr "Передает ваше видео в виде RTMP-потока с необходимым ключом, сгенерированным в YouTube Studio. Дополнительную информацию о настройке прямых трансляций можно найти в <0>Академии для авторов YouTube." @@ -2458,36 +2712,36 @@ msgstr "Передает ваше видео в виде RTMP-потока с н msgid "Transmits your video stream with the required key, which was generated in Twitter Producer. You can find more information on seting up a live stream at Twitter's <0>Producer." msgstr "Передает ваш видеопоток с нужным ключом, сгенерированным в Twitter Producer. Дополнительную информацию о настройке прямой трансляции можно найти на странице <0>Producer в Твиттере." -#: src/misc/coders/Encoders/video/X264.js:83 -#: src/misc/coders/Encoders/video/X265.js:83 +#: src/misc/coders/Encoders/video/X264.js:93 +#: src/misc/coders/Encoders/video/X265.js:93 msgid "Tune" msgstr "Мелодия" -#: src/views/Edit/Sources/Network.js:409 +#: src/views/Edit/Sources/Network.js:488 #: src/views/Edit/Wizard/Sources/Network.js:77 msgid "UDP transport" msgstr "Транспорт UDP" -#: src/views/Settings.js:1111 +#: src/views/Settings.js:1178 msgid "Unable to load the config." msgstr "Не удалось загрузить конфиг." -#: src/views/Settings.js:1245 +#: src/views/Settings.js:1313 msgid "Unique ident on the service." msgstr "Уникальный идентификатор на сервисе." -#: src/views/Main/Egress.js:91 +#: src/views/Main/Egress.js:96 msgid "Unknown" msgstr "Неизвестный" -#: src/views/Playersite.js:597 +#: src/views/Playersite.js:613 msgid "Unselected" msgstr "Не выбрано" -#: src/views/Playersite.js:482 -#: src/views/Playersite.js:499 -#: src/views/Playersite.js:634 -#: src/views/Publication/Player.js:373 +#: src/views/Playersite.js:498 +#: src/views/Playersite.js:515 +#: src/views/Playersite.js:650 +#: src/views/Publication/Player.js:376 msgid "Upload" msgstr "Загрузить" @@ -2495,7 +2749,7 @@ msgstr "Загрузить" msgid "Uploading the file failed" msgstr "Загрузка файла не удалась" -#: src/views/Publication/Player.js:232 +#: src/views/Publication/Player.js:229 msgid "Uploading the logo failed" msgstr "Не удалось загрузить логотип" @@ -2509,15 +2763,15 @@ msgstr "Время безотказной работы" msgid "Use Auth0 for your running Restreamer Core. More <0>details." msgstr "Используйте Auth0 для работающего ядра Restreamer. Больше <0>подробностей." -#: src/views/Edit/index.js:426 +#: src/views/Edit/index.js:438 msgid "Use the wizard (<0/>) for a quick and easy setup, or edit (<1/>) the sources directly in custom mode." msgstr "Воспользуйтесь мастером (<0/>) для быстрой и простой настройки или отредактируйте (<1/>) источники непосредственно в пользовательском режиме." -#: src/views/Edit/Wizard/index.js:1068 +#: src/views/Edit/Wizard/index.js:1083 msgid "Use your copyright and choose the correct image license. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Используйте свои авторские права и выберите правильную лицензию на изображение. Независимо от того, бесплатно для всех или сильно ограничено. Кратко обсудите, что другим разрешено делать с вашим изображением." -#: src/views/Edit/index.js:530 +#: src/views/Edit/index.js:584 msgid "Use your copyright and choose the right image licence. Whether free for all or highly restricted. Briefly discuss what others are allowed to do with your image." msgstr "Используйте свои авторские права и выберите правильную лицензию на изображение. Независимо от того, бесплатно для всех или сильно ограничено. Кратко обсудите, что другим разрешено делать с вашим изображением." @@ -2525,8 +2779,8 @@ msgstr "Используйте свои авторские права и выб msgid "User registration" msgstr "Регистрация пользователя" -#: src/views/Edit/Sources/Network.js:370 -#: src/views/Edit/Wizard/Sources/Network.js:81 +#: src/views/Edit/Sources/Network.js:448 +#: src/views/Edit/Wizard/Sources/Network.js:84 #: src/views/Login.js:272 #: src/views/Publication/Services/DASH.js:195 #: src/views/Publication/Services/DaCast.js:131 @@ -2534,18 +2788,18 @@ msgstr "Регистрация пользователя" #: src/views/Publication/Services/RTSP.js:153 #: src/views/Publication/Services/Red5.js:146 #: src/views/Publication/Services/WOWZA.js:168 -#: src/views/Settings.js:1440 -#: src/views/Settings.js:1598 +#: src/views/Settings.js:1510 +#: src/views/Settings.js:1668 msgid "Username" msgstr "Имя пользователя" -#: src/views/Settings.js:1446 -#: src/views/Settings.js:1606 +#: src/views/Settings.js:1516 +#: src/views/Settings.js:1676 msgid "Username for authorization." msgstr "Имя пользователя для авторизации." -#: src/views/Edit/Sources/Network.js:375 -#: src/views/Edit/Wizard/Sources/Network.js:83 +#: src/views/Edit/Sources/Network.js:453 +#: src/views/Edit/Wizard/Sources/Network.js:90 msgid "Username for the device." msgstr "Имя пользователя для устройства." @@ -2553,28 +2807,32 @@ msgstr "Имя пользователя для устройства." msgid "VPU ID" msgstr "VPU ID" -#: src/views/Publication/Add.js:476 +#: src/misc/filters/video/VFlip.js:65 +msgid "Vertical Flip" +msgstr "Вертикальное сальто" + +#: src/views/Publication/Add.js:451 msgid "Video" msgstr "Видео" #: src/views/Edit/Sources/AVFoundation.js:126 -#: src/views/Edit/Sources/Raspicam.js:89 -#: src/views/Edit/Sources/V4L.js:109 +#: src/views/Edit/Sources/Raspicam.js:92 +#: src/views/Edit/Sources/V4L.js:112 #: src/views/Edit/Wizard/Sources/AVFoundation.js:82 #: src/views/Edit/Wizard/Sources/Raspicam.js:86 #: src/views/Edit/Wizard/Sources/V4L.js:105 msgid "Video device" msgstr "Видеоустройство" -#: src/views/Edit/Profile.js:320 +#: src/views/Edit/Profile.js:333 #: src/views/Edit/ProfileSummary.js:66 -#: src/views/Publication/Edit.js:517 +#: src/views/Publication/Edit.js:490 msgid "Video settings" msgstr "Настройки видео" -#: src/views/Edit/Wizard/index.js:264 -#: src/views/Edit/Wizard/index.js:354 -#: src/views/Edit/Wizard/index.js:596 +#: src/views/Edit/Wizard/index.js:279 +#: src/views/Edit/Wizard/index.js:369 +#: src/views/Edit/Wizard/index.js:611 msgid "Video setup" msgstr "Настройка видео" @@ -2594,11 +2852,19 @@ msgstr "Зрителей" msgid "Virtual source" msgstr "Виртуальный источник" +#: src/misc/filters/audio/Volume.js:44 +msgid "Volume" +msgstr "Объем" + #: src/views/Welcome.js:27 msgid "Welcome to Restreamer v2, the solution for fast and easy video publishing. Free for private and commercial use. Further help in the <0>docs." msgstr "Добро пожаловать в Restreamer v2, решение для быстрой и простой публикации видео. Бесплатно для частного и коммерческого использования. Дополнительная помощь в <0>документах." -#: src/views/Settings.js:1585 +#: src/misc/controls/HLS.js:74 +msgid "Where to store the HLS playlist and segments. In-Memory is recommended." +msgstr "Где хранить список воспроизведения HLS и сегменты. Рекомендуется использовать In-Memory." + +#: src/views/Settings.js:1655 msgid "Write protection" msgstr "Защита от записи" @@ -2606,32 +2872,32 @@ msgstr "Защита от записи" msgid "YUV test pattern" msgstr "Тестовый образец YUV" -#: src/views/Edit/Wizard/index.js:1177 +#: src/views/Edit/Wizard/index.js:1192 msgid "Yes" msgstr "Да" -#: src/views/Edit/Wizard/index.js:1159 +#: src/views/Edit/Wizard/index.js:1174 msgid "You can't abort the wizard because at least one input must be defined." msgstr "Вы не можете прервать работу мастера, так как должен быть настроен хотя бы один источник." -#: src/views/Settings.js:2041 +#: src/views/Settings.js:2192 msgid "You have changed the configuration. In order for the changes to take effect, you have to restart the application. Do you want to restart now?" msgstr "Вы изменили конфигурацию. Чтобы изменения вступили в силу, необходимо перезапустить приложение. Вы хотите перезапустить сейчас?" -#: src/views/Main/index.js:347 +#: src/views/Main/index.js:376 #: src/views/Publication/Process.js:73 msgid "You have to reconnect manually" msgstr "Вы должны повторно подключиться вручную" -#: src/views/Publication/Edit.js:456 +#: src/views/Publication/Edit.js:432 msgid "You have unsaved changes. Please save them before you can control the service again." msgstr "У вас есть несохраненные изменения. Пожалуйста, сохраните их, прежде чем вы сможете снова управлять сервисом." -#: src/views/Edit/Wizard/index.js:616 +#: src/views/Edit/Wizard/index.js:631 msgid "Your stream needs to be encoded, but there's no suitable encoder available." msgstr "Ваш поток необходимо закодировать, но подходящего кодировщика нет." -#: src/views/Edit/Wizard/index.js:623 +#: src/views/Edit/Wizard/index.js:638 msgid "Your stream needs to be encoded. Choose the desired encoder:" msgstr "Ваш поток должен быть закодирован. Выберите нужный энкодер:" @@ -2643,7 +2909,7 @@ msgstr "синий" msgid "brown" msgstr "коричневый" -#: src/views/Publication/Player.js:331 +#: src/views/Publication/Player.js:334 msgid "iframe code" msgstr "код iframe" diff --git a/src/misc/BoxText.js b/src/misc/BoxText.js index 0dd98e8..4bb8c3b 100644 --- a/src/misc/BoxText.js +++ b/src/misc/BoxText.js @@ -49,6 +49,7 @@ export default function Component(props) { direction="column" justifyContent="center" alignItems="center" + textAlign={props.textAlign} spacing={1} className={ props.color === 'dark' ? classes.dark : props.color === 'success' ? classes.success : props.color === 'danger' ? classes.danger : classes.light @@ -62,4 +63,5 @@ export default function Component(props) { Component.defaultProps = { color: 'light', + textAlign: 'left', }; diff --git a/src/misc/EncodingSelect.js b/src/misc/EncodingSelect.js index e15be0c..0ef6838 100644 --- a/src/misc/EncodingSelect.js +++ b/src/misc/EncodingSelect.js @@ -239,5 +239,5 @@ EncodingSelect.defaultProps = { codecs: [], availableEncoders: [], availableDecoders: [], - onChange: function (encoder, decoder) {}, + onChange: function (encoder, decoder, automatic) {}, }; diff --git a/src/misc/FilterSelect.js b/src/misc/FilterSelect.js new file mode 100644 index 0000000..516a40e --- /dev/null +++ b/src/misc/FilterSelect.js @@ -0,0 +1,134 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; +import Typography from '@mui/material/Typography'; + +// Import all filters (audio/video) +import * as Filters from './filters'; + +// Import all encoders (audio/video) +import * as Encoders from './coders/Encoders'; + +export default function FilterSelect(props) { + const profile = props.profile; + + // handleFilterChange + // what: Filter name + // settings (component settings): {Key: Value} + // mapping (FFmpeg -af/-vf args): ['String', ...] + const handleFilterSettingsChange = (what) => (settings, graph, automatic) => { + const filter = profile.filter; + + // Store mapping/settings per component + filter.settings[what] = { + settings: settings, + graph: graph, + }; + + // Get the order of the filters + let filterOrder = []; + if (props.type === 'video') { + filterOrder = Filters.Video.Filters(); + } else { + filterOrder = Filters.Audio.Filters(); + } + + // Create the filter graph in the order as the filters are registered + const graphs = []; + for (let f of filterOrder) { + if (!(f in filter.settings)) { + continue; + } + + if (filter.settings[f].graph.length !== 0) { + graphs.push(filter.settings[f].graph); + } + } + + filter.graph = graphs.join(','); + + props.onChange(filter, automatic); + }; + + // Set filterRegistry by type + let filterRegistry = null; + if (props.type === 'video') { + filterRegistry = Filters.Video; + } else if (props.type === 'audio') { + filterRegistry = Filters.Audio; + } else { + return null; + } + + // Checks the state of hwaccel (gpu encoding) + let encoderRegistry = null; + let hwaccel = false; + if (props.type === 'video') { + encoderRegistry = Encoders.Video; + for (let encoder of encoderRegistry.List()) { + if (encoder.codec === props.profile.encoder.coder && encoder.hwaccel) { + hwaccel = true; + } + } + } + + // Creates filter components + let filterSettings = []; + if (!hwaccel) { + for (let c of filterRegistry.List()) { + // Checks FFmpeg skills (filter is available) + if (props.availableFilters.includes(c.filter)) { + const Settings = c.component; + + if (!(c.filter in profile.filter.settings)) { + profile.filter.settings[c.filter] = c.defaults(); + } else { + profile.filter.settings[c.filter] = { + ...c.defaults(), + ...profile.filter.settings[c.filter], + }; + } + + filterSettings.push( + + ); + } + } + } + + // No suitable filter found + if (filterSettings === null && !hwaccel) { + return ( + + + + No suitable filter found. + + + + ); + + // hwaccel requires further settings + } else if (hwaccel) { + return false; + } + + return ( + + + + Select your filter settings (optional): + + + {filterSettings} + + ); +} + +FilterSelect.defaultProps = { + type: '', + profile: {}, + availableFilters: [], + onChange: function (filter, automatic) {}, +}; diff --git a/src/misc/LanguageSelect.js b/src/misc/LanguageSelect.js index 2b839d2..b73cdca 100644 --- a/src/misc/LanguageSelect.js +++ b/src/misc/LanguageSelect.js @@ -44,10 +44,11 @@ export default function LanguageSelect(props) { ); diff --git a/src/misc/Password.js b/src/misc/Password.js index daf254f..2bdd42b 100644 --- a/src/misc/Password.js +++ b/src/misc/Password.js @@ -53,6 +53,8 @@ export default function Password(props) { endAdornment={adornment} label={props.label} autoComplete={props.autoComplete} + inputProps={props.inputProps} + error={props.error} /> {props.helperText && {props.helperText}} @@ -67,6 +69,8 @@ Password.defaultProps = { autoComplete: 'current-password', env: false, show: false, - helperText: null, + helperText: false, + inputProps: {}, + error: false, onChange: function (value) {}, }; diff --git a/src/misc/Player/videojs.js b/src/misc/Player/videojs.js index 7fcedd9..668f142 100644 --- a/src/misc/Player/videojs.js +++ b/src/misc/Player/videojs.js @@ -31,6 +31,7 @@ export default function VideoJS(props) { player.addClass('vjs-internal'); } player.addClass('video-js'); + player.addClass('vjs-16-9'); } else { // you can update player here [update player through props] // const player = playerRef.current; diff --git a/src/misc/coders/Decoders/audio/Default.js b/src/misc/coders/Decoders/audio/Default.js index f9db3b7..a1d3cac 100644 --- a/src/misc/coders/Decoders/audio/Default.js +++ b/src/misc/coders/Decoders/audio/Default.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = []; + const mapping = { + global: [], + local: [], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/Default.js b/src/misc/coders/Decoders/video/Default.js index be7cc80..1dc1411 100644 --- a/src/misc/coders/Decoders/video/Default.js +++ b/src/misc/coders/Decoders/video/Default.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = []; + const mapping = { + global: [], + local: [], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/H264CUVID.js b/src/misc/coders/Decoders/video/H264CUVID.js index 887f48d..051fe18 100644 --- a/src/misc/coders/Decoders/video/H264CUVID.js +++ b/src/misc/coders/Decoders/video/H264CUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'h264_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'h264_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/H264MMAL.js b/src/misc/coders/Decoders/video/H264MMAL.js index ec7a609..80feb94 100644 --- a/src/misc/coders/Decoders/video/H264MMAL.js +++ b/src/misc/coders/Decoders/video/H264MMAL.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'h264_mmal']; + const mapping = { + global: [], + local: ['-c:v', 'h264_mmal'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/HEVCCUVID.js b/src/misc/coders/Decoders/video/HEVCCUVID.js index 6731fb7..869f26a 100644 --- a/src/misc/coders/Decoders/video/HEVCCUVID.js +++ b/src/misc/coders/Decoders/video/HEVCCUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'hevc_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'hevc_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/MJPEGCUVID.js b/src/misc/coders/Decoders/video/MJPEGCUVID.js index ee6827a..fc8706a 100644 --- a/src/misc/coders/Decoders/video/MJPEGCUVID.js +++ b/src/misc/coders/Decoders/video/MJPEGCUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'mjpeg_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'mjpeg_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/MPEG1CUVID.js b/src/misc/coders/Decoders/video/MPEG1CUVID.js index 0395336..cb2ecdf 100644 --- a/src/misc/coders/Decoders/video/MPEG1CUVID.js +++ b/src/misc/coders/Decoders/video/MPEG1CUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'mpeg1_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'mpeg1_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/MPEG2CUVID.js b/src/misc/coders/Decoders/video/MPEG2CUVID.js index 9f1ee68..2d88baa 100644 --- a/src/misc/coders/Decoders/video/MPEG2CUVID.js +++ b/src/misc/coders/Decoders/video/MPEG2CUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'mpeg2_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'mpeg2_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/MPEG2MMAL.js b/src/misc/coders/Decoders/video/MPEG2MMAL.js index 0c7f2c8..d2166c3 100644 --- a/src/misc/coders/Decoders/video/MPEG2MMAL.js +++ b/src/misc/coders/Decoders/video/MPEG2MMAL.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'mpeg2_mmal']; + const mapping = { + global: [], + local: ['-c:v', 'mpeg2_mmal'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/MPEG4CUVID.js b/src/misc/coders/Decoders/video/MPEG4CUVID.js index 065438f..b3da8b5 100644 --- a/src/misc/coders/Decoders/video/MPEG4CUVID.js +++ b/src/misc/coders/Decoders/video/MPEG4CUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'mpeg4_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'mpeg4_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/MPEG4MMAL.js b/src/misc/coders/Decoders/video/MPEG4MMAL.js index 6473f53..3e23ae4 100644 --- a/src/misc/coders/Decoders/video/MPEG4MMAL.js +++ b/src/misc/coders/Decoders/video/MPEG4MMAL.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'mpeg4_mmal']; + const mapping = { + global: [], + local: ['-c:v', 'mpeg4_mmal'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/NVDEC.js b/src/misc/coders/Decoders/video/NVDEC.js index 9194718..28b3216 100644 --- a/src/misc/coders/Decoders/video/NVDEC.js +++ b/src/misc/coders/Decoders/video/NVDEC.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-hwaccel', 'cuda']; + const mapping = { + global: [], + local: ['-hwaccel', 'cuda', '-hwaccel_output_format', 'cuda'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/VC1CUVID.js b/src/misc/coders/Decoders/video/VC1CUVID.js index 12e50e3..b7da391 100644 --- a/src/misc/coders/Decoders/video/VC1CUVID.js +++ b/src/misc/coders/Decoders/video/VC1CUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'vc1_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'vc1_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/VC1MMAL.js b/src/misc/coders/Decoders/video/VC1MMAL.js index 83cf83e..0c3fbad 100644 --- a/src/misc/coders/Decoders/video/VC1MMAL.js +++ b/src/misc/coders/Decoders/video/VC1MMAL.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'vc1_mmal']; + const mapping = { + global: [], + local: ['-c:v', 'vc1_mmal'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/VP8CUVID.js b/src/misc/coders/Decoders/video/VP8CUVID.js index 341ea3d..d298e8a 100644 --- a/src/misc/coders/Decoders/video/VP8CUVID.js +++ b/src/misc/coders/Decoders/video/VP8CUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'vp8_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'vp8_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/VP9CUVID.js b/src/misc/coders/Decoders/video/VP9CUVID.js index f474ddd..5c8a409 100644 --- a/src/misc/coders/Decoders/video/VP9CUVID.js +++ b/src/misc/coders/Decoders/video/VP9CUVID.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-c:v', 'vp9_cuvid']; + const mapping = { + global: [], + local: ['-c:v', 'vp9_cuvid'], + }; return mapping; } diff --git a/src/misc/coders/Decoders/video/VideoToolbox.js b/src/misc/coders/Decoders/video/VideoToolbox.js index 760e6c8..1f77c30 100644 --- a/src/misc/coders/Decoders/video/VideoToolbox.js +++ b/src/misc/coders/Decoders/video/VideoToolbox.js @@ -9,7 +9,10 @@ function init(initialState) { } function createMapping(settings) { - const mapping = ['-hwaccel', 'videotoolbox']; + const mapping = { + global: [], + local: ['-hwaccel', 'videotoolbox'], + }; return mapping; } diff --git a/src/misc/coders/Encoders/audio/AAC.js b/src/misc/coders/Encoders/audio/AAC.js index 78e930a..98687d5 100644 --- a/src/misc/coders/Encoders/audio/AAC.js +++ b/src/misc/coders/Encoders/audio/AAC.js @@ -7,9 +7,6 @@ import Audio from '../../settings/Audio'; function init(initialState) { const state = { bitrate: '64', - channels: '2', - layout: 'stereo', - sampling: '44100', ...initialState, }; @@ -17,23 +14,17 @@ function init(initialState) { } function createMapping(settings, stream) { - let sampling = settings.sampling; - let layout = settings.layout; - - if (sampling === 'inherit') { - sampling = stream.sampling_hz; - } - - if (layout === 'inherit') { - layout = stream.layout; - } - - const mapping = ['-codec:a', 'aac', '-b:a', `${settings.bitrate}k`, '-shortest', '-af', `aresample=osr=${sampling}:ocl=${layout}`]; + const local = ['-codec:a', 'aac', '-b:a', `${settings.bitrate}k`, '-shortest']; if (stream.codec === 'aac') { - mapping.push('-bsf:a', 'aac_adtstoasc'); + local.push('-bsf:a', 'aac_adtstoasc'); } + const mapping = { + global: [], + local: local, + }; + return mapping; } @@ -59,23 +50,6 @@ function Coder(props) { [what]: value, }; - if (what === 'layout') { - let channels = stream.channels; - - switch (value) { - case 'mono': - channels = 1; - break; - case 'stereo': - channels = 2; - break; - default: - break; - } - - newSettings.channels = channels; - } - handleChange(newSettings); }; @@ -89,12 +63,6 @@ function Coder(props) { - - - - - - ); } @@ -112,7 +80,7 @@ const type = 'audio'; const hwaccel = false; function summarize(settings) { - return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`; + return `${name}, ${settings.bitrate} kbit/s`; } function defaults(stream) { diff --git a/src/misc/coders/Encoders/audio/AACAudioToolbox.js b/src/misc/coders/Encoders/audio/AACAudioToolbox.js index 0c47edb..f96ad23 100644 --- a/src/misc/coders/Encoders/audio/AACAudioToolbox.js +++ b/src/misc/coders/Encoders/audio/AACAudioToolbox.js @@ -7,9 +7,6 @@ import Audio from '../../settings/Audio'; function init(initialState) { const state = { bitrate: '64', - channels: '2', - layout: 'stereo', - sampling: '44100', ...initialState, }; @@ -17,23 +14,17 @@ function init(initialState) { } function createMapping(settings, stream) { - let sampling = settings.sampling; - let layout = settings.layout; - - if (sampling === 'inherit') { - sampling = stream.sampling_hz; - } - - if (layout === 'inherit') { - layout = stream.layout; - } - - const mapping = ['-codec:a', 'aac_at', '-b:a', `${settings.bitrate}k`, '-shortest', '-af', `aresample=osr=${sampling}:ocl=${layout}`]; + const local = ['-codec:a', 'aac_at', '-b:a', `${settings.bitrate}k`, '-shortest']; if (stream.codec === 'aac') { - mapping.push('-bsf:a', 'aac_adtstoasc'); + local.push('-bsf:a', 'aac_adtstoasc'); } + const mapping = { + global: [['-vsync', 'drop']], + local: local, + }; + return mapping; } @@ -59,23 +50,6 @@ function Coder(props) { [what]: value, }; - if (what === 'layout') { - let channels = stream.channels; - - switch (value) { - case 'mono': - channels = 1; - break; - case 'stereo': - channels = 2; - break; - default: - break; - } - - newSettings.channels = channels; - } - handleChange(newSettings); }; @@ -89,12 +63,6 @@ function Coder(props) { - - - - - - ); } @@ -112,7 +80,7 @@ const type = 'audio'; const hwaccel = true; function summarize(settings) { - return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`; + return `${name}, ${settings.bitrate} kbit/s`; } function defaults(stream) { diff --git a/src/misc/coders/Encoders/audio/Copy.js b/src/misc/coders/Encoders/audio/Copy.js index 533ed9a..9065c38 100644 --- a/src/misc/coders/Encoders/audio/Copy.js +++ b/src/misc/coders/Encoders/audio/Copy.js @@ -1,12 +1,17 @@ import React from 'react'; function createMapping(settings, stream) { - const mapping = ['-codec:a', 'copy']; - /* - if(stream.codec === 'aac') { - mapping.push('-bsf:a', 'aac_adtstoasc'); - } -*/ + const local = ['-codec:a', 'copy']; + + //if (stream.codec === 'aac') { + // local.push('-bsf:a', 'aac_adtstoasc'); + //} + + const mapping = { + global: [], + local: local, + }; + return mapping; } diff --git a/src/misc/coders/Encoders/audio/Libopus.js b/src/misc/coders/Encoders/audio/Libopus.js index f118f9a..6ab9b25 100644 --- a/src/misc/coders/Encoders/audio/Libopus.js +++ b/src/misc/coders/Encoders/audio/Libopus.js @@ -7,9 +7,6 @@ import Audio from '../../settings/Audio'; function init(initialState) { const state = { bitrate: '64', - channels: '2', - layout: 'stereo', - sampling: '44100', ...initialState, }; @@ -17,18 +14,12 @@ function init(initialState) { } function createMapping(settings, stream) { - let sampling = settings.sampling; - let layout = settings.layout; + const local = ['-codec:a', 'libopus', '-b:a', `${settings.bitrate}k`, '-shortest']; - if (sampling === 'inherit') { - sampling = stream.sampling_hz; - } - - if (layout === 'inherit') { - layout = stream.layout; - } - - const mapping = ['-codec:a', 'libopus', '-b:a', `${settings.bitrate}k`, '-shortest', '-af', `aresample=osr=${sampling}:ocl=${layout}`]; + const mapping = { + global: [], + local: local, + }; return mapping; } @@ -55,23 +46,6 @@ function Coder(props) { [what]: value, }; - if (what === 'layout') { - let channels = stream.channels; - - switch (value) { - case 'mono': - channels = 1; - break; - case 'stereo': - channels = 2; - break; - default: - break; - } - - newSettings.channels = channels; - } - handleChange(newSettings); }; @@ -85,12 +59,6 @@ function Coder(props) { - - - - - - ); } @@ -108,7 +76,7 @@ const type = 'audio'; const hwaccel = false; function summarize(settings) { - return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`; + return `${name}, ${settings.bitrate} kbit/s`; } function defaults(stream) { diff --git a/src/misc/coders/Encoders/audio/Libvorbis.js b/src/misc/coders/Encoders/audio/Libvorbis.js index 253875a..589fb44 100644 --- a/src/misc/coders/Encoders/audio/Libvorbis.js +++ b/src/misc/coders/Encoders/audio/Libvorbis.js @@ -7,9 +7,6 @@ import Audio from '../../settings/Audio'; function init(initialState) { const state = { bitrate: '64', - channels: '2', - layout: 'stereo', - sampling: '44100', ...initialState, }; @@ -17,18 +14,12 @@ function init(initialState) { } function createMapping(settings, stream) { - let sampling = settings.sampling; - let layout = settings.layout; + const local = ['-codec:a', 'libvorbis', '-b:a', `${settings.bitrate}k`, '-shortest']; - if (sampling === 'inherit') { - sampling = stream.sampling_hz; - } - - if (layout === 'inherit') { - layout = stream.layout; - } - - const mapping = ['-codec:a', 'libvorbis', '-b:a', `${settings.bitrate}k`, '-shortest', '-af', `aresample=osr=${sampling}:ocl=${layout}`]; + const mapping = { + global: [['-vsync', 'drop']], + local: local, + }; return mapping; } @@ -55,23 +46,6 @@ function Coder(props) { [what]: value, }; - if (what === 'layout') { - let channels = stream.channels; - - switch (value) { - case 'mono': - channels = 1; - break; - case 'stereo': - channels = 2; - break; - default: - break; - } - - newSettings.channels = channels; - } - handleChange(newSettings); }; @@ -85,12 +59,6 @@ function Coder(props) { - - - - - - ); } @@ -108,7 +76,7 @@ const type = 'audio'; const hwaccel = false; function summarize(settings) { - return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`; + return `${name}, ${settings.bitrate} kbit/s`; } function defaults(stream) { diff --git a/src/misc/coders/Encoders/audio/MP3.js b/src/misc/coders/Encoders/audio/MP3.js index ed793b8..bb69de6 100644 --- a/src/misc/coders/Encoders/audio/MP3.js +++ b/src/misc/coders/Encoders/audio/MP3.js @@ -7,9 +7,6 @@ import Audio from '../../settings/Audio'; function init(initialState) { const state = { bitrate: '64', - channels: '2', - layout: 'stereo', - sampling: '44100', ...initialState, }; @@ -17,19 +14,13 @@ function init(initialState) { } function createMapping(settings, stream) { - let sampling = settings.sampling; - let layout = settings.layout; - - if (sampling === 'inherit') { - sampling = stream.sampling_hz; - } - - if (layout === 'inherit') { - layout = stream.layout; - } - // '-qscale:a', '6' - const mapping = ['-codec:a', 'libmp3lame', '-b:a', `${settings.bitrate}k`, '-shortest', '-af', `aresample=osr=${sampling}:ocl=${layout}`]; + const local = ['-codec:a', 'libmp3lame', '-b:a', `${settings.bitrate}k`, '-shortest']; + + const mapping = { + global: [['-vsync', 'drop']], + local: local, + }; return mapping; } @@ -56,23 +47,6 @@ function Coder(props) { [what]: value, }; - if (what === 'layout') { - let channels = stream.channels; - - switch (value) { - case 'mono': - channels = 1; - break; - case 'stereo': - channels = 2; - break; - default: - break; - } - - newSettings.channels = channels; - } - handleChange(newSettings); }; @@ -86,12 +60,6 @@ function Coder(props) { - - - - - - ); } @@ -109,7 +77,7 @@ const type = 'audio'; const hwaccel = false; function summarize(settings) { - return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`; + return `${name}, ${settings.bitrate} kbit/s`; } function defaults(stream) { diff --git a/src/misc/coders/Encoders/audio/None.js b/src/misc/coders/Encoders/audio/None.js index f8b7aa0..5f5c3fd 100644 --- a/src/misc/coders/Encoders/audio/None.js +++ b/src/misc/coders/Encoders/audio/None.js @@ -1,7 +1,12 @@ import React from 'react'; function createMapping(settings, stream) { - const mapping = ['-an']; + const local = ['-an']; + + const mapping = { + global: [], + local: local, + }; return mapping; } diff --git a/src/misc/coders/Encoders/audio/Opus.js b/src/misc/coders/Encoders/audio/Opus.js index 47ab8bf..5ce35df 100644 --- a/src/misc/coders/Encoders/audio/Opus.js +++ b/src/misc/coders/Encoders/audio/Opus.js @@ -13,9 +13,6 @@ function init(initialState) { const state = { bitrate: '64', delay: 'auto', - channels: '2', - layout: 'stereo', - sampling: '44100', ...initialState, }; @@ -34,12 +31,17 @@ function createMapping(settings, stream) { layout = stream.layout; } - const mapping = ['-codec:a', 'opus', '-b:a', `${settings.bitrate}k`, '-vbr', 'on', '-shortest', '-af', `aresample=osr=${sampling}:ocl=${layout}`]; + const local = ['-codec:a', 'opus', '-b:a', `${settings.bitrate}k`, '-vbr', 'on', '-shortest']; if (settings.delay !== 'auto') { - mapping.push('opus_delay', settings.delay); + local.push('opus_delay', settings.delay); } + const mapping = { + global: [['-vsync', 'drop']], + local: local, + }; + return mapping; } @@ -108,23 +110,6 @@ function Coder(props) { [what]: value, }; - if (what === 'layout') { - let channels = stream.channels; - - switch (value) { - case 'mono': - channels = 1; - break; - case 'stereo': - channels = 2; - break; - default: - break; - } - - newSettings.channels = channels; - } - handleChange(newSettings); }; @@ -141,12 +126,6 @@ function Coder(props) { - - - - - - ); } @@ -164,7 +143,7 @@ const type = 'audio'; const hwaccel = false; function summarize(settings) { - return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`; + return `${name}, ${settings.bitrate} kbit/s`; } function defaults(stream) { diff --git a/src/misc/coders/Encoders/audio/Vorbis.js b/src/misc/coders/Encoders/audio/Vorbis.js index d63e9bd..07a66ca 100644 --- a/src/misc/coders/Encoders/audio/Vorbis.js +++ b/src/misc/coders/Encoders/audio/Vorbis.js @@ -7,9 +7,6 @@ import Audio from '../../settings/Audio'; function init(initialState) { const state = { bitrate: '64', - channels: '2', - layout: 'stereo', - sampling: '44100', ...initialState, }; @@ -17,18 +14,12 @@ function init(initialState) { } function createMapping(settings, stream) { - let sampling = settings.sampling; - let layout = settings.layout; + const local = ['-codec:a', 'vorbis', '-b:a', `${settings.bitrate}k`, '-qscale:a', '3', '-shortest']; - if (sampling === 'inherit') { - sampling = stream.sampling_hz; - } - - if (layout === 'inherit') { - layout = stream.layout; - } - - const mapping = ['-codec:a', 'vorbis', '-b:a', `${settings.bitrate}k`, '-qscale:a', '3', '-shortest', '-af', `aresample=osr=${sampling}:ocl=${layout}`]; + const mapping = { + global: [['-vsync', 'drop']], + local: local, + }; return mapping; } @@ -55,23 +46,6 @@ function Coder(props) { [what]: value, }; - if (what === 'layout') { - let channels = stream.channels; - - switch (value) { - case 'mono': - channels = 1; - break; - case 'stereo': - channels = 2; - break; - default: - break; - } - - newSettings.channels = channels; - } - handleChange(newSettings); }; @@ -85,12 +59,6 @@ function Coder(props) { - - - - - - ); } @@ -108,7 +76,7 @@ const type = 'audio'; const hwaccel = false; function summarize(settings) { - return `${name}, ${settings.bitrate} kbit/s, ${settings.layout}, ${settings.sampling}Hz`; + return `${name}, ${settings.bitrate} kbit/s`; } function defaults(stream) { diff --git a/src/misc/coders/Encoders/index.js b/src/misc/coders/Encoders/index.js index 37dda51..c7c33e0 100644 --- a/src/misc/coders/Encoders/index.js +++ b/src/misc/coders/Encoders/index.js @@ -15,6 +15,8 @@ import * as H264NVENC from './video/H264NVENC'; import * as H264OMX from './video/H264OMX'; import * as H264V4L2M2M from './video/H264V4L2M2M'; import * as H264VAAPI from './video/H264VAAPI'; +import * as HEVCVAAPI from './video/HEVCVAAPI'; +import * as VP9VAAPI from './video/VP9VAAPI'; import * as VideoCopy from './video/Copy'; import * as VideoNone from './video/None'; import * as VideoRaw from './video/Raw'; @@ -127,6 +129,8 @@ videoRegistry.Register(H264NVENC); videoRegistry.Register(H264OMX); videoRegistry.Register(H264V4L2M2M); videoRegistry.Register(H264VAAPI); +videoRegistry.Register(HEVCVAAPI); +videoRegistry.Register(VP9VAAPI); videoRegistry.Register(VP9); videoRegistry.Register(VideoRaw); diff --git a/src/misc/coders/Encoders/video/Copy.js b/src/misc/coders/Encoders/video/Copy.js index 95ebaaa..4f636a0 100644 --- a/src/misc/coders/Encoders/video/Copy.js +++ b/src/misc/coders/Encoders/video/Copy.js @@ -1,7 +1,12 @@ import React from 'react'; function createMapping(settings) { - const mapping = ['-codec:v', 'copy', '-vsync', '0', '-copyts', '-start_at_zero']; + const local = ['-codec:v', 'copy']; + + const mapping = { + global: [], + local: local, + }; return mapping; } diff --git a/src/misc/coders/Encoders/video/H264NVENC.js b/src/misc/coders/Encoders/video/H264NVENC.js index 5869602..82758a1 100644 --- a/src/misc/coders/Encoders/video/H264NVENC.js +++ b/src/misc/coders/Encoders/video/H264NVENC.js @@ -24,7 +24,7 @@ function init(initialState) { } function createMapping(settings) { - const mapping = [ + const local = [ '-codec:v', 'h264_nvenc', '-preset:v', @@ -39,26 +39,29 @@ function createMapping(settings) { `${settings.fps}`, '-pix_fmt', 'yuv420p', - '-vsync', - '1', ]; if (settings.gop !== 'auto') { - mapping.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); } if (settings.profile !== 'auto') { - mapping.push('-profile:v', `${settings.profile}`); + local.push('-profile:v', `${settings.profile}`); } if (settings.level !== 'auto') { - mapping.push('-level:v', `${settings.level}`); + local.push('-level:v', `${settings.level}`); } if (settings.rc !== 'auto') { - mapping.push('-rc:v', `${settings.rc}`); + local.push('-rc:v', `${settings.rc}`); } + const mapping = { + global: [], + local: local, + }; + return mapping; } diff --git a/src/misc/coders/Encoders/video/H264OMX.js b/src/misc/coders/Encoders/video/H264OMX.js index a0c0c0d..834fc6a 100644 --- a/src/misc/coders/Encoders/video/H264OMX.js +++ b/src/misc/coders/Encoders/video/H264OMX.js @@ -17,7 +17,7 @@ function init(initialState) { } function createMapping(settings) { - const mapping = [ + const local = [ '-codec:v', 'h264_omx', '-b:v', @@ -30,20 +30,21 @@ function createMapping(settings) { `${settings.fps}`, '-pix_fmt', 'yuv420p', - '-vsync', - '1', - '-zerocopy', - '1', ]; if (settings.gop !== 'auto') { - mapping.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); } if (settings.profile !== 'auto') { - mapping.push('-profile:v', `${settings.profile}`); + local.push('-profile:v', `${settings.profile}`); } + const mapping = { + global: [], + local: local, + }; + return mapping; } diff --git a/src/misc/coders/Encoders/video/H264V4L2M2M.js b/src/misc/coders/Encoders/video/H264V4L2M2M.js index 3868367..da03a84 100644 --- a/src/misc/coders/Encoders/video/H264V4L2M2M.js +++ b/src/misc/coders/Encoders/video/H264V4L2M2M.js @@ -65,7 +65,7 @@ Codec Controls */ function createMapping(settings) { - const mapping = [ + const local = [ '-codec:v', 'h264_v4l2m2m', '-b:v', @@ -78,18 +78,21 @@ function createMapping(settings) { `${settings.fps}`, '-pix_fmt', 'yuv420p', - '-vsync', - '1', ]; if (settings.gop !== 'auto') { - mapping.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); } if (settings.profile !== 'auto') { - mapping.push('-profile:v', `${settings.profile}`); + local.push('-profile:v', `${settings.profile}`); } + const mapping = { + global: [], + local: local, + }; + return mapping; } diff --git a/src/misc/coders/Encoders/video/H264VAAPI.js b/src/misc/coders/Encoders/video/H264VAAPI.js index e40c1cd..f65151d 100644 --- a/src/misc/coders/Encoders/video/H264VAAPI.js +++ b/src/misc/coders/Encoders/video/H264VAAPI.js @@ -24,9 +24,13 @@ function init(initialState) { } function createMapping(settings) { - const mapping = [ - '-vaapi_device', - '/dev/dri/renderD128', + const global = []; + const local = []; + + // https://trac.ffmpeg.org/wiki/Hardware/VAAPI + global.push(['-vaapi_device', '/dev/dri/renderD128']); + + local.push( '-vf', 'format=nv12,hwupload', '-codec:v', @@ -35,8 +39,6 @@ function createMapping(settings) { `${settings.profile}`, '-quality', `${settings.quality}`, - '-level', - `${settings.level}`, '-b:v', `${settings.bitrate}k`, '-maxrate', @@ -46,16 +48,17 @@ function createMapping(settings) { '-r', `${settings.fps}`, '-g', - `${settings.gop}`, - '-vsync', - '1', - ]; + `${settings.gop}` + ); if (settings.gop !== 'auto') { - mapping.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); } - return mapping; + return { + global: global, + local: local, + }; } function RateControl(props) { diff --git a/src/misc/coders/Encoders/video/H264VideoToolbox.js b/src/misc/coders/Encoders/video/H264VideoToolbox.js index 6d68d00..52d52bb 100644 --- a/src/misc/coders/Encoders/video/H264VideoToolbox.js +++ b/src/misc/coders/Encoders/video/H264VideoToolbox.js @@ -22,7 +22,7 @@ function init(initialState) { } function createMapping(settings) { - const mapping = [ + const local = [ '-codec:v', 'h264_videotoolbox', '-b:v', @@ -37,22 +37,25 @@ function createMapping(settings) { 'yuv420p', '-realtime', 'true', - '-vsync', - '1', ]; if (settings.gop !== 'auto') { - mapping.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); } if (settings.profile !== 'auto') { - mapping.push('-profile:v', `${settings.profile}`); + local.push('-profile:v', `${settings.profile}`); } if (settings.entropy !== 'default') { - mapping.push('-coder:v', `${settings.entropy}`); + local.push('-coder:v', `${settings.entropy}`); } + const mapping = { + global: [], + local: local, + }; + return mapping; } diff --git a/src/misc/coders/Encoders/video/HEVCVAAPI.js b/src/misc/coders/Encoders/video/HEVCVAAPI.js new file mode 100644 index 0000000..c2f4fae --- /dev/null +++ b/src/misc/coders/Encoders/video/HEVCVAAPI.js @@ -0,0 +1,174 @@ +import React from 'react'; + +import Grid from '@mui/material/Grid'; +import MenuItem from '@mui/material/MenuItem'; +import TextField from '@mui/material/TextField'; + +import { Trans } from '@lingui/macro'; + +import Select from '../../../Select'; +import Video from '../../settings/Video'; + +function init(initialState) { + const state = { + bitrate: '4096', + fps: '25', + gop: '2', + profile: '77', + rc_mode: '1', + quality: '-1', + ...initialState, + }; + + return state; +} + +function createMapping(settings) { + const global = []; + const local = []; + + // https://trac.ffmpeg.org/wiki/Hardware/VAAPI + global.push(['-vaapi_device', '/dev/dri/renderD128']); + + local.push( + '-vf', + 'format=nv12,hwupload', + '-codec:v', + 'hevc_vaapi', + '-profile:v', + `${settings.profile}`, + '-quality', + `${settings.quality}`, + '-b:v', + `${settings.bitrate}k`, + '-maxrate', + `${settings.bitrate}k`, + '-bufsize', + `${settings.bitrate}k`, + '-r', + `${settings.fps}`, + '-g', + `${settings.gop}` + ); + + if (settings.gop !== 'auto') { + local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + } + + return { + global: global, + local: local, + }; +} + +function RateControl(props) { + return ( + + ); +} + +RateControl.defaultProps = { + value: '', + onChange: function (event) {}, +}; + +function Profile(props) { + return ( + + ); +} + +Profile.defaultProps = { + value: '', + onChange: function (event) {}, +}; + +function Coder(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createMapping(newSettings), automatic); + }; + + const update = (what) => (event) => { + const newSettings = { + ...settings, + [what]: event.target.value, + }; + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + + + + + + + + + + + + Quality} type="number" value={settings.quality} onChange={update('quality')} /> + + + + + + ); +} + +Coder.defaultProps = { + stream: {}, + settings: {}, + onChange: function (settings, mapping) {}, +}; + +const coder = 'hevc_vaapi'; +const name = 'HEVC (Intel VAAPI)'; +const codec = 'hevc'; +const type = 'video'; +const hwaccel = true; + +function summarize(settings) { + return `${name}, ${settings.bitrate} kbit/s, ${settings.fps} FPS, Profile: ${settings.profile}`; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + mapping: createMapping(settings), + }; +} + +export { coder, name, codec, type, hwaccel, summarize, defaults, Coder as component }; diff --git a/src/misc/coders/Encoders/video/None.js b/src/misc/coders/Encoders/video/None.js index 6738f1b..6cd3632 100644 --- a/src/misc/coders/Encoders/video/None.js +++ b/src/misc/coders/Encoders/video/None.js @@ -1,7 +1,12 @@ import React from 'react'; function createMapping(settings, stream) { - const mapping = ['-vn']; + const local = ['-vn']; + + const mapping = { + global: [], + local: local, + }; return mapping; } diff --git a/src/misc/coders/Encoders/video/Raw.js b/src/misc/coders/Encoders/video/Raw.js index 61629aa..5c72db2 100644 --- a/src/misc/coders/Encoders/video/Raw.js +++ b/src/misc/coders/Encoders/video/Raw.js @@ -1,7 +1,12 @@ import React from 'react'; function createMapping(settings) { - const mapping = ['-codec:v', 'rawvideo']; + const local = ['-codec:v', 'rawvideo']; + + const mapping = { + global: [], + local: local, + }; return mapping; } diff --git a/src/misc/coders/Encoders/video/VP9.js b/src/misc/coders/Encoders/video/VP9.js index caa5696..d36cd80 100644 --- a/src/misc/coders/Encoders/video/VP9.js +++ b/src/misc/coders/Encoders/video/VP9.js @@ -16,7 +16,7 @@ function init(initialState) { } function createMapping(settings) { - const mapping = [ + const local = [ '-codec:v', 'libvpx-vp9', '-b:v', @@ -27,16 +27,26 @@ function createMapping(settings) { `${settings.bitrate}k`, '-r', `${settings.fps}`, + '-sc_threshold', + '0', '-pix_fmt', 'yuv420p', - '-vsync', - '1', ]; if (settings.gop !== 'auto') { - mapping.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + local.push( + '-g', + `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`, + '-keyint_min', + `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}` + ); } + const mapping = { + global: [], + local: local, + }; + return mapping; } diff --git a/src/misc/coders/Encoders/video/VP9VAAPI.js b/src/misc/coders/Encoders/video/VP9VAAPI.js new file mode 100644 index 0000000..5156df3 --- /dev/null +++ b/src/misc/coders/Encoders/video/VP9VAAPI.js @@ -0,0 +1,174 @@ +import React from 'react'; + +import Grid from '@mui/material/Grid'; +import MenuItem from '@mui/material/MenuItem'; +import TextField from '@mui/material/TextField'; + +import { Trans } from '@lingui/macro'; + +import Select from '../../../Select'; +import Video from '../../settings/Video'; + +function init(initialState) { + const state = { + bitrate: '4096', + fps: '25', + gop: '2', + profile: '77', + rc_mode: '1', + quality: '-1', + ...initialState, + }; + + return state; +} + +function createMapping(settings) { + const global = []; + const local = []; + + // https://trac.ffmpeg.org/wiki/Hardware/VAAPI + global.push(['-vaapi_device', '/dev/dri/renderD128']); + + local.push( + '-vf', + 'format=nv12,hwupload', + '-codec:v', + 'vp9_vaapi', + '-profile:v', + `${settings.profile}`, + '-quality', + `${settings.quality}`, + '-b:v', + `${settings.bitrate}k`, + '-maxrate', + `${settings.bitrate}k`, + '-bufsize', + `${settings.bitrate}k`, + '-r', + `${settings.fps}`, + '-g', + `${settings.gop}` + ); + + if (settings.gop !== 'auto') { + local.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + } + + return { + global: global, + local: local, + }; +} + +function RateControl(props) { + return ( + + ); +} + +RateControl.defaultProps = { + value: '', + onChange: function (event) {}, +}; + +function Profile(props) { + return ( + + ); +} + +Profile.defaultProps = { + value: '', + onChange: function (event) {}, +}; + +function Coder(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createMapping(newSettings), automatic); + }; + + const update = (what) => (event) => { + const newSettings = { + ...settings, + [what]: event.target.value, + }; + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + + + + + + + + + + + + Quality} type="number" value={settings.quality} onChange={update('quality')} /> + + + + + + ); +} + +Coder.defaultProps = { + stream: {}, + settings: {}, + onChange: function (settings, mapping) {}, +}; + +const coder = 'vp9_vaapi'; +const name = 'VP9 (Intel VAAPI)'; +const codec = 'vp9'; +const type = 'video'; +const hwaccel = true; + +function summarize(settings) { + return `${name}, ${settings.bitrate} kbit/s, ${settings.fps} FPS, Profile: ${settings.profile}`; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + mapping: createMapping(settings), + }; +} + +export { coder, name, codec, type, hwaccel, summarize, defaults, Coder as component }; diff --git a/src/misc/coders/Encoders/video/X264.js b/src/misc/coders/Encoders/video/X264.js index 6eaea11..dff749c 100644 --- a/src/misc/coders/Encoders/video/X264.js +++ b/src/misc/coders/Encoders/video/X264.js @@ -23,7 +23,7 @@ function init(initialState) { } function createMapping(settings) { - const mapping = [ + const local = [ '-codec:v', 'libx264', '-preset:v', @@ -36,24 +36,34 @@ function createMapping(settings) { `${settings.bitrate}k`, '-r', `${settings.fps}`, + '-sc_threshold', + '0', '-pix_fmt', 'yuv420p', - '-vsync', - '1', ]; if (settings.gop !== 'auto') { - mapping.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + local.push( + '-g', + `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`, + '-keyint_min', + `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}` + ); } if (settings.profile !== 'auto') { - mapping.push('-profile:v', `${settings.profile}`); + local.push('-profile:v', `${settings.profile}`); } if (settings.tune !== 'none') { - mapping.push('-tune:v', `${settings.tune}`); + local.push('-tune:v', `${settings.tune}`); } + const mapping = { + global: [], + local: local, + }; + return mapping; } diff --git a/src/misc/coders/Encoders/video/X265.js b/src/misc/coders/Encoders/video/X265.js index ce055c2..2563618 100644 --- a/src/misc/coders/Encoders/video/X265.js +++ b/src/misc/coders/Encoders/video/X265.js @@ -23,7 +23,7 @@ function init(initialState) { } function createMapping(settings) { - const mapping = [ + const local = [ '-codec:v', 'libx265', '-preset:v', @@ -36,24 +36,34 @@ function createMapping(settings) { `${settings.bitrate}k`, '-r', `${settings.fps}`, + '-sc_threshold', + '0', '-pix_fmt', 'yuv420p', - '-vsync', - '1', ]; if (settings.gop !== 'auto') { - mapping.push('-g', `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`); + local.push( + '-g', + `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}`, + '-keyint_min', + `${Math.round(parseInt(settings.fps) * parseInt(settings.gop)).toFixed(0)}` + ); } if (settings.profile !== 'auto') { - mapping.push('-profile:v', `${settings.profile}`); + local.push('-profile:v', `${settings.profile}`); } if (settings.tune !== 'none') { - mapping.push('-tune:v', `${settings.tune}`); + local.push('-tune:v', `${settings.tune}`); } + const mapping = { + global: [], + local: local, + }; + return mapping; } diff --git a/src/misc/coders/README.md b/src/misc/coders/README.md new file mode 100644 index 0000000..8ef022b --- /dev/null +++ b/src/misc/coders/README.md @@ -0,0 +1,118 @@ +# Decoders and Encoders + +Implementations of various decoders and encoder for audio and video. + +## Decoders + +Each decoder exports the same variables: + +``` +export { coder, name, codecs, type, hwaccel, defaults, Coder as component }; +``` + +| Variable | Description | +| -------- | -------------------------------------------------------------------- | +| coder | Name of the decoder in FFmpeg, e.g. `cuda`, `vc1_mmal`. | +| name | Name for the decoder as it will be displayed in the UI. | +| codecs | Array of codecs this coder supports, e.g. `['h264', 'h265']`. | +| type | Either `video` or `audio`. | +| hwaccel | Whether this codec uses hardware acceleration. | +| defaults | A function that returns the default settings and mapping. See below. | +| Coder | The React component. | + +### defaults + +The `defaults()` function returns the default settings and mappings for this decoder. It is an object of this shape: + +``` +{ + settings: {}, + mapping: { + global: [], + local: [], + }, +} +``` + +The `settings` is an object private to a coder and contains its settings as required for rendering the component +with options for this coder. The `mapping` object contains the FFmpeg command line options according to the settings. +It has a `global` array which contains all global options for this coder. _Each option (with its value) has to be +an array of its own_. The `local` array is an array of options for that input, e.g. + +``` +{ + settings: { + ... + }, + mapping: { + global: [ + ['-init_hw_device', 'vaapi=foo:/dev/dri/renderD128'], + ], + local: [ + '-hwaccel', 'vaapi', + '-hwaccel_output_format', 'vaapi', + '-hwaccel_device', 'foo', + ], + }, +} +``` + +Check out the existing decoders as examples for an implementation. + +## Encoders + +Each encoder exports the same variables: + +``` +export { coder, name, codec, type, hwaccel, summarize, defaults, Coder as component }; +``` + +| Variable | Description | +| --------- | ---------------------------------------------------------------------- | +| coder | Name of the encoder in FFmpeg, e.g. `libx264`. | +| name | Name for the encoder as it will be displayed in the UI. | +| codec | Name of the codec, e.g. `h264`. | +| type | Either `video` or `audio`. | +| hwaccel | Whether this codec uses hardware acceleration. | +| summarize | A function that returns a string that summarizes the current settings. | +| defaults | A function that returns the default settings and mapping. See below. | +| Coder | The React component. | + +### defaults + +The `defaults()` function returns the default settings and mappings for this encoder. It is an object of this shape: + +``` +{ + settings: {}, + mapping: { + global: [], + local: [], + }, +} +``` + +The `settings` is an object private to a coder and contains its settings as required for rendering the component +with options for this coder. The `mapping` object contains the FFmpeg command line options according to the settings. +It has a `global` array which contains all global options for this coder. _Each option (with its value) has to be +an array of its own_. The `local` array is an array of options for that input, e.g. + +``` +{ + settings: { + ... + }, + mapping: { + global: [ + ['-init_hw_device', 'vaapi=foo:/dev/dri/renderD128'], + ], + local: [ + '-filter_hw_device', 'foo', + '-filter:v', 'format=nv12|vaapi,hwupload', + '-codec:v', 'h264_vaapi', + ], + }, +} +``` + +Check out the existing encoders as examples for an implementation. diff --git a/src/misc/controls/HLS.js b/src/misc/controls/HLS.js index 6658cb8..6e08a92 100644 --- a/src/misc/controls/HLS.js +++ b/src/misc/controls/HLS.js @@ -2,10 +2,12 @@ import React from 'react'; import { Trans } from '@lingui/macro'; import Grid from '@mui/material/Grid'; +import MenuItem from '@mui/material/MenuItem'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; import Checkbox from '../Checkbox'; +import Select from '../Select'; function init(settings) { const initSettings = { @@ -13,6 +15,9 @@ function init(settings) { segmentDuration: 2, listSize: 6, cleanup: true, + version: 3, + storage: 'memfs', + master_playlist: true, ...settings, }; @@ -31,7 +36,7 @@ export default function Control(props) { const handleChange = (what) => (event) => { const value = event.target.value; - if (['lhls', 'cleanup'].includes(what)) { + if (['lhls', 'cleanup', 'master_playlist'].includes(what)) { settings[what] = !settings[what]; } else { settings[what] = value; @@ -39,6 +44,7 @@ export default function Control(props) { props.onChange(settings, false); }; + return ( {/* @@ -55,6 +61,33 @@ export default function Control(props) { */} + + + + Where to store the HLS playlist and segments. In-Memory is recommended. + + + + + + Playlist version (M3U8). Version 3 has the best browser/client compatibility. + + The maximum number of playlist segments. 0 will contain all the segments. 6 is recommended. + + Master playlist (increases browser/client compatibility)} + checked={settings.master_playlist} + onChange={handleChange('master_playlist')} + /> + Automatic cleanup of all media data} checked={settings.cleanup} onChange={handleChange('cleanup')} /> diff --git a/src/misc/controls/RTMP.js b/src/misc/controls/RTMP.js new file mode 100644 index 0000000..97831c6 --- /dev/null +++ b/src/misc/controls/RTMP.js @@ -0,0 +1,83 @@ +import React from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { Trans } from '@lingui/macro'; +import Button from '@mui/material/Button'; +import Grid from '@mui/material/Grid'; +import Typography from '@mui/material/Typography'; + +import BoxText from '../BoxText'; +import Checkbox from '../Checkbox'; + +function init(settings) { + const initSettings = { + enable: false, + ...settings, + }; + + return initSettings; +} + +export default function Control(props) { + const navigate = useNavigate(); + const settings = init(props.settings); + + // Set the defaults + React.useEffect(() => { + props.onChange(settings, true); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleChange = (what) => (event) => { + const value = event.target.value; + + if (['enable'].includes(what)) { + settings[what] = !settings[what]; + } else { + settings[what] = value; + } + + props.onChange(settings, false); + }; + + return ( + + {props.enabled && ( + + Enable} + checked={settings.enable} + disabled={!props.enabled && settings.enable !== true} + onChange={handleChange('enable')} + /> + + Make the channel available as an RTMP stream (experimental). + + + )} + {!props.enabled && ( + + + The RTMP output requires the RTMP Server. + + + + )} + + ); +} + +Control.defaulProps = { + settings: {}, + enabled: false, + onChange: function (settings, automatic) {}, +}; diff --git a/src/misc/controls/SRT.js b/src/misc/controls/SRT.js new file mode 100644 index 0000000..0219fd4 --- /dev/null +++ b/src/misc/controls/SRT.js @@ -0,0 +1,83 @@ +import React from 'react'; +import { useNavigate } from 'react-router-dom'; + +import { Trans } from '@lingui/macro'; +import Button from '@mui/material/Button'; +import Grid from '@mui/material/Grid'; +import Typography from '@mui/material/Typography'; + +import BoxText from '../BoxText'; +import Checkbox from '../Checkbox'; + +function init(settings) { + const initSettings = { + enable: false, + ...settings, + }; + + return initSettings; +} + +export default function Control(props) { + const navigate = useNavigate(); + const settings = init(props.settings); + + // Set the defaults + React.useEffect(() => { + props.onChange(settings, true); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleChange = (what) => (event) => { + const value = event.target.value; + + if (['enable'].includes(what)) { + settings[what] = !settings[what]; + } else { + settings[what] = value; + } + + props.onChange(settings, false); + }; + + return ( + + {props.enabled && ( + + Enable} + checked={settings.enable} + disabled={!props.enabled && settings.enable !== true} + onChange={handleChange('enable')} + /> + + Make the channel available as an SRT stream (experimental). + + + )} + {!props.enabled && ( + + + The SRT output requires the SRT Server. + + + + )} + + ); +} + +Control.defaulProps = { + settings: {}, + enabled: false, + onChange: function (settings, automatic) {}, +}; diff --git a/src/misc/controls/Source.js b/src/misc/controls/Source.js new file mode 100644 index 0000000..43cf013 --- /dev/null +++ b/src/misc/controls/Source.js @@ -0,0 +1,89 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; +import MenuItem from '@mui/material/MenuItem'; +import Typography from '@mui/material/Typography'; + +import Select from '../Select'; + +function init(settings) { + const initSettings = { + source: 'hls+memfs', + ...settings, + }; + + switch (initSettings.source) { + case 'hls+diskfs': + case 'rtmp': + case 'srt': + break; + default: + initSettings.source = 'hls+memfs'; + } + + return initSettings; +} + +export default function Control(props) { + const settings = init(props.settings); + + // Set the defaults + React.useEffect(() => { + props.onChange(settings, true); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + const handleChange = (what) => (event) => { + const value = event.target.value; + + settings[what] = value; + + props.onChange(settings, false); + }; + + const items = []; + + items.push( + + HLS (memfs) + + ); + + items.push( + + HLS (diskfs) + + ); + + items.push( + + RTMP + + ); + + items.push( + + SRT + + ); + + return ( + + + + + Stream source for publication service (experimental). + + + + ); +} + +Control.defaulProps = { + settings: {}, + sources: [], + onChange: function (settings, automatic) {}, +}; diff --git a/src/misc/filters/audio/Loudnorm.js b/src/misc/filters/audio/Loudnorm.js new file mode 100644 index 0000000..b808ee7 --- /dev/null +++ b/src/misc/filters/audio/Loudnorm.js @@ -0,0 +1,95 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; + +import Checkbox from '../../Checkbox'; + +// Loudnorm Filter +// http://ffmpeg.org/ffmpeg-all.html#loudnorm + +function init(initialState) { + const state = { + enabled: false, + ...initialState, + }; + + return state; +} + +function createGraph(settings) { + settings = init(settings); + + const mapping = []; + + if (settings.enabled) { + mapping.push('loudnorm'); + } + + return mapping.join(','); +} + +function Filter(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createGraph(newSettings), automatic); + }; + + const update = (what) => (event) => { + const newSettings = { + ...settings, + }; + if (['enabled'].includes(what)) { + newSettings[what] = !settings.enabled; + } else { + newSettings[what] = event.target.value; + } + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + Loudness Normalization} checked={settings.enabled} onChange={update('enabled')} /> + + + ); +} + +Filter.defaultProps = { + settings: {}, + onChange: function (settings, graph, automatic) {}, +}; + +const filter = 'loudnorm'; +const name = 'Loudness Normalization'; +const type = 'audio'; +const hwaccel = false; + +function summarize(settings) { + return `${name}`; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + graph: createGraph(settings), + }; +} + +export { name, filter, type, hwaccel, summarize, defaults, createGraph, Filter as component }; diff --git a/src/misc/filters/audio/Pan.js b/src/misc/filters/audio/Pan.js new file mode 100644 index 0000000..8e14e18 --- /dev/null +++ b/src/misc/filters/audio/Pan.js @@ -0,0 +1,128 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; +import MenuItem from '@mui/material/MenuItem'; +import Typography from '@mui/material/Typography'; + +import Select from '../../Select'; + +// Pan Filter +// https://ffmpeg.org/ffmpeg-filters.html#pan-1 + +function init(initialState) { + const state = { + value: 'inherit', + ...initialState, + }; + + return state; +} + +function createGraph(settings) { + settings = init(settings); + + const mapping = []; + + switch (settings.value) { + case 'mute_left': + mapping.push('pan=stereo|c1=c1'); + break; + case 'mute_right': + mapping.push('pan=stereo|c0=c0'); + break; + default: + break; + } + + return mapping; +} + +// filter +function Pan(props) { + return ( + + + + Mute a channel. + + + ); +} + +Pan.defaultProps = { + value: '', + onChange: function (event) {}, +}; + +function Filter(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createGraph(newSettings), automatic); + }; + + const update = (what) => (event) => { + const newSettings = { + ...settings, + }; + + newSettings[what] = event.target.value; + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + + + ); +} + +Filter.defaultProps = { + settings: {}, + onChange: function (settings, graph, automatic) {}, +}; + +const filter = 'pan'; +const name = 'Pan'; +const type = 'audio'; +const hwaccel = false; + +function summarize(settings) { + return `${name} (${settings.value.replace(/_/i, ' ')})`; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + graph: createGraph(settings), + }; +} + +export { name, filter, type, hwaccel, summarize, defaults, createGraph, Filter as component }; diff --git a/src/misc/filters/audio/Resample.js b/src/misc/filters/audio/Resample.js new file mode 100644 index 0000000..86575d2 --- /dev/null +++ b/src/misc/filters/audio/Resample.js @@ -0,0 +1,226 @@ +import React from 'react'; + +import { useLingui } from '@lingui/react'; +import { Trans, t } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; +import Typography from '@mui/material/Typography'; + +import SelectCustom from '../../../misc/SelectCustom'; + +// Resample Filter +// https://ffmpeg.org/ffmpeg-filters.html#toc-aresample-1 + +function init(initialState) { + const state = { + channels: '2', + layout: 'stereo', + sampling: '44100', + ...initialState, + }; + + return state; +} + +function createGraph(settings) { + settings = init(settings); + + const mapping = []; + + const sampling = settings.sampling; + const layout = settings.layout; + + if (sampling !== 'inherit') { + mapping.push(`osr=${sampling}`); + } + + if (layout !== 'inherit') { + mapping.push(`ocl=${layout}`); + } + + if (mapping.length === 0) { + return ''; + } + + return 'aresample=' + mapping.join(':'); +} + +function Layout(props) { + const { i18n } = useLingui(); + const options = [ + { value: 'mono', label: 'mono' }, + { value: 'stereo', label: 'stereo' }, + ]; + + if (props.allowAuto === true) { + options.unshift({ value: 'auto', label: 'auto' }); + } + + if (props.allowInherit === true) { + options.unshift({ value: 'inherit', label: i18n._(t`Inherit`) }); + } + + if (props.allowCustom === true) { + options.push({ value: 'custom', label: i18n._(t`Custom ...`) }); + } + + return ( + + + + The layout of the audio stream. + + + ); +} + +Layout.defaultProps = { + variant: 'outlined', + allowAuto: false, + allowInherit: false, + allowCustom: false, + label: Layout, + customLabel: Custom layout, + onChange: function () {}, +}; + +function Sampling(props) { + const { i18n } = useLingui(); + const options = [ + { value: '96000', label: '96000 Hz' }, + { value: '88200', label: '88200 Hz' }, + { value: '48000', label: '48000 Hz' }, + { value: '44100', label: '44100 Hz' }, + { value: '22050', label: '22050 Hz' }, + { value: '8000', label: '8000 Hz' }, + ]; + + if (props.allowAuto === true) { + options.unshift({ value: 'auto', label: 'auto' }); + } + + if (props.allowInherit === true) { + options.unshift({ value: 'inherit', label: i18n._(t`Inherit`) }); + } + + if (props.allowCustom === true) { + options.push({ value: 'custom', label: i18n._(t`Custom ...`) }); + } + + return ( + + + + The sample rate of the audio stream. + + + ); +} + +Sampling.defaultProps = { + variant: 'outlined', + allowAuto: false, + allowInherit: false, + allowCustom: false, + label: Sampling, + customLabel: Custom sampling (Hz), + onChange: function () {}, +}; + +function Filter(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createGraph(newSettings), automatic); + }; + + const update = (what) => (event) => { + const value = event.target.value; + + const newSettings = { + ...settings, + [what]: value, + }; + + if (what === 'layout') { + let channels = 2; + + switch (value) { + case 'mono': + channels = 1; + break; + case 'stereo': + channels = 2; + break; + default: + break; + } + + newSettings.channels = channels; + } + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + + + + + + ); +} + +Filter.defaultProps = { + settings: {}, + onChange: function (settings, graph, automatic) {}, +}; + +const filter = 'aresample'; +const name = 'Resample'; +const type = 'audio'; +const hwaccel = false; + +function summarize(settings) { + return `${name} (${settings.layout}, ${settings.sampling}Hz)`; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + graph: createGraph(settings), + }; +} + +export { name, filter, type, hwaccel, summarize, defaults, createGraph, Filter as component }; diff --git a/src/misc/filters/audio/Volume.js b/src/misc/filters/audio/Volume.js new file mode 100644 index 0000000..5a476a4 --- /dev/null +++ b/src/misc/filters/audio/Volume.js @@ -0,0 +1,161 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; +import MenuItem from '@mui/material/MenuItem'; +import TextField from '@mui/material/TextField'; + +import Select from '../../Select'; + +// Volume Filter +// http://ffmpeg.org/ffmpeg-all.html#volume + +function init(initialState) { + const state = { + level: 'inherit', + db: 0, + ...initialState, + }; + + return state; +} + +function createGraph(settings) { + settings = init(settings); + + const mapping = []; + + switch (settings.level) { + case 'inherit': + break; + case 'custom': + mapping.push(`volume=volume=${settings.db}dB`); + break; + default: + mapping.push(`volume=volume=${parseInt(settings.level) / 100}`); + break; + } + + return mapping.join(','); +} + +function VolumeLevel(props) { + return ( + + ); +} + +VolumeLevel.defaultProps = { + value: '', + onChange: function (event) {}, +}; + +function VolumeDB(props) { + return ( + Decibels (dB)} + type="number" + value={props.value} + disabled={props.disabled} + onChange={props.onChange} + /> + ); +} + +VolumeDB.defaultProps = { + value: '', + disabled: false, + onChange: function (event) {}, +}; + +function Filter(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createGraph(newSettings), automatic); + }; + + const update = (what) => (event) => { + const newSettings = { + ...settings, + [what]: event.target.value, + }; + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + + + + + + ); +} + +Filter.defaultProps = { + settings: {}, + onChange: function (settings, graph, automatic) {}, +}; + +const filter = 'volume'; +const name = 'Volume'; +const type = 'audio'; +const hwaccel = false; + +function summarize(settings) { + let summary = `${name} (`; + + if (settings.level === 'custom') { + summary += `${settings.db}dB`; + } else { + summary += `${settings.level}%`; + } + + summary += ')'; + + return summary; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + graph: createGraph(settings), + }; +} + +export { name, filter, type, hwaccel, summarize, defaults, createGraph, Filter as component }; diff --git a/src/misc/filters/index.js b/src/misc/filters/index.js new file mode 100644 index 0000000..8ace2f7 --- /dev/null +++ b/src/misc/filters/index.js @@ -0,0 +1,59 @@ +// Audio Filter +import * as AResample from './audio/Resample'; +import * as Pan from './audio/Pan'; +import * as Volume from './audio/Volume'; +import * as Loudnorm from './audio/Loudnorm'; + +// Video Filter +import * as Transpose from './video/Transpose'; +import * as HFlip from './video/HFlip'; +import * as VFlip from './video/VFlip'; + +// Register filters type: audio/video +class Registry { + constructor(type) { + this.type = type; + this.services = new Map(); + } + + Register(service) { + if (service.type !== this.type) { + return; + } + + this.services.set(service.filter, service); + } + + Get(filter) { + const service = this.services.get(filter); + if (service) { + return service; + } + + return null; + } + + Filters() { + return Array.from(this.services.keys()); + } + + List() { + return Array.from(this.services.values()); + } +} + +// Audio Filters +const audioRegistry = new Registry('audio'); +audioRegistry.Register(AResample); +audioRegistry.Register(Pan); +audioRegistry.Register(Volume); +audioRegistry.Register(Loudnorm); + +// Video Filters +const videoRegistry = new Registry('video'); +videoRegistry.Register(Transpose); +videoRegistry.Register(HFlip); +videoRegistry.Register(VFlip); + +// Export registrys for ../SelectFilters.js +export { audioRegistry as Audio, videoRegistry as Video }; diff --git a/src/misc/filters/video/HFlip.js b/src/misc/filters/video/HFlip.js new file mode 100644 index 0000000..813fafb --- /dev/null +++ b/src/misc/filters/video/HFlip.js @@ -0,0 +1,93 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; + +import Checkbox from '../../Checkbox'; + +// HFlip Filter +// http://ffmpeg.org/ffmpeg-all.html#hflip + +function init(initialState) { + const state = { + enabled: false, + ...initialState, + }; + + return state; +} + +function createGraph(settings) { + settings = init(settings); + + const mapping = []; + + if (settings.enabled) { + mapping.push('hflip'); + } + + return mapping.join(','); +} + +function Filter(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createGraph(newSettings), automatic); + }; + + const update = (what) => (event) => { + const newSettings = { + ...settings, + }; + if (['enabled'].includes(what)) { + newSettings[what] = !settings.enabled; + } else { + newSettings[what] = event.target.value; + } + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + Horizontal Flip} checked={settings.enabled} onChange={update('enabled')} /> + + ); +} + +Filter.defaultProps = { + settings: {}, + onChange: function (settings, graph, automatic) {}, +}; + +const filter = 'hflip'; +const name = 'Horizonal Flip'; +const type = 'video'; +const hwaccel = false; + +function summarize(settings) { + return `${name}`; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + graph: createGraph(settings), + }; +} + +export { name, filter, type, hwaccel, summarize, defaults, createGraph, Filter as component }; diff --git a/src/misc/filters/video/Transpose.js b/src/misc/filters/video/Transpose.js new file mode 100644 index 0000000..17e5f75 --- /dev/null +++ b/src/misc/filters/video/Transpose.js @@ -0,0 +1,117 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; +import MenuItem from '@mui/material/MenuItem'; + +import Select from '../../Select'; + +// Transpose Filter +// http://ffmpeg.org/ffmpeg-all.html#transpose-1 + +function init(initialState) { + const state = { + value: 'none', + ...initialState, + }; + + return state; +} + +function createGraph(settings) { + settings = init(settings); + + const mapping = []; + + switch (settings.value) { + case '90': + mapping.push('transpose=dir=clock:passthrough=none'); + break; + case '180': + mapping.push('transpose=dir=clock:passthrough=none', 'transpose=dir=clock:passthrough=none'); + break; + case '270': + mapping.push('transpose=dir=cclock:passthrough=none'); + break; + default: + break; + } + + return mapping.join(','); +} + +// filter +function Rotate(props) { + return ( + + ); +} + +Rotate.defaultProps = { + value: '', + onChange: function (event) {}, +}; + +function Filter(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createGraph(newSettings), automatic); + }; + + const update = (what) => (event) => { + const newSettings = { + ...settings, + [what]: event.target.value, + }; + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + + + ); +} + +Filter.defaultProps = { + settings: {}, + onChange: function (settings, mapping) {}, +}; + +const filter = 'transpose'; +const name = 'Transpose'; +const type = 'video'; +const hwaccel = false; + +function summarize(settings) { + return `${name} (${settings.value}° clockwise)`; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + graph: createGraph(settings), + }; +} + +export { name, filter, type, hwaccel, summarize, defaults, createGraph, Filter as component }; diff --git a/src/misc/filters/video/VFlip.js b/src/misc/filters/video/VFlip.js new file mode 100644 index 0000000..96fa74b --- /dev/null +++ b/src/misc/filters/video/VFlip.js @@ -0,0 +1,93 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; + +import Checkbox from '../../Checkbox'; + +// VFlip Filter +// http://ffmpeg.org/ffmpeg-all.html#vflip + +function init(initialState) { + const state = { + enabled: false, + ...initialState, + }; + + return state; +} + +function createGraph(settings) { + settings = init(settings); + + const mapping = []; + + if (settings.enabled) { + mapping.push('vflip'); + } + + return mapping.join(','); +} + +function Filter(props) { + const settings = init(props.settings); + + const handleChange = (newSettings) => { + let automatic = false; + if (!newSettings) { + newSettings = settings; + automatic = true; + } + + props.onChange(newSettings, createGraph(newSettings), automatic); + }; + + const update = (what) => (event) => { + const newSettings = { + ...settings, + }; + if (['enabled'].includes(what)) { + newSettings[what] = !settings.enabled; + } else { + newSettings[what] = event.target.value; + } + + handleChange(newSettings); + }; + + React.useEffect(() => { + handleChange(null); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return ( + + Vertical Flip} checked={settings.enabled} onChange={update('enabled')} /> + + ); +} + +Filter.defaultProps = { + settings: {}, + onChange: function (settings, graph, automatic) {}, +}; + +const filter = 'vflip'; +const name = 'Vertical Flip'; +const type = 'video'; +const hwaccel = false; + +function summarize(settings) { + return `${name}`; +} + +function defaults() { + const settings = init({}); + + return { + settings: settings, + graph: createGraph(settings), + }; +} + +export { name, filter, type, hwaccel, summarize, defaults, createGraph, Filter as component }; diff --git a/src/theme/components/formHelperText.js b/src/theme/components/formHelperText.js new file mode 100644 index 0000000..5c78dac --- /dev/null +++ b/src/theme/components/formHelperText.js @@ -0,0 +1,11 @@ +/* eslint-disable import/no-anonymous-default-export */ +import base from '../base'; + +export default { + styleOverrides: { + root: { + color: base.palette.error.main, + marginLeft: 0, + }, + }, +}; diff --git a/src/theme/index.js b/src/theme/index.js index 68b9f21..75dcb6b 100644 --- a/src/theme/index.js +++ b/src/theme/index.js @@ -16,6 +16,7 @@ import dialog from './components/dialog'; import divider from './components/divider'; import fab from './components/fab'; import formControlLabel from './components/formControlLabel'; +import formHelperText from './components/formHelperText'; import formLabel from './components/formLabel'; import iconButton from './components/iconButton'; import inputLabel from './components/inputLabel'; @@ -61,6 +62,7 @@ const theme = createTheme({ MuiDivider: { ...divider }, MuiFab: { ...fab }, MuiFormControlLabel: { ...formControlLabel }, + MuiFormHelperText: { ...formHelperText }, MuiFormLabel: { ...formLabel }, MuiIconButton: { ...iconButton }, MuiInputLabel: { ...inputLabel }, diff --git a/src/utils/help.js b/src/utils/help.js index 3e8ac92..2df0402 100644 --- a/src/utils/help.js +++ b/src/utils/help.js @@ -122,9 +122,13 @@ const topics = { de: 'https://docs.datarhei.com/restreamer/v/de/wissensdatenbank/user-guides/restreamer-einstellungen/speicherplatz', }, 'settings-rtmp': { - en: 'https://docs.datarhei.com/restreamer/knowledge-base/manual/system-settings/rtmp ', + en: 'https://docs.datarhei.com/restreamer/knowledge-base/manual/system-settings/rtmp', de: 'https://docs.datarhei.com/restreamer/v/de/wissensdatenbank/user-guides/restreamer-einstellungen/rtmp', }, + 'settings-srt': { + en: 'https://docs.datarhei.com/restreamer/knowledge-base/manual/system-settings/srt', + de: 'https://docs.datarhei.com/restreamer/v/de/wissensdatenbank/user-guides/restreamer-einstellungen/srt', + }, 'settings-logging': { en: 'https://docs.datarhei.com/restreamer/knowledge-base/manual/system-settings/logging', de: 'https://docs.datarhei.com/restreamer/v/de/wissensdatenbank/user-guides/restreamer-einstellungen/protokollierung-and-fehlersuche', diff --git a/src/utils/metadata.js b/src/utils/metadata.js index 4a93366..ac49cc4 100644 --- a/src/utils/metadata.js +++ b/src/utils/metadata.js @@ -3,7 +3,7 @@ Ingest Metadata Layout: data = { - version: 1, + version: "1.2.0", meta: { name: 'Livestream 1', description: 'Live from earth. Powered by datarhei/restreamer.', @@ -93,15 +93,30 @@ data = { channels: '2', sampling: '44100' }, - mapping: [ - '-codec:a', 'aac', - '-b:a', '64k', - '-bsf:a', 'aac_adtstoasc', - '-shortest', - '-af', 'aresample=osr=44100:ocl=2' - ] + mapping: { + global: [], + local: [ + '-codec:a', 'aac', + '-b:a', '64k', + '-bsf:a', 'aac_adtstoasc', + '-shortest' + ] + } }, decoder: null, + filter: { + graph: 'aresample=osr=44100:ocl=stereo', + settings: { + aresample: { + graph: 'aresample=osr=44100:ocl=stereo', + settings: { + channels: 2, + layout: 'stereo', + sampling: 44100 + } + } + } + }, }, video: { source: 0, @@ -110,14 +125,15 @@ data = { coder: 'copy', codec: 'h264', settings: {}, - mapping: [ - '-codec:v', 'copy', - '-vsync 0', - '-copyts', - '-start_at_zero', - ] + mapping: { + global: [], + local: [ + '-codec:v', 'copy', + ] + } }, decoder: null, + filter: null, }, "or": {}, "video": { @@ -133,19 +149,21 @@ data = { profile: 'auto', tune: 'zerolatency', }, - mapping: [ - '-codec:v', 'libx264', - '-preset:v', 'ultrafast', - '-b:v', '4096k', - '-maxrate', '4096k', - '-bufsize', '4096k', - '-r', '25', - '-g', '50', - '-pix_fmt', 'yuv420p', - '-vsync', '1', - '-profile:v', 'high', - '-tune:v', 'zerolatency', - ] + mapping: { + global: [], + local: [ + '-codec:v', 'libx264', + '-preset:v', 'ultrafast', + '-b:v', '4096k', + '-maxrate', '4096k', + '-bufsize', '4096k', + '-r', '25', + '-g', '50', + '-pix_fmt', 'yuv420p', + '-profile:v', 'high', + '-tune:v', 'zerolatency', + ] + } }, decoder: { coder: 'h264_cuvid', @@ -201,7 +219,7 @@ data = { Egress Metadata Layout: data = { - version: 1, + version: "1.2.0", name: "foobar", control: { process: { @@ -222,15 +240,20 @@ data = { */ +import SemverGt from 'semver/functions/gt'; +import SemverCompare from 'semver/functions/compare'; + import * as Coders from '../misc/coders/Encoders'; +import * as Filters from '../misc/filters'; +import * as version from '../version'; const defaultMetadata = { - version: 1, + version: version.Version, playersite: {}, }; const defaultIngestMetadata = { - version: 1, + version: version.Version, sources: [], profiles: [{}], streams: [], @@ -239,6 +262,16 @@ const defaultIngestMetadata = { lhls: false, segmentDuration: 2, listSize: 6, + cleanup: true, + version: 3, + storage: 'memfs', + master_playlist: true, + }, + rtmp: { + enable: false, + }, + srt: { + enable: false, }, process: { autostart: true, @@ -264,7 +297,7 @@ const defaultIngestMetadata = { }; const defaultEgressMetadata = { - version: 1, + version: version.Version, name: '', control: { process: { @@ -273,6 +306,9 @@ const defaultEgressMetadata = { delay: 15, staleTimeout: 30, }, + source: { + source: 'hls+memfs', + }, }, outputs: [], settings: {}, @@ -295,6 +331,12 @@ const getDefaultEgressMetadata = () => { return JSON.parse(JSON.stringify(defaultEgressMetadata)); }; +const initMetadata = (initialMetadata) => { + return mergeMetadata(initialMetadata); +}; + +const transformers = {}; + const mergeMetadata = (metadata, base) => { if (!metadata) { metadata = {}; @@ -311,28 +353,57 @@ const mergeMetadata = (metadata, base) => { ...metadata, }; - if (metadata.version !== defaultMetadata.version) { - metadata = { - ...defaultMetadata, - }; - } - metadata.playersite = { ...base.playersite, ...metadata.playersite, }; - return metadata; -}; + metadata = transformMetadata(metadata, defaultMetadata.version, transformers); -const initMetadata = (initialMetadata) => { - return mergeMetadata(initialMetadata); + return metadata; }; const initIngestMetadata = (initialMetadata) => { return mergeIngestMetadata(initialMetadata); }; +const ingestTransformers = { + '1.2.0': (metadata) => { + for (let p = 0; p < metadata.profiles.length; p++) { + const profile = metadata.profiles[p]; + + if (profile.audio.encoder.coder === 'copy' || profile.audio.encoder.coder === 'none') { + continue; + } + + const settings = profile.audio.encoder.settings; + + profile.audio.filter = { + settings: { + aresample: { + settings: { + channels: settings.channels, + layout: settings.layout, + sampling: settings.sampling, + }, + }, + }, + }; + + delete profile.audio.encoder.settings.channels; + delete profile.audio.encoder.settings.layout; + delete profile.audio.encoder.settings.sampling; + + profile.audio.filter.settings.aresample.graph = Filters.Audio.Get('aresample').createGraph(profile.audio.filter.settings.aresample.settings); + profile.audio.filter.graph = profile.audio.filter.settings.aresample.graph; + } + + metadata.version = '1.2.0'; + + return metadata; + }, +}; + const mergeIngestMetadata = (metadata, base) => { if (!metadata) { metadata = {}; @@ -349,12 +420,6 @@ const mergeIngestMetadata = (metadata, base) => { ...metadata, }; - if (metadata.version !== defaultMetadata.version) { - metadata = { - ...defaultMetadata, - }; - } - metadata.meta = { ...base.meta, ...metadata.meta, @@ -414,6 +479,8 @@ const mergeIngestMetadata = (metadata, base) => { } } + metadata = transformMetadata(metadata, defaultMetadata.version, ingestTransformers); + return metadata; }; @@ -421,6 +488,8 @@ const initEgressMetadata = (initialMetadata) => { return mergeEgressMetadata(initialMetadata); }; +const egressTransformers = {}; + const mergeEgressMetadata = (metadata, base) => { if (!metadata) { metadata = {}; @@ -437,12 +506,6 @@ const mergeEgressMetadata = (metadata, base) => { ...metadata, }; - if (metadata.version !== defaultMetadata.version) { - metadata = { - ...defaultMetadata, - }; - } - metadata.control = { ...base.control, ...metadata.control, @@ -453,6 +516,11 @@ const mergeEgressMetadata = (metadata, base) => { ...metadata.control.process, }; + metadata.control.source = { + ...base.control.source, + ...metadata.control.source, + }; + if (!Array.isArray(metadata.outputs)) { metadata.outputs = []; } else { @@ -477,17 +545,15 @@ const mergeEgressMetadata = (metadata, base) => { } } + metadata = transformMetadata(metadata, defaultMetadata.version, egressTransformers); + return metadata; }; const validateProfile = (sources, profile) => { let validVideo = false; - if (!('video' in profile)) { - profile.video = initProfile({}); - } else { - profile.video = initProfile(profile.video); - } + profile = initProfile(profile); if (profile.video.source !== -1 && profile.video.source < sources.length) { const source = sources[profile.video.source]; @@ -505,12 +571,6 @@ const validateProfile = (sources, profile) => { let validAudio = false; - if (!('audio' in profile)) { - profile.audio = initProfile({}); - } else { - profile.audio = initProfile(profile.audio); - } - if (profile.audio.source !== -1 && profile.audio.source < sources.length) { const source = sources[profile.audio.source]; @@ -547,6 +607,7 @@ const validateProfile = (sources, profile) => { const createInputsOutputs = (sources, profiles) => { const source2inputMap = new Map(); + let global = []; const inputs = []; const outputs = []; @@ -559,11 +620,13 @@ const createInputsOutputs = (sources, profiles) => { let index = -1; + global = [...global, ...profile.video.decoder.mapping.global]; + const source = sources[profile.video.source]; const stream = source.streams[profile.video.stream]; const input = source.inputs[stream.index]; - input.options = [...profile.video.decoder.mapping, ...input.options]; + input.options = [...profile.video.decoder.mapping.local, ...input.options]; const id = profile.video.source + ':' + stream.index; @@ -576,14 +639,30 @@ const createInputsOutputs = (sources, profiles) => { index = source2inputMap.get(id); - const options = ['-map', index + ':' + stream.stream, ...profile.video.encoder.mapping]; + global = [...global, ...profile.video.encoder.mapping.global]; + + const local = profile.video.encoder.mapping.local.slice(); + + if (profile.video.encoder.coder !== 'copy' && profile.video.filter.graph.length !== 0) { + // Check if there's already a video filter in the local mapping + let filterIndex = local.indexOf('-filter:v'); + if (filterIndex !== -1) { + local[filterIndex + 1] += ',' + profile.video.filter.graph; + } else { + local.unshift('-filter:v', profile.video.filter.graph); + } + } + + const options = ['-map', index + ':' + stream.stream, ...local]; if (profile.audio.encoder.coder !== 'none' && profile.audio.source !== -1 && profile.audio.stream !== -1) { + global = [...global, ...profile.audio.decoder.mapping.global]; + const source = sources[profile.audio.source]; const stream = source.streams[profile.audio.stream]; const input = source.inputs[stream.index]; - input.options = [...profile.audio.decoder.mapping, ...input.options]; + input.options = [...profile.audio.decoder.mapping.local, ...input.options]; const id = profile.audio.source + ':' + stream.index; @@ -594,7 +673,21 @@ const createInputsOutputs = (sources, profiles) => { index = source2inputMap.get(id); - options.push('-map', index + ':' + stream.stream, ...profile.audio.encoder.mapping); + global = [...global, ...profile.audio.encoder.mapping.global]; + + const local = profile.audio.encoder.mapping.local.slice(); + + if (profile.audio.encoder.coder !== 'copy' && profile.audio.filter.graph.length !== 0) { + // Check if there's already a audio filter in the local mapping + let filterIndex = local.indexOf('-filter:a'); + if (filterIndex !== -1) { + local[filterIndex + 1] += ',' + profile.audio.filter.graph; + } else { + local.unshift('-filter:a', profile.audio.filter.graph); + } + } + + options.push('-map', index + ':' + stream.stream, ...local); } else { options.push('-an'); } @@ -605,7 +698,16 @@ const createInputsOutputs = (sources, profiles) => { }); } - return [inputs, outputs]; + // https://stackoverflow.com/questions/9229645/remove-duplicate-values-from-js-array + const uniqBy = (a, key) => { + return [...new Map(a.map((x) => [key(x), x])).values()]; + }; + + // global is an array of arrays. Here we remove duplicates and flatten it. + global = uniqBy(global, (x) => JSON.stringify(x.sort())); + global = global.reduce((acc, val) => acc.concat(val), []); + + return [global, inputs, outputs]; }; const createOutputStreams = (sources, profiles) => { @@ -711,45 +813,112 @@ const initProfile = (initialProfile) => { stream: -1, encoder: {}, decoder: {}, + filter: {}, ...profile.video, }; profile.video.encoder = { coder: 'none', settings: {}, - mapping: [], + mapping: {}, ...profile.video.encoder, }; + // mapping used to be an array for input/output specific options + if (Array.isArray(profile.video.encoder.mapping)) { + profile.video.encoder.mapping = { + global: [], + local: profile.video.encoder.mapping, + }; + } else { + profile.video.encoder.mapping = { + global: [], + local: [], + ...profile.video.encoder.mapping, + }; + } + profile.video.decoder = { coder: 'default', settings: {}, - mapping: [], + mapping: {}, ...profile.video.decoder, }; + if (Array.isArray(profile.video.decoder.mapping)) { + profile.video.decoder.mapping = { + global: [], + local: profile.video.decoder.mapping, + }; + } else { + profile.video.decoder.mapping = { + global: [], + local: [], + ...profile.video.decoder.mapping, + }; + } + + profile.video.filter = { + graph: '', + settings: {}, + ...profile.video.filter, + }; + profile.audio = { source: -1, stream: -1, encoder: {}, decoder: {}, + filter: {}, ...profile.audio, }; profile.audio.encoder = { coder: 'none', settings: {}, - mapping: [], + mapping: {}, ...profile.audio.encoder, }; + if (Array.isArray(profile.audio.encoder.mapping)) { + profile.audio.encoder.mapping = { + global: [], + local: profile.audio.encoder.mapping, + }; + } else { + profile.audio.encoder.mapping = { + global: [], + local: [], + ...profile.audio.encoder.mapping, + }; + } + profile.audio.decoder = { coder: 'default', settings: {}, - mapping: [], + mapping: {}, ...profile.audio.decoder, }; + if (Array.isArray(profile.audio.decoder.mapping)) { + profile.audio.decoder.mapping = { + global: [], + local: profile.audio.decoder.mapping, + }; + } else { + profile.audio.decoder.mapping = { + global: [], + local: [], + ...profile.audio.decoder.mapping, + }; + } + + profile.audio.filter = { + graph: '', + settings: {}, + ...profile.audio.filter, + }; + profile.custom = { selected: profile.audio.source === 1, stream: profile.audio.source === 1 ? -2 : profile.audio.stream, @@ -1025,6 +1194,39 @@ const cleanupProfile = (profile) => { }; }; +const transformMetadata = (metadata, targetVersion, transformers) => { + if (metadata.version === 1) { + metadata.version = '1.0.0'; + } + + if (targetVersion === 1) { + targetVersion = '1.0.0'; + } + + if (metadata.version === targetVersion) { + return metadata; + } + + // Create a list of all transformers that are greater than the current version + // and sort them in ascending order. + const tlist = []; + + for (let v in transformers) { + if (SemverGt(v, metadata.version)) { + tlist.push(v); + } + } + + tlist.sort(SemverCompare); + + // Apply all found transformers + for (let t of tlist) { + metadata = transformers[t](metadata); + } + + return metadata; +}; + export { getDefaultMetadata, getDefaultIngestMetadata, diff --git a/src/utils/restreamer.js b/src/utils/restreamer.js index fe2b8b8..43fe7bf 100644 --- a/src/utils/restreamer.js +++ b/src/utils/restreamer.js @@ -20,6 +20,11 @@ class Restreamer { address = window.location.protocol + '//' + window.location.host; } + // Remove the / at the end + if (address.slice(-1) === '/') { + address = address.slice(0, -1); + } + this.address = address; this.api = new API(this.address); @@ -353,7 +358,9 @@ class Restreamer { } compatibility.core.have = this.Version().number; - compatibility.ffmpeg.have = this.skills.ffmpeg.version; + if (this.skills?.ffmpeg?.version) { + compatibility.ffmpeg.have = this.skills.ffmpeg.version; + } compatibility.core.compatible = SemverSatisfies(compatibility.core.have, compatibility.core.want); compatibility.ffmpeg.compatible = SemverSatisfies(compatibility.ffmpeg.have, compatibility.ffmpeg.want); @@ -366,8 +373,13 @@ class Restreamer { } async _init() { - await this._initConfig(); + const compatibility = this.Compatibility(); + if (!compatibility.core.compatible) { + return; + } + await this._initSkills(); + await this._initConfig(); await this._discoverChannels(); } @@ -490,6 +502,7 @@ class Restreamer { input: [], output: [], }, + filter: [], sources: { network: [], virtualaudio: [], @@ -511,6 +524,7 @@ class Restreamer { formats: {}, protocols: {}, devices: {}, + filter: [], ...val, }; @@ -553,6 +567,10 @@ class Restreamer { skills.decoders.video.push(hwaccel.id); } + for (let filter of val.filter) { + skills.filter.push(filter.id); + } + val.formats = { demuxers: [], muxers: [], @@ -677,14 +695,19 @@ class Restreamer { local: 'localhost', app: '', token: '', - name: '', + }, + srt: { + enabled: false, + host: '', + local: 'localhost', + token: '', + passphrase: '', }, hls: { secure: false, host: '', local: 'localhost', credentials: '', - name: '', }, }, }, @@ -754,6 +777,8 @@ class Restreamer { hostname = val.config.host.name[0]; } + config.hostname = hostname; + // If we're connecting to the API with TLS or if the API is TLS-enabled // we upgrade to TLS. let protocol = 'http:'; @@ -769,8 +794,6 @@ class Restreamer { port = config.http.secure ? '443' : '80'; } - config.hostname = hostname; - // Set the HTTP host and only add the port if it is not the default one. config.http.host = config.hostname; if ((config.http.secure && port !== '443') || (!config.http.secure && port !== '80')) { @@ -817,13 +840,33 @@ class Restreamer { // This is used for FFmpeg to access the RTMP stream. If the RTMP server is bound to a // specific address, we'll use this one, localhost otherwise. - let [rtmp_host, rtmp_port] = splitHostPort(val.config.rtmp.address); + const [rtmp_host, rtmp_port] = splitHostPort(val.config.rtmp.address); config.source.network.rtmp.local = rtmp_host.length !== 0 ? rtmp_host : 'localhost'; if (rtmp_port !== '1935') { config.source.network.rtmp.host += ':' + rtmp_port; config.source.network.rtmp.local += ':' + rtmp_port; } + if (config.source.network.rtmp.secure === true) { + const [, rtmp_port] = splitHostPort(val.config.rtmp.address_tls); + if (rtmp_port !== '1935') { + config.source.network.rtmp.host += ':' + rtmp_port; + } + } + + // SRT + + config.source.network.srt.enabled = val.config.srt.enable; + config.source.network.srt.passphrase = val.config.srt.passphrase; + config.source.network.srt.token = val.config.srt.token; + + config.source.network.srt.host = config.hostname; + + let [srt_host, srt_port] = splitHostPort(val.config.srt.address); + config.source.network.srt.local = srt_host.length !== 0 ? srt_host : 'localhost'; + config.source.network.srt.host += ':' + srt_port; + config.source.network.srt.local += ':' + srt_port; + // Memfs config.memfs.auth.enable = val.config.storage.memory.auth.enable; @@ -844,6 +887,7 @@ class Restreamer { config.source.network.rtmp.name = this.channel.channelid; config.source.network.hls.name = this.channel.channelid; + config.source.network.srt.name = this.channel.channelid; return config; } @@ -858,6 +902,10 @@ class Restreamer { } ConfigOverrides(name) { + if (!this.config) { + return false; + } + return this.config.overrides.includes(name); } @@ -888,12 +936,97 @@ class Restreamer { return await this._getResources(); } - // Get all HTTP addresses - GetHTTPAddresses() { + // Get the public HTTP address + GetPublicHTTPAddress() { const config = this.ConfigActive(); const address = (config.http.secure === true ? 'https://' : 'http://') + config.http.host; - return [address]; + return address; + } + + // Get all RTMP/SRT/SNAPSHOT+MEMFS/HLS+MEMFS addresses + GetPublicAddress(what, channelid) { + const config = this.ConfigActive(); + const host = config.hostname; + + let address = ''; + + function getPort(servicePort) { + let port = servicePort.split(/:([0-9]+)$/)[1]; + if (port && !port.includes(':')) { + port = `:${port}`; + } + if (port) { + return port; + } else { + return ''; + } + } + + if (what === 'rtmp') { + // rtmp/s + const cfg = config.source.network.rtmp; + const port = getPort(cfg.host); + + address = 'rtmp'; + if (cfg.secure) { + address += 's'; + } + + address += + `://${host}${port}` + + (cfg.app.length !== 0 ? cfg.app : '') + + '/' + + channelid + + '.stream' + + (cfg.token.length !== 0 ? `?token=${cfg.token}` : ''); + } else if (what === 'srt') { + // srt + const cfg = config.source.network.srt; + const port = getPort(cfg.host); + + address = + `srt://${host}${port}/?mode=caller&transtype=live&streamid=#!:m=request,r=${channelid}` + + (cfg.token.length !== 0 ? `,token=${cfg.token}` : '') + + (cfg.passphrase.length !== 0 ? `&passphrase=${cfg.passphrase}` : ''); + } else if (what === 'snapshot+memfs') { + // snapshot+memfs + const port = getPort(config.source.network.hls.host); + + address = (config.http.secure === true ? 'https://' : 'http://') + `${host}${port}/` + this.GetChannelPosterPath(channelid, 'memfs'); + } else if (what === 'snapshot+diskfs') { + // snapshot+diskfs + const port = getPort(config.source.network.hls.host); + + address = (config.http.secure === true ? 'https://' : 'http://') + `${host}${port}/` + this.GetChannelPosterPath(channelid, 'diskfs'); + } else if (what === 'hls+memfs') { + // hls+memfs + const port = getPort(config.source.network.hls.host); + + address = (config.http.secure === true ? 'https://' : 'http://') + `${host}${port}/` + this.GetChannelManifestPath(channelid, 'memfs'); + } else if (what === 'hls+diskfs') { + // hls+diskfs + const port = getPort(config.source.network.hls.host); + + address = (config.http.secure === true ? 'https://' : 'http://') + `${host}${port}/` + this.GetChannelManifestPath(channelid, 'diskfs'); + } else if (what === 'player') { + // player + address = (config.http.secure === true ? 'https://' : 'http://') + `${config.http.host}/` + this.GetChannelPlayerPath(channelid); + } + + return address; + } + + // Get the iframe codes for the player + GetPublicIframeCode(channelid) { + const channel = this.GetChannel(channelid); + if (channel === null) { + return ''; + } + + const address = this.GetPublicHTTPAddress(); + + return ``; } // Channels @@ -1026,7 +1159,7 @@ class Restreamer { async DeleteChannel(channelid) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return false; } @@ -1074,7 +1207,7 @@ class Restreamer { channelid: channel.channelid, name: channel.name, available: channel.available, - thumbnail: this.Address() + '/' + this.GetChannelPosterUrl(channel.channelid), + thumbnail: this.GetChannelAddress('snapshot+memfs', channel.channelid), egresses: Array.from(channel.egresses.keys()), }); } @@ -1093,14 +1226,14 @@ class Restreamer { channelid: channel.channelid, name: channel.name, available: channel.available, - thumbnail: this.Address() + '/' + this.GetChannelPosterUrl(channel.channelid), + thumbnail: this.GetChannelAddress('snapshot+memfs', channel.channelid), egresses: Array.from(channel.egresses.keys()), }; } SetChannel(channelid, channel) { let c = this.channels.get(channelid); - if (c === null) { + if (!c) { return false; } @@ -1115,13 +1248,13 @@ class Restreamer { GetChannelEgress(channelid, id) { let channel = this.channels.get(channelid); - if (channel === null) { - return false; + if (!channel) { + return null; } const egress = channel.egresses.get(id); - if (egress === null) { - return false; + if (!egress) { + return null; } return { @@ -1135,7 +1268,7 @@ class Restreamer { SetChannelEgress(channelid, id, data) { let channel = this.channels.get(channelid); - if (channel === null) { + if (!channel) { return false; } @@ -1144,7 +1277,7 @@ class Restreamer { DeleteChannelEgress(channelid, id) { let channel = this.channels.get(channelid); - if (channel === null) { + if (!channel) { return false; } @@ -1159,71 +1292,72 @@ class Restreamer { return this.channel.channelid; } - // Get the URL for the stream - GetChannelManifestUrl(channelid) { - return `memfs/${channelid}.m3u8`; + // Get the path for the HLS manifest + GetChannelManifestPath(channelid, storage) { + if (!storage) { + storage = 'memfs'; + } + + let url = `${channelid}.m3u8`; + if (storage === 'memfs') { + url = 'memfs/' + url; + } + + return url; } - // Get the URL for the poster image - GetChannelPosterUrl(channelid) { + // Get the path for the poster image + GetChannelPosterPath(channelid, storage) { return `memfs/${channelid}.jpg`; } + // Get the path for the player + GetChannelPlayerPath(channelid) { + return `${channelid}.html`; + } + + GetChannelAddress(what, channelid) { + const address = this.Address(); + + if (what === 'hls+memfs') { + return `${address}/${this.GetChannelManifestPath(channelid, 'memfs')}`; + } else if (what === 'hls+diskfs') { + return `${address}/${this.GetChannelManifestPath(channelid, 'diskfs')}`; + } else if (what === 'snapshot+memfs') { + return `${address}/${this.GetChannelPosterPath(channelid, 'memfs')}`; + } else if (what === 'snapshot+diskfs') { + return `${address}/${this.GetChannelPosterPath(channelid, 'diskfs')}`; + } else if (what === 'player') { + return `${address}/${this.GetChannelPlayerPath(channelid)}`; + } + } + // Sessions - async CurrentSessions() { + async CurrentSessions(protocols) { const sessions = { sessions: 0, bitrate_kbit: 0, }; - const [val, err] = await this._call(this.api.ActiveSessions, ['ffmpeg', 'hls', 'rtmp']); + const [val, err] = await this._call(this.api.ActiveSessions, protocols); if (err !== null) { return sessions; } - // HLS sessions - - if (!val.hls) { - val.hls = []; - } - - for (let i = 0; i < val.hls.length; i++) { - if (val.hls[i].reference !== this.channel.channelid) { - continue; - } - - sessions.sessions++; - sessions.bitrate_kbit += val.hls[i].bandwidth_tx_kbit; - } - - // ffmpeg sessions - - if (!val.ffmpeg) { - val.ffmpeg = []; - } - - for (let i = 0; i < val.ffmpeg.length; i++) { - if (val.ffmpeg[i].reference !== this.channel.channelid) { + for (let p of protocols) { + if (!(p in val)) { continue; } - sessions.bitrate_kbit += val.ffmpeg[i].bandwidth_tx_kbit; - } - - // RTMP sessions - - if (!val.rtmp) { - val.rtmp = []; - } + for (let s of val[p]) { + if (!s.reference.startsWith(this.channel.channelid)) { + continue; + } - for (let i = 0; i < val.rtmp.length; i++) { - if (val.rtmp[i].reference !== this.channel.channelid) { - continue; + sessions.sessions++; + sessions.bitrate_kbit += s.bandwidth_tx_kbit; } - - sessions.sessions++; - sessions.bitrate_kbit += val.rtmp[i].bandwidth_tx_kbit; } return sessions; @@ -1313,59 +1447,6 @@ class Restreamer { return await this.GetDebug(channel.id); } - GetIngestAddresses(channelid) { - const channel = this.GetChannel(channelid); - if (channel === null) { - return []; - } - - const addresses = this.GetHTTPAddresses(); - - return addresses.map((address) => { - return `${address}/${channel.channelid}.html`; - }); - } - - // Get the iframe codes for the player - GetIngestIframeCodes(channelid) { - const channel = this.GetChannel(channelid); - if (channel === null) { - return []; - } - - const addresses = this.GetHTTPAddresses(); - - const codes = []; - - for (let address of addresses) { - codes.push( - `` - ); - } - - return codes; - } - - // Get the URL for the HLS manifest - GetIngestManifestUrl(channelid) { - return this.GetChannelManifestUrl(channelid); - } - - // Get the URL for poster image - GetIngestPosterUrl(channelid) { - return this.GetChannelPosterUrl(channelid); - } - - // Get the URL for poster image - GetIngestPosterUrlAddresses(channelid) { - const poster = this.GetChannelPosterUrl(channelid); - const addresses = this.GetHTTPAddresses(); - - return addresses.map((address) => { - return `${address}/${poster}`; - }); - } - // Start the ingest process async StartIngest(channelid) { const channel = this.GetChannel(channelid); @@ -1427,9 +1508,9 @@ class Restreamer { } // Upsert the ingest process - async UpsertIngest(channelid, inputs, outputs, control) { + async UpsertIngest(channelid, global, inputs, outputs, control) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return [null, { message: 'Unknown channel ID' }]; } @@ -1439,7 +1520,7 @@ class Restreamer { reference: channel.channelid, input: [], output: [], - options: ['-err_detect', 'ignore_err'], + options: ['-err_detect', 'ignore_err', ...global], autostart: control.process.autostart, reconnect: control.process.reconnect, reconnect_delay_seconds: parseInt(control.process.delay), @@ -1456,92 +1537,218 @@ class Restreamer { }); } + // Set hls storage endpoint + const hlsStorage = control.hls.storage; + + // Set hls variant suffix (Master/Variant playlist) + let bitrate_suffix = ''; + if (control.hls.master_playlist) { + bitrate_suffix = '_var0'; + } + const output = { id: 'output_0', - address: `{memfs}/${channel.channelid}.m3u8`, + address: `{${hlsStorage}}/${channel.channelid}${bitrate_suffix}.m3u8`, options: ['-dn', '-sn', ...outputs[0].options.map((o) => '' + o)], cleanup: [ { - pattern: `memfs:/${channel.channelid}_*.ts`, - max_files: parseInt(control.hls.listSize) + 2, - max_file_age_seconds: control.hls.cleanup ? parseInt(control.hls.segmentDuration) * (parseInt(control.hls.listSize) + 2) : 0, + pattern: `${hlsStorage}:/${channel.channelid}_*${bitrate_suffix}.` + (control.hls.version >= 7 ? 'mp4' : 'ts'), + max_files: parseInt(control.hls.listSize) + 6, + max_file_age_seconds: control.hls.cleanup ? parseInt(control.hls.segmentDuration) * (parseInt(control.hls.listSize) + 6) : 0, purge_on_delete: true, }, { - pattern: `memfs:/${channel.channelid}.m3u8`, - max_file_age_seconds: control.hls.cleanup ? parseInt(control.hls.segmentDuration) * (parseInt(control.hls.listSize) + 2) : 0, + pattern: `${hlsStorage}:/${channel.channelid}${bitrate_suffix}.m3u8`, + max_file_age_seconds: control.hls.cleanup ? parseInt(control.hls.segmentDuration) * (parseInt(control.hls.listSize) + 6) : 0, purge_on_delete: true, }, ], }; - const metadata = this.GetHTTPAddresses()[0] + '/' + channel.channelid + '/oembed.json'; + // Add master playlist cleanup + if (control.hls.master_playlist) { + output.cleanup.push({ + pattern: `${hlsStorage}:/${channel.channelid}.m3u8`, + max_file_age_seconds: control.hls.cleanup ? parseInt(control.hls.segmentDuration) * (parseInt(control.hls.listSize) + 6) : 0, + purge_on_delete: true, + }); + } + // Injects a metadata link as title + const metadata = `${this.GetPublicHTTPAddress()}/${channel.channelid}/oembed.json`; const metadata_options = ['-metadata', `title=${metadata}`, '-metadata', 'service_provider=datarhei-Restreamer']; - output.options.push(...metadata_options); - if (control.hls.lhls === false) { - // ordinary HLS - output.options.push( - '-f', - 'hls', - '-start_number', - '0', - '-hls_time', - '' + parseInt(control.hls.segmentDuration), - '-hls_list_size', - '' + parseInt(control.hls.listSize), - '-hls_flags', - 'append_list+delete_segments', - '-hls_segment_filename', - `{memfs}/${channel.channelid}_%04d.ts`, - '-y', - '-method', - 'PUT' - ); + // Fetch core config + const core_config = this.ConfigActive(); + + // Fetch rtmp settings + const rtmp_config = core_config.source.network.rtmp; + let rtmp_enabled = false; + if (control.rtmp && control.rtmp.enable && rtmp_config.enabled) { + rtmp_enabled = true; + } + + // Fetch srt settings + const srt_config = core_config.source.network.srt; + let srt_enabled = false; + if (control.srt.enable && srt_config.enabled) { + srt_enabled = true; + } + + // 'tee_muxer' is required for the delivery of one output to multiple endpoints without processing the input for each output + // http://ffmpeg.org/ffmpeg-all.html#tee-1 + let tee_muxer = false; + if (rtmp_enabled || srt_enabled) { + tee_muxer = true; + } + + // Manifest versions + // https://developer.apple.com/documentation/http_live_streaming/about_the_ext-x-version_tag + // https://ffmpeg.org/ffmpeg-all.html#Options-53 + + // fix Malformed AAC bitstream detected for hls version 7 + let hls_aac_adtstoasc = false; + + // Returns the raw l/hls parameters for an EXT-X-VERSION + const getHLSParams = (lhls, version) => { + if (lhls) { + // lhls + return [ + ['f', 'dash'], + ['strict', 'experimental'], + ['hls_playlist', '1'], + ['init_seg_name', `init-${channel.channelid}.$ext$`], + ['media_seg_name', `chunk-${channel.channelid}-$Number%05d$.$ext$`], + ['master_m3u8_publish_rate', '1'], + ['adaptation_sets', 'id=0,streams=v id=1,streams=a'], + ['lhls', '1'], + ['streaming', '1'], + ['seg_duration', '' + parseInt(control.hls.segmentDuration)], + ['frag_duration', '0.5'], + ['use_template', '1'], + ['remove_at_exit', '0'], + ['window_size', '' + parseInt(control.hls.listSize)], + ['http_persistent', '0'], + ['method', 'PUT'], + ]; + } else { + // hls + switch (version) { + case 6: + return [ + ['f', 'hls'], + ['start_number', '0'], + ['hls_time', '' + parseInt(control.hls.segmentDuration)], + ['hls_list_size', '' + parseInt(control.hls.listSize)], + ['hls_flags', 'append_list+delete_segments+program_date_time+independent_segments'], + ['hls_delete_threshold', '4'], + ['hls_segment_filename', `{${hlsStorage}` + (tee_muxer ? '^:' : '') + `}/${channel.channelid}_%04d${bitrate_suffix}.ts`], + ['method', 'PUT'], + ]; + case 7: + // fix Malformed AAC bitstream detected for hls version 7 + if (output.options.includes('-codec:a') && output.options.includes('copy')) { + if (!tee_muxer) { + output.options.push('-bsf:a', 'aac_adtstoasc'); + } + hls_aac_adtstoasc = true; + } + // mp4 manifest cleanup + output.cleanup.push({ + pattern: `${hlsStorage}:/${channel.channelid}.mp4`, + max_file_age_seconds: control.hls.cleanup ? parseInt(control.hls.segmentDuration) * (parseInt(control.hls.listSize) + 6) : 0, + purge_on_delete: true, + }); + return [ + ['f', 'hls'], + ['start_number', '0'], + ['hls_time', '' + parseInt(control.hls.segmentDuration)], + ['hls_list_size', '' + parseInt(control.hls.listSize)], + ['hls_flags', 'append_list+delete_segments+program_date_time+independent_segments'], + ['hls_delete_threshold', '4'], + ['hls_segment_type', 'fmp4'], + ['hls_fmp4_init_filename', `${channel.channelid}.mp4`], + ['hls_fmp4_init_resend', '1'], + ['hls_segment_filename', `{${hlsStorage}` + (tee_muxer ? '^:' : '') + `}/${channel.channelid}_%04d${bitrate_suffix}.mp4`], + ['method', 'PUT'], + ]; + // case 3 + default: + return [ + ['f', 'hls'], + ['start_number', '0'], + ['hls_time', '' + parseInt(control.hls.segmentDuration)], + ['hls_list_size', '' + parseInt(control.hls.listSize)], + ['hls_flags', 'append_list+delete_segments+program_date_time'], + ['hls_delete_threshold', '4'], + ['hls_segment_filename', `{${hlsStorage}` + (tee_muxer ? '^:' : '') + `}/${channel.channelid}_%04d${bitrate_suffix}.ts`], + ['method', 'PUT'], + ]; + } + } + }; + const hls_params_raw = getHLSParams(control.hls.lhls, control.hls.version); + + // Push master playlist params + if (control.hls.master_playlist) { + hls_params_raw.push(['master_pl_name', `${channel.channelid}.m3u8`], ['master_pl_publish_rate', `${control.hls.segmentDuration}`]); + } + + // Overwrite output files + proc.options.push('-y'); + + // Returns the l/hls parameters with or without tee_muxer + if (tee_muxer) { + // f=hls:start_number=0... + const hls_params = hls_params_raw + .filter((o) => { + // unsupported in tee_muxer + return !(o[0] === 'segment_format_options' || o[0] === 'max_muxing_queue_size'); + }) + .map((o) => o[0] + '=' + o[1]) + .join(':'); + + output.options.push('-flags', '+global_header', '-tag:v', '7', '-tag:a', '10', '-f', 'tee'); + // ['f=hls:start_number=0...]address.m3u8 + // use tee_muxer formatting + output.address = + `[${hls_aac_adtstoasc ? 'bsfs/a=aac_adtstoasc:' : ''}${hls_params}]{${hlsStorage}}/${channel.channelid}${bitrate_suffix}.m3u8` + + (rtmp_enabled ? `|[f=flv]{rtmp,name=${channel.channelid}.stream}` : '') + + (srt_enabled ? `|[f=mpegts]{srt,name=${channel.channelid},mode=publish}` : ''); } else { - // Low Latency HLS - output.address = `{memfs}/${channel.channelid}.mpd`; - output.options.push( - '-f', - 'dash', - '-strict', - 'experimental', - '-hls_playlist', - '1', - '-init_seg_name', - `init-${channel.channelid}.$ext$`, - '-media_seg_name', - `chunk-${channel.channelid}-$Number%05d$.$ext$`, - '-master_m3u8_publish_rate', - '1', - '-adaptation_sets', - 'id=0,streams=v id=1,streams=a', - '-lhls', - '1', - '-streaming', - '1', - '-seg_duration', - '' + parseInt(control.hls.segmentDuration), - '-frag_duration', - '0.5', - '-use_template', - '1', - '-remove_at_exit', - '0', - '-window_size', - '' + parseInt(control.hls.listSize), - '-http_persistent', - '0', - '-y', - '-method', - 'PUT' - ); + // ['-f', 'hls', '-start_number', '0', ...] + // adding the '-' in front of the first option, then flatten everything + const hls_params = hls_params_raw.map((o) => ['-' + o[0], o[1]]).reduce((acc, val) => acc.concat(val), []); + + output.options.push(...hls_params); } proc.output.push(output); + const [val, err] = await this._upsertProcess(channel.id, proc); + if (err !== null) { + return [val, err]; + } + + this.SetChannel(channelid, { + ...channel, + available: true, + }); + + return [val, null]; + } + + // Upsert the ingest snapshot process + async UpsertIngestSnapshot(channelid, control) { + const channel = this.GetChannel(channelid); + if (channel === null) { + return [null, { message: 'Unknown channel ID' }]; + } + + // Set hls storage endpoint + const hlsStorage = control.hls.storage; + const snapshot = { type: 'ffmpeg', id: channel.id + '_snapshot', @@ -1549,7 +1756,7 @@ class Restreamer { input: [ { id: 'input_0', - address: `#${channel.id}:output=output_0`, + address: `{${hlsStorage}}/${channel.channelid}.m3u8`, options: [], }, ], @@ -1573,21 +1780,11 @@ class Restreamer { stale_timeout_seconds: 30, }; - let [val, err] = await this._upsertProcess(channel.id, proc); - if (err !== null) { - return [val, err]; - } - - [val, err] = await this._upsertProcess(channel.id + '_snapshot', snapshot); + const [val, err] = await this._upsertProcess(channel.id + '_snapshot', snapshot); if (err !== null) { return [val, err]; } - this.SetChannel(channelid, { - ...channel, - available: true, - }); - return [val, null]; } @@ -1704,10 +1901,16 @@ class Restreamer { // Set defaults for the settings of the selfhosted player InitPlayerSettings(initSettings) { + if (!initSettings) { + initSettings = {}; + } + const settings = { autoplay: false, mute: false, statistics: false, + chromecast: false, + airplay: false, color: {}, ga: {}, logo: {}, @@ -1751,18 +1954,22 @@ class Restreamer { return false; } + metadata.player = this.InitPlayerSettings(metadata.player); + const templateData = { channelid: channelid, name: metadata.meta.name, description: metadata.meta.description, author_name: metadata.meta.author.name, - author_url: this.GetIngestAddresses(channelid)[0], + author_url: this.GetPublicAddress('player', channelid), license: metadata.license, - iframecode: this.GetIngestIframeCodes(channelid)[0], - poster: this.GetIngestPosterUrl(channelid), - poster_url: this.GetIngestPosterUrlAddresses(channelid)[0], + iframecode: this.GetPublicIframeCode(channelid), + poster: this.GetChannelPosterPath(channelid, metadata.control.hls.storage), + poster_url: this.GetPublicAddress('snapshot+memfs', channelid), width: 640, height: 360, + chromecast: metadata.player.chromecast, + airplay: metadata.player.airplay, }; // upload player.html @@ -1796,16 +2003,12 @@ class Restreamer { } async UpdatePlayerConfig(channelid, metadata) { - if (!('player' in metadata)) { - metadata.player = {}; - } - metadata.player = this.InitPlayerSettings(metadata.player); const playerConfig = { ...metadata.player, - source: this.GetIngestManifestUrl(channelid), - poster: this.GetIngestPosterUrl(channelid), + source: this.GetChannelManifestPath(channelid, metadata.control.hls.storage), + poster: this.GetChannelPosterPath(channelid, metadata.control.hls.storage), license: { license: metadata.license, title: metadata.meta.name, @@ -1843,11 +2046,13 @@ class Restreamer { const settings = { player: 'videojs', - playersite: true, + playersite: false, channelid: 'current', title: 'restreamer', share: true, support: true, + chromecast: false, + airplay: false, template: '!default', templatename: '', textcolor_title: 'rgba(255,255,255,1)', @@ -1929,6 +2134,8 @@ class Restreamer { title: settings.title, share: settings.share, support: settings.support, + chromecast: settings.chromecast, + airplay: settings.airplay, url: this.GetPlayersiteUrl(), textcolor_title: settings.textcolor_title, textcolor_default: settings.textcolor_default, @@ -1955,7 +2162,7 @@ class Restreamer { channel_creator_description: ingestMetadata.meta.author.description, channel_creator_description_html: ingestMetadata.meta.author.description.replace(/(?:\r\n|\r|\n)/g, '
'), channel_license: ingestMetadata.license, - channel_poster: this.GetIngestPosterUrl(item.channelid), + channel_poster: this.GetChannelPosterPath(item.channelid, ingestMetadata.control.hls.storage), channel_width: 640, channel_height: 360, }; @@ -2059,7 +2266,7 @@ class Restreamer { // Get process information for egress async GetEgress(channelid, id, filter = []) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return; } @@ -2075,7 +2282,7 @@ class Restreamer { let metadata = null; const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return M.initEgressMetadata(metadata); } @@ -2089,7 +2296,7 @@ class Restreamer { // Set metadata for egress async SetEgressMetadata(channelid, id, metadata) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return null; } @@ -2107,7 +2314,7 @@ class Restreamer { // Start egress process async StartEgress(channelid, id) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return null; } @@ -2121,7 +2328,7 @@ class Restreamer { // Stop egress process async StopEgress(channelid, id) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return null; } @@ -2135,7 +2342,7 @@ class Restreamer { // Stop all egress processes async StopAllEgresses(channelid) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return; } @@ -2149,7 +2356,7 @@ class Restreamer { // Delete egress process async DeleteEgress(channelid, id) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return null; } @@ -2169,7 +2376,7 @@ class Restreamer { // Get the egress log async GetEgressLog(channelid, id) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return null; } @@ -2183,7 +2390,7 @@ class Restreamer { // Get the egress debug log async GetEgressDebug(channelid, id) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return null; } @@ -2195,9 +2402,9 @@ class Restreamer { } // Update an egress process - async UpdateEgress(channelid, id, inputs, outputs, control) { + async UpdateEgress(channelid, id, global, inputs, outputs, control) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return null; } @@ -2206,13 +2413,26 @@ class Restreamer { } const egress = this.GetChannelEgress(channelid, id); + if (!egress) { + return null; + } if (!Array.isArray(outputs)) { outputs = [outputs]; } - // from the inputs only the first is used and only - // its options are considered. + // from the inputs only the first is used and only its options are considered. + + let address = ''; + if (control.source.source === 'hls+memfs') { + address = `{memfs}/${channel.channelid}.m3u8`; + } else if (control.source.source === 'hls+diskfs') { + address = `{diskfs}/${channel.channelid}.m3u8`; + } else if (control.source.source === 'rtmp') { + address = `{rtmp,name=${channel.channelid}.stream}`; + } else if (control.source.source === 'srt') { + address = `{srt,name=${channel.channelid},mode=request}`; + } const config = { type: 'ffmpeg', @@ -2221,12 +2441,12 @@ class Restreamer { input: [ { id: 'input_0', - address: `#${channel.id}:output=output_0`, + address: address, options: ['-re', ...inputs[0].options], }, ], output: [], - options: ['-err_detect', 'ignore_err'], + options: ['-err_detect', 'ignore_err', ...global], autostart: control.process.autostart, reconnect: control.process.reconnect, reconnect_delay_seconds: parseInt(control.process.delay), @@ -2252,9 +2472,9 @@ class Restreamer { } // Create an egress process - async CreateEgress(channelid, service, inputs, outputs, control) { + async CreateEgress(channelid, service, global, inputs, outputs, control) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return ['', { message: 'Unknown channel ID' }]; } @@ -2269,7 +2489,7 @@ class Restreamer { this.SetChannelEgress(channelid, egress.id, egress); - const [, err] = await this.UpdateEgress(channelid, egress.id, inputs, outputs, control); + const [, err] = await this.UpdateEgress(channelid, egress.id, global, inputs, outputs, control); if (err !== null) { this.DeleteChannelEgress(channelid, egress.id); } @@ -2281,7 +2501,7 @@ class Restreamer { async ListIngestEgresses(channelid, services = []) { const channel = this.GetChannel(channelid); - if (channel === null) { + if (!channel) { return []; } @@ -2591,9 +2811,20 @@ class Restreamer { return null; } - const regex = /([a-z]+):\/\/[^/]+(?:\/[0-9A-Za-z-_.~/%:=&?]+)?/gm; + const regex = /(?:([a-z]+):)?\/[^\s]*/gm; const replace = (s) => { - return s.replaceAll(regex, '$1://[anonymized]'); + return s.replaceAll(regex, (match, scheme) => { + if (scheme) { + return `${scheme}://[anonymized]`; + } + + const pathElm = match.split('/').filter((p) => p.length !== 0); + if (pathElm.length < 2) { + return match; + } + + return `/[anonymized]/${pathElm.pop()}`; + }); }; if (p.config) { @@ -2619,11 +2850,19 @@ class Restreamer { p.state.progress.outputs[i].address = replace(p.state.progress.outputs[i].address); } + if (!p.state.command) { + p.state.command = []; + } + p.state.command = p.state.command.map(replace); p.state.last_logline = replace(p.state.last_logline); } if (p.report) { + if (!p.report.prelude) { + p.report.prelude = []; + } + p.report.prelude = p.report.prelude.map(replace); p.report.log = p.report.log.map((l) => [l[0], replace(l[1])]); @@ -2633,10 +2872,6 @@ class Restreamer { } } - if (p.service) { - p.service.token = replace(p.service.token); - } - return p; } @@ -2753,9 +2988,9 @@ class Restreamer { async _removePublicEssentials() { await this._deleteAsset('/robots.txt'); - await this._deleteAsset('/favicon.ico', '/favicon.ico'); - await this._deleteAsset('/logo192.png', '/logo192.png'); - await this._deleteAsset('/logo512.png', '/logo512.png'); + await this._deleteAsset('/favicon.ico'); + await this._deleteAsset('/logo192.png'); + await this._deleteAsset('/logo512.png'); } async _getLocalAssetAsString(localPath) { diff --git a/src/version.js b/src/version.js index a72eac1..adccb4b 100644 --- a/src/version.js +++ b/src/version.js @@ -1,7 +1,8 @@ import { name, version, bundle } from '../package.json'; -const Core = '^15.0.0 || ^16.0.0'; +const Core = '^16.9.0'; const FFmpeg = '^4.1.0 || ^5.0.0'; const UI = bundle ? bundle : name + ' v' + version; +const Version = version; -export { Core, FFmpeg, UI }; +export { Core, FFmpeg, UI, Version }; diff --git a/src/views/Edit/Profile.js b/src/views/Edit/Profile.js index 3a3d756..02f644c 100644 --- a/src/views/Edit/Profile.js +++ b/src/views/Edit/Profile.js @@ -18,6 +18,8 @@ import ProbeModal from '../../misc/modals/Probe'; import SourceSelect from './SourceSelect'; import StreamSelect from './StreamSelect'; +import FilterSelect from '../../misc/FilterSelect'; + export default function Source(props) { const [$sources, setSources] = React.useState({ video: M.initSource('video', props.sources[0]), @@ -212,6 +214,17 @@ export default function Source(props) { }); }; + const handleFilter = (type) => (filter) => { + const profile = $profile[type]; + + profile.filter = filter; + + setProfile({ + ...$profile, + [type]: profile, + }); + }; + const handleDone = () => { const sources = M.cleanupSources($sources); const profile = M.cleanupProfile($profile); @@ -395,6 +408,16 @@ export default function Source(props) { onChange={handleEncoding('video')} /> + {$profile.video.encoder.coder !== 'none' && $profile.video.encoder.coder !== 'copy' && ( + + + + )} )} @@ -457,6 +480,16 @@ export default function Source(props) { onChange={handleEncoding('audio')} /> + {$profile.audio.encoder.coder !== 'none' && $profile.audio.encoder.coder !== 'copy' && ( + + + + )} )} {$profile.custom.selected === true && ( @@ -524,6 +557,16 @@ export default function Source(props) { onChange={handleEncoding('audio')} /> + {$profile.audio.encoder.coder !== 'none' && $profile.audio.encoder.coder !== 'copy' && ( + + + + )} )} diff --git a/src/views/Edit/ProfileSummary.js b/src/views/Edit/ProfileSummary.js index c3c916e..1dcf9f5 100644 --- a/src/views/Edit/ProfileSummary.js +++ b/src/views/Edit/ProfileSummary.js @@ -13,11 +13,11 @@ import * as M from '../../utils/metadata'; import Summary from './Summary'; function IconWizard(props) { - return (); + return ; } function IconEdit(props) { - return (); + return ; } const useStyles = makeStyles((theme) => ({ diff --git a/src/views/Edit/Sources/Network.js b/src/views/Edit/Sources/Network.js index 2ceb2af..aa8ecd1 100644 --- a/src/views/Edit/Sources/Network.js +++ b/src/views/Edit/Sources/Network.js @@ -16,8 +16,10 @@ import Icon from '@mui/icons-material/AccountTree'; import MenuItem from '@mui/material/MenuItem'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; +import WarningIcon from '@mui/icons-material/Warning'; import BoxTextarea from '../../../misc/BoxTextarea'; +import BoxText from '../../../misc/BoxText'; import Checkbox from '../../../misc/Checkbox'; import FormInlineButton from '../../../misc/FormInlineButton'; import MultiSelect from '../../../misc/MultiSelect'; @@ -84,6 +86,7 @@ const initConfig = (initialConfig) => { const config = { rtmp: {}, + srt: {}, hls: {}, ...initialConfig, }; @@ -99,6 +102,16 @@ const initConfig = (initialConfig) => { ...config.rtmp, }; + config.srt = { + enabled: false, + host: 'localhost', + local: 'localhost', + token: '', + passphrase: '', + name: '', + ...config.srt, + }; + config.hls = { secure: false, host: 'localhost', @@ -127,11 +140,20 @@ const initSkills = (initialSkills) => { ...skills.version, }; + skills.formats = { + demuxers: [], + ...skills.formats, + }; + skills.protocols = { input: [], ...skills.protocols, }; + if (skills.formats.demuxers.includes('rtsp')) { + skills.protocols.input.push('rtsp'); + } + return skills; }; @@ -158,8 +180,12 @@ const createInputs = (settings, config, skills) => { if (settings.mode === 'push') { if (settings.push.type === 'hls') { input.address = getLocalHLS(config); - } else { + } else if (settings.push.type === 'rtmp') { input.address = getLocalRTMP(config); + } else if (settings.push.type === 'srt') { + input.address = getLocalSRT(config); + } else { + input.address = ''; } } else { input.address = settings.address; @@ -285,8 +311,28 @@ const isAuthProtocol = (url) => { return false; }; +const isSupportedProtocol = (url, supportedProtocols) => { + const protocol = getProtocol(url); + if (protocol.length === 0) { + return 0; + } + + if (!supportedProtocols.includes(protocol)) { + return -1; + } + + return 1; +}; + +const getHLSAddress = (host, credentials, name, secure) => { + // Test for IPv6 addresses and put brackets around + let url = 'http' + (secure ? 's' : '') + '://' + (credentials.length !== 0 ? credentials + '@' : '') + host + '/memfs/ingest/' + name + '.m3u8'; + + return url; +}; + const getRTMPAddress = (host, app, name, token, secure) => { - let url = 'rtmp' + (secure ? 's' : '') + '://' + host + app + '/' + name + '.stream'; + let url = 'rtmp' + (secure ? 's' : '') + '://' + host + app + '/ingest/' + name + '.stream'; if (token.length !== 0) { url += '?token=' + encodeURIComponent(token); @@ -295,29 +341,40 @@ const getRTMPAddress = (host, app, name, token, secure) => { return url; }; -const getRTMP = (config, name) => { - const url = getRTMPAddress(config.rtmp.host, config.rtmp.app, config.rtmp.name, config.rtmp.token, config.rtmp.secure); +const getSRTAddress = (host, name, token, passphrase, publish) => { + let url = + 'srt' + + '://' + + host + + '?mode=caller&transtype=live&streamid=#!:m=' + + (publish ? 'publish' : 'request') + + ',r=ingest/' + + name + + (token.length !== 0 ? ',token=' + encodeURIComponent(token) : ''); + + if (passphrase.length !== 0) { + url += '&passphrase=' + encodeURIComponent(passphrase); + } - return [url]; + return url; }; -const getLocalRTMP = (config, name) => { - let url = getRTMPAddress(config.rtmp.local, config.rtmp.app, config.rtmp.name, config.rtmp.token, config.rtmp.secure); +const getHLS = (config, name) => { + const url = getHLSAddress(config.hls.host, config.hls.credentials, config.hls.name, config.hls.secure); return url; }; -const getHLSAddress = (host, credentials, name, secure) => { - // Test for IPv6 addresses and put brackets around - let url = 'http' + (secure ? 's' : '') + '://' + (credentials.length !== 0 ? credentials + '@' : '') + host + '/memfs/ingest/' + name + '.m3u8'; +const getRTMP = (config) => { + const url = getRTMPAddress(config.rtmp.host, config.rtmp.app, config.rtmp.name, config.rtmp.token, config.rtmp.secure); return url; }; -const getHLS = (config, name) => { - const url = getHLSAddress(config.hls.host, config.hls.credentials, config.hls.name, config.hls.secure); +const getSRT = (config) => { + const url = getSRTAddress(config.srt.host, config.srt.name, config.srt.token, config.srt.passphrase, true); - return [url]; + return url; }; const getLocalHLS = (config, name) => { @@ -326,6 +383,14 @@ const getLocalHLS = (config, name) => { return url; }; +const getLocalRTMP = (config) => { + return getRTMPAddress(config.rtmp.local, config.rtmp.app, config.rtmp.name, config.rtmp.token, config.rtmp.secure); +}; + +const getLocalSRT = (config) => { + return getSRTAddress(config.srt.local, config.srt.name, config.srt.token, config.srt.passphrase, false); +}; + const isValidURL = (address) => { const protocol = getProtocolClass(address); if (protocol.length === 0) { @@ -340,6 +405,7 @@ function Pull(props) { const settings = props.settings; const protocolClass = getProtocolClass(settings.address); const authProtocol = isAuthProtocol(settings.address); + const supportedProtocol = isSupportedProtocol(settings.address, props.skills.protocols.input); return ( @@ -361,53 +427,132 @@ function Pull(props) { Supports HTTP (HLS, DASH), RTP, RTSP, RTMP, SRT and more. - {authProtocol && ( - - - Username} - value={settings.username} - onChange={props.onChange('', 'username')} - /> - - Username for the device. - - - - Password} - value={settings.password} - onChange={props.onChange('', 'password')} - /> - - Password for the device. - - - - )} - - - }> + {supportedProtocol === -1 && ( + + + - Advanced settings + This protocol is unknown or not supported by the available FFmpeg binary. - - - - {protocolClass === 'rtsp' && ( - + + + )} + {supportedProtocol === 1 && ( + + {authProtocol && ( + + + Username} + value={settings.username} + onChange={props.onChange('', 'username')} + /> + + Username for the device. + + + + Password} + value={settings.password} + onChange={props.onChange('', 'password')} + /> + + Password for the device. + + + + )} + + + }> + + Advanced settings + + + + + {protocolClass === 'rtsp' && ( + + + + RTSP + + + + UDP transport} + checked={settings.rtsp.udp} + onChange={props.onChange('rtsp', 'udp')} + /> + + + Socket timeout (microseconds)} + value={settings.rtsp.stimeout} + onChange={props.onChange('rtsp', 'stimeout')} + /> + + + )} + {protocolClass === 'http' && ( + + + + HTTP and HTTPS + + + + Read input at native speed} + checked={settings.http.readNative} + onChange={props.onChange('http', 'readNative')} + /> + Force input framerate} + checked={settings.http.forceFramerate} + onChange={props.onChange('http', 'forceFramerate')} + /> + + {settings.http.forceFramerate === true && ( + + Framerate} + value={settings.http.framerate} + onChange={props.onChange('http', 'framerate')} + /> + + )} + + + + + )} - RTSP + General - - UDP transport} checked={settings.rtsp.udp} onChange={props.onChange('rtsp', 'udp')} /> - Socket timeout (microseconds)} - value={settings.rtsp.stimeout} - onChange={props.onChange('rtsp', 'stimeout')} - /> - - - )} - {protocolClass === 'http' && ( - - - - HTTP and HTTPS - - - - Read input at native speed} - checked={settings.http.readNative} - onChange={props.onChange('http', 'readNative')} - /> - Force input framerate} - checked={settings.http.forceFramerate} - onChange={props.onChange('http', 'forceFramerate')} + label="thread_queue_size" + value={settings.general.thread_queue_size} + onChange={props.onChange('general', 'thread_queue_size')} /> - {settings.http.forceFramerate === true && ( - - Framerate} - value={settings.http.framerate} - onChange={props.onChange('http', 'framerate')} - /> - - )} - + + + + + + + + + + + - - )} - - - General - - - - - - - - - - - - - - - - - - - - - - + + + + + + )} - + Probe @@ -513,27 +597,51 @@ function Push(props) { const classes = useStyles(); const settings = props.settings; + //const supportsHLS = isSupportedProtocol('http://', props.skills.protocols.input); + const supportsRTMP = isSupportedProtocol('rtmp://', props.skills.protocols.input); + const supportsSRT = isSupportedProtocol('srt://', props.skills.protocols.input); + + if (!supportsRTMP && supportsSRT) { + return ( + + + + + + The available FFmpeg binary doesn't support any of the required protocols. + + + + + ); + } + return ( - {settings.push.type === 'rtmp' ? : settings.push.type === 'hls' ? : null} + {settings.push.type === 'rtmp' && } + {settings.push.type === 'hls' && } + {settings.push.type === 'srt' && } ); } function PushHLS(props) { const classes = useStyles(); - const settings = props.settings; const config = props.config; - const HLSs = getHLS(config, settings.push.name); + const HLS = getHLS(config); return ( @@ -544,7 +652,7 @@ function PushHLS(props) { -