Conversion vidéo flv sur serveur IIS asp.net
Fermé
esperento57
Messages postés
2
Date d'inscription
mercredi 15 octobre 2003
Statut
Membre
Dernière intervention
8 novembre 2008
-
4 nov. 2008 à 14:08
dkknd - 26 nov. 2011 à 10:05
dkknd - 26 nov. 2011 à 10:05
A voir également:
- Conversion vidéo flv sur serveur IIS asp.net
- Montage video windows - Guide
- Comment télécharger une vidéo youtube - Guide
- Comment mettre une vidéo sur powerpoint - Guide
- Lecteur flv - Télécharger - Lecture
- Script vidéo youtube - Guide
5 réponses
Et bien en fait la solution que j'avais trouvé était de créer un thread principal qui se lance au démarrage du serveur (grace au global.asax, application_start) )et qui scrute régulierement la base pour voir si des lignes ont été ajoutée dans une table "videoatratee".
Ce thread principal gerant 5 autres threads et leur donnant le travail a faire et sur quels fichiers.
Ces 5 threads étant chargés de lancer ffmpeg (ainsi il n'y a que maximum 5 fois ffmeg en mémoire).
Il faut bien sur vérifier que ton hébergeur accepte le CGI (pour l'execution des ffmpeg) et concernant une certaine chose, a savoir que sur la plupart des hebergeurs ton site se met en pause s'il n'a pas de visite pendantun laps de temps donné et que donc ton thread principal et tes 5 threads aussi, ce qui peut etre résolu je pense (jamais testé) par un site qui fait des requetes régulieres sur ton site. (ca existe, c'est payant mais c'est pas cher)
Voila chez moi ca marchait, je n'ai malheureusement plus les sources (disque mort, pas de onduleur merci la foudre) mais si tu veux faire ca va falloir coder...
Quant a ffmpeg, il marche tres bien, tu peux meme incruster ton logo, le nom de ton site dans la video, extraire la premiere image etc...
Voila j'espère que ca pourra t'aider, fais le moi savoir ca fait toujours plaisir, bon courrage a toi!
Esperento57, ou J@nus[Fr] sur america's army
Ce thread principal gerant 5 autres threads et leur donnant le travail a faire et sur quels fichiers.
Ces 5 threads étant chargés de lancer ffmpeg (ainsi il n'y a que maximum 5 fois ffmeg en mémoire).
Il faut bien sur vérifier que ton hébergeur accepte le CGI (pour l'execution des ffmpeg) et concernant une certaine chose, a savoir que sur la plupart des hebergeurs ton site se met en pause s'il n'a pas de visite pendantun laps de temps donné et que donc ton thread principal et tes 5 threads aussi, ce qui peut etre résolu je pense (jamais testé) par un site qui fait des requetes régulieres sur ton site. (ca existe, c'est payant mais c'est pas cher)
Voila chez moi ca marchait, je n'ai malheureusement plus les sources (disque mort, pas de onduleur merci la foudre) mais si tu veux faire ca va falloir coder...
Quant a ffmpeg, il marche tres bien, tu peux meme incruster ton logo, le nom de ton site dans la video, extraire la premiere image etc...
Voila j'espère que ca pourra t'aider, fais le moi savoir ca fait toujours plaisir, bon courrage a toi!
Esperento57, ou J@nus[Fr] sur america's army
samcsharp
Messages postés
4
Date d'inscription
mardi 24 février 2009
Statut
Membre
Dernière intervention
5 avril 2009
1
24 févr. 2009 à 22:32
24 févr. 2009 à 22:32
T'as dû remarquer que mon long message est bien passé en fait : j'ai cru qu'il avait été filtré ou modéré.
Ok, je te PM mon email. Je viens de m'inscrire sur ccm du coup ;)
Merci pour tes réponses :)
Ok, je te PM mon email. Je viens de m'inscrire sur ccm du coup ;)
Merci pour tes réponses :)
samcsharp
Messages postés
4
Date d'inscription
mardi 24 février 2009
Statut
Membre
Dernière intervention
5 avril 2009
1
25 févr. 2009 à 18:23
25 févr. 2009 à 18:23
Arf, je viens de réaliser que tu n'étais pas inscrit a ccm. Vla mon email alors : octopulsien at yahoo point fr. Je n'ai peut-être pas la dernière version de ffmpeg. Je me pencherai là dessus ce WE.
Pour ce qui est de la gestion de la gestion de tâches en parallèle, un collègue m'a parlé aujourd'hui d'un framework qui pourrait être sympa : Parallel Extensions for the .Net Framework
http://msdn.microsoft.com/fr-fr/vbasic/cc678397.aspx
https://www.programmez.com/magazine_articles.php?titre=Parallel-FX--la-parallelisation-facile&id_article=937&magazine=103
A+ :)
Pour ce qui est de la gestion de la gestion de tâches en parallèle, un collègue m'a parlé aujourd'hui d'un framework qui pourrait être sympa : Parallel Extensions for the .Net Framework
http://msdn.microsoft.com/fr-fr/vbasic/cc678397.aspx
https://www.programmez.com/magazine_articles.php?titre=Parallel-FX--la-parallelisation-facile&id_article=937&magazine=103
A+ :)
Salut,
Je suis exactement dans le même cas que toi. Et ffmpeg, même s'il marche bien, ne me semble pas idéal. En fait par manque de temps, je ne peux pas l'étudier à fond et cherche donc un moyen permettre à des utilisateurs d'envoyer simultanément des fichiers assez gros. As-tu trouvé une solution depuis ?
Je suis exactement dans le même cas que toi. Et ffmpeg, même s'il marche bien, ne me semble pas idéal. En fait par manque de temps, je ne peux pas l'étudier à fond et cherche donc un moyen permettre à des utilisateurs d'envoyer simultanément des fichiers assez gros. As-tu trouvé une solution depuis ?
Salut,
Merci pour ta réponse. Je t'ai moi-même longuement répondu, mais ma réponse passe pas. J'ai mis du code C# dans la réponse mais dans les balises "code", donc ça aurait dû passer :\
Merci pour ta réponse. Je t'ai moi-même longuement répondu, mais ma réponse passe pas. J'ai mis du code C# dans la réponse mais dans les balises "code", donc ça aurait dû passer :\
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
met moi ton mail j'ai retrouvé certaine sources qui pourraient t'etre utile, ca concerne la gestion de ces threads plus le thread principal etc.... Tu n'aurais qu'a utiliser ca dans ton global.asax
Maintenant pour l'utilisation de ffmpeg as tu la derniere version de celui-ci?
En tous cas moi le code ca donnait ca:
//string FFmpegPutanja = "c:\\TEMP\\ffmpeg.exe";
string FFmpegPutanja = this.fichierffmpg;
string RnaSol=this.FichierVideoSource;
string RnaComp=this.FichierVideoDestination;
string OneLine;
System.IO.StreamReader myStreamReader;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = FFmpegPutanja;
//p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.StartInfo.Arguments = " -i " + RnaSol + " -s 640x480 -ar 44100 -aspect 4:3 -pass 1 -b 768k -r 24 -acodec mp3 -ab 64 -f " + typeconvet + " -y " + RnaComp;
// p.StartInfo.Arguments = " -i " + RnaSol + " " + RnaComp;
//test
//fin test
p.Start();
processusID = p.Id;
string aaa = "";
myStreamReader = p.StandardError;
OneLine = myStreamReader.ReadLine();
do
{
aaa = aaa + OneLine + "<br>";
OneLine = myStreamReader.ReadLine();
} while (!(p.HasExited & (string.Compare(OneLine, "") == 0 | OneLine == null)));
//Response.Write(aaa);
p.WaitForExit();
if ((p.HasExited == true))
{
Gotovo = true;
}
if ((p.ExitCode == 0))
{
Gotovo = true;
p.Close();
//UbaciMetaData(RnaComp);
}
else
{
Gotovo = false;
p.Close();
}
}
Maintenant pour l'utilisation de ffmpeg as tu la derniere version de celui-ci?
En tous cas moi le code ca donnait ca:
//string FFmpegPutanja = "c:\\TEMP\\ffmpeg.exe";
string FFmpegPutanja = this.fichierffmpg;
string RnaSol=this.FichierVideoSource;
string RnaComp=this.FichierVideoDestination;
string OneLine;
System.IO.StreamReader myStreamReader;
System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardError = true;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.FileName = FFmpegPutanja;
//p.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
p.StartInfo.Arguments = " -i " + RnaSol + " -s 640x480 -ar 44100 -aspect 4:3 -pass 1 -b 768k -r 24 -acodec mp3 -ab 64 -f " + typeconvet + " -y " + RnaComp;
// p.StartInfo.Arguments = " -i " + RnaSol + " " + RnaComp;
//test
//fin test
p.Start();
processusID = p.Id;
string aaa = "";
myStreamReader = p.StandardError;
OneLine = myStreamReader.ReadLine();
do
{
aaa = aaa + OneLine + "<br>";
OneLine = myStreamReader.ReadLine();
} while (!(p.HasExited & (string.Compare(OneLine, "") == 0 | OneLine == null)));
//Response.Write(aaa);
p.WaitForExit();
if ((p.HasExited == true))
{
Gotovo = true;
}
if ((p.ExitCode == 0))
{
Gotovo = true;
p.Close();
//UbaciMetaData(RnaComp);
}
else
{
Gotovo = false;
p.Close();
}
}
24 févr. 2009 à 18:36
Je pensais pas avoir une réponse. Si vite en plus :)
Je me sers également de ffmpeg. Tout marche très bien tant que les vidéos font 2 ou 3Mo. Création de thumbnail comprise. Mais dès que la vidéo source fait plus de 2 ou 3 Mo, la conversion réussie en théorie seulement : j'obtiens alors une vidéo noire sans son. J'ai pourtant augmenté dans web.config le noeud httpRuntime et notamment l'attribut executionTimeout ainsi que maxRequestLength en pensant que c'était l'upload des grosses vidéos qui foirait. Mais c'est apparemment la conversion qui foire : elle est très (trop) rapide et on ne voit rien s'afficher dans la console ffmpeg.
Pour ma part j'utilise ces méthodes. Ca marche donc pour les vidéos de petite taille. J'ai pas dû tout comprendre aux subtilités de ffmpeg quand il s'agit de grosses vidéos.
/// <summary>
/// Testing file size, file extension and creating a swf video
/// </summary>
private void CreateSwfVideo()
{
//Cleaning
lblMsg.Text = string.Empty;
if (fulVideos != null || fulVideos.PostedFile != null)
{
//Testing video file size in byte (here 10Mo)
if (fulVideos.PostedFile.ContentLength > 12000000)
{
lblMsg.Text = "La taille des vidéos est limitée à 10Mo";
return;
}
postedFileName = fulVideos.PostedFile.FileName;
//Only .avi, .wmv, .mpeg allowed
bool fileUploadAllowed = false;
string fileExtension = Path.GetExtension(postedFileName);
switch (fileExtension)
{
case ".avi":
fileUploadAllowed = true;
break;
case ".wmv":
fileUploadAllowed = true;
break;
case ".mpeg":
fileUploadAllowed = true;
break;
default:
fileUploadAllowed = false;
break;
}
if (fileUploadAllowed)
{
fileSavedIn = AppDomain.CurrentDomain.BaseDirectory + "Video\\";
string newFileName = postedFileName;
newFileName = newFileName.Substring(newFileName.LastIndexOf("\\") + 1);
fileExtension = Path.GetExtension(newFileName);
//To allow videos with the same name, I add DateTime.Now.Ticks to its name
newFileName = newFileName.Remove(newFileName.LastIndexOf(".")) + "__"+ DateTime.Now.Ticks.ToString() + fileExtension;
fileNameWithPath = fileSavedIn + newFileName;
//Saves the file
fulVideos.PostedFile.SaveAs(fileNameWithPath);
//Starting conversion
string inputFile, outPutFile, fileArgs, fileWithoutExtension;
//Get file name without extension
fileWithoutExtension = Path.GetFileNameWithoutExtension(fileNameWithPath);
//
inputFile = fileSavedIn + newFileName;
//Ouput file in swf
outPutFile = fileSavedIn + "swf\\" + fileWithoutExtension + ".swf";
//To allow to point to full (path + new file name + swf)
Session["fullPathConvertedVideo"] = outPutFile;
//Chemin de la video swf jusqu'au dernier \ et SANS fichierNom.swf
Session["pathWithoutFileName"] = fileSavedIn + "swf\\";
//File alone
Session["onlyFileNameWithExt"] = fileWithoutExtension + ".swf";
//File args for ffmpeg
fileArgs = "-i " + inputFile + " -ar 22050 " + outPutFile;
string serverPath = Server.MapPath(".");
Process proc = new Process();
proc.StartInfo.FileName = serverPath + "\\ffmpeg\\ffmpeg.exe";
proc.StartInfo.Arguments = fileArgs;
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = false;
proc.StartInfo.RedirectStandardOutput = false;
try
{
proc.Start();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
proc.WaitForExit();
proc.Close();
CreateThumbnails(fileWithoutExtension, inputFile, serverPath);
}
else
{
lblMsg.ForeColor = System.Drawing.Color.Red;
lblMsg.Text = "Seuls les fichiers au format '.avi', '.wmv' ou '.mpeg' sont autorisés. ";
}
}
}
private void CreateThumbnails(string fileWithoutExtension, string inputFile, string serverPath)
{
string thumbPath, thumbName, thumbArgs;
thumbPath = AppDomain.CurrentDomain.BaseDirectory + "Video\\Thumb\\";
// !! sans le %d dans le nom, le thumbnail n'est pas créé
thumbName = thumbPath + fileWithoutExtension + "%d" + ".jpg";
Session["thumbName"] = thumbName;
thumbArgs = "-i " + inputFile + " -vframes 1 -ss 00:00:07 -s 150x150 " + thumbName;
//thumbArgs = "-i " + inputFile + "-an -s 150x150 -ss 00:00:07 -an -r 1 -vframes 1 -y -vcodec mjpeg -f mjpeg " + thumbName;
//thumbArgs = "-i + stream_1146848749371.flv -y -f singlejpeg -ss 0.001 -vframes 1 -an test.jpg";
Process thumbProc = new Process();
thumbProc.StartInfo.FileName = serverPath + "\\ffmpeg\\ffmpeg.exe";
thumbProc.StartInfo.Arguments = thumbArgs;
thumbProc.StartInfo.UseShellExecute = false;
thumbProc.StartInfo.CreateNoWindow = false;
thumbProc.StartInfo.RedirectStandardOutput = false;
try
{
thumbProc.Start();
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
thumbProc.WaitForExit();
thumbProc.Close();
//Original file deletion
File.Delete(inputFile);
SaveDetails();
lblMsg.Text = "Vidéo bien arrivée sur le serveur";
Session["video"] = inputFile;
//Response.Redirect(@"~/site/photo_index.aspx");
hlnkGotToVideoIndex.Visible = true;
}
Sinon j'ai trouvé ces composents, mais pas testé encore :
avs4you
https://www.avs4you.com/fr/avs-free-video-converter.aspx/
dont
https://www.avs4you.com/fr/avs-free-video-converter.aspx/
Video Sharing Script -- Start Your Own Video Sharing Site
https://www.dvdfab.cn/?source=sothink
TVideoGrabber v7.6 build 215.1 - TVideoGrabber is a video capture / media player component for developers working with C#
https://www.datastead.com/products/video-sdk/?gclid=CPOu9aak85gCFYIU4wodSWDZ1A
http://www.medialooks.com/products/multimedia_components.html
https://www.dvdfab.cn/?source=sothink
24 févr. 2009 à 18:41
Je pensais pas avoir une réponse. Si vite en plus :)
Je me sers également de ffmpeg. Tout marche très bien tant que les vidéos font 2 ou 3Mo. Création de thumbnail comprise. Mais dès que la vidéo source fait
plus de 2 ou 3 Mo, la conversion réussie en théorie seulement : j'obtiens alors une vidéo noire sans son. J'ai pourtant augmenté dans web.config le noeud
httpRuntime et notamment l'attribut executionTimeout ainsi que maxRequestLength en pensant que c'était l'upload des grosses vidéos qui foirait. Mais c'est
apparemment la conversion qui foire : elle est très (trop) rapide et on ne voit rien s'afficher dans la console ffmpeg.
Pour ma part j'utilise ces méthodes. Ca marche donc pour les vidéos de petite taille. J'ai pas dû tout comprendre aux subtilités de ffmpeg.
Sinon j'ai trouvé ces composants, mais pas testé encore :
avs4you
https://www.avs4you.com/fr/avs-free-video-converter.aspx/
dont
https://www.avs4you.com/fr/avs-free-video-converter.aspx/
Video Sharing Script -- Start Your Own Video Sharing Site
https://www.dvdfab.cn/?source=sothink
TVideoGrabber v7.6 build 215.1 - TVideoGrabber is a video capture / media player component for developers working with C#
https://www.datastead.com/products/video-sdk/?gclid=CPOu9aak85gCFYIU4wodSWDZ1A
http://www.medialooks.com/products/multimedia_components.html
https://www.dvdfab.cn/?source=sothink
26 nov. 2011 à 10:05