Pour nous contacter : soyez au rendez-vous sur IRC ! ⋅ Parcourir l'archive musicale Dogmazic ⋅ Notre Blog
Notre Documentation

Streaming vidéo avec vlc

novembre -1 modifié dans Tech
http://nfalaise.free.fr/index.php?part=tutos&sub=stream_vlc

j'y poste, en intro, un lien vers le tuto "pas à pas" qui m'a permis de faire mon premier streaming vidéo... en utilisant le format WMV.

Le reste de l'article est un complément d'infos dans le but d'expliquer quelles sont les différentes options de diffusion que VLC propose, avec une grosse partie sur les problèmes liés au réseau.

Réponses

  • Ayé, j'ai réussi à faire un stream en ogg (qui encapsule le son en vorbis et l'image en theora) 8)

    [MODE GEEK = ON]

    coté PC :
    [code:1]vlc -vvv v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/dsp" :v4l-norm=3 :v4l-frequency=-1 --sout "#transcode{vcodec=mp1v,vb=256,scale=1,acodec=mp3,ab=192,channels=2}:duplicate{dst=std{access=udp,mux=ts,dst=xxx.xxx.xxx.xxx:12345}}"[/code:1]
    ... sur une seule ligne, hein.
    pour le v4l:// etc... (jusqu'au --sout), ça dépendra de votre matériel. là, je suis sous linux.
    (je vous invite à jeter un coup d'oeil à la fin de mon tuto du post précédent pour plus de détails).

    Donc là, j'encode sur le PC en mp1v pour l'image et en mp3 pour le son et j'envoie en udp sur la dédibox, à l'adresse xxx.xxx.xxx.xxx (remplacez par l'IP de votre relais)

    coté dédibox, pour le relais :
    [code:1]vlc -vvv udp:@:;12345 --sout "#transcode{vcodec=theo,scale=1,aspect-ratio=4:3,acodec=vorb}:duplicate{dst=std{access=http,mux=ogg,dst=xxx.xxx.xxx.xxx:12345/video.ogg}}"[/code:1]
    donc toujours sur une seule ligne.
    Là, je récupère le flux qui lui arrive en udp, je l'encode en theora/vorbis, j'encapsule le tout en ogg et je repropose le flux cette fois en http pour qui veut.
    (encore une fois, mon tuto du premier post donne quelques explications...)

    bon
    les premiers tests marchent... j'ai des messages un peu étranges coté dedibox, mais ça marche... le flux s'intègre ensuite dans l'applet Java Cortado pour l'intégrer sur une page web avec le code:

    [code:1]<applet width="320" height="240" archive="cortado-ovt-debug-0.2.2.jar" code="com.fluendo.player.Cortado.class" />
    <param name="url" value="http://xxx.xxx.xxx.xxx:12345/video.ogg"/>
    <param name="local" value="false"/>
    <param name="framerate" value="30"/>
    <param name="keepAspect" value="true"/>
    <param name="video" value="true"/>
    <param name="audio" value="true"/>
    <param name="bufferSize" value="400"/>
    </applet>
    [/code:1]
    avec toujours xxx.xxx.xxx.xxx l'adresse IP du relais.

    Le seul soucis, là, c'est que Java refuse de lire un flux qui ne vient pas de l'ordi qui fourni la page web où le player est intégré. Donc obligé d'intégrer le player sur une page servie par la dédibox. On peut régler le problème, pour l'intégrer ailleur, en passant par une iframe par exemple.

    [MODE GEEK = OFF]
  • Là ya du gros geek :P
  • [MODE STAR TREK = ON]

    20070608.WWW000000502_4433_1.jpg

    Bon, disons plutôt que... ça a tendance à marcher :mrgreen:
    Mais coté relais, je me chope une foule de :

    [code:1][00000378] main private warning: vout synchro warning: pts != current_date (-104044)
    [00000378] main private warning: vout synchro warning: pts != current_date (-120278)
    [00000378] main private warning: vout synchro warning: pts != current_date (-103978)
    [00000378] main private warning: vout synchro warning: pts != current_date (-103844)
    [00000378] main private warning: vout synchro warning: pts != current_date (-119967)
    [00000378] main private warning: vout synchro warning: pts != current_date (-103722)
    [00000378] main private warning: vout synchro warning: pts != current_date (-119622)
    [00000378] main private warning: vout synchro warning: pts != current_date (-103922)
    (etc...à raison de 2/3 lignes par secondes)[/code:1]

    le flux passe quand même et au final, ça marche, mais tous ces affchages, je trouve ça assez inquiétant...
    du coup j'essaie de varier les combinaisons (codec/encapsulation/protocol)
    mais rien de trés concluant jusqu'à maintenant
    si quelqu'un a une idée...

    [MODE STAR TREK = OFF]
  • ben... ça passe
    mais c'est pas trés stable.
    d'après ce que j'ai pu glaner vu le web à propos du pts, c'est une histoire de synchrorisation
    mais avec quoi j'en sais rien
    Quoi qu'il en soit, le player, par moment, est largué et crois que le flux est terminé alors qu'il continue
    Ou alors c'est carrément vlc qui s'arrète sur le relais avec une erreur de segmentation.
  • Et sinon le son fonctionne?
  • le son fonctionne.

    pour le son, si on envoie juste le son, sans image, là, c'est beaucoup plus simple:

    coté PC:
    [code:1]vlc -vvv <source...> --sout "#transcode{acodec=mp3,ab=128,channels=2}:duplicate{dst=std{access=udp,mux=ts,dst=xxx.xxx.xxx.xxx:12345}}"[/code:1]

    coté relais:
    [code:1]vlc -vvv udp:@:;12345 --sout "#duplicate{dst=std{access=http,mux=raw,dst=xxx.xxx.xxx.xxx:3131}}"[/code:1]

    en remplaçant <source...> par la source, donc
    et xxx.xxx.xxx.xxx par l'IP du relais.

    là, le flux est accessible à l'adresse http://xxx.xxx.xxx.xxx:3131

    bon, dans cet exemple, j'envoie en mp3 donc le flux peut être lu avec un player indépendant ou aussi intégré dans un lecteur flash.

    pour le vorbis, c'est plus compliqué...

Ajouter un commentaire

GrasItaliqueBarréListe ordonnéeListe non ordonnée
Emoji
Image
Aligner à gaucheCentrer le texteAligner à droiteBasculer en code HTMLBasculer en mode plein écranAllumer les lumières
Déplacer image/fichier