最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)調(diào)用手機(jī)攝像頭錄像限制錄像時(shí)長(zhǎng)

 更新時(shí)間:2022年03月28日 16:06:22   作者:Kun?Wantry  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)調(diào)用手機(jī)攝像頭錄像限制錄像時(shí)長(zhǎng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android實(shí)現(xiàn)調(diào)用手機(jī)攝像頭錄像限制錄像時(shí)長(zhǎng)的具體代碼,供大家參考,具體內(nèi)容如下

因?yàn)榉?wù)器空間有限,所以視頻時(shí)長(zhǎng)必須有所限制。

在xml中先布局一個(gè)按鈕,點(diǎn)擊開始錄頻。布局一個(gè)TextView用于顯示倒計(jì)時(shí)的時(shí)間。

一、使用Hander+TimerTask完成定時(shí)操作

private TextView btn_stop;
private int recLen = 11;
Timer timer = new Timer();
//時(shí)間倒計(jì)時(shí)放在開始按鈕事件后,看標(biāo)題7那里是時(shí)間倒計(jì)時(shí)開始的時(shí)候
//timer.schedule(task,1000,1000);
final Handler handler = new Handler(){
? ? ? ? @Override
? ? ? ? public void handleMessage(Message msg){
? ? ? ? ? ? switch (msg.what){
? ? ? ? ? ? ? ? case 1:
? ? ? ? ? ? ? ? ? ? btn_stop.setText(""+recLen);
? ? ? ? ? ? ? ? ? ? if(recLen<0){
? ? ? ? ? ? ? ? ? ? ? ? timer.cancel();
? ? ? ? ? ? ? ? ? ? ? ? btn_stop.setVisibility(View.GONE);
? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? };
?
? ? TimerTask task = new TimerTask() {
? ? ? ? @Override
? ? ? ? public void run() {
? ? ? ? ? ? recLen--;
? ? ? ? ? ? Message message = new Message();
? ? ? ? ? ? message.what = 1;
? ? ? ? ? ? handler.sendMessage(message);
?
? ? ? ? ? ? //當(dāng)?shù)褂?jì)時(shí)時(shí)間到1的時(shí)候關(guān)閉錄像
? ? ? ? ? ? if (recLen == 1){
? ? ? ? ? ? ? ? customTimer.Stop();
? ? ? ? ? ? ? ? stopRecord();
? ? ? ? ? ? }
? ? ? ? }
? ? };

二、初始化攝像頭

private void initCamera() {
? ? ? ? mCamera = Camera.open(0); ?//①
? ? ? ? mCamera.setDisplayOrientation(90);
? ? ? ? try {
? ? ? ? ? ? mCamera.setPreviewDisplay(mSurfaceHolder);
?
? ? ? ? ? ? mCamera.cancelAutoFocus();//此句加上 可自動(dòng)聚焦 必須加
? ? ? ? ? ? Camera.Parameters parameters = mCamera.getParameters();
? ? ? ? ? ? //查詢攝像頭支持的分辨率
? ? ? ? ? ? parameters.getSupportedPreviewSizes();
? ? ? ? ? ? for (int i = 0; i < parameters.getSupportedPreviewSizes().size(); i++) {
? ? ? ? ? ? ? ? Log.i("<><><><>Width", parameters.getSupportedPreviewSizes().get(i).width + "");
? ? ? ? ? ? ? ? Log.i("<><><><>Height", parameters.getSupportedPreviewSizes().get(i).height + "");
? ? ? ? ? ? }
? ? ? ? ? ? //設(shè)置分辨率
? ? ? ? ? ? parameters.setPreviewSize(1280, 720);
? ? ? ? ? ? //設(shè)置聚焦模式
? ? ? ? ? ? parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
? ? ? ? ? ? //縮短Recording啟動(dòng)時(shí)間
? ? ? ? ? ? parameters.setRecordingHint(true);
? ? ? ? ? ? //是否支持影像穩(wěn)定能力,支持則開啟
? ? ? ? ? ? if (parameters.isVideoStabilizationSupported())
? ? ? ? ? ? ? ? parameters.setVideoStabilization(true);
? ? ? ? ? ? mCamera.setParameters(parameters);
? ? ? ? ? ? mCamera.startPreview();
? ? ? ? } catch (Exception e) {
? ? ? ? ? ? Log.i(TAG, "Error starting camera preview: " + e.getMessage());
? ? ? ? }
? ? }

三、創(chuàng)建視頻文件

private boolean createRecordDir() {
? ? ? ? if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
? ? ? ? ? ? Toast.makeText(this, "SD卡不存在!", Toast.LENGTH_SHORT).show();
? ? ? ? ? ? return false;
? ? ? ? }
?
? ? ? ? File sampleDir = new File("/sdcard/myVideo/");
? ? ? ? if (!sampleDir.exists()) {
? ? ? ? ? ? sampleDir.mkdirs();
? ? ? ? }
? ? ? ? videoName = "VID_" + DateUtils.getData(DateUtils.FORMAT_YYYYMMDDHHMMSS) + ".mp4";
? ? ? ? mVecordFile = new File(sampleDir, videoName);
? ? ? ? return true;
? ? }

四、配置MediaRecorder

private void setConfigRecord() {
? ? ? ? mediaRecorder = new MediaRecorder();
? ? ? ? mediaRecorder.reset();
? ? ? ? mediaRecorder.setCamera(mCamera);
? ? ? ? mediaRecorder.setOnErrorListener(onErrorListener);
? ? ? ? //錄像角度
? ? ? ? mediaRecorder.setOrientationHint(90);
? ? ? ? //使用SurfaceView預(yù)覽
? ? ? ? mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
? ? ? ? //1.設(shè)置采集聲音
? ? ? ? mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
? ? ? ? //設(shè)置采集圖像
? ? ? ? mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
? ? ? ? //2.設(shè)置視頻,音頻的輸出格式 mp4
? ? ? ? mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
? ? ? ? //3.設(shè)置音頻的編碼格式
? ? ? ? mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
? ? ? ? //設(shè)置圖像的編碼格式
? ? ? ? mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
? ? ? ? CamcorderProfile mProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P);
?
? ? ? ? mediaRecorder.setAudioEncodingBitRate(44100);
? ? ? ? if (mProfile.videoBitRate > 2 * 1024 * 1024) {
? ? ? ? ? ? mediaRecorder.setVideoEncodingBitRate(2 * 1024 * 1024);
? ? ? ? } else {
? ? ? ? ? ? mediaRecorder.setVideoEncodingBitRate(1024 * 1024);
? ? ? ? }
? ? ? ? mediaRecorder.setVideoFrameRate(mProfile.videoFrameRate);
? ? ? ? mediaRecorder.setVideoSize(1280, 720);
?
? ? ? ? mediaRecorder.setOutputFile(mVecordFile.getAbsolutePath());
? ? }

五、停止錄制

private void stopRecord() {
? ? ? ? try {
? ? ? ? ? ? if (isRecording && mediaRecorder != null) {
?
? ? ? ? ? ? ? ? mediaRecorder.setOnErrorListener(null);
? ? ? ? ? ? ? ? mediaRecorder.setPreviewDisplay(null);
? ? ? ? ? ? ? ? mediaRecorder.stop();
? ? ? ? ? ? ? ? mediaRecorder.reset();
? ? ? ? ? ? ? ? mediaRecorder.release();
? ? ? ? ? ? ? ? mediaRecorder = null;
? ? ? ? ? ? ? ? isRecording = false;
? ? ? ? ? ? ? ? Log.i(TAG, "" + mVecordFile.toString());
? ? ? ? ? ? ? ? //new imageTask().execute(mVecordFile);
?
? ? ? ? ? ? ? ? MessageData md = new MessageData();
? ? ? ? ? ? ? ? md.srdatatype = SRDataType.錄像返回;
? ? ? ? ? ? ? ? md.Data = mVecordFile.getAbsolutePath();
?
? ? ? ? ? ? ? ? Intent intent = new Intent(BroadCastParameter.action);
? ? ? ? ? ? ? ? intent.putExtra("data", md);
? ? ? ? ? ? ? ? sendBroadcast(intent);
? ? ? ? ? ? ? ? // Fragment頁面廣播通知
? ? ? ? ? ? ? ? LocalBroadcastManager.getInstance(CustomRecorder.this).sendBroadcast(intent);
?
? ? ? ? ? ? ? ? finish();
? ? ? ? ? ? }
? ? ? ? }catch (Exception ex)
? ? ? ? {
? ? ? ? ? ? //Toast.makeText(getApplicationContext(),ex.getMessage(),1).show();
? ? ? ? }
? ? }

六、關(guān)閉攝像頭

private void stopCamera() {
? ? ? ? if (mCamera != null) {
? ? ? ? ? ? mCamera.setPreviewCallback(null);
? ? ? ? ? ? mCamera.stopPreview();
? ? ? ? ? ? mCamera.release();
? ? ? ? ? ? mCamera = null;
? ? ? ? }
? ? }

七、點(diǎn)擊開始錄像按鈕

public void onViewClicked(View view) {
? ? ? ? if (Build.VERSION.SDK_INT >= 23) {
? ? ? ? ? ? int REQUEST_CODE_CONTACT = 101;
?
? ? ? ? ? ? //驗(yàn)證是否許可權(quán)限
? ? ? ? ? ? for (String str : permissions) {
? ? ? ? ? ? ? ? if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
? ? ? ? ? ? ? ? ? ? Toast.makeText(getApplicationContext(),"存儲(chǔ)權(quán)限未授權(quán)",1).show();
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? switch (view.getId()) {
? ? ? ? ? ? //開始
? ? ? ? ? ? case R.id.btn_start:
? ? ? ? ? ? ? ? btn_start.setVisibility(View.GONE);
? ? ? ? ? ? ? ? btn_stop.setVisibility(View.VISIBLE);
?
? ? ? ? ? ? ? ? //這是是判斷視頻文件有沒有創(chuàng)建,如果沒有就返回
? ? ? ? ? ? ? ? boolean creakOk = createRecordDir();
? ? ? ? ? ? ? ? if (!creakOk) {
? ? ? ? ? ? ? ? ? ? return;
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? try {
? ? ? ? ? ? ? ? ? ? mCamera.unlock();
? ? ? ? ? ? ? ? ? ? setConfigRecord();
?
? ? ? ? ? ? ? ? ? ? mediaRecorder.prepare();
? ? ? ? ? ? ? ? ? ? mediaRecorder.start();
? ? ? ? ? ? ? ? } catch (Exception e) {
? ? ? ? ? ? ? ? ? ? //Toast.makeText(getApplicationContext(),e.getMessage(),Toast.LENGTH_LONG).show();
? ? ? ? ? ? ? ? }
?
? ? ? ? ? ? ? ? StartTime = new Date(System.currentTimeMillis());
? ? ? ? ? ? ? ? isRecording = true;
? ? ? ? ? ? ? ? customTimer.ReStart();
?
? ? ? ? ? ? ? ? timer.schedule(task,1000,1000);
? ? ? ? ? ? ? ? break;

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

三门峡市| 嘉善县| 福清市| 台湾省| 邹城市| 白城市| 扎鲁特旗| 青铜峡市| 周口市| 民丰县| 和田县| 东丽区| 玛多县| 于田县| 蓬溪县| 沾益县| 军事| 宝应县| 尼木县| 德格县| 宜都市| 江陵县| 镇沅| 客服| 阿克陶县| 商水县| 城固县| 双流县| 阿图什市| 绥棱县| 仪陇县| 灵台县| 蓝山县| 康平县| 绥芬河市| 信宜市| 静海县| 太湖县| 视频| 腾冲县| 普陀区|