2015-11-04 31 views
5

Merhaba DJI phantom 3 pro video akışında OpenCv kullanımı ile bazı görüntü işleme yapmak istiyorum. Ne yazık ki bu şey kendi kod çözme videosu yapmak için gereklidir. Ben Media Codec Android sınıfı kullanımı ile çalışması gerektiğini biliyorum ama nasıl yapacağımı bilmiyorum. Video dosyasından video kodunu çözmek için bazı örnekler gördüm, ancak bu kodu amacım için değiştiremedim. Birisi nasıl örnek veya öğretici gösterir? yardımDJI drone'dan video akışı video akışının çözülmesi

mReceivedVideoDataCallBack = new DJIReceivedVideoDataCallBack(){ 
     @Override 
     public void onResult(byte[] videoBuffer, int size){ 
      //recvData = true; 
      //DJI methods for decoding    
      //mDjiGLSurfaceView.setDataToDecoder(videoBuffer, size); 
     } 
    }; 

Bu drone kodlama akışını gönderen bir yöntemdir, ve decode için videoBuffer göndermek ve daha sonra OpenCV için Mat için değiştirmek gerekir için teşekkür ederiz.

cevap

2

etkinlik TextureView.SurfaceTextureListener uygulamak olun bu

mReceivedVideoDataCallBack = new DJICamera.CameraReceivedVideoDataCallback() { 
      @Override 
      public void onResult(byte[] videoBuffer, int size) { 
       if(mCodecManager != null){ 
        // Send the raw H264 video data to codec manager for decoding 
        mCodecManager.sendDataToDecoder(videoBuffer, size); 
       }else { 
        Log.e(TAG, "mCodecManager is null"); 
       } 
      }   
} 

gibi video geri arama başlat ve başlatıldıktan sonra TextureView mVideoSurface için bu hattını arayın:

mVideoSurface.setSurfaceTextureListener(this); 

ve ardından uygulamak:

@Override 
    public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { 
     Log.v(TAG, "onSurfaceTextureAvailable"); 
     DJICamera camera = FPVDemoApplication.getCameraInstance(); 
     if (mCodecManager == null && surface != null && camera != null) { 
      //Normal init for the surface 
      mCodecManager = new DJICodecManager(this, surface, width, height); 
      Log.v(TAG, "Initialized CodecManager"); 
     } 
    } 

    @Override 
    public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 
     Log.v(TAG, "onSurfaceTextureSizeChanged"); 
    } 

    @Override 
    public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
     Log.v(TAG, "onSurfaceTextureDestroyed"); 
     if (mCodecManager != null) { 
      mCodecManager.cleanSurface(); 
      mCodecManager = null; 
     } 

     return false; 
    } 

    @Override 
    public void onSurfaceTextureUpdated(SurfaceTexture surface) { 
     final Bitmap image = mVideoSurface.getBitmap(); 
     //Do whatever you want with the bitmap image here on every frame 
    } 

Bu yardımcı olur umarım!