Changeset 30229 in spip-zone


Ignore:
Timestamp:
Jul 26, 2009, 1:12:07 AM (10 years ago)
Author:
kent1@…
Message:

On continue à revoir le code en profondeur...

Location:
_plugins_/spipmotion
Files:
2 added
7 edited
1 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/spipmotion/action/spipmotion_ajouter_file_encodage.php

    r29748 r30229  
    2525        spip_log($id.' - '.$id_document.'  - '.$type);
    2626       
    27         $presente = sql_getfetsel('id_spipmotion_attente','spip_spipmotion_attentes','id_document='.intval($id_document).' AND encode="non"');
    28        
    29         if(!$presente){
    30                 sql_insertq('spip_spipmotion_attentes',array('id_auteur'=>$visiteur_session['id_auteur'],'id_document'=>$id_document,'objet'=>$type,'id_objet'=>$id,'encode'=>'non'));
     27        $extension = sql_getfetsel('extension','spip_documents','id_document='.intval($id_document));
     28
     29        if(lire_config('spipmotion/encodage_auto') == 'on'){
     30                spip_log('On est dans le mode encodage auto','spipmotion');
     31
     32                $encoder = charger_fonction('encodage','inc');
     33                $document = sql_fetsel("docs.id_document, docs.extension,docs.fichier,docs.mode,docs.distant, L.vu, L.objet, L.id_objet", "spip_documents AS docs INNER JOIN spip_documents_liens AS L ON L.id_document=docs.id_document","L.id_document=".intval($id_document));
     34                /**
     35                 * Ajout de la vidéo dans la file d'attente d'encodage si besoin
     36                 */
     37                if(in_array($extension,lire_config('spipmotion/fichiers_videos_encodage',array()))){
     38                        foreach(lire_config('spipmotion/fichiers_videos_sortie',array()) as $extension_sortie){
     39                                $en_file = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie' AND encode IN('en_cours,non')");
     40                                if(!$en_file){
     41                                        $id_doc_attente = sql_insertq("spip_spipmotion_attentes", array('id_document'=>$id_document,'objet'=>$document['objet'],'id_objet'=>$document['id_objet'],'encode'=>'non','id_auteur'=> $GLOBALS['visiteur_session']['id_auteur'],'extension'=>$extension_sortie));
     42                                        spip_log("on ajoute une video dans la file d'attente","spipmotion");
     43                                        $en_cours = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","encode='en_cours'");
     44                                        if(!$en_cours){
     45                                                $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
     46                                                $encoder($document,$id_doc_attente);
     47                                        }
     48                                }
     49                                else{
     50                                        spip_log("Cette video existe deja dans la file d'attente","spipmotion");                                                       
     51                                }
     52                        }
     53                }
     54               
     55                /**
     56                 * Ajout du son dans la file d'attente d'encodage si besoin
     57                 */
     58                else if(in_array($extension,lire_config('spipmotion/fichiers_audios_encodage',array()))){
     59                        foreach(lire_config('spipmotion/fichiers_audios_sortie',array()) as $extension_sortie){
     60                                $en_file = sql_getfetsel("spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie' AND encode IN('en_cours,non')");
     61                                if(!$en_file){
     62                                        $id_doc_attente = sql_insertq("spip_spipmotion_attentes", array('id_document'=>$id_document,'objet'=>$document['objet'],'id_objet'=>$document['id_objet'],'encode'=>'non','id_auteur'=> $GLOBALS['visiteur_session']['id_auteur'],'extension'=>$extension_sortie));
     63                                        spip_log("on ajoute un son dans la file d'attente","spipmotion");
     64                                        $en_cours = sql_fetsel("id_spipmotion_attente","spip_spipmotion_attentes","encode='en_cours'");
     65                                        if(!$en_cours){
     66                                                $document = sql_select('*','spip_documents','id_document='.intval($id_document));
     67                                                $encoder($document,$id_doc_attente);
     68                                        }                                                       
     69                                }
     70                                else{
     71                                        spip_log("Ce son existe deja dans la file d'attente","spipmotion");                                                     
     72                                }
     73                        }
     74                }
    3175        }
    3276       
  • _plugins_/spipmotion/base/spipmotion.php

    r30149 r30229  
    2121                "id_auteur" => "BIGINT(21) NOT NULL DEFAULT '0'",
    2222                "extension"     => "VARCHAR(10) DEFAULT '' NOT NULL",
    23                 "encode"        => "VARCHAR(21)",
     23                "encode"        => "VARCHAR(21)", // Peut être oui,non,en_cours
    2424                "maj" => "TIMESTAMP"
    2525        );
  • _plugins_/spipmotion/genie/spipmotion_file.php

    r29746 r30229  
    2323        if($nb_videos>0){
    2424                $encoder = charger_fonction('encodage','inc');
    25                 $video_attente = sql_fetsel("*","spip_spipmotion_attentes","encode='non'","","maj DESC","1");
    26                 $id_document = $video_attente['id_document'];
    27                 $id_video_attente = $video_attente['id_spipmotion_attente'];
     25                $doc_attente = sql_fetsel("*","spip_spipmotion_attentes","encode='non'","","maj DESC","1");
     26                $id_document = $doc_attente['id_document'];
     27                $id_doc_attente = $doc_attente['id_spipmotion_attente'];
    2828                $document = sql_fetsel('*','spip_documents','id_document='.sql_quote($id_document));
    29                 $encoder($document,$id_video_attente);
     29                $encoder($document,$id_doc_attente);
    3030        }
    3131}
  • _plugins_/spipmotion/inc/encodage.php

    r29748 r30229  
    1414if (!defined("_ECRIRE_INC_VERSION")) return;
    1515
    16 //
    17 // Faire l'encodage d'une video en .flv
    18 //
    19 
    2016function inc_encodage_dist($source,$attente){
    2117          return encodage($source,$attente);
    2218}
    2319
    24 function encodage($source,$video_attente){
     20function encodage($source,$doc_attente){
    2521        spip_log($source,'spipmotion');
    2622       
     
    2824         * On change le statut d'encodage à en_cours pour changer les messages et indiquer si nécessaire le statut
    2925         */
    30         sql_updateq("spip_spipmotion_attentes",array('encode'=>'en_cours'),"id_spipmotion_attente=".intval($video_attente));
     26        sql_updateq("spip_spipmotion_attentes",array('encode'=>'en_cours'),"id_spipmotion_attente=".intval($doc_attente));
     27       
     28        $attente = sql_fetsel("*","spip_spipmotion_attentes","id_spipmotion_attente=".intval($doc_attente));
     29        $extension_attente = $attente['extension'];
     30        $type_doc = $attente['objet'];
     31        $id_objet = $attente['id_objet'];
     32        spip_log($attente,"spipmotion");
    3133       
    3234        include_spip('inc/documents');
    3335        $chemin = get_spip_doc($source['fichier']);
    34 
    3536        spip_log("encodage de $chemin","spipmotion");
    36        
    37         /**
    38          * Calcul de la hauteur en fonction de la largeur souhaitée et de la taille de la video originale
    39          */     
    40         $width = $source['largeur'];
    41         $height = $source['hauteur'];
    42         $width_finale = lire_config('spipmotion/width') ? lire_config('spipmotion/width') : 480;
    43        
    44         if($width<$width_finale){
    45                 $width_finale = $width;
    46                 $height_finale = $height;
    47         }
    48         else{
    49                 $height_finale = $source['hauteur']/($source['largeur']/$width_finale);
    50         }
    51        
    52         spip_log("document original ($chemin) = $width/$height - document final = $width_finale/$height_finale",'spipmotion');
    5337       
    5438        $fichier = basename($source['fichier']);
     
    5640        $query = md5($string);
    5741        $dossier = _DIR_VAR;
    58         $fichier_temp = "$dossier$query.flv";
     42        $fichier_final = substr($fichier,0,-(strlen($source['extension']))).$extension_attente;
     43       
     44        $fichier_temp = "$dossier$query.$extension_attente";
    5945        spip_log("le nom temporaire durant l'encodage est $fichier_temp","spipmotion");
    6046       
    6147        /**
    62          * Définition du framerate d'encodage
    63          * - Si le framerate de la source est supérieur à celui de la configuration souhaité, on prend celui de la configuration
    64          * - Sinon on garde le même que la source
    65          *
    66          * TODO faire de même pour le son
    67          */
    68         if(intval($source['framerate']) < lire_config("spipmotion/fps","15")){
    69                 $fps = $source['framerate'];
    70         }else{
    71                 $fps = lire_config("spipmotion/fps","15");
     48         * Cas d'un fichier audio
     49         */     
     50        if(in_array($source['extension'],lire_config('spipmotion/fichiers_audios_encodage',array()))){
     51                /**
     52                 * Encodage du son
     53                 */     
    7254        }
    7355       
    7456        /**
    75          * Encodage de la video
    76          */
    77         $encodageflv = find_in_path('script_bash/spipmotion.sh').' --e '.$chemin.' --s '.$fichier_temp.' --size '.$width_finale.'x'.$height_finale.' --bitrate '.lire_config("spipmotion/bitrate","448").' --audiobitrate '.lire_config("spipmotion/bitrate_audio","64").' --audiofreq '. lire_config("spipmotion/frequence_audio","22050").' --fps '.$fps.' --p '.lire_config("spipmotion/chemin","/usr/local/bin/ffmpeg");
    78         spip_log("$encodageflv",'spipmotion');
    79         $lancement_encodage = exec($encodageflv,$retour);
    80         spip_log($retour,'spipmotion');
    81         spip_log("l'encodage est terminé",'spipmotion');
     57         * Cas d'un fichier vidéo
     58         */     
     59        if(in_array($source['extension'],lire_config('spipmotion/fichiers_videos_encodage',array()))){
     60                /**
     61                 * Calcul de la hauteur en fonction de la largeur souhaitée et de la taille de la video originale
     62                 */     
     63                $width = $source['largeur'];
     64                $height = $source['hauteur'];
     65                $width_finale = lire_config("spipmotion/width_$extension_attente") ? lire_config("spipmotion/width_$extension_attente") : 480;
     66               
     67                if($width<$width_finale){
     68                        $width_finale = $width;
     69                        $height_finale = $height;
     70                }
     71                else{
     72                        $height_finale = $source['hauteur']/($source['largeur']/$width_finale);
     73                }
     74               
     75                spip_log("document original ($chemin) = $width/$height - document final = $width_finale/$height_finale",'spipmotion');
     76               
     77                /**
     78                 * Définition du framerate d'encodage
     79                 * - Si le framerate de la source est supérieur à celui de la configuration souhaité, on prend celui de la configuration
     80                 * - Sinon on garde le même que la source
     81                 *
     82                 * TODO faire de même pour le son
     83                 */
     84                if(intval($source['framerate']) < lire_config("spipmotion/fps_$extension_attente","15")){
     85                        $fps = $source['framerate'];
     86                }else{
     87                        $fps = lire_config("spipmotion/fps_$extension_attente","15");
     88                }
     89               
     90                /**
     91                 * Encodage de la video
     92                 */
     93                $encodage = find_in_path('script_bash/spipmotion.sh').' --e '.$chemin.' --s '.$fichier_temp.' --size '.$width_finale.'x'.$height_finale.' --bitrate '.lire_config("spipmotion/bitrate_$extension_attente","448").' --audiobitrate '.lire_config("spipmotion/bitrate_audio_$extension_attente","64").' --audiofreq '. lire_config("spipmotion/frequence_audio_$extension_attente","22050").' --fps '.$fps.' --p '.lire_config("spipmotion/chemin","/usr/local/bin/ffmpeg");
     94                spip_log("$encodage",'spipmotion');
     95                $lancement_encodage = exec($encodage,$retour);
     96                spip_log($retour,'spipmotion');
     97                spip_log("l'encodage est terminé",'spipmotion');
     98               
     99                if($extension_attente == 'flv'){
     100                        /**
     101                         * Inscrire les metadatas dans la video finale
     102                         */
     103                        $metadatas_flv = 'flvtool2 -Ux '.$fichier_temp;
     104                        exec($metadatas_flv,$retour);
     105                        spip_log($metadatas_flv);
     106                }
     107               
     108        }
    82109       
    83110        /**
    84          * Inscrire les metadatas dans la video finale
    85          */
    86         $fichier_final = substr($fichier,0,-4).'.flv';
    87         $metadatas_flv = 'flvtool2 -Ux '.$fichier_final;
    88         shell_exec($metadatas_flv,'spipmotion');
    89 
    90         /**
    91111         * Ajout du nouveau document dans la base de donnée de SPIP
    92          * NB : la récupération des infos et du logo est faite automatiquement par le pipeline post-edition appelé par l'ajout du document
     112         * NB : la récupération des infos et du logo est faite automatiquement par
     113         * le pipeline post-edition appelé par l'ajout du document
    93114         */
    94115       
    95116        $mode = 'document';
    96117        $invalider = true;
    97        
    98         $attente = sql_fetsel("*","spip_spipmotion_attentes","id_spipmotion_attente=".intval($video_attente));
    99         $type_doc = $attente['objet'];
    100         $id_objet = $attente['id_objet'];
    101         spip_log($attente,"spipmotion");
     118
    102119        $ajouter_documents = charger_fonction('ajouter_documents', 'inc');
    103         $x = $ajouter_documents($fichier_temp, $fichier_final, $type_doc, $id_objet, $mode, $id_document, $actifs);
     120        $x = $ajouter_documents($fichier_temp, $fichier_final, $type_doc, $id_objet, $mode, '', $actif,'','','');
    104121        spip_log("on ajoute le nouveau fichier qui devient $x","spipmotion");
    105122        unlink($fichier_temp);
    106        
    107         sql_updateq("spip_spipmotion_attentes",array('encode'=>'oui'),"id_spipmotion_attente=".intval($video_attente));
    108        
     123
     124        sql_updateq("spip_spipmotion_attentes",array('encode'=>'oui'),"id_spipmotion_attente=".intval($doc_attente));
     125        sql_updateq("spip_documents",array('id_orig'=>$attente['id_document']),'id_document='.intval($x));
    109126        if ($invalider) {
    110127                include_spip('inc/invalideur');
     
    112129                spip_log('invalider', 'spipmotion');
    113130        }
    114        
     131
    115132        return;
    116133}
  • _plugins_/spipmotion/inc/spipmotion_infos_videos.php

    r30115 r30229  
    1313include_spip('inc/actions');
    1414
    15 function inc_infos_videos_dist($id, $id_document,$type,$script='',$ignore_flag = false) {
     15function inc_spipmotion_infos_videos_dist($id, $id_document,$type,$script='',$ignore_flag = false) {
    1616        if(_AJAX){
    1717                include_spip('public/assembler');
  • _plugins_/spipmotion/plugin.xml

    r30149 r30229  
    1010        0.3
    1111        </version>
    12         <version_base>0.5</version_base>
     12        <version_base>0.6</version_base>
    1313        <etat>
    1414        experimental
     
    2020        </description>
    2121        <lien>http://kent1.sklunk.net/spip.php?article93</lien>
    22         <necessite id="SPIP" version="[2.0;]" />
     22        <necessite id="SPIP" version="[2.0.8;]" />
    2323        <necessite id='cfg' version='[1.13;]' />
    2424        <necessite id='saisies' version='[1.0;]' />
    2525        <necessite id='spip_bonux' version='[1.8;]' />
     26        <necessite id='getid3' version='[0.2;]' />
    2627        <options>
    2728        spipmotion_options.php
  • _plugins_/spipmotion/script_bash/spipmotion.sh

    r29748 r30229  
    1515ou arguments doit inclure la vidéo source et la vidéo de sortie au format flv et éventuellement :
    1616* la taille de la video ex : --size 320x240
    17 * le bitrate de la video ex : --bitrate 448
     17* le bitrate de la video ex : --bitrate 448kbs
    1818* le nombre d'image par seconde ex : --fps 15
    19 * le bitrate audio ex : --audiobitrate 64
     19* le bitrate audio ex : --audiobitrate 64kbs
    2020* la fréquence d'echantillonnage sonnore ex : --bitrate 22050
    2121* le chemin vers l'executable ffmpeg (--p). /usr/local/bin/ffmpeg est la valeur par défaut.
     
    2323
    2424Exemple :
    25 ./spipmotion.sh --e video-entree.avi --s video-sortie.flv --size 320x240 --bitrate 448 --fps 15 --audiobitrate 64 --audiofreq 22050 --p /usr/local/bin/ffmpeg
     25./spipmotion.sh --e video-entree.avi --s video-sortie.flv --size 320x240 --bitrate 448kbs --fps 15 --audiobitrate 64kbs --audiofreq 22050 --p /usr/local/bin/ffmpeg
    2626
    2727#####################################################
  • _plugins_/spipmotion/spipmotion_pipelines.php

    r30227 r30229  
    1515                                $flux['data'] .= $infos_videos($id,$id_document,$type);
    1616                        }
    17                 }else if(in_array($extension,lire_config('spipmotion/fichiers_audios',array()))){
    18                         $infos_sons = charger_fonction('spipmotion_infos_sons', 'inc');
    19                         $flux['data'] .= $infos_sons($id,$id_document,$type);
    2017                }
    2118        }
     
    4138 * @param object $flux
    4239 */
    43 function spipmotion_post_edition($flux){
    44         global $connect_id_auteur;
    45        
     40function spipmotion_post_edition($flux){       
    4641        spip_log("pipeline post_edition","spipmotion");
    4742        $id_document = $flux['args']['id_objet'];
     
    5651                if($flux['args']['operation'] == 'ajouter_document'){
    5752                        spip_log("operation = ajouter_docs","spipmotion");
    58                         $document = sql_fetsel("docs.id_document, docs.extension,docs.fichier,docs.mode,docs.distant, L.vu, L.objet, L.id_objet", "spip_documents AS docs INNER JOIN spip_documents_liens AS L ON L.id_document=docs.id_document","L.id_document=".sql_quote($id_document));
     53                        $document = sql_fetsel("docs.id_document, docs.extension,docs.fichier,docs.mode,docs.distant, L.vu, L.objet, L.id_objet", "spip_documents AS docs INNER JOIN spip_documents_liens AS L ON L.id_document=docs.id_document","L.id_document=".intval($id_document));
    5954                        $extension = $document['extension'];
    6055                       
     
    8277                                }
    8378
    84                                 if(lire_config('spipmotion/encodage_auto') == 'oui'){
     79                                if(lire_config('spipmotion/encodage_auto') == 'on'){
     80                                        spip_log('On est dans le mode encodage auto','spipmotion');
     81
     82                                        $encoder = charger_fonction('encodage','inc');
     83                                       
    8584                                        /**
    8685                                         * Ajout de la vidéo dans la file d'attente d'encodage si besoin
     
    8887                                        if(in_array($extension,lire_config('spipmotion/fichiers_videos_encodage',array()))){
    8988                                                foreach(lire_config('spipmotion/fichiers_videos_sortie',array()) as $extension_sortie){
    90                                                         $en_file = sql_getfetsel("spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie'");
     89                                                        $en_file = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie' AND encode IN('en_cours,non')");
    9190                                                        if(!$en_file){
    92                                                                 sql_insertq("spip_spipmotion_attentes", array('id_document'=>$id_document,'objet'=>$document['objet'],'id_objet'=>$document['id_objet'],'encode'=>'non','id_auteur'=> $connect_id_auteur,'extension'=>$extension_sortie));
    93                                                                 spip_log("on ajoute une video dans la file d'attente","spipmotion");                                                   
     91                                                                $id_doc_attente = sql_insertq("spip_spipmotion_attentes", array('id_document'=>$id_document,'objet'=>$document['objet'],'id_objet'=>$document['id_objet'],'encode'=>'non','id_auteur'=> $GLOBALS['visiteur_session']['id_auteur'],'extension'=>$extension_sortie));
     92                                                                spip_log("on ajoute une video dans la file d'attente","spipmotion");
     93                                                                $en_cours = sql_getfetsel("id_spipmotion_attente","spip_spipmotion_attentes","encode='en_cours'");
     94                                                                if(!$en_cours){
     95                                                                        $document = sql_fetsel('*','spip_documents','id_document='.intval($id_document));
     96                                                                        $encoder($document,$id_doc_attente);
     97                                                                }
    9498                                                        }
    9599                                                        else{
     
    104108                                        else if(in_array($extension,lire_config('spipmotion/fichiers_audios_encodage',array()))){
    105109                                                foreach(lire_config('spipmotion/fichiers_audios_sortie',array()) as $extension_sortie){
    106                                                         $en_file = sql_getfetsel("spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie'");
     110                                                        $en_file = sql_getfetsel("spip_spipmotion_attentes","id_document=$id_document AND extension ='$extension_sortie' AND encode IN('en_cours,non')");
    107111                                                        if(!$en_file){
    108                                                                 sql_insertq("spip_spipmotion_attentes", array('id_document'=>$id_document,'objet'=>$document['objet'],'id_objet'=>$document['id_objet'],'encode'=>'non','id_auteur'=> $connect_id_auteur,'extension'=>$extension_sortie));
    109                                                                 spip_log("on ajoute un son dans la file d'attente","spipmotion");                                                       
     112                                                                $id_doc_attente = sql_insertq("spip_spipmotion_attentes", array('id_document'=>$id_document,'objet'=>$document['objet'],'id_objet'=>$document['id_objet'],'encode'=>'non','id_auteur'=> $GLOBALS['visiteur_session']['id_auteur'],'extension'=>$extension_sortie));
     113                                                                spip_log("on ajoute un son dans la file d'attente","spipmotion");
     114                                                                $en_cours = sql_fetsel("id_spipmotion_attente","spip_spipmotion_attentes","encode='en_cours'");
     115                                                                if(!$en_cours){
     116                                                                        $document = sql_select('*','spip_documents','id_document='.intval($id_document));
     117                                                                        $encoder($document,$id_doc_attente);
     118                                                                }                                                       
    110119                                                        }
    111120                                                        else{
Note: See TracChangeset for help on using the changeset viewer.