在android中opencv视频采集,OpenCV在Android中的原生相机可防止视频播放器工作

本文主要探讨在Android中同时实现视频文件播放和相机图像捕捉的问题。使用VideoView和MediaController播放视频时,若实例化摄像头,应用程序会提示视频无法显示;删除实例化摄像头的呼叫,视频则能流畅播放,并给出了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我想在Android中播放视频文件(使用VideoView和MediaController),同时使相机能够捕捉图像 . 无需相机显示或预览 . 但是,如果我调用“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;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值