1

我试图将我的现场 mjpeg 视频提要延迟 10 秒。

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

原行说: capture = new CaptureMJPEG(this, capture_xsize, capture_ysize, capture_frames);

我将其更改为: capture = new 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;
       }
     }  
    } 
4

1 回答 1

0

阅读参考文档:

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

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

CaptureMJPEG(PApplet parent, String url) 创建不带 HTTP Auth 凭据的 CaptureMJPEG CaptureMJPEG(PApplet parent, String url, String username, String password) 创建带 HTTP Auth 凭据的 CaptureMJPEG

所以第一个参数必须始终指向您的处理小程序实例。所以

capture = new CaptureMJPEG (this, "http:/url.com/feed.mjpg", capture_xsize, capture_ysize, capture_frames);
于 2014-02-15T22:48:53.600 回答