URL: https://linuxfr.org/forums/programmation-php/posts/proc_open-enregistrer-l-output-de-flvstreamer Title: proc_open : enregistrer l'output de flvstreamer Authors: maboiteaspam Date: 2012年12月14日T15:01:44+01:00 Tags: Score: -1 hello, J'essaie d’exécuter une instance de flvstreamer et de récupérer l'output pour l'enregistrer dans un fichier txt plat. Par output, j'entends, le statut, pas le contenu de la vidéo. Je le fais en php car j'aimerais horodater, sucrifié, chaque ligne de log. J'essaie de faire cela en php, 5.4.6, je n'exclut pas que cette méthode soit erronée. Voici comment je procède, _ la commande qui ~~spawn~~ exécute le process _ flvstreamer -r rtmp://artestras.fcod.llnwd.net/a3903/o35/mp4:geo/videothek/ALL/arteprod/A7_SGT_ENC_06_046289-250-A_PG_MQ_FR?h=2dc6a957fc34a33c4b41a3faee60600f --flv /home/clement/Bureau/pArte/downloads/acab0272ea75fcf85fb949eaf8a4a787364fc8d4.flv _ le code qui spawn le process et devrait enregistrer l'output _ $command = "... Voir ci dessus.."; echo $command; $descriptorspec = array( 0 => array("pipe", "r"), // // stdin est un pipe où le processus va lire 1 => array("pipe", "r"), // stdout est un pipe où le processus va écrire 2 => array("pipe", "r"), // stderr est un fichier 3 => array("pipe", "r"), // stderr est un fichier 4 => array("pipe", "r"), // stderr est un fichier 5 => array("pipe", "r"), // stderr est un fichier // 2 => array("file", "$logger_path", "a") // stderr est un fichier ); $process = proc_open($command, $descriptorspec, $pipes); if (is_resource($process)) { fclose($pipes[0]); fclose($pipes[1]); fclose($pipes[2]); fclose($pipes[3]); fclose($pipes[4]); $pipe = $pipes[5]; stream_set_blocking($pipe, 0); $output = ""; do{ $output.= stream_get_contents($pipe, 5); $p = strpos($output, PHP_EOL); if( $p> -1 ){ $line = substr($output,0,$p); $line = date("[Y-m-d H:I:s] ").$line; file_put_contents($logger_path,$line, FILE_APPEND); } $status = proc_get_status($process); sleep(1); echo "$output\n"; }while( $status["running"] ); fclose($pipe); $return_value = proc_close($process); echo "La commande a retourné $return_value\n"; } Rien de bien extravagant, excepter les 6 pipes que j'ai ouvert sur le process. J'ai fait cela pour déterminer le pipe qui émet l'output, sans succès. Du coup là je galère grave sur un truc simple... Est ce que vous avez une solution ? A+

AltStyle によって変換されたページ (->オリジナル) /