Jami-daemon sous Mobian arm64 (pinephone)

Salut,

déployer jami sur un pinephone est une galère :canoe: et je n’arrive pas à cross-compiler sur ma debian :sleepy_face:

j’ai réussi 2 fois déjà mais les SD ont crashé lorsque j’ai oublié de mettre en charge à temps… (mauvais point pour mobian ou pour la qualité des SD utilisées!)

je recommence depuis zéro mais je vais noter ici toutes les étapes pour pouvoir le reproduire sans les tâtônements. D’abord le système de base

wget https://images.mobian.org/sunxi/mobian-sunxi-phosh-13.0.img.xz
xz -d mobian-sunxi-phosh-13.0.img.xz
sudo dd if=mobian-sunxi-phosh-13.0.img of=/dev/sde bs=1M

Ensuite, dans une console sur le pinephone, après avoir configuré le Wi-Fi,

sudo apt-get update
sudo apt-get upgrade
sudo apt-get -y install openssh-server 
sudo reboot # nouveau kernel
sudo apt-get install -y build-essential git tmux
sudo apt-get install -y autoconf autoconf-archive autopoint automake cmake make dbus doxygen graphviz g++ gettext libasound2-dev libavcodec-dev libavdevice-dev libavformat-dev libboost-dev libcppunit-dev libdbus-1-dev libdbus-c++-dev libebook1.2-dev libexpat1-dev libgnutls28-dev libgtk-3-dev libjack-dev libopus-dev libpcre2-dev libpulse-dev libssl-dev libspeex-dev libspeexdsp-dev libswscale-dev libtool libudev-dev libyaml-cpp-dev sip-tester swig uuid-dev yasm libjsoncpp-dev libva-dev libvdpau-dev libpipewire-0.3-dev libmsgpack-dev pandoc nasm dpkg-dev libsystemd-dev libarchive-dev libgit2-dev libx264-dev libsecp256k1-dev libsdbus-c++-dev libsdbus-c++-bin
git clone https://git.jami.net/savoirfairelinux/jami-daemon.git
cd jami-daemon
##sed -i -e q/-j\${NPROC}/-j1/' CMakeList.txt # to avoid killing the pinephone
mkdir build
cd build
## je veux juste la voix pour commencer...
cmake .. -DJAMI_DBUS=on -DJAMI_VIDEO=off -DJAMI_VIDEO_ACCEL=off # c'est long
make # ça aussi, c'est long...
sudo make install
#Install the project...
#-- Install configuration: ""
#-- Installing: /usr/local/lib/libjami-core.a
#-- Installing: /usr/local/libexec/jamid
/usr/local/libexec/jamid -c -d -p 
## dans un autre terminal
~/jami-daemon/tools/jamictrl/jamictrl.py --list-audio-devices
#Output Devices
#0: default
#1: Audio interne Internal speaker
#Input Devices
#0: default
#1: Monitor of Audio interne Internal speaker
#2: Audio interne Internal Microphone

ça marche jusqu’ici…

mais il semble que les bindings python vers callManager soient cassés :frowning:

Le fichier d’installation DEB pour les processeurs ARM64 résoudrait-il votre problème ?


Would the DEB installation file for ARM64 processors solve your problem?

Si les make files sont disponibles, oui.

Et pour utiliser le jamid compilé sur un autre mobian sans devoir installer tous les paquets de build,

sudo apt-get install -y libgit2-1.9 libjsoncpp26 libsecp256k1-2 libyaml-cpp0.8 libsdbus-c++2
wget http://<builder.url>/jamid
sudo mv jamid /usr/local/bin/
tmux
jamid -c -d -p

et dans un autre terminal

wget http://<builder.url>/{controller.py,errorsDring.py,jamictrl.py,tester.py}
sudo mv *py /usr/local/bin/
tmux
jamictrl.py -h

usage réel sur alice

jamictrl.py --add-ring-account alice
account=$(jamictrl.py --get-all-accounts)
alice=$(jamictrl.py --get-account-details $account | awk '/Account.username/{print $2}')
# communicate $alice to bob
# wait for dring dring
call=$(jamictrl.py --get-call-list)
jamictrl.py --accept $call
jamictrl.py --hangup $call

et bob

jamictrl.py --add-ring-account bob
account=$(jamictrl.py --get-all-accounts)
bob=$(jamictrl.py --get-account-details $account | awk '/Account.username/{print $2}')
jamictrl.py --call $alice

la librairie controller.py est corrigée selon le ticket #1153
Mon correctif est disponible ici (github)

j’arrive à, via jamictrl.py,

  • créer un compte (add-ring-account)
  • initier un appel (call)
  • refuser (refuse)
  • décrocher (accept)
  • mettre en attente (hold)
  • reprendre (unhold)
  • racrocher (hangup)

par contre le son est juste un larsen inutilisable (entre 2 pinephones). J’espère arriver à fixer ceci…

Veuillez documenter les étapes de configuration de Jami sur le PinePhone.

Vos instructions peuvent être ajoutées à la page Configuration de Jami suivante.

Merci


Please document the steps to set up Jami on the PinePhone.

Your instructions can be added to the following Setup Jami page.

Thank you

Le lien suivant aide-t-il à résoudre votre problème de son (retour) ?
Does the following link help resolve your sound (feedback) issue?

Ceci inclut des informations provenant du message suivant.
This includes information from the following post.

S’il y a un larsen c’est qu’il y a une boucle audio.

  • est-ce que le test a été fait avec les 2 téléphones éloignés?
  • si oui, alors c’est un problème de config entre haut-parleur et micro (soit au niveau logiciel, avec un lien entre les deux, soit au niveau matériel lors de l’appel il y a une forte “repisse”: le micro capte trop le son provenant du haut-parleur -sur le même téléphone- normalement il y a un filtrage qui est fait en logiciel pour éviter ce problème). NB: je ne suis pas développeur jami, je connais juste ce type de problème du fait de mon expérience en home-studio.

effectivement le larsen provenait des règlages des micros et speakers… Une fois réglés sur earpiece en mode call, ça va et le son semble même bon pour un premier essai :ear_with_hearing_aid:

merci pour le pointeur.

reste à mieux suivre le call en cours car sinon, difficile de raccrocher. Je dois améliorer mon client :telephone_receiver: :nerd_face:

Mais en conclusion intermédiaire (mais d’importance à mes yeux): la dernière version de Jami-daemon fonctionne sur un PinePhone avec un Mobian et des paquets officiels pour le reste. Félicitations à l’équipe de Savoirfairelinux et à la communauté des jamistes!

2 Likes

Jami for PinePhone has been added to the following pages.

Please advise if there are any corrections or improvements required.

Thank you

Pour info, pour utiliser controller.py dans une application fait maison, je fait:

from controller import libjamiCtrl

class MyController(libjamiCtrl):

    #
    # Signal handling
    #

    def onIncomingCall_cb(self, callId):
        app.onIncomingCall(callId)

    def onCallHangup_cb(self, callId):
        app.onCallHangup(callId)

    def onCallConnecting_cb(self, callId):
        app.onCallConnecting(callId)

    def onCallRinging_cb(self, callId):
        app.onCallRinging(callId)

    def onCallHold_cb(self):
        app.onCallHold()

    def onCallInactive_cb(self):
        app.onCallInactive()

    def onCallCurrent_cb(self):
        app.onCallCurrent()

    def onCallBusy_cb(self):
        app.onCallBusy()

    def onCallFailure_cb(self):
        app.onCallFailure()

    def onCallOver_cb(self):
        app.onCallOver()

class MainApp(App):
    @mainthread
    def onIncomingCall(self, callId):
        self.feedback.text += "\nAppel de %s!" % str(ctrl.activeCalls[callId]['To'])

    @mainthread
    def onCallStateChanged(self, account, callId, state, code):
        self.feedback.text += "\n(%s) %s..."% (callId, state)

    @mainthread
    def onCallHangup(self, callId):
        self.feedback.text += "\nRaccroché!"

    @mainthread
    def onCallConnecting(self, callId):
        self.feedback.text += "\nConnecting..."

    @mainthread
    def onCallRinging(self, callId):
        self.feedback.text += "\nÇa sonne chez %s..." % str(ctrl.activeCalls[callId]['To'])

    @mainthread
    def onCallHold(self):
        self.feedback.text += "\nEn attente..."

    @mainthread
    def onCallInactive(self):
        self.feedback.text += "\nDring! Dring!"

    @mainthread
    def onCallCurrent(self):
        self.feedback.text += "\nParlez..."

    @mainthread
    def onCallBusy(self):
        self.feedback.text += "\nOccupé!"

    @mainthread
    def onCallFailure(self):
        self.feedback.text += "\nÉchec!"

    @mainthread
    def onCallOver(self):
        self.feedback.text += "\n(vide)"

if __name__ == "__main__":
    ctrl = MyController("demo", False)
    app = MainApp()
    ctrl.start()
    app.run()

mes essais so far:

si j’appelle le pinephone actif, il sonne et je peux décrocher et parler normalement. :telephone_receiver:

si le pinephone est en veille, il sonne; je l’active, il continue à sonner mais impossible de décrocher car l’appel est marqué en échec chez l’émetteur… et impossible d’arreter le pinephone de sonner jusqu’à ce qu’il décroche un autre appel avec succès :cry:

Does the following issue relate to your problem?

If so, please add yourself to the issue by adding a comment or adding a :+1:.

Thank you

Jami for homemade applications has been added to the following pages.

Please advise if there are any corrections or improvements required.

Thank you

1 Like

pour avoir un POC complet pour un client voix uniquement, j’ai du ajouter le traitement de l’état INCOMING pour un call et corriger l’une ou l’autre typo dans controller.py ou jamictrl.py…

Le bug de la sonnerie qui ne s’arrête pas est malheureusement rédhibitoire pour un vrai usage.

j’ai réécrit mon client python :snake: de kivy en pyqt6. C’est mieux! Le PinePhone ne répond plus aux touch alors qu’il dort :nerd_face:

Encore l’un ou l’autre petit bug de gestion de signal :exploding_head: et ce sera bon pour la gestion de la voix :telephone_receiver: .

Par contre, la gestion des contacts et invitations n’est pas claire dans la documentation :frowning: Je galère pour l’inclure dans un client maison…