tag:linuxfr.org,2005:/tags/libav/publicLinuxFr.org : les contenus étiquetés avec « libav »2018-05-13T20:50:17+02:00/favicon.pngtag:linuxfr.org,2005:Diary/377912018-03-09T10:00:00+01:002018-03-09T10:36:44+01:00scrcpy, une appli pour afficher et contrôler des devices AndroidLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Bonjour nal,</p>
<p>Je viens te présenter une application que j'ai développée, qui permet d'afficher et de contrôler des <em>devices</em> Android connectés en USB.</p>
<p><a href="https://github.com/Genymobile/scrcpy"><img src="//img.linuxfr.org/img/68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f47656e796d6f62696c652f7363726370792f6d61737465722f6173736574732f73637265656e73686f742d64656269616e2d3630302e6a7067/screenshot-debian-600.jpg" alt="scrcpy" title="Source : https://raw.githubusercontent.com/Genymobile/scrcpy/master/assets/screenshot-debian-600.jpg"></a></p>
<p>Elle se concentre sur :</p>
<ul>
<li>la <strong>légèreté</strong> (native, affiche uniquement l'écran)</li>
<li>les <strong>performances</strong> (30~60fps)</li>
<li>la <strong>qualité</strong> (1920×1080 ou plus)</li>
<li>la <strong>faible latence</strong> (70~100ms)</li>
<li>un <strong>démarrage rapide</strong> (~1 seconde pour afficher la première image)</li>
<li>la <strong>non-intrusivité</strong> (rien ne reste installé sur le device)</li>
</ul><p>Je l'ai appelée <a href="https://github.com/Genymobile/scrcpy">scrcpy</a>.</p>
<p>Il fallait un nom aussi <a href="https://github.com/Genymobile/scrcpy#why-scrcpy">imprononçable</a> que mon précédent projet, <a href="//linuxfr.org/news/du-reverse-tethering-sur-android-sans-root">gnirehtet</a> (tu te souviens peut-être, je t'avais parlé de sa <a href="//linuxfr.org/users/rom1v/journaux/du-reverse-tethering-en-rust">réécriture en Rust</a>).</p>
<p>Cette fois-ci, c'est une application en C qui utilise <a href="https://www.libsdl.org/">SDL</a> et <a href="https://www.libav.org/">libav/FFmpeg</a>.</p>
<h3 id="compiler-et-installer">Compiler et installer</h3>
<p>Pour la compiler et l'installer, tout est expliqué dans le <a href="https://github.com/Genymobile/scrcpy/blob/master/README.md">README</a>.</p>
<p>Le plus simple, c'est de prendre la partie serveur <a href="https://github.com/Genymobile/scrcpy/blob/master/README.md#prebuilt-server">déjà compilée</a> (ça t'évitera d'installer Java et le SDK Android).</p>
<p>Ensuite (pour <em>Debian</em>/<em>Ubuntu</em>) :</p>
<pre><code class="bash">sudo apt install android-tools-adb ffmpeg libsdl2-2.0.0 <span class="se">\</span>
make gcc pkg-config meson <span class="se">\</span>
libavcodec-dev libavformat-dev libavutil-dev <span class="se">\</span>
libsdl2-dev
<span class="c1"># replace by the path where you downloaded scrcpy-server.jar</span>
meson x --buildtype release --strip -Db_lto<span class="o">=</span><span class="nb">true</span> <span class="se">\</span>
-Dprebuilt_server<span class="o">=</span>/path/to/scrcpy-server.jar
<span class="nb">cd</span> x
ninja
sudo ninja install</code></pre>
<p>Quelqu'un a aussi fait un paquet <a href="https://aur.archlinux.org/packages/scrcpy/">AUR</a> pour Arch.</p>
<h3 id="exécuter">Exécuter</h3>
<p>C'est assez simple :</p>
<pre><code class="bash">scrcpy</code></pre>
<p>Il est possible de passer des <a href="https://github.com/Genymobile/scrcpy#run">options</a>, décrites dans l'aide :</p>
<pre><code class="bash">scrcpy --help</code></pre>
<p>Une fois l'écran du <em>device</em> affiché, des <a href="https://github.com/Genymobile/scrcpy#shortcuts">raccourcis</a> permettent d'effectuer des actions spéciales.</p>
<p>J'espère que cette application pourra t'être utile à l'occasion ;-)</p>
<h3 id="liens-en-anglais">Liens (en anglais)</h3>
<ul>
<li><a href="https://blog.rom1v.com/2018/03/introducing-scrcpy/">Présentation du projet sur mon blog</a></li>
<li><a href="https://github.com/Genymobile/scrcpy">Projet sur github</a></li>
<li><a href="https://github.com/Genymobile/scrcpy/blob/master/DEVELOP.md">Page développeurs</a></li>
<li><a href="https://news.ycombinator.com/item?id=16544977">Hacker News</a></li>
<li><a href="https://www.reddit.com/r/Android/comments/834zmr/introducing_scrcpy_an_app_to_display_and_control/">Reddit</a></li>
</ul><div><a href="https://linuxfr.org/users/rom1v/journaux/scrcpy-une-appli-pour-afficher-et-controler-des-devices-android.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/113903/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/rom1v/journaux/scrcpy-une-appli-pour-afficher-et-controler-des-devices-android#comments">ouvrir dans le navigateur</a>
</p>
®omhttps://linuxfr.org/nodes/113903/comments.atomtag:linuxfr.org,2005:Diary/376482017-12-15T02:20:38+01:002017-12-18T14:13:50+01:00Taliesin, serveur de streaming audioLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Dernier né de mon interface chaise-clavier, le besoin est de pouvoir écouter de n'importe où la musique que je stocke et classe amoureusement depuis longtemps. D'autant plus que je me refuse toujours à prendre des abonnements auprès des services payants comme Spotify ou [Google|Apple] Music. Également, je souhaite pouvoir déporter la lecture des flux audio sur des lecteurs externes comme VLC, ainsi que les différents Raspberry PI qui peuplent ma demeure et qui hébergent entre autres un service MPD.</p>
<p>Depuis quelques années, je combinais l'utilisation de liquidsoap/icecast pour me faire une webradio de toute ma musique, et également subsonic pour écouter ma musique à la demande. Les deux ont rempli leur rôle avec plus ou moins de succès, mais avec le temps, j'ai eu envie d'avoir un système de webradio plus souple, et également de pouvoir jouer la musique que je veux dans chaque pièce de la maison.</p>
<p>Voilà donc le fruit de mon labeur, un logiciel que j'ai appelé Taliesin, emprunté au nom d'un barde (entre autres choses) dans la mythologie celtique et la légende arthurienne.</p>
<p>Il transcode en temps réel la musique qu'on lui demande de lire et balance tout ça dans un flux http au format qu'on lui aura demandé. Il se base sur <a href="https://libav.org/">libav</a> pour la partie audio, le truc qu'on trouve sous ffmpeg notamment, ainsi que <a href="https://github.com/babelouest/ulfius">Ulfius</a> dont j'avais <a href="//linuxfr.org/users/superzen/journaux/ulfius-framework-pour-faire-des-api-web-en-c">déjà parlé ici</a>, qui s'occupe de la partie serveur HTTP et <a href="https://github.com/babelouest/hoel/">Hoel</a> qui s'occupe de l'accès à la base de données (MariaDB ou SQLite3).<br>
Il ne s'occupe pas d'authentification parce qu'il préfère laisser ça à ceux qui savent le faire, et mange donc du token OAuth2 JWT qu'un <a href="https://github.com/babelouest/glewlwyd">Glewlwyd</a> par exemple peut fournir pour s'assurer que l'utilisateur a bien le droit de lui parler. Il peut aussi fonctionner sans authentification si c'est vraiment ce que tu veux, mais gaffe.<br>
Seuls les flux audio en tant que tels n'utilisent pas de token OAuth2 pour l'authentification. En effet, les divers lecteurs qui sont capables de lire des flux comme VLC, MPD ou même la balise du HTML5 ne savent pas gérer des tokens dans le header HTTP à ma connaissance. Pour pallier ça, un flux audio possède une URL générée aléatoirement sur une chaîne de 32 caractères alphanumériques, genre <code>http://localhost:8576/api/stream/abcdefghijkLMNOPQRSTUV0123456789/</code>. Je me dis qu'avec environ 62<sup>32</sup> = 2x10<sup>57</sup> URL à tester, ça va prendre du temps à une personne malintentionnée pour en deviner…</p>
<p>Il sait lire tous les formats que connait libav, et il peut transcoder en mp3, ogg/vorbis ou flac, dans divers bitrates ou fréquences.</p>
<p>Il propose deux types de flux audio:<br>
- La webradio: Tu lui demandes de te lire un ensemble de fichiers, et il t'envoie ça dans un flux qui a une url unique et en continu, comme une webradio, ça gère plusieurs utilisateurs simultanés et ça envoie même le titre via les métadata ICY, mais pour des raisons techniques, ça ne peut t'envoyer que du mp3. Par contre, à la différence d'un Icecast, il se met en pause s'il n'y a aucun client qui écoute le flux.<br>
- le jukebox: tu lui demandes de te lire un ensemble de fichiers, mais c'est toi qui dit ce que tu veux lire et quand, et donc chaque fichier a une URL unique, de la forme <code>http://localhost:8576/api/stream/abcdefghijkLMNOPQRSTUV0123456789/?index=42</code>.</p>
<p>Taliesin est capable de lire les métadonnées (artiste, album, etc.) dans les fichiers, sauf les ogg, pour une raison qui m'échappe encore. Il sait aussi lire et afficher les images des fichiers audio.</p>
<p>Taliesin est multi-utilisateurs avec un niveau administrateur et un niveau utilisateur, l'idée derrière ca est de permettre de partager des bibliothèques de musique entre les utilisateurs mais en évitant qu'une mauvaise manipulation d'un utilisateur supprime des bibliothèques ou des playlists partagées par exemple.</p>
<p>Il n'y a pas de contrôle de ressources utilisées, tous les utilisateurs peuvent lire autant de flux qu'ils veulent en même temps, créer autant de playlists qu'ils souhaitent, etc. Je pars du postulat de base que les utilisateurs sont amicaux avec le service et ne lui veulent pas du mal. Ça tourne plutôt bien sur une petite machine, j'ai fait quelques tests avec un Raspberry PI Zero et ça gérait ça assez bien ma foi. Il roulait avec une clé Wifi et les fichiers audio étaient accédés via NFS sur mon NAS dans le même réseau local, et je n'ai pas observé de problèmes pour un utilisateur unique.</p>
<p>L'API est écrite en C, sous licence GPL V3, le client web est en ReactJS, sous licence MIT.</p>
<p>Plus tard, Taliesin pourra peut-être aussi lire des videos, et même envoyer un flux sur un icecast, un vrai, avec lequel on pourra choisir son format de sortie pis toute. Pour l'instant je me concentre sur finir la version 1.0, il reste des bugs dans l'interface et dans l'API avant que ce soit fini.</p>
<p>L'URL du projet sur GitHub: <a href="https://github.com/babelouest/taliesin">https://github.com/babelouest/taliesin</a></p><div><a href="https://linuxfr.org/users/superzen/journaux/taliesin-serveur-de-streaming-audio.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/113314/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/superzen/journaux/taliesin-serveur-de-streaming-audio#comments">ouvrir dans le navigateur</a>
</p>
Babelouesthttps://linuxfr.org/nodes/113314/comments.atomtag:linuxfr.org,2005:Diary/360212015-08-03T15:56:25+02:002015-08-03T15:56:25+02:00La saga FFmpeg continueLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Suite de mon dernier journal il y a presque un an jour pour jour :<br><a href="//linuxfr.org/users/desktop-ready-0/journaux/ffmpeg-de-retour-dans-debian">FFmpeg de retour dans Debian</a></p>
<p>Ce ne sera pas une grande surprise pour beaucoup de monde, mais Debian a décidé de remplacer Libav par FFmepg comme fournisseur des bibliothèques multimédia libav* :<br><a href="http://article.gmane.org/gmane.linux.debian.devel.announce/2062">libav and FFmpeg: switch over</a></p>
<p>L'annonce a été faite le 8 juillet et certains s'interrogeaient déjà de la pertinence de cette décision, avec entre autre l'argument habituel que FFmpeg dépendait trop de Michael Niedermayer (le leader de FFmpeg) et que ce n'était pas une situation pérenne :<br><a href="https://lwn.net/Articles/650816/">Why Debian returned to FFmpeg</a></p>
<p>Coup de tonnerre le 31 juillet avec l'annonce de la démission en tant que leader (pas forcément en tant que contributeur) de Michael Niedermayer qui cite le travail/stress occasionné par l'intégration des « commits du fork » comme cause principale de sa démission ("Indeed i fully admit the work and pressure caused by the merges is a main reason for my resignation"):<br><a href="http://ffmpeg.org/pipermail/ffmpeg-devel/2015-July/176489.html">FFmpegs future and resigning as leader</a></p>
<p>L'histoire de ce fork est remarquable à plus d'un titre :<br>
* FFmpeg/Libav est très largement utilisé, aussi bien directement qu'indirectement<br>
* Réaction de Michael Niedermayer suite au fork : il a apparemment vraiment essayé de corriger ce qu'on lui reprochait<br>
* Intégration de toutes les modifications de Libav dans FFmpeg (alors que d'habitude le fork est plus ou moins ignoré)<br>
* Démission de Michael Niedermayer comme ultime tentative pour réunir les deux communautés</p><div><a href="https://linuxfr.org/users/desktop-ready-0/journaux/la-saga-ffmpeg-continue.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/106432/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/desktop-ready-0/journaux/la-saga-ffmpeg-continue#comments">ouvrir dans le navigateur</a>
</p>
desktop.readyhttps://linuxfr.org/nodes/106432/comments.atomtag:linuxfr.org,2005:Post/345582014-10-27T17:19:12+01:002014-10-27T17:47:43+01:00FFMPEG Libavcodec <p>Bonjour à tous,</p>
<p>Je suis le mainteneur d'une petite distrib (basée sur Xubuntu 14.04) permettant de réaliser des <a href="http://fr.wikipedia.org/wiki/Borne_d%27arcade">bornes d'arcades</a> avec <a href="http://mamedev.org/">mame</a> et <a href="http://www.libretro.com/">retroarch</a>. Elle fonctionne pas trop mal et simplifie grandement la configuration. <br>
Comme interface utilisateur j'utilise <a href="http://www.cabrio-fe.org/">cabrio-fe</a> cependant il s'agit d'une version que j'ai remanié afin d'apporter de nouvelles fonctionnalités et quelques corrections de problèmes gênants (le projet est plus ou moins à l'abandon), toutefois « ma » version comporte un bug vidéo plutôt gênant.<br>
Malheureusement je ne suis pas développeur de profession et le problème atteint mes limites de compréhension : </p>
<p>Tout d'abord une petite vidéo pour voir à quoi ça ressemble <a href="http://www.youtube.com/watch?v=7yU7G-4fios">ici</a>. Vous avez donc une interface permettant de sélectionner son type d'émulateur et de jeu, l'affichage permet la lecture d'une courte vidéo extraite du jeu (avi,mp4,flv) ou à défaut une simple image. </p>
<p>Voici mon souci :</p>
<p>Avec libavcodec53 les vidéos sont fluides et le son correcte, malheureusement la librairie est totalement obsolète et ça me demande une bidouille ignoble sur la distrib pour fonctionner.</p>
<p>Libavcodec54 - librairie par défaut sur la 14.04 - les vidéos sont fluides mais je n'ai plus de son </p>
<p>Libavcodec55 je ne peux plus compiler </p>
<p>error: 'AVCODEC_MAX_AUDIO_FRAME_SIZE' undeclared here (not in a function)<br>
#define AUDIO_BUFFER_SIZE ((AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 2)<br>
^<br>
video.c:44:29: note: in expansion of macro 'AUDIO_BUFFER_SIZE'<br>
static uint8_t audio_buffer[AUDIO_BUFFER_SIZE];</p>
<p>Si quelqu'un ayant de l’expérience avec FFMPEG en C pouvait me filer un coup de main je lui en serais reconnaissant (et mes utilisateurs aussi).</p>
<p>L'iso pour tester <a href="http://traceroot.c.la">Livemamecab</a> avec libavcodec53 (Attention, nécessite une carte vidéo compatible opengl sinon ça rame) <br><a href="https://github.com/fredbcode/cabrio/blob/master/video.c#L173">github</a> du frontend (lien direct sur la partie boguées permettant de lire des vidéos)<br><a href="https://github.com/fredbcode/livemamecab">github</a> du projet Livemamecab complet </p>
<p>Merci d'avance</p><div><a href="https://linuxfr.org/forums/programmation-c--2/posts/ffmpeg-libavcodec.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/103761/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/programmation-c--2/posts/ffmpeg-libavcodec#comments">ouvrir dans le navigateur</a>
</p>
Frederic Bourgeoishttps://linuxfr.org/nodes/103761/comments.atomtag:linuxfr.org,2005:Diary/351462014-08-01T13:59:23+02:002014-08-01T17:40:15+02:00FFmpeg de retour dans DebianLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Bonjour,</p>
<p>Une bonne nouvelle pour les utilisateurs et développeurs de Debian :<br><a href="https://lists.debian.org/debian-devel/2014/07/msg01010.html">Reintroducing FFmpeg to Debian</a></p>
<p>En subtance, FFmpeg est de retour dans Debian mais ce n'est pas officiellement la fin du fork Libav car il restera dans Debian tant que la paquet sera maintenu.<br>
En pratique, je vois mal Libav survivre longtemps dans ces conditions.</p>
<p>Un bon résumé de l'histoire avant cette annonce, est donné ici :<br><a href="https://github.com/mpv-player/mpv/wiki/FFmpeg-versus-Libav">FFmpeg versus Libav</a></p>
<p>Et le fameux bogue #729203 qui sera peut-être enfin bientôt fermé :<br><a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=729203">Debian should provide the <em>option</em> of using ffmpeg instead of libav to its users</a></p>
<p>Je ne suis pas développeur Debian, mais en tant qu'utilisateur il faut avouer que ce n'était pas l'idéal.<br>
Par exemple pour XBMC on était gentiment invité à déclarer les bogues ailleurs :</p>
<blockquote>
<p>This package uses external libraries such as libav distributed in Debian, while the XBMC project suggests using the libraries embedded in vanilla XBMC's source. This difference may cause problems not experienced with vanilla XBMC thus you are kindly asked not to report bugs directly to <a href="http://xbmc.org">http://xbmc.org</a>, but to Debian's BTS</p>
</blockquote>
<p>En tant qu'utilisateur de deb-multimedia, c'était aussi parfois un peu rock 'n' roll (troll ?).</p>
<p>Une histoire qui devrait donc bien se finir après de nombreuses péripéties.</p><div><a href="https://linuxfr.org/users/desktop-ready-0/journaux/ffmpeg-de-retour-dans-debian.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/102913/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/desktop-ready-0/journaux/ffmpeg-de-retour-dans-debian#comments">ouvrir dans le navigateur</a>
</p>
desktop.readyhttps://linuxfr.org/nodes/102913/comments.atom