import sys
import pyzed.sl as sl
import time 
import concurrent.futures

def stream_camera(serial_number, port_number):
    init = sl.InitParameters()
    init.camera_resolution = sl.RESOLUTION.HD1080
    init.depth_mode = sl.DEPTH_MODE.NONE
    init.set_from_serial_number(serial_number)
    
    cam = sl.Camera()
    status = cam.open(init)
    if status != sl.ERROR_CODE.SUCCESS:
        print(repr(status))
        return
    
    runtime = sl.RuntimeParameters()

    stream = sl.StreamingParameters()
    stream.codec = sl.STREAMING_CODEC.H265
    stream.bitrate = 4000
    stream.port = port_number
    status = cam.enable_streaming(stream)
    if status != sl.ERROR_CODE.SUCCESS:
        print(repr(status))
        return
    
    print(f"Streaming camera with serial number {serial_number} on port {port_number}...\n")
    while True:
        err = cam.grab(runtime)

    cam.disable_streaming()
    cam.close()

def main():
    serial_number1 = serialnumber1
    port_number1 = 40000
    serial_number2 = serialnumber2
    port_number2 = 40004
    
    with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
        futures = []
        futures.append(executor.submit(stream_camera, serial_number1, port_number1))
        futures.append(executor.submit(stream_camera, serial_number2, port_number2))
        
        try:
            # Keep the main thread alive
            while True:
                pass
        except KeyboardInterrupt:
            for future in futures:
                future.cancel()

if __name__ == "__main__":
    main()

