diff --git a/CHANGELOG.md b/CHANGELOG.md index 764591e..62f0a64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Restreamer-UI +#### v1.1.0 > v1.3.1 + +- Add Owncast to publication services +- Add Telegram to publication services +- Fix VAAPI encoder + #### v1.0.0 > v1.1.0 - Add compatibility list for encoders diff --git a/src/views/Publication/Services/Owncast.js b/src/views/Publication/Services/Owncast.js new file mode 100644 index 0000000..52cad9a --- /dev/null +++ b/src/views/Publication/Services/Owncast.js @@ -0,0 +1,113 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; +import Link from '@mui/material/Link'; +import TextField from '@mui/material/TextField'; + +import Logo from './logos/owncast.svg'; + +const id = 'owncast'; +const name = 'Owncast'; +const version = '1.0'; +const stream_key_link = ''; +const description = ( + + Transmit your Livestream to an Owncast server.{' '} + + Here {' '} + + you can find more details about the settings. + +); +const image_copyright = Please get in touch with the operator of the service and check what happens.; +const author = { + creator: { + name: 'datarhei', + link: 'https://github.com/datarhei', + }, + maintainer: { + name: 'datarhei', + link: 'https://github.com/datarhei', + }, +}; +const category = 'software'; +const requires = { + protocols: ['rtmps'], + formats: ['flv'], + codecs: { + audio: ['aac', 'mp3'], + video: ['h264'], + }, +}; + +function ServiceIcon(props) { + return Telegram Logo; +} + +function init(settings) { + const initSettings = { + protocol: 'rtmp://', + server_url: '', + stream_key: '', + ...settings, + }; + + return initSettings; +} + +function Service(props) { + const settings = init(props.settings); + + const handleChange = (what) => (event) => { + const value = event.target.value; + + settings[what] = value; + + const output = createOutput(settings); + + props.onChange([output], settings); + }; + + const createOutput = (settings) => { + const output = { + address: settings.protocol + settings.server_url + '/' + settings.stream_key, + options: ['-f', 'flv'], + }; + + return output; + }; + + return ( + + + Protocol} + value={settings.protocol} + onChange={handleChange('protocol')} + readOnly + disabled + /> + + + Server URL} value={settings.server_url} onChange={handleChange('server_url')} /> + + + Stream Key} value={settings.stream_key} onChange={handleChange('stream_key')} /> + + + ); +} + +Service.defaultProps = { + settings: {}, + skills: {}, + metadata: {}, + streams: [], + onChange: function (output, settings) {}, +}; + +export { id, name, version, stream_key_link, description, image_copyright, author, category, requires, ServiceIcon as icon, Service as component }; diff --git a/src/views/Publication/Services/Telegram.js b/src/views/Publication/Services/Telegram.js new file mode 100644 index 0000000..6b7e721 --- /dev/null +++ b/src/views/Publication/Services/Telegram.js @@ -0,0 +1,108 @@ +import React from 'react'; + +import { Trans } from '@lingui/macro'; +import Grid from '@mui/material/Grid'; +import TextField from '@mui/material/TextField'; + +import Logo from './logos/telegram.svg'; + +const id = 'telegram'; +const name = 'Telegram'; +const version = '1.0'; +const stream_key_link = ''; +const description = ( + + Transmit a Livestream to a Telegram Channel. + +); +const image_copyright = Please get in touch with the operator of the service and check what happens.; +const author = { + creator: { + name: 'datarhei', + link: 'https://github.com/datarhei', + }, + maintainer: { + name: 'datarhei', + link: 'https://github.com/datarhei', + }, +}; +const category = 'platform'; +const requires = { + protocols: ['rtmps'], + formats: ['flv'], + codecs: { + audio: ['aac', 'mp3'], + video: ['h264'], + }, +}; + +function ServiceIcon(props) { + return Telegram Logo; +} + +function init(settings) { + const initSettings = { + protocol: 'rtmps://', + stream_url: '', + stream_key: '', + ...settings, + }; + + return initSettings; +} + +function Service(props) { + const settings = init(props.settings); + + const handleChange = (what) => (event) => { + const value = event.target.value; + + settings[what] = value; + + const output = createOutput(settings); + + props.onChange([output], settings); + }; + + const createOutput = (settings) => { + const output = { + address: settings.protocol + settings.stream_url + settings.stream_key, + options: ['-f', 'flv'], + }; + + return output; + }; + + return ( + + + Protocol} + value={settings.protocol} + onChange={handleChange('protocol')} + readOnly + disabled + /> + + + Server URL} value={settings.stream_url} onChange={handleChange('stream_url')} /> + + + Stream Key} value={settings.stream_key} onChange={handleChange('stream_key')} /> + + + ); +} + +Service.defaultProps = { + settings: {}, + skills: {}, + metadata: {}, + streams: [], + onChange: function (output, settings) {}, +}; + +export { id, name, version, stream_key_link, description, image_copyright, author, category, requires, ServiceIcon as icon, Service as component }; diff --git a/src/views/Publication/Services/index.js b/src/views/Publication/Services/index.js index 3b3901b..f451e95 100644 --- a/src/views/Publication/Services/index.js +++ b/src/views/Publication/Services/index.js @@ -12,11 +12,13 @@ import * as Image2 from './Image2'; import * as Instagram from './Instagram'; import * as Livespotting from './Livespotting'; import * as MPEGTS from './MPEGTS'; +import * as Owncast from './Owncast'; import * as Red5 from './Red5'; import * as Restream from './Restream'; import * as RTMP from './RTMP'; import * as RTSP from './RTSP'; import * as SRT from './SRT'; +import * as Telegram from './Telegram'; import * as Twitch from './Twitch'; import * as Twitter from './Twitter'; import * as UDP from './UDP'; @@ -62,12 +64,14 @@ registry.Register(Twitch); registry.Register(Instagram); registry.Register(Vimeo); registry.Register(Restream); +registry.Register(Telegram); registry.Register(Livespotting); registry.Register(Brightcove); registry.Register(Akamai); registry.Register(DaCast); registry.Register(CDN77); registry.Register(Core); +registry.Register(Owncast); registry.Register(WOWZA); registry.Register(Red5); registry.Register(Icecast); diff --git a/src/views/Publication/Services/logos/owncast.svg b/src/views/Publication/Services/logos/owncast.svg new file mode 100644 index 0000000..ead8505 --- /dev/null +++ b/src/views/Publication/Services/logos/owncast.svg @@ -0,0 +1 @@ + diff --git a/src/views/Publication/Services/logos/telegram.svg b/src/views/Publication/Services/logos/telegram.svg new file mode 100644 index 0000000..fa06cfe --- /dev/null +++ b/src/views/Publication/Services/logos/telegram.svg @@ -0,0 +1 @@ +