显示从Raspberry Camera到Java Client的视频流

时间:2019-05-10 23:25:14

标签: java python raspberry-pi3

我正在用Raspberry制作机器人。 我的目标是:

  1. 使用Python在Rasbperry上对服务器进行编码,该Python可以捕获相机中的图像并通过套接字发送数据。
  2. 使用Java编写PC上的客户端的代码,该Java从套接字读取数据并将其显示在JavaSwing窗口中

所以我可以实时看到Raspberry Camera看到的东西。

这是在作为服务器的Raspberry上运行的Python代码

import socket
from time import sleep
import picamera

ADDRESS = '192.168.1.XXX'  # My Address - SERVER
PORT = YYYY        # Port to listen on (non-privileged ports are > 1023)

camera = picamera.PiCamera()
camera.resolution = (640, 480)
camera.framerate = 24

server = socket.socket()  
server.bind((ADDRESS, PORT)) 
print("In attesa di connessioni...")
server.listen(0)   

connection, addr = server.accept() 
client = connection.makefile('wb') 
print('Connected to', addr)

try:

   camera.start_recording(client, format='h264')
   print("Recording started...")
   camera.wait_recording(30)
   camera.stop_recording()
   print("Recording stopped...")

finally:
   client.close()
   server.close()
   camera.stop_preview()
   print("Connection closed")

这是在Java PC上运行的代码,它是客户端。

public class ConnectionRaspberry {

static String serverAddress = "192.168.1.XXX";  //Raspberry
static String clientAddress = "192.168.1.ZZZ"; //PC
static int serverPort = YYYY;
static int clientPort = YYYY;
static Socket socket;

public static void main(String[] args) {

    String msg = null;

    try{
        socket = new Socket( InetAddress.getByName(serverAddress), serverPort );
        System.out.println("Connesso al Server: "+socket.getInetAddress()+":"+socket.getPort() );

        InputStream in = socket.getInputStream();
        PrintWriter out = new PrintWriter( socket.getOutputStream(), true );

        while(true) {
              byte[] data = new byte[1024];
                int count = in.read(data);
                ByteBuffer bb = ByteBuffer.allocate(data.length);
                bb.put(data);
                System.out.println("RECEIVED: "+Arrays.toString(data));
                if( count == 0 ) break;             
        }
        System.out.println("READED");
        out.close();
        socket.close();

    } catch( IOException ioe ){ System.out.println(ioe); }

}

我可以从Raspberry接收数据,但是我不知道如何显示接收到的数据。我在网上找到有关JCodec,Grab和其他解决方案的信息,但似乎没人适应。

或者,我也可以在Raspberry上使用Java,但是我需要一个库来管理摄像机。我使用

为服务器编写了类似的代码

“ com.hopding.jrpicamera.RPiCamera”。

文件为“ Test.java”。 我正在使用Geany作为JavaIDE。

public static void main(String... args){
    System.out.println("Avvio Applicazione");
    //new Test().avvia();

    try{
        RPiCamera camera = new RPiCamera();
        camera.setToDefaults();
        camera.takeStill("EST_IMAGE.jpeg");
        BufferedImage image = camera.takeBufferedStill();
        ImageIO.write(image, "jpg", new File("out.jpg") );
    }catch(Exception e){};
}

不幸的是,此代码不起作用:相机无论如何都无法拍照。

我想在JavaSwing窗口上显示视频,手动刷新,或者如果这个想法不好,请随时向我建议。

非常感谢。

0 个答案:

没有答案