Serveur multimedia ArtNet

De Centre de Ressources Numériques - Labomedia
Aller à : navigation, rechercher

Projet en cours de développement.

Matériel

Switch WIFI

https://www.pcastuces.com/pratique/materiel/pont_wifi/page1.htm

https://www.amazon.fr/TP-Link-TL-WA901ND-passive-antenne-démontable/dp/B002YETVXC/?tag=hardwfr-21

http://www.netgear.fr/business/products/wireless/essentials-wireless/WAC104.aspx

https://kb.netgear.com/20927/How-do-I-change-my-NETGEAR-router-to-AP-mode-after-I-ve-already-run-setup

https://support.actlighting.com/knowledgeBase/7374771

https://support.actlighting.com/knowledgeBase/13194057

Mettre à jour le firmware

Changer le canal de diffusion choisir le 1 le 12 et le 13 peuvent poser des problèmes.

Installer un disque dur

Pour pouvoir utiliser des fichiers vidéos conséquents, nous allons utiliser le système de fichier exFat. Pour cela, il faut installer le gestionnaires sur la PI

sudo apt-get update
sudo apt-get install exfat-fuse

Une fois le disque branché sur un port USB de la Raspberry, taper :

sudo fdisk -l

Vous verrez ains que le disque de 250 Go a bien été détecté. Vous devez avoir un résultat semblable :

Disk /dev/sda: 232.9 GiB, 250025607168 bytes, 488331264 sectors

Préparer la partition du disque

sudo cfdisk /dev/sda 

Il faut d'abord supprimer la partition existante, si besoin utiliser les flèches Haut et Bas pour vous déplacer et choisir la bonne partition à effacer. Une fois celle-ci sur-lignée, allez sur [ Delete ] avec les flèches Droite et Gauche, puis valider avec Enter.

Créer une nouvelle partition

Allez sur [ New ] et validez. Comme nous n'en créons qu'une seule elle prendra la totalité de l'espace disque, donc valider la taille proposée. Et validez la création d'une partition Primaire. Votre partition st créée et elle s'affiche. Nous allons modifier le type de la partition en allant sur [ Type ] et validez. dans le menu déroulant choisissez le type

7 HPFS/NTFS/exFAT

Pour finaliser, aller sur [ Write ] et validez et confirmez avec yes Le message suivant s'affiche :

The partition table has been altered.

L'opération s'est donc bien déroulée. Pour quitter l'application allez sur [ Quit ] et validez.

Vous pouvez vérifier le résultat avec :

sudo fdisk -l

Formater la partition

Une fois la pétition crée, il faut la formater avec :

sudo mkfs.exfat -n RaspiHDD /dev/sda1

Monter le disque dur

Créer le répertoire dans lequel le disque sera monté par exemple pour qu'il soit facilement accessible, le nom du répertoire sera par exemple PIHDD :

sudo mkdir /home/pi/PIHDD

Monter le disque au point voulu :

sudo mount /dev/sda1 /home/pi/PIHDD

Vérifier que l'opération s'est bien déroulée. Aucune erreur ne devrait apparaître :

ls /home/pi/PIHDD

Monter les disque automatiquement au démarrage

Repérer en premier lieu l'identifiant de la partition (UUID) :

sudo blkid

Par exemple 5C24-1453

Il faut ensuite modifier le fichier fstab

sudo nano /etc/fstab

Ajouter à la fin du fichier la ligne suivante :

UUID=5C24-1453 /home/pi/PIHDD exfat defaults,auto,umask=000,users,rw 0 0

Ctrl + O validez et Ctrl + X pour finaliser l'opération.

Sources

Installer OLA

https://www.openlighting.org/ola/linuxinstall/

Installer les dépendances :

sudo apt-get install autoconf uuid-dev pkg-config libncurses5-dev libtool libcppunit-dev libmicrohttpd-dev automake g++ protobuf-compiler libprotobuf-lite10 python-protobuf libprotobuf-dev libprotoc-dev zlib1g-dev bison flex make libftdi-dev libftdi1 libusb-1.0-0-dev liblo-dev libavahi-client-dev python-numpy


Avec Git

sudo apt-get install git
git clone https://github.com/OpenLightingProject/ola.git ola
cd ola

Pour installer les fichiers manquants :

autoreconf -i

Pour configurer l'installation

./configure --help

Vous donnera la liste des éléments possible à inclure. Ici nous allons faire simple, nous n'utiliserons que la partie ArtNet

./configure --disable-all-plugins --enable-artnet --enable-http

Compiler en utilisant les quatre coeurs du processeur (durée 25 minutes):

make -j4
make check
sudo make install

Pour pouvoir utiliser les nouvelles libraires installées :

sudo ldconfig

Pour lancer le serveur lad

olad -l 3

Vous pouvez à présent vérifier que vous pouvez accéder au serveur en tapant dans votre navigateur préféré :

raspberrypi.local:9090

Une page s'affiche. Il va falloir activer un univers. Cliquer sur le bouton [Add Universe]. Pour notre affaire, il faut remplir les champs

Universe Id : 0
Universe Name : Raspberry0

Et cocher la case

ArtNet [192.168.1.x]         Input

Puis valider la création en cliquant sur le bouton [Add Universe]. Désormais il apparait dans les univers actifs.

Pour vérifier qu'il reçoit bien des informations, dans le menu de gauche cliquer sur Raspberry0, puis sur l'onglet [DMXMonitor] Dans cette page vous pouvez voir toutes les valeurs reçues par le serveur OLA.

Configurer OLA

https://www.openlighting.org/ola/advanced-topics/patch-persistency/

Installer OMXPlayer

git clone https://github.com/popcornmix/omxplayer.git

Une fois le téléchargement fini

cd omxplayer

Installer les dépendances :

sudo apt-get update && sudo apt-get install  git-core libasound2-dev libva1 libpcre3-dev libboost-dev libssl1.0-dev libssh-dev libsmbclient-dev

Le script prépare les fichiers nécessaire à l'installation. S'i manque des dépendances, ce script demande de les installer.

./prepare-native-raspbian.sh

Compiler avec

make ffmpeg
make -j4

Puis installer avec :

sudo make install

https://github.com/turingmachine/omxplayer-sync

Programmation C++

https://docs.openlighting.org/ola/doc/0.10.4/namespaceola_1_1client.html

g++ -o multi multi.cpp $(pkg-config --cflags --libs libola)
///////////////////////////////////////////////////////////////////////////////////////////////////
//
// g++ -o multi multi.cpp $(pkg-config --cflags --libs libola)
//
///////////////////////////////////////////////////////////////////////////////////////////////////

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <dirent.h>
#include <fstream>

#include <ola/DmxBuffer.h>
#include <ola/Logging.h>
#include <ola/client/ClientWrapper.h>

using namespace std;

// Variabes globales
static const string chemin = "/home/pi/PIHDD/";
vector<string> listeFichiers;
int fichirEnLecture = -1;

void RegisterComplete(const ola::client::Result& result) {
    if (!result.Success()) {
        OLA_WARN << "Failed to register universe: " << result.Error();
    }
}

void arreterVideo(int index) {
    cout << "-------------------------------------------------" << endl;
    cout << "Arrêt vidéo" << endl << endl;
    system("killall omxplayer.bin");
}

void demarrerVideo(int index) {
    cout << "-------------------------------------------------" << endl;
    cout << "Video : " << listeFichiers[index] << endl << endl;
    int pid = fork();
    if(pid == 0) {
        string fichierVideo = chemin + listeFichiers[index];
        execlp("omxplayer", " ", fichierVideo.c_str(), NULL);
        _exit(0);
    }
}

// Appeler lors de la réception d'une trame DMX
void NewDmx(const ola::client::DMXMetadata &metadata,
            const ola::DmxBuffer &data) {
    if ((fichirEnLecture >= 0) && (data.Get(fichirEnLecture) < 128)) {
        arreterVideo(fichirEnLecture);
        fichirEnLecture = -1;
    }
    for (int i = 0; i < listeFichiers.size(); i++) {
        if (data.Get(i) > 127) {
            if (fichirEnLecture != i) {
                arreterVideo(fichirEnLecture);
                fichirEnLecture = i;
                demarrerVideo(fichirEnLecture);
                break;
            }
        }
    }
}

void listerRepertoire(string chemin, vector<string> &tableau) {
    DIR* repertoire = opendir(chemin.c_str());
    struct dirent* fichierLu;
    if (repertoire != NULL) {
        while ((fichierLu = readdir(repertoire)) != NULL) {
            if (fichierLu->d_name[0] != '.') {
                tableau.push_back(fichierLu->d_name);
            }
        }
        sort (tableau.begin(), tableau.end());
    }
    closedir(repertoire);
}

unsigned int univers() {
    unsigned int univers;
    ifstream fichier("/home/pi/.ola/ola-port.conf", ios::in);
    string ligne;
    size_t position;
    while(getline(fichier, ligne)) {
        position = ligne.find("2-1-I-0 = ");
        if (position == 0) {
            ligne = ligne.substr(10);
            univers = stoi(ligne);
            cout << univers << endl;
        }
    }
    
    fichier.close();
    return univers;
}

int main() {
    // Lister les fichiers vidéos présents
    listerRepertoire("/home/pi/PIHDD", listeFichiers);
    for (int i = 0; i < listeFichiers.size(); i++) {
        cout << listeFichiers[i] << endl;
    }
    
    ola::InitLogging(ola::OLA_LOG_INFO, ola::OLA_LOG_STDERR);
    ola::client::OlaClientWrapper wrapper;
    if (!wrapper.Setup())
        exit(1);
    ola::client::OlaClient *client = wrapper.GetClient();
    // Set the callback and register our interest in this universe
    client->SetDMXCallback(ola::NewCallback(&NewDmx));
    client->RegisterUniverse(
                             univers(), ola::client::REGISTER,
                             ola::NewSingleCallback(&RegisterComplete));
    wrapper.GetSelectServer()->Run();
    return 0;
}

Configuration supplémentaires

https://www.supinfo.com/articles/single/2442-raspbian-jessy-configuration-wifi-ligne-commande

https://wiki.openlighting.org/index.php?title=Raspberry_Pi_Media_Player

Écran noir au démarrage

  • modifier le fichier cmdline.txt
sudo nano /boot/cmdline.txt

et ajouter sur la même ligne à la fin

consoleblank=20
  • source

https://www.raspberrypi.org/documentation/configuration/screensaver.md

Accéder à la borne

sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

Adresse IP fixe

sudo nano /etc/dhcpcd.conf
interface wlan0
static ip_address=2.0.0.11


I've been fighting this all evening. My solution on a fresh Raspbian Lite install:

Make sure your wpa_supplicant.conf is in place then do Code: Select all

sudo nano /etc/network/interfaces and add Code: Select all

allow-hotplug wlan0 iface wlan0 inet manual

   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

to the end of the file. Then do Code: Select all

sudo systemctl enable wpa_supplicant.service Then reboot.

GrandMA2

Configuation ArtNet