我看不到正在处理的视频,我只能听到其中的音频



我正在尝试播放基于Arduino传感器的两个视频之一(用于大学项目)

问题是我在处理中看不到任何视频,但我只听到音频。

我使用H264编解码器渲染视频,它们是全高清的。我使用的是Processing 4.1.1.

这是我尝试播放基于传感器值的视频:


import processing.serial.*;
import processing.video.*;
Movie movie1, movie2;
boolean playing = false;
char previousIn;


Serial mySerial;
String myString = null;
int nl = 10;
float myVal;
void setup() {
size(1000, 1000);
frameRate(25);

String myPort =Serial.list()[2];
mySerial = new Serial(this, myPort, 9600);
movie1 = new Movie(this, "Final_Clips_HD.mp4");
movie2 = new Movie(this, "Final_Clips_HD_2.mp4");
}


void movieEvent(Movie movie) {
movie.read();
}
void draw() {

while (mySerial.available() > 0) {
myString = mySerial.readStringUntil(nl);
if (myString != null) {
myVal = float(myString);
println(myVal);


if (myVal > 10 && myVal < 20) {
movie1.play();
movie2.stop();
myVal = previousIn;
if (myVal == previousIn) {
movie1.jump(0);
}
}
image(movie1, 0, 0, width, height);

//fill(0,255,0);
if (myVal < 10 && myVal > 0) {
movie2.play();
movie1.stop();
myVal = previousIn;
if (myVal == previousIn) {
movie2.jump(0);
}
}
image(movie2, 0, 0, width, height);
}
}
}

你已经有了所有的"成分"对,你可能只需要稍微洗牌一下。在使用H264处理上做得很好(我看到过以前使用其他视频编解码器的错误)(并检查null等)

目前只有在有串行连接的情况下才能播放电影,发送格式化字符串(传感器值)该值在一个范围内。

我会稍微重新组织代码,以便它可以随时显示电影帧(无论电影可能是什么),然后简单地改变对当前更新的电影的引用(基于来自串行的浮动值)。

(此外,我还会检查是否有错误,以防arduino未连接,在串行监视器中忙着打开等。)另一个小提示是,您可以在设置中使用一次bufferUntil(),之后只使用serialEvent()中的readString()

这是你的代码的修改版本(带注释):

import processing.serial.*;
import processing.video.*;
Movie movie1, movie2;
Movie currentMovie;
boolean playing = false;
Serial mySerial;
// sensor values (current and previous)
float myVal;
float previousIn;
void setup() {
size(1000, 1000);
frameRate(25);
String myPort = Serial.list()[2];
// try to open the serial connection, but print error message if it fails
try{
mySerial = new Serial(this, myPort, 9600);
// tell arduino once to buffer until new line character is found
mySerial.bufferUntil('n');
}catch(Exception e){
println("error opening serial connection to " + myPort);
e.printStackTrace();
}
// load movies
movie1 = new Movie(this, "Final_Clips_HD.mp4");
movie2 = new Movie(this, "Final_Clips_HD_2.mp4");
// reference one of the movies for updating
currentMovie = movie1;
}


void movieEvent(Movie movie) {
movie.read();
}
void draw() {
// render the current movie
image(currentMovie, 0, 0);
}
void serialEvent(Serial mySerial){
String myString = mySerial.readString();
if (myString != null) {
myVal = float(myString);
println(myVal);

if (myVal > 10 && myVal < 20) {
movie1.play();
movie2.stop();
myVal = previousIn;
if (myVal == previousIn) {
movie1.jump(0);
}
// update reference to the currently playing movie
currentMovie = movie1;
}

if (myVal < 10 && myVal > 0) {
movie2.play();
movie1.stop();
myVal = previousIn;
if (myVal == previousIn) {
movie2.jump(0);
}
// update reference to the currently playing movie
currentMovie = movie2;
}

}
}

请注意,上面的代码没有经过测试,所以可能不是100%准确的:希望它能说明逻辑。

最新更新