es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PHP popen() o proc_open() para almacenar/establecer el pid para poder cerrar el proceso en Windows que inicié.

Estoy intentando usar proc_open para abrir una instancia de ffmpeg. Funciona con popen sin el título, pero no puedo establecer el título ya que necesita otra línea o algo que intenté con
popen(“title $title \r start /min ffmpeg -loglevel quiet -re -i udp://$UIP:$UPort -codec: copy -f mpegts udp://$ip?pkt_size=1316”, “r”); no funcionó.

Mi código funcional es el siguiente:
$title = $_POST[‘title’];
$ip = $_POST[‘IPtxt’];
$UIP = $_POST[‘UDPAddress’];
$UPort = $_POST[‘UDPPort’];
echo “Iniciando ffmpeg…\n\n”;
popen(“start /min ffmpeg -loglevel quiet -re -i udp://$UIP:$UPort -codec: copy -f mpegts udp://$ip?pkt_size=1316”, “r”);
echo “Hecho.\n”;

Necesito guardar un título o un ID de proceso para poder detener el proceso cuando se hace clic en el botón de detener. He mirado proc_open pero no estoy seguro de la sintaxis correcta para él.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puede utilizar proc_open() para abrir una instancia de ffmpeg y establecer el título. La sintaxis sería algo así:

    $descriptorspec = array(
       0 => array("pipe", "r"),  // stdin es una tubería que el hijo leerá
       1 => array("pipe", "w"),  // stdout es una tubería en la que el hijo escribirá
       2 => array("file", "/tmp/error-output.txt", "a") // stderr es un archivo en el que escribir
    );
    
    $title=$_POST['title']; 
    $ip=$_POST['IPtxt'];
    $UIP=$_POST['UDPAddress'];
    $UPort=$_POST['UDPPort'];
    
    $process = proc_open("title $title \r start /min ffmpeg -loglevel quiet -re -i udp://$UIP:$UPort -codec: copy -f mpegts udp://$ip?pkt_size=1316", $descriptorspec, $pipes);
    
    if (is_resource($process)) {
        // $pipes ahora se ve así:
        // 0 => mango escribible conectado a stdin del hijo
        // 1 => mango legible conectado a modo de salida del hijo
        // Cualquier salida de error se agregará a /tmp/error-output.txt
    
        fclose($pipes[0]);
    
        echo stream_get_contents($pipes[1]);
        fclose($pipes[1]);
    
        // Es importante cerrar cualquier tubería antes de llamar
        // proc_close para evitar un bloqueo
        $return_value = proc_close($process);
    
        echo "el comando devolvió $return_value\n";
    }
    

Comments are closed.