source: spip-zone/_plugins_/spipmotion/trunk/action/spipmotion_encoder.php @ 62716

Last change on this file since 62716 was 62716, checked in by kent1@…, 7 years ago

On n'utilise plus du tout id_orig maintenant mais des documents attachés au document original

On évite de dupliquer du code dans les ajouts en file

Refaire marcher correctement les encodages et les logos

Améliorer les ajouts dans l'espace privé en n'utilisant que des squelettes

File size: 3.8 KB
Line 
1<?php
2/**
3 * SPIPmotion
4 * Gestion de l'encodage et des métadonnées de vidéos directement dans spip
5 *
6 * Auteurs :
7 * kent1 (http://www.kent1.info - kent1@arscenic.info)
8 * 2008-2012 - Distribué sous licence GNU/GPL
9 *
10 */
11
12if (!defined("_ECRIRE_INC_VERSION")) return;
13
14/**
15 * Fonction de lancement d'encodage
16 * Il est préférable de l'appeler via le Cron pour éviter de bloquer le processus de l'utilisateur
17 *
18 * Consulte la file d'attente pour savoir si des documents sont à encoder.
19 * Vérifie en amont que la meta "spipmotion_casse" ne soit pas à "oui", si elle l'est
20 * aucun encodage n'est lancé
21 *
22 * S'il existe au moins un document à encoder on lance le premier
23 * Si ce document original n'existe plus, on supprime ses occurences dans la file d'attente
24 * et on relance la même fonction
25 *
26 */
27function action_spipmotion_encoder_dist(){
28        $action = _request('action');
29        $actions_autorisees = array(
30                'cron',
31                'super_cron',
32                'forcer_job',
33                'spipmotion_relancer_encodage',
34                'spipmotion_ajouter_file_encodage',
35                'spipmotion_ajouter_file_encodage_tout'
36        );
37       
38        /**
39         * Sécurité qui empèche les appels directs d'encodage de l'extérieur ...
40         * Malheureusement ne peut fonctionner dans le cas d'un firewall qui fait du NAT (chez Infini) ...
41         * A retravailler
42         */
43        //if(($_SERVER['REMOTE_ADDR'] != $_SERVER['SERVER_ADDR']) && (!in_array($action,$actions_autorisees))){
44        //      spip_log('Echec : Appel de spipmotion_encoder depuis '.$_SERVER['REMOTE_ADDR'],'spipmotion');
45        //      include_spip('inc/minipres');
46        //   echo minipres();
47        //    exit;
48        //}
49        $nb_encodages = sql_countsel('spip_spipmotion_attentes', "encode='non'");
50        spip_log('Appel de la fonction d encodage','spipmotion');
51        $en_cours = sql_fetsel('id_spipmotion_attente,maj','spip_spipmotion_attentes',"encode='en_cours'");
52       
53        /**
54         * On essaie de voir s'il y a d'autres processus ffmpeg en cours sur le serveur (autres sites?)
55         */
56        if(($nb_encodages>0) && ($GLOBALS['meta']['spipmotion_casse'] != 'oui') && !intval($en_cours['id_spipmotion_attente'])){
57                $ps_ffmpeg = exec('ps -C ffmpeg',$retour,$retour_int);
58                if(($retour_int == 1) && (count($retour) >= 3)){
59                        spip_log('Il y a a apparemment trop de processus de ffmpeg en cours, on attend donc','spipmotion');
60                        $process = false;
61                }else{
62                        $process = true;
63                }
64                if($process){
65                        $doc_attente = sql_fetsel("*","spip_spipmotion_attentes","encode='non'","","id_spipmotion_attente ASC","1");
66                        $id_document = $doc_attente['id_document'];
67                        $id_doc_attente = $doc_attente['id_spipmotion_attente'];
68                        $format = $doc_attente['extension'];
69                        $document = sql_fetsel('*','spip_documents','id_document='.sql_quote($id_document));
70                        if($document['id_document']){
71                                spip_log('on encode le doc '.$id_document,'spipmotion');
72                                $encoder = charger_fonction('encodage','inc');
73                                $encoder($document,$id_doc_attente,$format);
74                        }else{
75                                sql_delete('spip_spipmotion_attentes','id_document='.sql_quote($id_document));
76                                genie_spipmotion_file($time);
77                        }
78                }
79                else{
80                        spip_log("Trop de processus en cours de ffmpeg sur le serveur, on attend","spipmotion");
81                }
82        }else if(lire_config('spipmotion_casse') == 'oui'){
83                spip_log('Attention, problème dans la configuration','spipmotion');
84        }else if(intval($en_cours['id_spipmotion_attente']) && ($en_cours['maj'] < date('Y-m-d H:i:s',mktime(date('H')-5)))){
85                spip_log("L'id ". $en_cours['id_spipmotion_attente']." de la file d'attente est en cours d'encodage depuis plus de 5 h (".$en_cours['maj']."), on doit le réinitialiser",'spipmotion');
86                sql_updateq('spip_spipmotion_attentes',array('encode' => 'non'),'id_spipmotion_attente ='.intval($en_cours['id_spipmotion_attente']));
87        }else if(intval($en_cours['id_spipmotion_attente'])){
88                spip_log("L'id ". $en_cours['id_spipmotion_attente']." de la file d'attente est en cours d'encodage",'spipmotion');
89                spip_log("On attend sa fin avant d'en commencer un nouveau",'spipmotion');
90        }
91       
92        return;
93}
Note: See TracBrowser for help on using the repository browser.