Yohann Martineau, blog

Posts tagged multimedia

Send audio and video to X-Lite using ffmpeg

2010-04-10 11:28:46

Send Video

I've been struggling for long to find a way to send video to X-Lite. Now I can, using sipp and ffmpeg. I'm using a custom sipp script based on uas scenario. I've just added video media in uas script, in 200 OK SDP, using H263-1998 media description (and attributes) proposed in X-Lite SDP offer. This media contains size options (QCIF, CIF, etc.). Then I send INVITE to sipp from X-Lite using an account that does not need registration. I look at traces to find the port on which X-Lite is willing to receive video RTP packets, and I send a video to X-Lite using the following command:

  ffmpeg -re -i file.flv -f rtp -an -vcodec h263 -s 176x144 rtp://1.2.3.4:5678

file.flv is a video retrieved from youtube using any youtube grabber website.

But don't try this using ffmpeg as is, because ffmpeg always send RTP packets using payload type 96, which is a dynamic payload type. To make it work, you have to apply the following patch on ffmpeg, to use a payload type proposed by X-Lite, here 115:

index 5df101e..3c15a8b 100644
--- a/libavformat/rtpenc.c
+++ b/libavformat/rtpenc.c
@@ -78,7 +78,7 @@ static int rtp_write_header(AVFormatContext *s1)
 
     s->payload_type = ff_rtp_get_payload_type(st->codec);
     if (s->payload_type < 0)
-        s->payload_type = RTP_PT_PRIVATE + (st->codec->codec_type == AVMEDIA_TY
+        s->payload_type = 115;
 
     s->base_timestamp = ff_random_get_seed();
     s->timestamp = s->base_timestamp;

If I understand correctly, for the moment, it's not possible to manually set the payload type of RTP packets sent from ffmpeg. A long thread on ffmpeg mailing list seems to show that it's not possible yet.

This patch is (of course) not for production use, but at least, it works. Let's hope that ffmpeg will make this parameter configurable...

Send audio

To send audio, it's quite "easy", the following command should work out of the box :

  ffmpeg -re -i file.flv -vn -acodec pcm_mulaw -ar 8000 -ac 1 -f rtp rtp://1.2.3.4:5678?pkt_size=172

Here, the trick is to force ffmpeg to use 172 UDP packets, because X-Lite only accept RTP packets which payload size is exactly 160. RTP (standard) header size is 12 bytes, thus pkt_size must be 172.

Permanent link
protocol, multimedia, development, english

Comments

Ecouter de la musique celtique gratuitement

2009-03-31 22:02:05
Date originale : 10 décembre 2007

Etant apprenti sonneur (joueur de cornemuse), je suis amateur de musique celtique. Or celle-ci se fait plutôt rare sur le web... légalement tout du moins.

En effet, en parcourant le site allcelticmusic.com, je me suis rendu compte que ce n'était peut-être pas si difficile que ça d'entendre ses artistes préférés... En parcourant le site je me suis rendu compte qu'il était possible d'écouter en entier les chansons de certains albums. Si un lecteur flash peut lire cette musique, alors il doit être possible de la lire autrement ! Mon premier réflexe a été de faire une capture de ce qui circulait sur le réseau avec wireshark. Mais rien de très inspirant à priori... un player flash est retourné dans une page s'appelant player.html...

J'ai donc téléchargé à la main l'applet flash permettant d'écouter la musique. L'utilitaire file de linux m'a appris que ce fichier correspondait à :

Macromedia Flash compressed data, version 7.
Rien de surprenant, donc. Cependant, il est rare qu'une donnée compressée soit absoluement impossible à décompresser... Une recherche sur google m'a donc emmené vers un exécutable windows en version d'évaluation permettant de décompresser les fichiers .swf compressés. Le nom de cet exécutable est asvdemo, contenu dans une archive : asvdemo.zip.

Pour lancer cet exécutable windows sous linux, il suffit donc simplement de "l'enrouler" avec wine :

wine avsdemo.exe
Cet utilitaire une fois lancé, permet d'explorer le contenu du fichier .swf, c'est-à-dire de l'Action Script, intéressant. Il est également possible d'exporter le contenu de ce qui a pu être décompressé vers un simple fichier texte, c'est donc ce que j'ai fait, l'environement fourni par wine n'étant pas ce qu'il y a de plus ergonomique...

Un petit coup d'oeil sur ce fichier, et là ô miracle, une variable s'appelle fileUrl :

var fileUrl = "w47bc/";
Dans le fichier player.html retourné précédemment, il y avait tout de même une variable nommée file=297.mp3 dans une url ou dans les paramètres passés à l"objet flash"

C'est ce qui m'a mis sur la voie d'un wget bien inspiré :

wget http://www.allcelticmusic.com/w47bc/297.mp3
Le fichier téléchargé, je pouvais écouter à ma guise l'air que je cherchais de Robert Mathieson, un grand soliste de cornemuse écossaise ; ce sans lecteur flash et sans perte de qualité (un simple enregistrement du mixeur de mon système d'exploitation aurait permis l'enregistrement, mais avec une conversion numérique => analogique supplémentaire).

Malheureusement, dès aujourd'hui (manipulation réalisée hier, le 9 décembre 2007), le site a changé de présentation et le player flash n'est plus accessible, il n'est de plus plus possible d'écouter des titres en ligne... La supercherie aurait-elle été démasquée ? Aucune idée, cependant on ne pourra pas m'accuser de piratage, vu que cette astuce ne fonctionne plus désormais.

Cela dit, le principe de "décrypter" du flash pour retrouver des urls vers des fichiers multimédia reste valable et probablement applicable à d'autres sites. Il suffit de les chercher...

Permanent link
protocol, multimedia, internet, français

Comments

Ecouter des extraits sur le site de la FNAC sous debian

2009-03-31 22:01:34
Date originale : 10 décembre 2007

Comme le titre de cet article le laisse supposer, ce n'est pas immédiat sous debian de lire des extraits musicaux d'albums sur le site de la fnac. Cela dit, à coeur vaillant rien d'impossible, il est donc possible de lire ces flux mutlimedia d'une façon (un peu) détournée.

Prenons un exemple, je vais sur l'album de Peter Cincotti : East of Angel Town. Je clique sur Goodbye Philadelphia, et je choisis ouvrir, avec un éditeur de texte, gedit fera très bien l'affaire. Là, je vois que ce fichier contient simplement une URI :

pnm://multimedia.fnac.com/audio/3/9/7/0093624991793A02.ra
Première observation, je ne connais pas le préfixe de cette URI, en revanche l'extension du fichier ne semble pas totalement inconnue : .ra extension des fichiers Real Player. Après une petite recherche sur google, j'apprends que ce protocole est le nouveau nom du protocole PNA, dont j'ignore la signification. En investigant légèrement plus je découvre que ce protocole est assez proche du RTSP, intéressant... Autre point intéressant à noter, le port part défaut de ce protocole est le port 7070.

Je décide donc de tenter ma chance avec mplayer, car bien que mplayer ne supporte ce procole PNM, il supporte le procole RTSP. Je lance donc la commande suivante dans mon terminal préféré :

mplayer rtsp://multimedia.fnac.com:7070/audio/3/9/7/0093624991793A02.ra
et là, ô surprise, après un léger temps de mise en mémoire tampon, la lecture du début de la chanson commence !

Le "hasard" faisant plutôt bien les choses, si vous voulez écouter plusieurs chansons, elles sont dans l'ordre, la prochaine chanson, Be Careful, peut s'écouter avec l'URI suivante :

rtsp://multimedia.fnac.com:7070/audio/3/9/7/0093624991793A03.ra

Permanent link
protocol, multimedia, linux, internet, debian, français

Comments

Peers : nouveau softphone SIP

2009-03-31 22:00:52
Date originale : 2 décembre 2007

Bonjour,

Après plusieurs mois de développement, la première version de Peers est sortie ! Peers est un softphone SIP minimaliste écrit en java. Peers est donc un logiciel permettant de téléphoner d'un ordinateur à un autre sur un réseau local. Pour appeler une personne, il suffit de taper : sip:192.168.0.1 avec la bonne adresse. L'ordinateur appelé décroche automatiquement et l'appel est établi. Ensuite, l'appelé ou l'appelant peuvent raccrocher avec le bouton "hang up".

Pourquoi ?

En effet, il existe déjà d'autres piles SIP écrites en java, alors pourquoi se lancer dans cette implémentation ? Pour deux raisons. Premièrement, il n'existe à ma connaissance pas plus de deux implémentations open source en java d'une pile SIP :

  • Jain-sip, implémentée par NIST, un institut de recherche américain,
  • MjSip, implémentée par l'université de Parme.
Dans les deux cas, ces implémentations sont des implémentations complètes de la spécification de SIP : la RFC 3261, c'est-à-dire qu'il est possible de créér tous les éléments d'un réseau SIP grâce à ces implémentations : User-Agent, Proxy, Registrar, etc. Or, réaliser l'abstraction entre ces différents rôles ajoute une complexité importante aux implémentations. De plus, les ressources nécessaires dans la vie de tous les jours pour implémenter ces rôles sont très différentes. Je m'explique, un User-Agent est un softphone, c'est donc un logiciel qui va se lancer sur l'ordinateur d'un utilisateur. Cet utilisateur utilisera des fonctions éventuellement avancées au niveau media mais pas au niveau contrôle de session. SIP intervient au niveau du contrôle de sessions. Le User-Agent est en gros un logiciel client. Pour les autres rôles (Registrar, Proxy, ...) il s'agit d'implémenter des serveurs n'ayant aucune interface utilisateur et étant optimisés au maximum pour gérer un maximum de sessions en parallèle ou un maximum de messages, etc.

Pour en revenir aux autres implémentations, elles permettent donc de réaliser tous les éléments d'un réseau SIP, mais ce n'est pas le but de Peers. Le but de Peers est d'écrire un logiciel permettant le maximum d'interactions possibles avec les autres utilisateurs, et que ces fonctionnalités soient facilement évolutives. L'implémentation de Peers se veut simple. Malgré ses 10 000 lignes de code (environ), l'implémentation de peers se veut minimaliste et évolutive. C'est son évolutivité qui lui donne se volume. Le but de Peers n'est pas de devenir un serveur, mais bel et bien d'être lancé sur un poste utilisateur.

La deuxième raison est la possibilité d'apprendre par la pratique. Rien n'est plus formateur que de comparer son implémentation avec les plus réputées pour voir d'où viennent les problèmes, et ceci tout en lisant plusieurs fois les RFCs pour bien comprendre les concepts et ne pas tomber dans une implémentation uniquement empirique. SIP est pour moi un protocol nouveau, il y a un an, je ne connaissais rien à SIP.

Pour plus d'informations, vous pouvez me contacter par mail, voir ma page contact.

Permanent link
protocol, peers, multimedia, java, internet, development, français

Comments

radio.blog crawler

2009-03-31 21:57:54
Date originale : 4 février 2007

Après avoir constaté à plusieurs reprises le bridage des ports utilisés par les torrents par mon fournisseur d'accès internet, j'ai décidé de réagir, à mon échelle, mais de faire quelque chose. J'ai donc développé un crawler du diffuseur de musique radio.blog qui permet de rappatrier en local les fichiers de musique stockés sur les serveurs diffusant des radio.blog. Le but est d'utiliser ce crawler pour charger le port HTTP qui n'est à priori pas bridé par mon fournissur d'accès afin de lui faire comprendre qu'il ne sert à rien de brider les débits à un endroit et pas à un autre.

Pour information mon fournisseur d'accès internet est club-internet, et je suis en zone non-dégroupée. Ce problème n'existe pas chez ce fournisseur d'accès en zone dégroupée, mais la popularité du post sur leur forum concernant ce problème est la preuve de l'existence d'un vrai problème (plus de 840 pages de posts !).

Au cas où la version normale ne marcherait pas, j'ai également mis en ligne une archive contenant directement toutes les dépendances. Une version relativement récente d'un JRE est nécessaire pour pouvoir lancer ce programme.

Permanent link
multimedia, java, internet service provider, français

Comments