freelance888 / ephyr Goto Github PK
View Code? Open in Web Editor NEWSelf-hosted server solution for video streaming powered by Rust, SRS ad FFmpeg
License: Other
Self-hosted server solution for video streaming powered by Rust, SRS ad FFmpeg
License: Other
Little bug:
Description of bug: https://1drv.ms/v/s!ApvodEdSAQ7goHc0Byannf8btz7m?e=jc0Zdc
At the moment, sometimes tsclientlib
reports about out-of-order packet being processed when initiating connection or even running it. Sometimes it even leads to disconnection.
While it's OK at the moment due to baked-in reconnections for teamspeak::Input
, it's better to investigate the reason and fix it, to comply with the expected order properly.
mixer
and restreamer
components are quite similar in what they're doing and how are they used. So, mixer
capabilities can be emerged into restreamer
itself.
Allow usage of SRT URLs for inputs and outputs in Ephyr re-streamer
PushInput
PullInput
Output
There is a need in organizing recording of translations done in TeamSpeak separately from a mixing server.
There should be a standalone service, which on command starts capturing audio from TeamSpeak channels according to the mixing Spec
and writes captured audion to the files until the stop
command is received. After stop
command is received, the result audio files shoud be uploaded to Google Drive.
Recording server should represent a dead simple REST API server with the only two endpoints:
POST /stream/<stream-name>
(idempotent): starts recording for a <stream-name>
stream declared in mixing Spec
.PUT /stream/<stream-name>
(idempotent): stops recording for a <stream-name>
stream declared in mixing Spec
.Instrumentation: actix-web
shoud be used to implement the HTTP server.
Both endpoints shoud be protected with a Bearer Token HTTP authorization.
The server should read on startuo from its configuration a hash of the bearer token and authorize all HTTP requests against it.
Instrumentation:
actix-web-httpauth
shoud be used to implement HTTP authorization.argon2
should be used for validating bearer tokens.The server should be represented as a serve recorder
sub-command of ephyr
binary. The supported flags should be:
--mixing-spec=<file-path>
: path to the file containing the mixing Spec
to perform recoding in accordance with.-a, --auth-token-hash=<argon2-hash>
: Argon2 hash to validate bearer tokens in HTTP requests against.-o, --out-dir=<directory-path>
: path to the directory where recorded files should be persisted in, before they're updloaded to Google Drive.--gdrive-client-id=<id-string>
: CLIENT_ID
for accessing Google Drive via API.--gdrive-client-secret=<secret-string>
: CLIENT_SECRET
for accessing Google Drive via API.--ffmpeg
: path to FFmpeg binary to use.--http-ip
: IP address for recorder
server to listen HTTP requests on.--http-port
: Port for recorder
server to listen HTTP requests on.Once POST /stream/<stream-name>
request is received, the following should be performed:
<stream-name>
is contained in mixing Spec
.Spec](https://github.com/ALLATRA-IT/ephyr/blob/v0.2.0/src/spec.rs) spawn and run all the required [
teamspeak::Inputs](https://github.com/ALLATRA-IT/ephyr/blob/v0.2.0/src/input/teamspeak.rs) [
io::copy`ing the audio into spawned FFmped process (for each TeamSpeack channel a separate process should be spawned).f32be
PCM audio-data from STDIN and remux it into MP3 320kbps and write it into the file (in --out-dir
) named as <stream-name>_<lang>_<YYYY-MM-DD>.mp3
. The file shoud not be overwritten if it exists already, but rather appended with new data.Once PUT /stream/<stream-name>
request is received, the following should be performed:
<stream-name>
is contained in mixing Spec
and is in a recording
state now.<stream-name>
._<HH:MM::SS>
and retry until succeed.Each step should be implemented as a separate MR. Mainline branch is: recorder
.
serve recorder
sub-command in CLI.Spec
and keeping it in the server's state. Keeping validating in HTTP endpoints whether the requested <stream-name>
exists.
aesni
has been merged into theaes
crate
Details | |
---|---|
Status | unmaintained |
Package | aesni |
Version | 0.10.0 |
URL | RustCrypto/block-ciphers#200 |
Date | 2021-04-29 |
Please use the aes
crate going forward. The new repository location is at:
<https://github.com/RustCrypto/block-ciphers/tree/master/aes>
AES-NI is now autodetected at runtime on i686
/x86-64
platforms.
If AES-NI is not present, the aes
crate will fallback to a constant-time
portable software implementation.
To prevent this fallback (and have absence of AES-NI result in an illegal
instruction crash instead), continue to pass the same RUSTFLAGS which were
previously required for the aesni
crate to compile:
RUSTFLAGS=-Ctarget-feature=+aes,+ssse3
See advisory page for additional details.
Could you add not only SRT Caller output but also SRT Listerner and MPEG-TS UDP over FFMPEG?
With release 0.2 we've introduced, strict mode for deletion of outputs and inputs. This behavior not always reasonable and sometimes we what to delete many items whiteout confirmation.
Would be helpful have option to enable\disable strict mode for the server.
If TeamSpeak client name exceeds 30 symbols, then connection is rejected with error: {msg=invalid parameter size, id=1541}
, which is visible in DEBUG
logs only.
See TeamSpeak limitations here:
https://forum.teamspeak.com/threads/118620-Global-query-command-length-limiit?p=417087#post417087
There is a need for a simple WebRTC-based platform with predefined custom scene layouts.
The common scenatio will be:
At the moment TeamSpeak Connection
is just dropped, which, however, only initiates disconnection, but doesn't perform normal disconnection, as InAudio
/InCommands
streams are dropped altogether. Despite the full disconnection ends due to being timeouted, this basically works for now.
However, it would be better to proceed with normal disconnectiong always.
As we don't have AsyncDrop
in Rust at the moment, this can should still be reached by spawn
ing InAudio
/InCommands
streams in Drop
instead of just dropping them in-place.
aes-soft
has been merged into theaes
crate
Details | |
---|---|
Status | unmaintained |
Package | aes-soft |
Version | 0.6.4 |
URL | RustCrypto/block-ciphers#200 |
Date | 2021-04-29 |
Please use the aes
crate going forward. The new repository location is at:
<https://github.com/RustCrypto/block-ciphers/tree/master/aes>
AES-NI is now autodetected at runtime on i686
/x86-64
platforms.
If AES-NI is not present, the aes
crate will fallback to a constant-time
portable software implementation.
To force the use of a constant-time portable implementation on these platforms,
even if AES-NI is available, use the new force-soft
feature of the aes
crate to disable autodetection.
See advisory page for additional details.
Depends on release of Clippy 1.51 https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md
Use backoff
crate as a better implementation of backoff algorithm, which provides delay interval randomization.
With mixing being added there is a request for an ability to share a single output in a separate window, to opeate on it without accidental disturbing other outputs.
CI step docker (restreamer, false, true)
fails with next log:
2021-04-04T00:01:40.7029409Z ##[section]Starting: Request a runner to run this job
2021-04-04T00:01:41.5451767Z Can't find any online and idle self-hosted runner in current repository that matches the required labels: 'ubuntu-latest'
2021-04-04T00:01:41.5451849Z Can't find any online and idle self-hosted runner in current repository's account/organization that matches the required labels: 'ubuntu-latest'
2021-04-04T00:01:41.5452082Z Found online and idle hosted runner in current repository's account/organization that matches the required labels: 'ubuntu-latest'
2021-04-04T00:01:41.6361539Z ##[section]Finishing: Request a runner to run this job
This issue is known bug in GI Actions.
This solution from Facebook should help facebook/sapling#23
On separate output page need to update:
close
, edit
and back to main screen page possibilities (probably start\stop as well). Basically the user should be able only to change volume of the stream.It would be great to have built-in ability to serve admin UI through HTTPS protocol, so that login/password and all other data transferred between client and server is encrypted
UPD for @AleksandrovEugen by @skhalymon
Add TLS layer for actix-web with self-signed certificate. Certificate should be generated during server creation.
Allow links to YouTube videos and live streams as PullInput
.
Under-the-hood we need to pull HLS and transcode to RTMP.
It would be nice to have an ability to specify a file://
output, so a live stream may be recorded to a file, which may be downloaded later.
Investingate whether to use fec = true
when decoding Opus audio frames from TeamSpeak.
crate has been renamed to
block-cipher
Details | |
---|---|
Status | unmaintained |
Package | block-cipher-trait |
Version | 0.6.2 |
URL | RustCrypto/traits#139 |
Date | 2020-05-26 |
This crate has been renamed from block-cipher-trait
to block-cipher
.
The new repository location is at:
<https://github.com/RustCrypto/traits/tree/master/block-cipher>
See advisory page for additional details.
When some error happen on adding multiple outputs than error message does not disapear event if you close modal and open it again.
dirs is unmaintained, use dirs-next instead
Details | |
---|---|
Status | unmaintained |
Package | dirs |
Version | 2.0.2 |
URL | https://github.com/dirs-dev/dirs-rs |
Date | 2020-10-16 |
The dirs
crate is not maintained any more;
use dirs-next
instead.
See advisory page for additional details.
When we add more than 80 outputs UI became unresponsive.
As a posible solution we can add configuration option on UI - interval of updating.
stdweb is unmaintained
Details | |
---|---|
Status | unmaintained |
Package | stdweb |
Version | 0.4.20 |
URL | koute/stdweb#403 |
Date | 2020-05-04 |
The author of the stdweb
crate is unresponsive.
Maintained alternatives:
See advisory page for additional details.
Split rtpm url and label by first coma from the end
We need to add the sum of the traffic of all input and outputs usage. Probably the best place would be on the top of the page.
@PavelKushnirchuk proposed to have some basic utility that grab all this system info and pass it as formated text on to the page
Some videos on https://api.allatra.video/storage/videos
contain subtitles (example: https://api.allatra.video/api/v1/videos/yt/Q69gFVmrCiI).
Subtitles may go on different languages.
It would be nice to attach subtitles of the playlist language to videos if they are available.
kaltura/nginx-vod-module
supports VTT subtitles.
It seems that subtitles should go as a separate sequence, but the exact example may be seen in module tests.
For outputs there should be an ability to mix MP3 HTTP streams along with TeamSpeak sound.
Organize optional E2E indication of Output
endpoint via provided HTTP link.
With mixing being added, there is a high demand to an ability to edit Output.
At the moment validation of new vod::meta::State
received via PUT /
endpoint is done in a "fail fast" manner: when at least one error happens, the whole validation terminates and the error is returned
Omit "fail fast" manner and validate as much as possible, to return as many errors as possible.
Provide ?dryrun
URL parameter which makes PUT /
HTTP endpoint to perform the request validation only, without applying the new state.
spin is no longer actively maintained
Details | |
---|---|
Status | unmaintained |
Package | spin |
Version | 0.5.2 |
URL | mvdnes/spin-rs@7516c80 |
Date | 2019-11-21 |
The author of the spin
crate does not have time or interest to maintain it.
Consider the following alternatives (both of which support no_std
):
conquer-once
lock_api
(a subproject of parking_lot
)
spinning_top
spinlock crate built on lock_api
See advisory page for additional details.
failure is officially deprecated/unmaintained
Details | |
---|---|
Status | unmaintained |
Package | failure |
Version | 0.1.8 |
URL | rust-lang-deprecated/failure#347 |
Date | 2020-05-02 |
The failure
crate is officially end-of-life: it has been marked as deprecated
by the former maintainer, who has announced that there will be no updates or
maintenance work on it going forward.
The following are some suggested actively developed alternatives to switch to:
See advisory page for additional details.
Investigate, whether it's better than current mono audio decoding from Opus.
net2
crate has been deprecated; usesocket2
instead
Details | |
---|---|
Status | unmaintained |
Package | net2 |
Version | 0.2.34 |
URL | deprecrated/net2-rs@3350e38 |
Date | 2020-05-01 |
The net2
crate has been deprecated
and users are encouraged to considered socket2
instead.
See advisory page for additional details.
At the moment we serve HLS endpoint in the quality we receive it via RTMP.
It would be nice to allow setup multiple qualities for HLS like 480p
, 720p
, 1080p
, etc. And server both separate qualities and single master.m3u8
with dynamic quality.
Ability to pull from HLS URLs: http://*.m3u8
At the moment, each time Ephyr connects to some TeamSpeak channel, it generates a new unique identity. This, somehow, often leads to bans by anti-flood system on server.
It would be much nicer if we cloud memoize and reuse the same identity for each mixer.
crate has been renamed to
cipher
Details | |
---|---|
Status | unmaintained |
Package | stream-cipher |
Version | 0.3.2 |
URL | RustCrypto/traits#337 |
Date | 2020-10-15 |
This crate has been renamed from stream-cipher
to cipher
.
The new repository location is at:
<https://github.com/RustCrypto/traits/tree/master/cipher>
See advisory page for additional details.
Currently you can publish multiple streams to the same endpoint. This causes interruption of the active stream. This is a potential threat.
Expected behaviour is that Ephyr does not allow you to publish the stream to a specific endpoint when this endpoint is currently used.
Description of the issue: https://1drv.ms/v/s!ApvodEdSAQ7goHgCkwGflkqYfTF4?e=5mopvj
Especially, Safari
Add confirmation modal like "Are you sure you want to ..." for:
term is looking for a new maintainer
Details | |
---|---|
Status | unmaintained |
Package | term |
Version | 0.6.1 |
URL | Stebalien/term#93 |
Date | 2018-11-19 |
The author of the term
crate does not have time to maintain it and is looking
for a new maintainer.
Some maintained alternatives you can potentially switch to instead, depending
on your needs:
See advisory page for additional details.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.