【问题标题】:Playing video in Processing在处理中播放视频
【发布时间】:2020-08-06 14:58:18
【问题描述】:

我正在使用 Arduino 读取电容式传感器,并且触摸传感器的数量被传达给 Processing,目前它只是 1 或 2。

在处理中,我尝试根据收到的传感器数量播放视频。我需要能够在播放过程中切换不同的视频,播放完成后,如果按下相同的数字,视频应该跳回到开头。

这是处理中的代码

    import processing.serial.*;
    import processing.video.*;
    
    Movie video1, video2;
    
    Serial port;
    char in;
    char previousIn;
    boolean playing = false;
    //float time = 0;
    
    void setup() {  
      fullScreen(JAVA2D);
      frameRate(25);
      video1 = new Movie(this, "redFIN.mp4");
      video2 = new Movie(this, "greenFIN.mp4");
      port = new Serial(this, Serial.list()[0], 9600);
    }
    
    void movieEvent(Movie m) {
      m.read();
    }
    
    void draw() {  
      if ( port.available() > 0) {  // If data is available,
        in = char(port.read());
        print(in);
      }
    
      if (in == '1') {  
        video1.play();
        video2.stop();
        in = previousIn;
        if (in == previousIn) {
          video1.jump(0);
        }
      }
      image(video1, 0, 0, width, height);
    
    
      if (in =='2') {
        video2.play();
        video1.stop();
        in = previousIn;
        if (in == previousIn) {
          video2.jump(0);
        }
      }
      image(video2, 0, 0, width, height);
    }

目前,我可以在视频之间切换,但只能从电影 1 到电影 2,当从电影 2 回到电影 1 时,我得到了电影 1 的音频,但它一直显示电影 2 的最后一帧。

如果能深入了解为什么会发生这种情况,我将不胜感激。

【问题讨论】:

    标签: video arduino processing


    【解决方案1】:

    您已经非常接近了,但仍有几个区域的行为与您的预期不同:

    1. 您使用image() 同时绘制video1video2:您只想渲染一个视频
    2. if (in == previousIn) 条件可能应该在设置previousIn 之前发生(顺便说一句,您正在设置其他方式)。 (否则条件将始终为真)

    这是使用第三个 Movie 变量的版本,它只是对 video1video2 的引用,具体取决于上下文:

    import processing.serial.*;
    import processing.video.*;
    
    Movie video1, video2, currentVideo;
    
    Serial port;
    char in;
    char previousIn;
    boolean playing = false;
    //float time = 0;
    
    void setup() {  
      fullScreen(JAVA2D);
      frameRate(25);
      video1 = new Movie(this, "redFIN.mp4");
      video2 = new Movie(this, "greenFIN.mp4");
      // default to video1
      currentVideo = video1;
      port = new Serial(this, Serial.list()[0], 9600);
    }
    
    void movieEvent(Movie m) {
      m.read();
    }
    
    void draw() {  
      if ( port.available() > 0) {  // If data is available,
        in = char(port.read());
        print(in);
      }
    
      if (in == '1') {  
        video1.play();
        video2.stop();
        if (in == previousIn) {
          video1.jump(0);
        }
        previousIn = in;
        currentVideo = video1;
      }
    
      if (in =='2') {
        video2.play();
        video1.stop();
        if (in == previousIn) {
          video2.jump(0);
        }
        previousIn = in;
        currentVideo = video2;
      }
      
      image(currentVideo, 0, 0, width, height);
    }
    

    【讨论】:

    • 非常感谢,它按预期工作!我已经想出了一种不同的方法(基于另一个聪明人的代码和更多的代码行),但是你的 cmets 和解释对于学习和更好的理解来说是惊人的!
    猜你喜欢
    • 2016-12-26
    • 1970-01-01
    • 2018-10-12
    • 1970-01-01
    • 2014-11-23
    • 2014-05-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多