Веб-страница для запуска python кода, запускающего поток udp - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть сценарий python на Raspberry Pi, который запускает два потока udp, один поток телеметрии и видеопоток. Пи является частью самолета R C. Потоки будут отправлены в приложение наземной станции на моем ноутбуке, телефоне или планшете. Вместо запуска через s sh я бы хотел разместить простую веб-страницу, которая запустит потоки udp.

Вот скрипт python (talonstart.py):

from threading import Thread
import os
import sys


startmav = "mavproxy.py --master=/dev/ttyS0 --baudrate 57600 --out " + (sys.argv[1]) +":14550 --aircraft robot"
startvid = "raspivid -o - -t 0 -n -w " + (sys.argv[2]) +" -h " + (sys.argv[3]) +" -fps 30| cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8000/}' :demux=h264"

def func1():
    os.system (startmav)

def func2():
    print("this is where video starts")

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()

Аргументы состоят из: (1) IP-адреса устройства, на которое должна передаваться плоскость, (2 и 3) - разрешение видеопотока. При выполнении через s sh код python работает. Самолет телеметрический и видеопоток на устройство и вся информация отображается так, как я и ожидал.

Когда я собрал веб-страницу, я столкнулся с некоторыми проблемами с разрешениями и смог их преодолеть. Теперь файл php (streaming. php), который запускает код python, будет работать в течение минуты или двух и правильно отображать первые несколько строк страницы, но потоки udp не запускаются.

Index. php, запущенный на pi, выглядит следующим образом:

<?php

function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

?>
<html>
<body>

<form action="streaming.php" method="post">
IP to stream to: <input type="text" name="name" value="<?php echo get_client_ip()?>"><br>
Stream Mavlink: <input type="checkbox" name="mavlink" value="mav" checked><br>
Stream video:   <input type="checkbox" name="video" value="video"><br>
Video width:    <input type="text" name="width" value="1920"><br>
Video height:   <input type="text" name="height" value="1080"><br>
<input type="submit">
</form>

</body>
</html>

Здесь идет потоковая передача. php:

<php?
echo "The time is " . date("h:i:sa");
echo "<br>";
$addy = $_POST["name"];
$width = $_POST["width"];
$height = $_POST["height"];
echo $addy;
echo "<br>";
$whowha = shell_exec('whoami');
echo $whowha;
echo "<br>";
$output = exec('python /var/www/html/talonstart.py '.$addy.' '.$width.' '.$height);
echo $output;

?>

/ var / log / apache2 / error .log не показывает ошибок.

Есть ли способ для потоковой передачи. php, чтобы показать команды по мере их выполнения, как я бы видел их через s sh, чтобы помочь в отладке? В настоящее время страница запускается и затем отображает код python после его выполнения.

Любая помощь будет принята с благодарностью!

Лорен

...