Bonjour à tous !
Je cherche un exemple de programme qui stream de la vidéo sur un réseau, en udp et/ou rtp, et qui utilise la librairie ffmpeg.
Quelqu’un sait il où je peux trouver ça ?
Je vous remercie d’avance !
Bonjour à tous !
Je cherche un exemple de programme qui stream de la vidéo sur un réseau, en udp et/ou rtp, et qui utilise la librairie ffmpeg.
Quelqu’un sait il où je peux trouver ça ?
Je vous remercie d’avance !
non mais si tu trouves ça m’intéresse
J’ai fais ste micro doc, si ça intéresse:
% cat vlc.txt [0.80 0.49 - ]
dependances debian:
gcc g++ libc6-dev libdvbpsi5-dev libmpeg4ip-dev libopenjpeg-dev libxvidcore4-dev libxv-dev libmpeg2-4-dev libfribidi-dev
export CPPFLAGS="-I/home/ed/vlc-vdr/include"
export LDFLAGS="-L/home/ed/vlc-vdr/lib"
export LD_LIBRARY_PATH="/home/ed/vlc-vdr/lib:$LD_LIBRARY_PATH"
export PATH="/home/ed/vlc-vdr/bi:n$PATH"
FFMpeg:
svn checkout svn://svn.ffmpeg.org/ffmpeg/trunk ffmpeg
cd ffmpeg
./configure --enable-gpl --enable-libx264 --enable-libxvid --enable-libvorbis --enable-libtheora --enable-libspeex --enable-libopenjpeg --enable-libgsm --enable-libfaac --enable-libfaad --enable-bzlib --enable-nonfree --enable-postproc --enable-swscale --enable-avfilter --enable-avfilter-lavf --enable-pthreads --enable-shared --prefix=/home/ed/vlc-vdr
make -j2
make install
VLC:
wget http://download.videolan.org/pub/videolan/vlc/0.9.8a/vlc-0.9.8a.tar.bz2
tar xvjf vlc-0.9.8a.tar.bz2
cd vlc-0.9.8a
./configure --enable-vlc --enable-loader --enable-qt4 --enable-theora --enable-speex --enable-vorbis --enable-libmpeg2 --enable-flac --enable-postproc --enable-avformat --enable-avcodec --enable-dvdread --enable-switcher --enable-sout --enable-shared --enable-release --enable-dvbpsi --prefix=/home/ed/vlc-vdr
make -j2
make install
DIsplay: rajouter dst=display
script streamvdr:
#!/bin/sh
export CPPFLAGS="-I/home/ed/vlc-vdr/include"
export LDFLAGS="-L/home/ed/vlc-vdr/lib"
export LD_LIBRARY_PATH="/home/ed/vlc-vdr/lib:$LD_LIBRARY_PATH"
export PATH="/home/ed/vlc-vdr/bin:$PATH"
exec cvlc http://192.168.6.2:37890/ --intf http --no-playlist-autostart --http-src=/home/ed/vlc-vdr/http-fbx/ --http-host :8080 --sout-standard-access=udp --sout-standard-mux=ts --sout-standard-url=212.27.38.253:1234 --file-caching=1000 --sout-ts-pid-video=68 --sout-ts-pid-audio=69 --sout-ts-pcr=80 --sout-ts-dts-delay=400 --sout '#transcode{venc=ffmpeg,vcodec=mp2v,vb=4600,scale=1,fps=25,maxwidth=720,maxheight=576,hurry-up=1,acodec=mpga,ab=384,channels=2}:duplicate{dst=std{access=udp,mux=ts,dst=212.27.38.253:1234}' --rt-priority --no-inhibit --loop --http-reconnect $@
A+
Dsl de ne pas l’avoir précisé, mais c’est un programme en langage C que je recherche.
Je te remercie quand même !
Tu peux regarder le code de FFserver :
Si j’ai bon souvenir FFserver est un binaire qui vient avec les sources de ffmpeg non ?
Justement ça fait des semaines que je fouine dans le code de ffmpeg/ffserser.
C’est pas super intuitif…
C’est d’ailleurs mon désespoir qui vient me faire poste ici .
Salut,
Ben via FFMPEG c’est pas difficile :
VLC
MPLAYER
MENCODER
etc…
Pour info :
FFserver fait grossièrement 4000 Lignes c’est court car la plupart des fonctions proviennent de l’API AV.
Sinon l’API AV doit faire minimum 100000 Lignes et je pense que je suis gentil.
Conseil :
Avant de vouloir comprendre le serveur de streaming il faut comprendre le média(Audio,vidéo).
Ce qu’es un ES (Elementary Stream) ou un PES (Packetized Elementary Stream) . C’est quoi le MPEG 1 ,2 ,4. etc…
Une frame, Une Trame , Une image , Un block , un splice, un macro-block, dts , pts, gop , key, IPBB etc…
Enfin je pense que le mieux et d’abord de comprendre comment fonctionne FFserver avant d’attaquer du lourd…
Pour t’aider regarde les différentes méthodes du Protocole RTSP:
Normalement dans une session RTSP nous appelons les différents méthodes dans cette ordre :
Options : Méthodes implémentés par le serveur
Describe : renvoie un SDP (en gros)
Setup : récupère les ports client et attribue les ports serveur et le npt
Teardown : fin du stream (efface la session)
sous FFserver les méthodes commencent par rtsp_cmd_ .
Sinon voici les deux structures les plus utilisées (Liste Chainée) :
HTTPContext -> Pour chaque connexion HTTP ou pour une Session RTSP
FFStream -> Liste chainée contenant la bibliothèque des médias
Sinon FFserver fonctionne avec la primitive POLL :
C’est à dire que le noyau gère les évènements et la fonction HTTPServer() vérifie l’état de l’évènement ainsi en fonction de l’etat il redirige la requête .
Les fonctions gérant le poll :
HTTPServer() -> récupère deux sockets (RTSP et HTTP)
handle_server()
Je vous remercie pour toutes vos réponses.
J’ai fini par m’en sortir et avoir une application stable.
Bonjour,
ça fait un moment que je cherche un exemple de programme qui stream de la vidéo sur un réseau et j’ai fini par tomber sur ce forum. même j’ai essayé avec ffmpeg-0.6.1 sur kubuntu mais je n’ai pas réussie à le faire marcher, je n’ai pas bien compris le contenu du fichier ffserver.conf. Vraiment je galère depuis trois semaines surtout je suis un débutant en programmation.
J’ai vu que vous avez trouvé une solution pourriez vous m’aider SVP?
je vous remercie bien
Bonjour,
Dans un premier temps, je souhaite savoir ce que tu souhaites faire.
Veux tu utiliser une application pour faire de la diffusion vidéo ?
Ou souhaites tu développer (en langage C ?) ta propre application ?
Dans les deux cas, as tu une idée du protocole, format ou codec que tu veux utiliser ?
Bonjour,
Tout d’abord je vous remercie pour votre réponse.
donc l’idée générale est de diffuser des vidéo (situées sur mon ordinateur) sur le net, faire un serveur simple sans interface ressemblant à zumocast ( http://www.applicationipad.fr/zumocast-video-et-musique-en-streaming-sur-ipad.html ) même avec une seule vidéo l’essentiel qu’il marche. Après je compte développer une application Android pour lire cette vidéo.
Donc l’application sera sous Linux en langage C en utilisant le protocole RTP.
Après des recherches sur le net j’ai trouvé que FFmpeg peut la faire, j’ai téléchargé la version FFmpeg-0.6.1 (normalement contient FFmpeg, FFserver, FFplay, FFprobe). je l’ai compilé et l’ai exécuté en tapant les commandes :
sed -i ‘s/-number//’ Makefile && ./configure --prefix=/home/XTXE/testFFmpeg2
make
make install
Tout est bien passé et j’ai obtenu comme résultat : FFmpeg, FFserver et FFprobe mais pas FFplay!!!
j’ai commencé par manipuler FFmpeg en passant une video.flv en une video.mp4 et s’était bien passé sans aucune difficulté, en suite j’ai passé pour faire le streaming voilà ce que j’ai fait:
-création du fichier FFserver.conf et le mettre dans le même répertoire (bin) que FFserver
-mettre une vidéo (video.flv) dans le même répertoire (bin) que FFserver
-lancer ffserver : ./ffserver -f ffserver.conf &
et voilà “Could not start server” !!!
built on Jun 17 2011 11:33:45 with gcc 4.4.1
configuration: --prefix=/home/XTXE/testFFmpeg1
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / 52.72. 2
libavformat 52.64. 2 / 52.64. 2
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.11. 0 / 0.11. 0
bind(port 8090): Address already in use
Tue Jun 21 10:52:58 2011 Could not start server
-lancer ffmpeg : ./ffmpeg -i /video.flv localhost:8090/feed1.ffm
à cet étape ça bloque voilà le message : “/video.flv: No such file or directory”
FFmpeg version 0.6.1, Copyright (c) 2000-2010 the FFmpeg developers
built on Jun 17 2011 11:33:45 with gcc 4.4.1
configuration: --prefix=/home/XTXE/testFFmpeg1
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / 52.72. 2
libavformat 52.64. 2 / 52.64. 2
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.11. 0 / 0.11. 0
/video.flv: No such file or directory
j’espère que j’ai bien explicité mon problème.
Voilà le contenu de FFserver.conf
[code]Port 8090
BindAddress 0.0.0.0
MaxClients 10
MaxBandwidth 50000
CustomLog -
Pour FFmpeg “/video.flv: No such file or directory” c’est bon j’ai un “/” qui se balade tout seul avant le fichier video.flv je l’ai supprimé et le FFmpeg a commencé l’encodage voilà ce que j’ai obtenu :
[code]m
FFmpeg version 0.6.1, Copyright © 2000-2010 the FFmpeg developers
built on Jun 17 2011 11:33:45 with gcc 4.4.1
configuration: --prefix=/home/XTXE/testFFmpeg1
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / 52.72. 2
libavformat 52.64. 2 / 52.64. 2
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.11. 0 / 0.11. 0
/video.flv: No such file or directory
XTXE@floPc:~/testFFmpeg1/bin$ ^C
XTXE@floPc:~/testFFmpeg1/bin$ ./ffmpeg -i video.flv http://localhost:8090/feed1.ffm
FFmpeg version 0.6.1, Copyright © 2000-2010 the FFmpeg developers
built on Jun 17 2011 11:33:45 with gcc 4.4.1
configuration: --prefix=/home/XTXE/testFFmpeg1
libavutil 50.15. 1 / 50.15. 1
libavcodec 52.72. 2 / 52.72. 2
libavformat 52.64. 2 / 52.64. 2
libavdevice 52. 2. 0 / 52. 2. 0
libswscale 0.11. 0 / 0.11. 0
[flv @ 0x9f70420]Estimating duration from bitrate, this may be inaccurate
Seems stream 0 codec frame rate differs from container frame rate: 59.83 (29917/500) -> 59.75 (239/4)
Input #0, flv, from ‘video.flv’:
Metadata:
duration : 71
starttime : 0
totalduration : 71
width : 854
height : 480
videodatarate : 737
audiodatarate : 129
totaldatarate : 875
framerate : 30
bytelength : 7753111
canseekontime : true
sourcedata : B4A7DD224MM1308575362337889
purl :
pmsg :
Duration: 00:01:10.88, start: 0.000000, bitrate: 886 kb/s
Stream #0.0: Video: h264, yuv420p, 854x480, 755 kb/s, 59.75 tbr, 1k tbn, 59.83 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 131 kb/s
Output #0, ffm, to ‘http://localhost:8090/feed1.ffm’:
Metadata:
encoder : Lavf52.64.2
Stream #0.0: Video: flv, yuv420p, 320x240, q=3-3, 5200 kb/s, 1000k tbn, 25 tbc
Stream mapping:
Stream #0.0 -> #0.0
Press [q] to stop encoding
[flv @ 0x9f78870]rc buffer underflow
frame= 30 fps= 0 q=2.0 size= 60kB time=1.20 bitrate= 409.6kbits/s dup=0 drop=5 frame= 48 fps= 44 q=2.0 size= 108kB time=1.92 bitrate= 460.8kbits/s dup=0 drop=8 frame= 59 fps= 37 q=2.0 size= 172kB time=2.36 bitrate= 597.0kbits/s dup=0 drop=11frame= 68 fps= 32 q=2.0 size= 228kB time=2.72 bitrate= 686.7kbits/s dup=0 drop=12frame= 78 fps= 29 q=40.6 size= 288kB time=3.12 bitrate= 756.2kbits/s dup=0 drop=1
.
.
…
[/code]
D’après ce que tu comptes faire, l’association de ffmpeg et ffserver semble un bon choix.
Comme tu l’as correctement fait, il faut :
Lancer ffserver,
Diffuser un flux de ffmpeg vers ffserver,
Te connecter au serveur web, lancé par ffserver, avec un client X.
Bizarre que ton ffserver ne voulait pas se lancer…
As tu essayer un autre port ?
c’est bon ça marche, j’ai modifié le fichier FFserver.conf comme ci-dessous, mais le problème c’est que je visualise la vidéo qu’à partir du moment où je clique sur play de lecteur (VLC) mais le pire c’est que je ne peux la regarder qu’a la fin de l’encodage
si je résume :
-démarrer le FFserver
-démarrer l’encodage : FFmpeg
-lancer la lecture de la vidéo avec VLC : localhost:8090/video.flv
-lecture en attente de la fin de l’encodage
-fin de l’encodage
-visualisation de la vidéo à partir du moment où j’ai cliqué sur play du lecteur VLC c’est à dire une vidéo de 120s si vous lancez la lecture après 30s vous aller regarder que les derniers 90s.
quelqu’un peut m’expliquer ça SVP !!!
# Port on which the server is listening. You must select a different
# port from your standard HTTP web server if it is running on the same
# computer.
Port 8090
# Address on which the server is bound. Only useful if you have
# several network interfaces.
BindAddress 0.0.0.0
# Number of simultaneous requests that can be handled. Since FFServer
# is very fast, it is more likely that you will want to leave this high
# and use MaxBandwidth, below.
MaxClients 1000
# This the maximum amount of kbit/sec that you are prepared to
# consume when streaming to clients.
MaxBandwidth 1000
# Access log file (uses standard Apache log file format)
# '-' is the standard output.
CustomLog -
# Suppress that if you want to launch ffserver as a daemon.
NoDaemon
##################################################################
# Definition of the live feeds. Each live feed contains one video
# and/or audio sequence coming from an ffmpeg encoder or another
# ffserver. This sequence may be encoded simultaneously with several
# codecs at several resolutions.
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 1000K
ACL allow 127.0.0.1
</Feed>
##################################################################
<Stream test.flv>
Feed feed1.ffm
Format flv
VideoCodec flv
VideoFrameRate 15
VideoBufferSize 80000
VideoBitRate 100
VideoQMin 1
VideoQMax 5
VideoSize 352×288
PreRoll 0
Noaudio
</Stream>
<Stream stat.html>
Format status
# Only allow local people to get the status
ACL allow localhost
ACL allow 192.168.0.0 192.168.255.255
#FaviconURL http://pond1.gladstonefamily.net:8080/favicon.ico
</Stream>
merci snooker, au fait le problème s’était dans le fichier FFserver.conf, regardez mon dernier message.
toujours le même problème
visualisation de la vidéo à partir du moment où j’ai cliqué sur play du lecteur VLC c’est à dire une vidéo de 120s si vous lancez la lecture après 30s vous aller regarder que les derniers 90s.
pouvez vous m’expliquer ça SVP !!!
Je n’ai jamais réalisé de système type VOD, comme tu souhaites le faire.
Je ne connais pas non plus ffserver en détail pour résoudre ton problème.
En revanche, rien ne t’empêche d’écrire ton serveur web qui te donne la liste des vidéos disponibles.
Lorsque le client choisit une vidéo, tu lance la diffusion avec un ffmpeg ou un vlc.
Oui exactement c’est ça ce que je cherche et voulais faire, un serveur web qui je donne la liste des vidéos disponibles.Lorsque le client choisit une vidéo, je lance la diffusion. mais franchement aucune idée sur le développement en langage C d’un serveur, vu que je suis d’origine un électronicien converti en informatique, donc vraiment un débutant en programmation.
Avez vous un exemple de serveur, le programme que vous avez déjà réalisé si ce n’est pas confidentiel ou une idée explicite sur l’algorithme.
Peut être je demande trop mais vraiment je voulais réussir mon premier stage
merci