Avatar

klhopital

Comment apporter des capacités de communication entièrement distribuées et sécurisées aux produits embarqués et à l’IOT (Partie 2).

[L’introduction est en français, le reste du texte en anglais]

Dans un précédent article, nous vous présentions notre travail sur l’ajout de Jami dans Yocto. C’était un grand pas pour l’utilisation de Jami sur tous types d’appareils. Mais ce layer Yocto n’est utilisable que sur les architectures x86. En fait, c’était un pas vers le monde de l’embarqué, mais cela ne prouvait pas que Jami pouvait être utilisé sur une carte embarquée. C’est pourquoi, nous avons créé un layer pour exécuter Jami sur un i.MX6. Cet article décrit les raisons pour lesquelles nous avons ajouté Jami sur une carte embarquée et les étapes suivies pour exécuter Jami sur un i.MX6.

Why add Jami to an embedded board ?

Jami is an open source communication tool developed by Savoir-faire Linux. Running Jami on an embedded board such as the Toradex Apalis i.MX6 opens the opportunity to run it on other embedded boards. It also creates the possibility to have secure communication and private life protection on all kinds of devices. In today’s world and more tomorrow, lots of objects are connected to the Internet. This technology is called Internet of Things (IoT). These new multimedia communications are not confined to smartphones and laptops, but are new used in personnal assistants, connected ringbells, babyphones, and much more. The security of these communications is very important for our private life. Jami therefore fits into this objective with its serverless, distributed and secure end-to-end encrypted communications.

Jami is available at https://jami.net 

A layer system to run Jami on any platform

Yocto is organized on a layer system. This gives the freedom to take an existing layer and customize it by creating our own one on top of it. Therefore, the Jami i.MX6 layer is based on the previously created Jami layer (https://github.com/savoirfairelinux/meta-jami).

The main purpose of our work was to port Jami on a Toradex Apalis i.MX6 board without any significant source code modifications. Consequently, we created a layer that provides a machine, a distro and an image which includes Jami to run it on the Apalis i.MX6. The only source code modifications that we made was to use the hardware encoders and decoders of the i.MX6

Thus, we created two layers, the first one (meta-jami-imx : https://github.com/savoirfairelinux/meta-jami-imx) which includes Jami for i.MX6, that you can add to your i.MX6 custom image. And a second one (meta-jami-imx-toradex : https://github.com/savoirfairelinux/meta-jami-imx-toradex) that you just have to compile if you want to run Jami on the Toradex Apalis i.MX6.

Our work has been tested with a Toradex kernel based on a Freescale one. But you are free to use a mainline kernel, and it will not lead to a compiling issue. 

How it works ?

In order to perform a call, we need to use the hardware encoders and decoders present on the board instead of software ones. Without hardware acceleration, all video encoding and decoding operations are executed on the CPU. Video compression and decompression are complex algorithms that generally can not be executed in real time on CPU cores. Therefore, using software codecs would make Jami unusable.

Jami is based on FFmpeg, and it doesn’t support i.MX hardware codecs. That is why, we applied some patches to FFmpeg to include these codecs (https://github.com/savoirfairelinux/FFmpeg/tree/sfl/master). We added h264 encoder and decoder for sending and receiving video, as well as MJPEG decoder to support some camera output format. In order to add them we based our work on the community API libimxvpuapi that provides the control of the i.MX VPUs (https://github.com/Freescale/libimxvpuapi). In addition, the only Jami source code modifications that we made, is to use these hardware encoders and decoders of the i.MX6.

 

To sum up, you can pick the layers you want for your personal purpose. To run Jami on x86, add meta-jami to your project ; to run Jami on an i.MX6, add meta-jami-imx6 to your Yocto environment. Finally, a straightforward test would be to take meta-jami-imx-toradex and its dependencies, build the image provided, and you can enjoy Jami on the Toradex Apalis i.MX6.


Articles similaires

Image of an arrow
Thumbnail image

[L’introduction est en français, le reste du texte en anglais] TL;DR Les systèmes audio utilisent souvent des périphériques asynchrones, qui ont besoin d’être synchronisés avec du ré-échantillonnage. Nos mesures montrent que la charge CPU du ré-échantillonnage peut atteindre presque 30% d’un cœur sur un SoC i.MX8M Nano. Utiliser l’endpoint de feedback de l’USB gadget UAC2 […]

LF Energy SEAPATH

Paris, le jeudi 1er juin 2023 – L’entreprise franco-québécoise Savoir-faire Linux, chef de file de l’innovation technologique et de la transformation numérique open source au Canada et en Europe lance sa première offre de support commercial open source pour le projet Seapath dans le cadre de deux évènements d’importance majeure pour l’industrie de l’énergie : Le […]

[L’introduction est en français, le reste du texte en anglais] PipeWire, implémentation et évaluation Dans le dernier article, nous avons préparé un système audio sur lequel nous pourrions remplacer le serveur de son. De plus, nous avons expliqué les principaux concepts de JACK et PulseAudio en matière d’enregistrement et de lecture audio. Cette deuxième partie […]

Lauréats Trophées Fournisseus RTE

Rennes, le vendredi 2 décembre 2022 – Mardi soir s’est tenue la cérémonie des Trophées des fournisseurs 2022 de RTE, le gestionnaire du réseau de transport d’électricité haute tension en France, récompensant les meilleures solutions des fournisseurs sur des catégories en lien avec les enjeux actuels de RTE. Pour cette seconde édition, RTE a remis […]

[L’introduction est en français, le reste du texte en anglais] Mise en place du système audio Dans le monde des systèmes embarqués Linux, ALSA (Advanced Linux Sound Architecture) est l’API la plus bas-niveau pour les cartes son. Cependant, sa limite est de ne permettre qu’à une seule application d’ouvrir un périphérique. C’est pourquoi nous avons […]