Top.Mail.Ru
Ответы
Аватар пользователя
1 год назад
от
Изменено

Помогите с сервером на python.

Сделал небольшой сайт для raspberry pi 4 чтобы на нём выводилась картинка с камеры, и при подключении по локальному адресу всё отлично, но когда я хочу подключиться к нему через глобальный ip, то пишет что подключиться браузер не может, а в выходе кода ничего не появляется что кто-то пытался подключиться.
Код:

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
 import io 
import logging 
import socketserver 
from http import server 
from threading import Condition 
 
from picamera2 import Picamera2 
from picamera2.encoders import JpegEncoder 
from picamera2.outputs import FileOutput 
 
# HTML page for the MJPEG streaming demo 
PAGE = """\ 
<html> 
<body> 
<h1>Domovoy Pi | Camera stream</h1> 
<img src="https://stream.mjpg" width="-1" height="-1" alt = "false|false"/> 
</body> 
</html> 
""" 
 
# Class to handle streaming output 
class StreamingOutput(io.BufferedIOBase): 
    def __init__(self): 
        self.frame = None 
        self.condition = Condition() 
 
    def write(self, buf): 
        with self.condition: 
            self.frame = buf 
            self.condition.notify_all() 
 
# Class to handle HTTP requests 
class StreamingHandler(server.BaseHTTPRequestHandler): 
    def do_GET(self): 
        if self.path == '/': 
            # Redirect root path to index.html 
            self.send_response(301) 
            self.send_header('Location', '/index.html') 
            self.end_headers() 
        elif self.path == '/index.html': 
            # Serve the HTML page 
            content = PAGE.encode('utf-8') 
            self.send_response(200) 
            self.send_header('Content-Type', 'text/html') 
            self.send_header('Content-Length', len(content)) 
            self.end_headers() 
            self.wfile.write(content) 
        elif self.path == '/stream.mjpg': 
            # Set up MJPEG streaming 
            self.send_response(200) 
            self.send_header('Age', 0) 
            self.send_header('Cache-Control', 'no-cache, private') 
            self.send_header('Pragma', 'no-cache') 
            self.send_header('Content-Type', 'multipart/x-mixed-replace; boundary=FRAME') 
            self.end_headers() 
            try: 
                while True: 
                    with output.condition: 
                        output.condition.wait() 
                        frame = output.frame 
                    self.wfile.write(b'--FRAME\r\n') 
                    self.send_header('Content-Type', 'image/jpeg') 
                    self.send_header('Content-Length', len(frame)) 
                    self.end_headers() 
                    self.wfile.write(frame) 
                    self.wfile.write(b'\r\n') 
            except Exception as e: 
                logging.warning( 
                    'Removed streaming client %s: %s', 
                    self.client_address, str(e)) 
        else: 
            # Handle 404 Not Found 
            self.send_error(404) 
            self.end_headers() 
 
# Class to handle streaming server 
class StreamingServer(socketserver.ThreadingMixIn, server.HTTPServer): 
    allow_reuse_address = True 
    daemon_threads = True 
 
# Create Picamera2 instance and configure it 
picam2 = Picamera2() 
picam2.configure(picam2.create_video_configuration(main={"size": (1280, 720)})) 
output = StreamingOutput() 
picam2.start_recording(JpegEncoder(), FileOutput(output)) 
 
try: 
    # Set up and start the streaming server 
    address = ('', 8000) 
    server = StreamingServer(address, StreamingHandler) 
    server.serve_forever() 
finally: 
    # Stop recording when the script is interrupted 
    picam2.stop_recording()  
Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Искусственный Интеллект

Покупать белый IP кто будет? Открывать порты кто будет?