Skip to content

alarmfox/rt-jam

Folders and files

NameName
Last commit message
Last commit date

Latest commit

57036c0 · Aug 21, 2024

History

45 Commits
Apr 7, 2024
Apr 13, 2024
Apr 1, 2024
Apr 12, 2024
Apr 13, 2024
Mar 31, 2024
Apr 13, 2024
Apr 7, 2024
Mar 20, 2024
Mar 30, 2024
Mar 20, 2024
Apr 12, 2024
Apr 12, 2024
Aug 21, 2024
Apr 7, 2024
Apr 12, 2024
Apr 13, 2024
Apr 13, 2024

Repository files navigation

RT-Jam

vmic

Variabili d'ambiente

Per funzionare, l'applicazione ha bisogno delle seguenti variabili d'ambiente:

  • RUST_LOG="backend=debug"
  • RTJAM_DATABASE_URL=""
  • RTJAM_LISTEN_ADDRESS=""
  • RTJAM_SESSION_KEY=""
  • RTJAM_NATS_URL=""
  • RTJAM_SMTP_HOST=""
  • RTJAM_SMTP_PORT=""
  • RTJAM_SMTP_USER=""
  • RTJAM_SMTP_PASSWORD=""
  • RTJAM_SMTP_FROM=""
  • RTJAM_APP_URL=""
  • RTJAM_WEBTRANSPORT_ADDRESS=""
  • RTJAM_CERT_PATH=""
  • RTJAM_KEY_PATH=""

Struttura della repository

La repository è organizzata come segue:

├── backend
│   ├── Cargo.toml
│   ├── certs
│   ├── Dockerfile
│   ├── migrations
│   ├── src
│   └── templates
├── Cargo.lock
├── Cargo.toml
├── common
│   ├── Cargo.toml
│   └── src
├── docker-compose.yml
├── frontend
│   ├── Cargo.toml
│   ├── dist
│   ├── Dockerfile
│   ├── index.html
│   ├── node_modules
│   ├── package.json
│   ├── pnpm-lock.yaml
│   ├── src
│   ├── static
│   ├── styles
│   └── tailwind.config.js
├── launch_chrome.sh
├── Makefile
├── protobuf
│   ├── build
│   ├── build-env-rust.Dockerfile
│   ├── Makefile
│   └── types
├── README.md
├── Trunk.toml
└── videocall-client
    ├── Cargo.toml
    ├── README.md
    ├── README.tpl
    ├── rust-toolchain.toml
    └── src

  • backend: contiene il server dell'applicazione. Espone un'API JSON per la gestione delle entità e un endpoint in webtransport per la gestione dello streaming
  • frontend: contiene il codice yew.rs che usa WebAssembly
  • common: include strutture comuni sia al frontend che backend
  • protobuf: contiene le definizioni di tipi che saranno utilizzati per lo streaming

Compilazione ed esecuzione

L'applicazione viene gestita con un Makefile. Per ricevere tutte i comandi creati eseguire:

make help
Usage:
  up             executes the application using docker-compose
  down           deletes docker containers
  build-images   build docker images
  build          statically build frontend and backend
  dev            creates nats and postgres container; executes backend and frontend locally
  help           prints this help message

Usando docker-compose (consigliato)

L'applicazione può essere compilata ed eseguita usando il docker-compose.yml presente nella cartella root. Questo compilerà frontend e backend usando gli opportuni Dockerfile.

make up

Esecuzione dell'applicazione

Al momento dello sviluppo solo i browser chromium-based implementano l'API WebTransport: l' applicazione quindi NON funziona su altri browser. Inoltre, il protocollo QUIC rende obbligatorio l'utilizzo del protocollo TLS. In questa repository, sono già forniti dei certificati generati con openssl (vedi sezione successiva) per eseguire l'applicazione localmente.

Attraverso lo script launch_chrome.sh viene eseguita un'istanaza di chrome con parametri disponibili solo da riga di comando che bypassano la verifica del certificato e forzano l'utilizzo di localhost per connettersi al protocollo QUIC (modificare il campo origin-to-force-quic-on con l'indirizzo IP del server(.

 google-chrome --origin-to-force-quic-on=127.0.0.1:4433 --ignore-certificate-errors-spki-list="$SPKI" --enable-logging --v=1

Generazione di certificati ssl

I certificati SSL vengono generati con i seguenti comandi:

openssl req -x509 -newkey rsa:2048 -keyout "backend/certs/localhost.dev.key" -out "backend/certs/localhost.dev.pem" -days 365 -nodes -subj "/CN=127.0.0.1"
openssl x509 -in "backend/certs/localhost.dev.pem" -outform der -out "backend/certs/localhost.dev.der"
openssl rsa -in "backend/certs/localhost.dev.key" -outform DER -out "backend/certs/localhost.dev.key.der"

Demo (linux only)

DISCLAIMER: la demo fa uso di sorgenti audio virtuali che stressano molto la macchina sottostante e può portare a risultati di bassa qualità. I comandi si basano sulla presenza del demone pulseaudio in esecuzione sulla macchina host.

Una demo veloce può essere eseguita su un solo computer Linux creando sorgenti audio virtuali. In Linux, è possibile effettuare il routing di dispositivi audio attraverso il modulo null-sink (l'audio che entra in questo nodo non viene riprodotto da nessun dispositivo)

pactl load-module module-null-sink sink_name=virtmic1 sink_properties=device.description=Virtual_Microphone_Sink1

Con il modulo utilizzato, può essere catturata l'uscita attraverso il modulo remap che effettua un redirezionamento verso un ingresso a scelta

pactl load-module module-remap-source master=virtmic1.monitor source_name=virtmic1 source_properties=device.description=Virtual_Microphone1

Attraverso, un'interfaccia grafica come pavucontrol è possibile scegliere, per tutte le applicazioni, il sink (destinazione). sink

Selezionato il sink, è possibile scegliere come input dell'applicazione la sorgente audio desiderata e iniziare a inviare dati. vmic

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published