Outils pour utilisateurs

Outils du site


piloter_un_apn_lumix_depuis_son_ordinateur

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
piloter_un_apn_lumix_depuis_son_ordinateur [2020/04/11 13:25] Mushussupiloter_un_apn_lumix_depuis_son_ordinateur [2020/10/30 10:21] – ↷ Liens modifiés en raison d'un déplacement. serge
Ligne 3: Ligne 3:
 Sélectionner le réseau Wi-Fi adéquat : Sélectionner le réseau Wi-Fi adéquat :
   MENU -> [Config.] -> Wi-Fi -> Fonction Wi-Fi -> Nouvelle connexion -> Prise de vue et affichage à distance -> DISP. Changer de mode -> Par réseau -> Dans la liste   MENU -> [Config.] -> Wi-Fi -> Fonction Wi-Fi -> Nouvelle connexion -> Prise de vue et affichage à distance -> DISP. Changer de mode -> Par réseau -> Dans la liste
 +===== Processing =====
 +<code java>
 +// http://www.personal-view.com/talks/discussion/6703/control-your-gh3-from-a-web-browser-now-with-video-/p1
 +import controlP5.*;
 +import java.awt.image.*; 
 +import javax.imageio.*;
 +import java.net.*;
 +import java.io.*;
  
 +ControlP5 cp5;
 +ReceiverThread thread;
 +
 +XML xml;
 +String adresse;
 +int port;
 +PImage video;
 +
 +void setup() {
 +  size(1000, 600);
 +  noStroke();
 +  video = createImage(640, 480, RGB);
 +  thread = new ReceiverThread(video.width, video.height);
 +  thread.start();
 +
 +  cp5 = new ControlP5(this);
 +
 +
 +  cp5.addToggle("Mode")
 +    .setPosition(40, 250)
 +    .setSize(50, 20)
 +    .setValue(false)
 +    .setMode(ControlP5.SWITCH)
 +    ;
 +
 +  cp5.addToggle("Diffusion")
 +    .setPosition(120, 250)
 +    .setSize(50, 20)
 +    .setValue(false)
 +    .setMode(ControlP5.SWITCH)
 +    ;
 +
 +  cp5.addButton("Photo")
 +    .setValue(0)
 +    .setPosition(100, 300)
 +    .setSize(120, 120)
 +    ;
 +
 +  cp5.addButton("Connexion")
 +    .setValue(0)
 +    .setPosition(100, 100)
 +    .setSize(80, 80)
 +    ;
 +  adresse = "";
 +  port = 49152;
 +}
 +
 +void draw() {
 +  background(0);
 +    if (thread.available()) {
 +    video = thread.getImage();
 +  }
 +    image(video,300, 60);
 +}
 +
 +void Connexion(int valeur) {
 +  println(valeur);
 +  adresse = "http://192.168.54.1/cam.cgi?mode=";
 +  xml = loadXML(adresse  + "getstate"); // Connexion
 +  println("Connexion");
 +  println(xml);
 +}
 +
 +void Mode(boolean drapeau) {
 +  if (!drapeau && !adresse.equals("")) {
 +    xml = loadXML(adresse  + "camcmd&value=recmode"); // Mode camera
 +    println("0");
 +  } else {
 +    xml = loadXML(adresse  + "camcmd&value=playmode"); // Mode lecture
 +    println("1");
 +  }
 +}
 +
 +void Diffusion(boolean drapeau) {
 +  println(adresse);
 +  if (!drapeau && !adresse.equals("")) {
 +    xml = loadXML(adresse  + "startstream&value=" + port); // Diffusion
 +    println("0");
 +  } else {
 +    xml = loadXML(adresse  + "stopstream"); // Arret Diffusion
 +    println("1");
 +  }
 +}
 +
 +void keyPressed() {
 +  println(byte(key));
 +  if (byte(key) == 10) {
 +    Photo(0);
 +  }
 +}
 +
 +
 +void Photo(int valeur) {
 +  xml = loadXML(adresse  + "camcmd&value=capture"); // Diffusion
 +  println(xml);
 +}
 +
 +// Daniel Shiffman
 +// <http://www.shiffman.net>
 +
 +class ReceiverThread extends Thread {
 +
 +  // Port we are receiving.
 +  int port = 49152; 
 +  DatagramSocket ds; 
 +  // A byte array to read into (max size of 65536, could be smaller)
 +  byte[] buffer = new byte[40000]; 
 +
 +  boolean running;    // Is the thread running?  Yes or no?
 +  boolean available;  // Are there new tweets available?
 +
 +  // Start with something 
 +  PImage img;
 +
 +  ReceiverThread (int w, int h) {
 +    img = createImage(w, h, RGB);
 +    running = false;
 +    available = true; // We start with "loading . . " being available
 +
 +    try {
 +      ds = new DatagramSocket(port);
 +    } 
 +    catch (SocketException e) {
 +      e.printStackTrace();
 +    }
 +  }
 +
 +  PImage getImage() {
 +    // We set available equal to false now that we've gotten the data
 +    available = false;
 +    return img;
 +  }
 +
 +  boolean available() {
 +    return available;
 +  }
 +
 +  // Overriding "start()"
 +  void start () {
 +    running = true;
 +    super.start();
 +  }
 +
 +  // We must implement run, this gets triggered by start()
 +  void run () {
 +    while (running) {
 +      checkForImage();
 +      // New data is available!
 +      available = true;
 +    }
 +  }
 +
 +  void checkForImage() {
 +    DatagramPacket p = new DatagramPacket(buffer, buffer.length); 
 +    try {
 +      ds.receive(p);
 +    } 
 +    catch (IOException e) {
 +      e.printStackTrace();
 +    } 
 +    byte[] data = p.getData();
 +    int debutTrame = 0;
 +    for (int i = 0; i < 200; i++) {
 +      if ((int(data[i]) == 0xff) && (int(data[i + 1]) == 0xD8)) {
 +        debutTrame = i;
 +      }
 +    }
 +    // println("Received datagram with " + data.length + " bytes." ); 
 +    data = subset(data, debutTrame, 30000);
 +    // Read incoming data into a ByteArrayInputStream
 +    ByteArrayInputStream bais = new ByteArrayInputStream( data ); 
 +    // We need to unpack JPG and put it in the PImage img
 +    img.loadPixels(); 
 +    try {
 +      // Make a BufferedImage out of the incoming bytes
 +      BufferedImage bimg = ImageIO.read(bais); 
 +      // Put the pixels into the PImage
 +      bimg.getRGB(0, 0, img.width, img.height, img.pixels, 0, img.width);
 +    } 
 +    catch (Exception e) {
 +      e.printStackTrace();
 +    }
 +    // Update the PImage pixels
 +    img.updatePixels();
 +  }
 +
 +
 +  // Our method that quits the thread
 +  void quit() {
 +    System.out.println("Quitting."); 
 +    running = false; // Setting running to false ends the loop in run()
 +    // In case the thread is waiting. . .
 +    interrupt();
 +  }
 +}
 +</code>
 ===== Sources ===== ===== Sources =====
-{{ :panasonic_gx80.pdf |Manuel d'utilisation d'un APN}}+{{ media_10:panasonic_gx80.pdf |Manuel d'utilisation d'un APN}}
  
 {{ media_01:gamepad_bluetooth_2.pdf | Notice GamePad}} {{ media_01:gamepad_bluetooth_2.pdf | Notice GamePad}}
piloter_un_apn_lumix_depuis_son_ordinateur.txt · Dernière modification : 2023/08/31 22:16 de Mushussu