2012-05-10 3 views
0

Donc le projet sur lequel je travaille a déjà des tonnes de fichiers MP4 sur le serveur qui doivent être lus dans un lecteur intégré. Idéalement, nous aimerions utiliser le lecteur JW qui est déjà configuré pour la plupart des vidéos. Malheureusement, beaucoup de vidéos plus anciennes sont encodées en MPEG-4 et nécessitent des plugins supplémentaires pour être lus dans le navigateur.PHP et ffmpeg - Conversion en H.264 à la volée pour JW Player

Ce que je voudrais faire est de pouvoir transcoder ces vidéos à la volée vers un format supporté par JW Player, comme H.264. Maintenant, je suis à mi-chemin parce que je peux l'obtenir pour convertir les anciens fichiers MP4, mais j'ai du mal à transmettre les données directement au lecteur.

Ceci est mon script en cours de faire la conversion (ce qui est media_converted.php):

<?php 
    error_reporting(0); 
    if (!isset($_GET["MediaName"])) { 
     $_GET["MediaName"] = "GSX238"; 
    }  
    require_once("php/media_center_functions.php"); 
    $MediaURL = ConstructVideoURLInternap($_GET["MediaName"]); 
    header("Content-Transfer-Encoding: binary"); 
    //header('Content-type: video/mp4'); 
    //$calculatedFileSize = filesize($MediaURL); 
    //header("Content-Length: {$calculatedFileSize}"); 

    $cmd = 'ffmpeg -i "'.$MediaURL.'" -vcodec libx264 -acodec copy -f mp4 -moov_size 32000 "_temp/'.time().'_temp.mp4" 2> _temp/media_converter_output.txt'; 
    passthru($cmd); 

?> 

Je suis en train de prendre le fichier ci-dessus et de le transmettre au JW Player comme source vidéo: dans le lecteur Témoins de Jéhovah scripts variables, comme ceci:

so.addVariable('file','media_converted.php?MediaName=12345');

Même si je crois que cela devrait fonctionner, il est tout simplement pas.

Même lorsque la conversion semble fonctionner et être envoyée au lecteur, c'est difficile à dire parce que je pense que le navigateur essaie de télécharger le fichier entier avant de jouer quoi que ce soit. Évidemment, je ne peux pas faire attendre l'utilisateur comme ça. J'ai regardé dans qt-faststart, et j'ai été capable de l'utiliser sur mon ordinateur pour modifier le fichier afin qu'il puisse commencer à jouer pendant le chargement. Malheureusement, cela nécessite deux étapes. Je dois d'abord convertir complètement le fichier, puis quand c'est fait, je dois utiliser qt-faststart.exe dessus. Encore une fois, ce n'est pas vraiment une solution à la volée. Je suis sûr qu'il doit y avoir un moyen de produire des résultats similaires dans une seule commande à produire sur le lecteur ... non?

Il y a plus de données vidéo sur le serveur que sur mon disque dur, donc ré-encoder de façon permanente chaque vidéo, même par lots, serait gênant, car je devrais en télécharger, convertir , reupload, télécharger plus, etc. Si je dois le faire, je le ferai, mais je préférerais les laisser tels quels et être capable de transcoder à la volée.

Des idées?

Répondre

0

Je ne pense pas que ce soit possible. La conversion doit d'abord se produire, ensuite le fichier peut être chargé. Regardez Vimeo. Lorsque vous téléchargez un fichier, le système convertit le format avant qu'il ne soit disponible pour la lecture.

+0

Oui. Eh bien, ça craint. Merci. Je suppose que je vais devoir les convertir tous. Tant pis. C'est mieux à long terme de toute façon. – vertigoelectric

+0

:) Oui, je vous entends. Je pourrais me tromper, alors cela pourrait valoir la peine d'en faire un peu plus. Cependant, tout ce que j'ai vu suggère que ce n'est pas possible (sans faire une tonne de travail personnalisé). –

+0

J'ai déjà passé plusieurs heures à chercher les possibilités. Jusqu'à présent, la solution de transcodage à la volée peut être trouvée. Cependant, les convertir tous de manière permanente est plus idéal de toute façon, et avec le script AHK j'ai fait le processus est généralement automatisé de toute façon. Merci encore. – vertigoelectric