У меня есть сценарий 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 после его выполнения.
Любая помощь будет принята с благодарностью!
Лорен