Skip to content

shully899509/OpenParty

Repository files navigation

OpenParty

Cerinta: Media Player capabil sa ruleze fisiere video salvate local si sa functioneze ca un server de stream la un grup conectat de clienti. Player-ul va contine o functionalitate de "universal remote" unde orice participant din grup poate sa deruleze, opreasca sau re-porneasca video-ul prin comenzi trimise catre main player. Fiecare player va putea sa isi seteze in particular optiuni cum ar fi subtitrari custom sau volumul. Orice player client poate deveni la randul lui un server, pornind stream-ul unui alt fisier video local catre grup.

Player-ul va contine si o optiune de text chat si lista participantilor pentru a putea discuta fara a fi necesara o aplicatie externa de comunicare. (optional: functionalitate de webcam si/sau voice chat intre participanti)

Pasi de implementare

  1. Functionalitate player video capabil sa ruleze fisiere video salvate local (setare volum/subtitrare numai in sesiunea locala)
  2. Metoda de comunicare si streaming a pachetelor cu frame-uri si audio catre clienti (folosind protocol UDP?)
  3. Instructiunile play/pause si derularea video-ului din partea clientilor se vor transmite catre player-ul celui care face stream
  4. Capabilitatea de a opri primul stream automat atunci cand un client doreste sa devina urmatorul server si sa porneasca stream-ul catre un fisier al lui
  5. Functionalitate de chat intre participanti si lista celor activi in sesiune

6[o]. Functionalitate de webcam si/sau voice chat in sesiune
7[o]. Implementare protocol P2P pentru a putea distribui pachetele uniform intre noduri, nu doar de la server la client

Dependente curente:
player video
- opencv-contrib-python (libraria de cv2 si numpy incluse)
- ffpyplayer
- moviepy

interfata
- PyQt (pentru a putea adauga butoane si slider)
- tkinter

librarii pentru stabilirea conexiunii intre server-clienti
-

-- trebuie cautata o alternativa care sa proceseze video-ul si sa includa interfata de control (de cautat potentiale librarii) -- instalat PyQt5 -- de instalat K-Lite codec pack: http://www.codecguide.com/download_k-lite_codec_pack_full.htm

Aplicatii similare:
Teleparty, Disney Party Plus - extensii care permit sincronizarea mai multor participanti pentru acelasi stream de Netflix/Disney Plus (limitat ce ofera libraria serviciilor/fiecare persoana trebuie sa detina un abonament platit)
Watch2Gether - site care permite sincronizarea clipurilor de pe youtube/twitch/vimeo intr-o sesiune comuna
Syncplay - extensie pentru playere care permite sincronizarea intre fisierele locale ale participantilor (toti trebuie sa aibe acelasi fisier salvat)

Research de citit:
A Review on P2P Video Streaming
P2P Video Streaming Strategies based on Scalable Video Coding
Protocol de real-time streaming
PyPPSPP

cod curent testat pe PyQt5

UPDATE (06-06): mutat pe libraria PyQt pentru a genera interfata
server trimite la client frameuri video si sincronizeaza timestamp-ul si progress bar-ul
server face host prin TCP pentru chat in care poate primi comenzi de la client pentru a le executa (play/pauza/skipto)

dependente curente:
- opencv-contrib-python 4.5.2.52 --> pentru extras frame-uri din fisier video
- imutils 0.5.4 --> pentru a face resize la frame-uri
- PyAudio 0.2.11 --> stream la audio pe chunk-uri
- PyQt5 5.15.4 --> interfata si QThreads
- PyQt5-stubs 5.15.2.0
- psutil 5.8.0
- pycaw 20181226 --> control volum la nivel de windows API
- pyinstaller 4.3 --> pentru a compila executabile din codul sursa

(una din ele contine designer.exe pentru a contrui fisierele .ui)
- pyqt5-tools 5.15.4.3.2
- qt5-applications 5.15.2.2.2
- qt5-tools 5.15.2.1.2

[extern]
- ffplayer (pentru server ca sa genereze fisier audio)
- Radmin VPN (pentru LAN virtual)
fisiere folosite la rulare: "app/server/main_server.py", "app/server/main_client.py"
"pyinstaller --onefile <main_module>.py" ca sa generam executabilele pentru client si server (trebuie copiate fisierele .ui manual in acelasi director)

in cazul in care primim o eroare "pyinstaller AttributeError: module 'enum' has no attribute 'IntFlag'" atunci trebuie dezinstalat un modul
pip uninstall -y enum34
(probabil a fost instalat de o librarie folosita si nu e compatibil cu python 3.6)
https://stackoverflow.com/questions/43124775/why-python-3-6-1-throws-attributeerror-module-enum-has-no-attribute-intflag

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages