2015-10-28 3 views
1

Я использую SikuliX, чтобы проверить, закончилось ли видео на веб-сайте.Проверьте, завершено ли видео

Я делаю это путем сравнения моего региона (который является моим окном активного браузера) для захвата экрана региона, который я использовал во время воспроизведения видео.

Если это не соответствует, значит, видео все еще воспроизводится, и я возьму новый захват экрана, который будет снова проходить через цикл while для сравнения. Если это соответствует, значит, видео остановилось и выйдет из цикла while.

Он работает, когда он сначала проходит через петлю. Цикл while возвращает значение null, что означает воспроизведение видео. Тем не менее, во второй раз, когда он петли, он выйдет из цикла while и скажет, что мое видео остановлено, но, очевидно, нет.

Является ли моя логика испорченной?

// Get dimensions of the bounding rectangle of the specified window 
WinDef.HWND hwnd = User32.INSTANCE.GetForegroundWindow(); 
WinDef.RECT dimensions = new WinDef.RECT(); 

// Get screen coordinates of upper-left and lower-right corners of the window in dimensions 
User32.INSTANCE.GetWindowRect(hwnd, dimensions); 

Rectangle window = new Rectangle(dimensions.toRectangle()); 

int x = window.x; 
int y = window.y; 
int width = window.width; 
int height = window.height; 

// Initialize screen region for Sikuli to match 
Region region = new Region(x, y, width, height); 

Robot robot; 
Image image; 
Pattern p; 

try { 
    robot = new Robot(); // Gets and saves a reference to a new Robot object 
} catch (AWTException e) { 
    throw new RuntimeException(
     "Failed to initialize robot..."); 
} 

robot.delay(3000); // Delay robot for 3 seconds 

// Take a screen capture of the region 
BufferedImage capture = robot.createScreenCapture(dimensions.toRectangle()); 
image = new Image(capture); 
p = new Pattern(image); 

region.wait(1.0); // Wait 1 second 

// Check if region content is still the same 
while (region.exists(p.similar((float) 0.99), 0) == null) { 
    System.out.println("Video is playing"); 

    // Take a new screen capture of the region 
    BufferedImage captureLoop = robot.createScreenCapture(dimensions.toRectangle()); 
    image = new Image(captureLoop); 
    p = new Pattern(image); 

    region.wait(1.0); // Wait 1 second 
} 

System.out.println("Video has stopped"); 

ответ

0

Вместо использования while (region.exists(p.similar((float) 0.99), 0) == null), используя while (region.compare(image).getScore() == 1.0) сравнивать область с захватом экрана дал результаты, которые я хотел.