#1 Le 23/07/2010, à 13:42
- IGstaff
Créer sa webtv avec ffmpeg (ou autre?)
Bonjour !
Je souhaite créer une webtv à partir d'un fichier pré-converti avec ffmpeg et sur la base d'un planning SQL (mais ça c'est mon problème ;-) ).
Le soucis est qu'après avoir triturer dans tous les sens la documentation de ffserver/ffmpeg, les forums et les sites sur internet (google a tourné à fond ces derniers jours)
ffserver permet de mettre un fichier (ou un flux) en flux (streaming) sur internet sous la forme d'un ou plusieurs feed aux formats paramétrés dans son fichier de configuration.
ffmpeg, ou la simple conversion, permet de convertir un fichier pour qu'il entre dans le flux d'un feed de ffserver via http.
ffmpeg va donc convertir le fichier (je trouve ça complètement idiot*) et quand il a fini, le flux continu sur le serveur jusqu'à la fin de la vidéo.
Mon but est d'utiliser ces outils pour créer un flux contenant DES fichiers pré-enregistrés mais pouvant accepter, si possible, des flux live d'un périphérique distant.
Le flux doit être continu afin de respecter l'effet Web TV !
Pour client, j'ai testé avec vlc.
Fichier 867.flv:
- Poids: 20,6 Mio.
- Durée: 03:04:69.
Fichier 141.wmv:
- Poids: 73,3 Mio.
- Durée: 03:12:73.
I
Solution trouvée:
Ajouter un fichier au flux avec ffmpeg puis ajouter un suivant après la fin de la CONVERSION du premier.
Script shell:
Command1='ffmpeg -i /path/to/movie/867.flv http://localhost:8090/feed1.ffm';
Command2='ffmpeg -i /path/to/movie/141.wmv http://localhost:8090/feed1.ffm';
echo "Running $Command1";
$Command1;
echo "Running $Command2";
$Command2;
Le second fichier est un wmv mais ca n'a d'importance que pour la conversion, par pour mon problème. Pas besoin de m'en faire la remarque, avec 2 fois le même fichier, les résultats sont les mêmes.
Problème rencontré:
Aussitôt la conversion du second fichier commencée, le flux s'arrete net et la 2ème vidéo remplace la première dans le flux. La première n'a donc pas le temps de terminer.
De plus, le flux est interrompu, vlc s'arrete de lire le flux à ce moment, le second fichier n'est donc pas affiché.
II
Solution trouvée:
Ajouter un fichier au flux avec ffmpeg puis ajouter un suivant après la fin de la LECTURE du premier.
Script shell:
Command1='ffmpeg -i /path/to/movie/867.flv http://localhost:8090/feed1.ffm';
Command2='ffmpeg -i /path/to/movie/141.wmv http://localhost:8090/feed1.ffm';
time01=`date +%s`;
echo "Running $Command1";
$Command1;
time02=`date +%s`;
let "sleepTime = 185-(time02-time01)";
echo "I'm sleeping for $sleepTime seconds.";
sleep $sleepTime;
echo "Running $Command2";
$Command2;
A l'origine, je lançais le second à la main m'enfin, pour vous, j'ai fait ce script.
Problème rencontré:
Le second fichier enchaine bien la conversion quand il le faut mais le flux est interrompu.
Quand le premier fichier a fini de se lire via vlc, le flux s'arrete et ne reprend pas quand le second fichier arrive.
Cette solution est presque bien, sauf que la lecture s'arrete entre les 2 (je suis obligé de recliqué sur lecture).
III
Solution trouvée:
Ajouter le second fichier comme "concaténation" à la fin du flux contenant déjà le premier fichier.
Je n'ai utilisé qu'un seul fichier pour ce test.
Script shell:
Command1='ffmpeg -i /path/to/movie/867.flv http://localhost:8090/feed1.ffm';
Command2='ffmpeg -ss 03:04:68 -i http://localhost:8090/feed1.ffm -i /path/to/movie/867.flv http://localhost:8090/feed1.ffm';
echo "Running $Command1";
$Command1;
echo "Running $Command2";
$Command2;
Problème rencontré:
Ca ne fait strictement au flux. ffmpeg fait genre il converti quelque chose mais ça lui prend une fraction de seconde et il traite 8kB.
La première vidéo se lit normalement jusqu'à la fin mais il n'y a rien ensuite.
IV
Solution trouvée:
Comme ffserver ne semble toléré qu'un fichier en flux mais tout de même avec un seul buffer de 5M (ici), je pensais que j'aurais pu créer un fichier avec tout le programme de la journée.
Problème rencontré:
Ca serait pas très maniable et j'aurais un fichier de 100Go, ce qui n'est pas cool du tout.
ffserver.conf utilisé:
Port 8090
BindAddress 0.0.0.0
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
NoDaemon
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 5M
ACL allow 127.0.0.1
</Feed>
<Stream test.flv>
Feed feed1.ffm
Format flv
VideoCodec flv
VideoBitRate 200
VideoBufferSize 500
VideoFrameRate 25
VideoSize qvga
VideoGopSize 12
</Stream>
Il existe d'autres outils mais je souhaite rester dans le gratuit (car budget nul...) et je n'ai rien trouvé d'intéressant sur le web.
De plus, je suis obligé de posséder ffmpeg sur mon serveur donc j'aurais aimé l'utiliser et pas devoir installer 30.000 logiciels qui feraient déjà ce que fait ffmpeg.
*C'est un autre problème: Tous mes fichiers sont converties au même format (Même taille, même bitrate, complètement identique) et donc ffmpeg n'a PAS besoin de les reconvertir à un format acceptable par ffserver.
Cependant, cela ne peut pas être précisé dans une quelconque configuration et de toute manière, cette conversion est en accord avec la configuration de ffserver pour ses flux sortants mais la configuration même de ffserver au niveau de ces formats ne se fait pas de la même manière.
Je m'y suis donc un peu perdu et je n'ai laissé que quelques points compris de configuration en commun (entre mes fichiers en entrée, convertis préalablement par ffmpeg et la conversion de ffmpeg pour ffserver en sortie).
NB: Désolé du pavé qu'est mon message mais il me fallait donner un maximum d'informations/précisions sur mon problème et ses caractéristiques. Aussi, je suis sûr que ce n'est pas encore suffisant.
Hors ligne
#2 Le 29/07/2010, à 12:17
- IGstaff
Re : Créer sa webtv avec ffmpeg (ou autre?)
Personne ne peut m'aider ?! Suis je bien dans la bonne section ?!
Hors ligne
#3 Le 08/04/2012, à 20:06
- Compte supprimé
Re : Créer sa webtv avec ffmpeg (ou autre?)
Intéressant, malheureusement ça n'a pas l'air de fonctionner, dommage.