[sdk] creare un'applicazione zoom meeting

di il
7 risposte

[sdk] creare un'applicazione zoom meeting

Devo sviluppare un servizio taxi e con il committente siamo giunti a questa soluzione:
1 gli autisti del taxi sono collegati ad un sistema centralizzato
2 venti autisti di taxi sono in comunicazione l'uno con l'altro mediante audio come in una conference room.
3 Il cliente effettua una chiamata ad un centralino con unsolo telefono o numero che rispondendo in automatico, "si inserisce" nella conference room chiedendo a tutti i taxi che desidera un taxi in una certa località.

Questa soluzione mi sembra una applicazione Zoom Meetings, cioè che i taxi sono in continua conferenza.
Il taxi driver decidendo il proprio turno (se nessun altro parla in quel momento) puo esprimersi in broadcast a tutti gli altri taxi che lo ascoltano.
Succede che il cliente che chiama il servizio taxi, deve momentaneamente partecipare anche lui all'audio conferenza con tutti i taxi, quando mette giu la cornetta allora non partecipa. Solo un cliente alla volta si mette in contatto con tutti i taxi nella stessa room.

come si fa in python a creare un unico flusso di dati preso dal microfono e invarlo a chunk di 4kb tra un client/server e altri client/server?
come si fa a creare un canale condiviso tra i partecipanti?

Dovrò senza dubbio creare un applicazione che usa i socket sia lato server che lato client. Il server rimane in ascolto e riceve dell'audio streaming preso dal microfono grazie ad alcune librerie. Il client che è collegato al server riceve l'audio. Cosi per ogni copia client/server di utenti.

Potete aiutarmi a capire anche come inoltrare o inserire una chiamata asterisk all'interno del socket tra client e server che in quel momento stanno trasmettendo l'audio dal mic.

7 Risposte

  • Re: [sdk] creare un'applicazione zoom meeting

    E' un lavoro che mi è stato commissionato. Offre anche un buon ricompenso.
    Diciamo intorno a 50 mila eur, oppure il sborso per l'assistenza intorno ai mille euro mensile.
    Cerco anche un collaboratore che voglia spartire gli utili.Mio zio conosce il committente io non lo conosco direttamente, ed è della Romania. Lui possiede se ho capito bene e lavora nella ditta che offre servizio taxi ai propri clienti.

    Dunque
    Fino ad ora ho installato un centralino asterisk e fatto due configurazioni di base per capirlo un attimo.
    Pero' cio che serve a me non è un vero centralino perchè dal numero 3273509509 i clienti chiamano il servizio, che rigirando la chiamata ad un numero interno, il centralino ma fatto di un solo numero interno risponde in automatico.

    l'applicazione asterisk dovrà registrare la chiamata tra il centralino e il cliente sul server asterisk.
    Posso nel frattempo intercettare l'evento del file system. leggere il file della chiamata e aprire un socket verso tutti i server installati su ciascun taxi che creano la "room" tra autisti.
    Questo perchè tutti gli autisti devono sentire la richiesta del cliente e solo un autista informa tutti gli altri in ascolto che passerà lui a prendere il cliente nel luogo che ha detto.

    Per adesso ho provato degli script python per leggere dal microfono(server) e trasferirli(il client collegato che sente)

    Primo problema è che ottengo dei FISCHI ed un ECHO(dice piu volte lo stesso messaggio) insopportabili e un ritardo nella ricezione.
    Pensando fosse pyudio allora ho provato con C++ ma lo stesso. Ci deve essere qualche tecnica per limitare i rumori, fischi e echo.
    Devo fare delle prove con almeno 3 utenti.

    Uso pyaudio oppure openal (open audio library) per l'audio da microfono. Poi i socket client e server. infine asterisk per la registrazione della chiamata da client zoiper.
  • Re: [sdk] creare un'applicazione zoom meeting

    Non necessariamente deve fare tutte cose che fa Zoom, mi basta che crea pero' di base una room con dei partecipanti in cui si puo parlare e sentire. Poi è da trovare un modo per "inerire l'audio real time della chiamata" all'interno della room cosi anche il cliente puo partecipare. Al termine della chiamata il cliente si disconnette.
  • Re: [sdk] creare un'applicazione zoom meeting

    Salve,
    Credo lei stia usando il protocollo TCP...
    Vorrei avvisarla che in una comunicazione streaming, ad esempio audio o video, viene utilizzato il protocollo UDP.
    Con tale protocollo si saltano i controlli di verifica dei pacchetti immessi in rete, pertanto:
    1) risulta notevolmente più veloce, limitando drasticamente i ritardi;
    2) scala un po' la qualità audio, quindi forse può rimuovere l'eco di cui parlava. Oltre a questo, a volte si perdono qualche frame, comunque è una condizione trascurabile nel suo caso, essendo una chiamata vocale.

    Nel resto, sono dispiaciuto ma non posso aiutarla, non conoscendo l'uso pratico di Asterisk.
  • Re: [sdk] creare un'applicazione zoom meeting

    Non si tratta di usare asterisk per tutto il sistema.
    Soltanto nella parte di comunicazione con il cliente.
    Dovrò registrare la conversazione e in tempo reale eseguire il file audio della chiamata (se si riesce) e trasmettere via socket agli autisti.
    Con asterisk essendo un centralino mi gestisce la sola chiamata in ingresso, cioè chiamo dal 3273509509 inoltra la chiamata al numero interno 6001, asterisk risponde in automatico, eseguendo il file audio "Buongiorno 'liketaxi' come posso esserle utile?", iniziando a registrare su file audio wav.

    il resto dell'applicazione è come Zoom meeting: creo una stanza per gli autisti, il flusso della chiamata del cliente viene inserita tra partecipanti della stanza in modo che la possono sentire. Mettendosi d'accordo, un solo autista risponde a tutti (autisti e cliente) "IO IO".

    Invece se fosse come stile radio?

    Cosi non ci sarebbe un flusso continuo ma solo su richiesta. L'autista fa tap su un bottone dell'applicazione e puo iniziare a parlare se nessun altro lo sta facendo. fa tap nuovamente sul bottone per terminare. Invece che avere il microfono sempre attivo, lo attiva lui manualmente.
  • Re: [sdk] creare un'applicazione zoom meeting

    Mi sembra una buona soluzione,
    in questo caso devi programmare bene il server.

    Sempre tramite l'UDP, non andando a creare una connessione logica, contrariamente al TCP, si può mettere in ascolto il server nella porta specifica e il primo che va a premere, o meglio... il primo pacchetto che arriva al server, sarà il prescelto. Tale scelta verrà comunicata istantaneamente tramite protocollo TCP a tutti i taxi connessi.

    La connessione tramite TCP la crei per sapere quanti taxi sono disponibili, e altre info (tipo codice identificativo, km percorsi, se è disponibile o meno...) che magari ogni tot tempo vengono mandate al server appunto per confermare la loro presenza.

    Il server quindi ha un socket UDP per inoltrare la chiamata e per ricevere le prenotazioni degli autisti; un socket TCP per ogni taxi, con cui comunica periodicamente; il supporto ad Asterisick che comunica con il primo socket.

    Può andare?
  • Re: [sdk] creare un'applicazione zoom meeting

    A me sembra che si voglia CREARE una montagna (il software di videoconferenza) usando un cucchiaino di plastica (il TCP/IP).
    Anche usando librerie gia' pronte che facciano il 90% del lavoro, il rimanente 10% e' ancora un lavorone complesso per personale MOOOOOOOOOLTO esperto.

    Gia' la scelta di Python e', a mio avviso, "fallimentare": NON E' il suo mestiere.
    E' un linguaggio di programnazione "general purpose", vero, MA NON E' il linguaggio adatto a questo tipo di applicazioni.

    Boh.
  • Re: [sdk] creare un'applicazione zoom meeting

    Non bisogna essere nel profondo esperti in tutto altrimenti è come dice @migliorabile, dovrebbe bastare mettere in piedi un architettura server/client su ogni tablet basata su librerie audio. Zoom è complessa ma perchè ha tante funzionalità. A me non servono tutte.
    Posso implementarlo in c++ ma trovo tutte le librerie anche in python: pyaudio, socket, pyinotify, kivy
    E' anche un sfida, un bel progetto di programmazione, ci sono dei software come zoom ma opensource che posso guardare per capire che lib usano.
    Cio che serve:
Devi accedere o registrarti per scrivere nel forum
7 risposte