0

カメラが画像をキャプチャできるようにしながら、(VideoViewとMediaControllerを使用して)Androidでビデオファイルを再生したいと思います。カメラの表示やプレビューは必要ありません。ただし、「openCamera」を呼び出す (新しい VideoCapture をインスタンス化する) と、アプリケーションが失敗し、次のように通知されます: ビデオを表示できません。カメラをインスタンス化する呼び出しを削除すると、ビデオはスムーズに再生されます。

public class Myvideoplayer extends Activity {
  public FrameLayout imageFrame;
  public RelativeLayout imageFrameLayout;
  private ProgressDialog progressDialog;@
  Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    imageFrame = new FrameLayout(this);
    imageFrameLayout = new RelativeLayout(this);
    imageFrameLayout.setGravity(Gravity.CENTER);
    VideoView videoPlayer = new VideoView(this);
    MediaController mediaController = new MediaController(this);
    mediaController.setAnchorView(videoPlayer);
    videoPlayer.setMediaController(mediaController);
    RelativeLayout.LayoutParams rel_btnBack = 
      new RelativeLayout.LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    File root = Environment.getExternalStorageDirectory();
    String myURI = root + "/DCIM/Camera/20121122_170657.mp4";
    Uri video = Uri.parse(myURI);
    videoPlayer.setVideoURI(video);
    videoPlayer.requestFocus();
    videoPlayer.start();
    imageFrameLayout.addView(videoPlayer);
    imageFrame.addView(imageFrameLayout);
    setContentView(imageFrame);
    //set up camera
    progressDialog = ProgressDialog.show(this,
                             "Please wait....", "Openning camera");
    new Thread(new Runnable() {
      public void run() {
        try {
          Thread.sleep(2 * 1000);
          progressDialog.dismiss();
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }).start();
    new Calculating().execute(1000, 1000, 1000);
  }
  public void InfoMessageBox(String str, String str2) {
    AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
    dlgAlert.setTitle(str);
    dlgAlert.setMessage(str2);
    dlgAlert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
      public void onClick(DialogInterface dialog, int whichButton) {}
    });
    dlgAlert.create().show();
  }
  private class Calculating extends AsyncTask < Integer, Integer, Integer > {
    protected Integer doInBackground(Integer...intInput) {
      return 0;
    }
    protected void onProgressUpdate(Integer...progress) {}
    protected void onPostExecute(Integer result) {
      super.onPostExecute(result);
      cameraWrapper mCameraController = new cameraWrapper();
      if (!mCameraController.openCamera()) {
        InfoMessageBox("", "OOps, camera not ready!");
        return;
      }
    }
  }
}

そして、ここにカメラの開口部があります

 public boolean openCamera() {
                synchronized (this) {
            releaseCamera();
            mCamera = new VideoCapture(Highgui.CV_CAP_ANDROID+1);
            if (!mCamera.isOpened()) {
                mCamera.release();
                mCamera = null;
                return false;
            }
        }
        return true;
    }

 public void releaseCamera() {
                    synchronized (this) {
            if (mCamera != null) {
                    mCamera.release();
                    mCamera = null;
            }
        }
    }
4

0 に答える 0