欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)擊開(kāi)始錄頻。布局一個(gè)TextView用于顯示倒計(jì)時(shí)的時(shí)間。

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

private TextView btn_stop;
private int recLen = 11;
Timer timer = new Timer();
//時(shí)間倒計(jì)時(shí)放在開(kāi)始按鈕事件后,看標(biāo)題7那里是時(shí)間倒計(jì)時(shí)開(kāi)始的時(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)定能力,支持則開(kāi)啟
? ? ? ? ? ? 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頁(yè)面廣播通知
? ? ? ? ? ? ? ? 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)擊開(kāi)始錄像按鈕

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()) {
? ? ? ? ? ? //開(kāi)始
? ? ? ? ? ? case R.id.btn_start:
? ? ? ? ? ? ? ? btn_start.setVisibility(View.GONE);
? ? ? ? ? ? ? ? btn_stop.setVisibility(View.VISIBLE);
?
? ? ? ? ? ? ? ? //這是是判斷視頻文件有沒(méi)有創(chuàng)建,如果沒(méi)有就返回
? ? ? ? ? ? ? ? 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)文章

  • Android LinearLayout實(shí)現(xiàn)自動(dòng)換行效果

    Android LinearLayout實(shí)現(xiàn)自動(dòng)換行效果

    這篇文章主要為大家詳細(xì)介紹了Android LinearLayout實(shí)現(xiàn)自動(dòng)換行效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • android仿直播圓點(diǎn)加載效果

    android仿直播圓點(diǎn)加載效果

    這篇文章主要為大家詳細(xì)介紹了android仿直播圓點(diǎn)加載效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android控件系列之Shape使用方法

    Android控件系列之Shape使用方法

    Android控件系列之Shape使用方法,需要的朋友可以參考一下
    2013-05-05
  • Android OkHttp代理與路由的徹底理解

    Android OkHttp代理與路由的徹底理解

    這篇文章主要為大家介紹了Android OkHttp代理與路由的徹底理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Android自定義View實(shí)現(xiàn)開(kāi)關(guān)按鈕

    Android自定義View實(shí)現(xiàn)開(kāi)關(guān)按鈕

    android 自定義view知識(shí)非常廣泛,難以讓人掌握。但是也是andoroid進(jìn)階學(xué)習(xí)的必經(jīng)之路。下面通過(guò)本文給大家介紹Android自定義View實(shí)現(xiàn)開(kāi)關(guān)按鈕的知識(shí),非常不錯(cuò),感興趣的朋友一起看看吧
    2016-11-11
  • Android實(shí)現(xiàn)平滑翻動(dòng)效果

    Android實(shí)現(xiàn)平滑翻動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)平滑翻動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Android activity實(shí)現(xiàn)延時(shí)跳轉(zhuǎn)功能

    Android activity實(shí)現(xiàn)延時(shí)跳轉(zhuǎn)功能

    Activity是一個(gè)Android的應(yīng)用組件,它提供屏幕進(jìn)行交互。今天通過(guò)本文給大家介紹Android activity實(shí)現(xiàn)延時(shí)跳轉(zhuǎn)功能,感興趣的朋友一起看看吧
    2021-06-06
  • flutter 微信聊天輸入框功能實(shí)現(xiàn)

    flutter 微信聊天輸入框功能實(shí)現(xiàn)

    這篇文章主要介紹了flutter 微信聊天輸入框功能實(shí)現(xiàn),本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • Android?studio開(kāi)發(fā)實(shí)現(xiàn)計(jì)算器功能

    Android?studio開(kāi)發(fā)實(shí)現(xiàn)計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了Android?studio開(kāi)發(fā)實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Kotlin對(duì)象的懶加載方式by?lazy?與?lateinit?異同詳解

    Kotlin對(duì)象的懶加載方式by?lazy?與?lateinit?異同詳解

    這篇文章主要為大家介紹了Kotlin對(duì)象的懶加載方式by?lazy?與?lateinit?異同詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10

最新評(píng)論