我正在尝试将实时mjpeg视频供稿延迟10秒。

我正在尝试修改此代码,但无法合并mjpg网址。
当我尝试放入url时,它一直说'构造函数CaptureMJPEG(String,int,int,int)是未定义的'。

原行说:
捕获=新的CaptureMJPEG(this,capture_xsize,capture_ysize,capture_frames);

我将其更改为:
capture =新的CaptureMJPEG(“ http:/url.com/feed.mjpg”,capture_xsize,capture_ysize,capture_frames);

    import processing.video.*;
    import it.lilik.capturemjpeg.*;

    Capture myCapture;

    CaptureMJPEG capture;
    VideoBuffer monBuff;

    int display_xsize = 800;  // display size
    int display_ysize = 600;

    int capture_xsize = 320;  // capture size
    int capture_ysize = 240;

    int delay_time = 10;  // delay in seconds
    int capture_frames = 20;  // capture frames per second

    void setup() {

      size(display_xsize,display_ysize, P3D);

     // Warning: VideoBuffer must be initiated BEFORE capture- or movie-events start
     monBuff = new VideoBuffer(delay_time*capture_frames, capture_xsize,capture_ysize);
    capture = new CaptureMJPEG ("http:/url.com/feed.mjpg", capture_xsize, capture_ysize, capture_frames);

    }

    void captureEvent(Capture capture) {
     capture.read();
     monBuff.addFrame( capture );
    }

    void draw() {
      PImage bufimg = monBuff.getFrame();
      PImage tmpimg = createImage(bufimg.width,bufimg.height,RGB);
      tmpimg.copy(bufimg,0,0,bufimg.width,bufimg.height,0,0,bufimg.width,bufimg.height);
      tmpimg.resize(display_xsize,display_ysize);
      image( tmpimg, 0, 0 );
    }


    class VideoBuffer
    {
     PImage[] buffer;

     int inputFrame = 0;
     int outputFrame = 0;
     int frameWidth = 0;
     int frameHeight = 0;

     /*
       parameters:

       frames - the number of frames in the buffer (fps * duration)
       width - the width of the video
       height - the height of the video
     */
     VideoBuffer( int frames, int width, int height )
     {
       buffer = new PImage[frames];
       for(int i = 0; i < frames; i++)
       {
         this.buffer[i] = new PImage(width, height);
       }
       this.inputFrame = frames - 1;
       this.outputFrame = 0;
       this.frameWidth = width;
       this.frameHeight = height;
     }

     // return the current "playback" frame.
     PImage getFrame()
     {
       int frr;

       if(this.outputFrame>=this.buffer.length)
         frr = 0;
       else
         frr = this.outputFrame;
       return this.buffer[frr];
     }

     // Add a new frame to the buffer.
     void addFrame( PImage frame )
     {
       // copy the new frame into the buffer.
       System.arraycopy(frame.pixels, 0, this.buffer[this.inputFrame].pixels, 0, this.frameWidth * this.frameHeight);

       // advance the input and output indexes
       this.inputFrame++;
       this.outputFrame++;

       // wrap the values..
       if(this.inputFrame >= this.buffer.length)
       {
         this.inputFrame = 0;
       }
       if(this.outputFrame >= this.buffer.length)
       {
         this.outputFrame = 0;
       }
     }
    }

最佳答案

阅读参考文档:

https://bytebucket.org/nolith/capturemjpeg/wiki/api/index.html

这些是仅有的两个构造函数:

CaptureMJPEG(PApplet父级,字符串url)
          创建没有HTTP身份验证凭据的CaptureMJPEG
CaptureMJPEG(PApplet父级,字符串url,字符串用户名,字符串密码)
          创建具有HTTP身份验证凭据的CaptureMJPEG

因此,第一个参数必须始终指向您的处理applet实例。所以

capture = new CaptureMJPEG (this, "http:/url.com/feed.mjpg", capture_xsize, capture_ysize, capture_frames);

关于java - 使用MJPG Feed的视频缓冲延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16431401/

10-13 03:24