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

Android實現(xiàn)調用手機攝像頭錄像限制錄像時長

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

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

因為服務器空間有限,所以視頻時長必須有所限制。

在xml中先布局一個按鈕,點擊開始錄頻。布局一個TextView用于顯示倒計時的時間。

一、使用Hander+TimerTask完成定時操作

private TextView btn_stop;
private int recLen = 11;
Timer timer = new Timer();
//時間倒計時放在開始按鈕事件后,看標題7那里是時間倒計時開始的時候
//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);
?
? ? ? ? ? ? //當?shù)褂嫊r時間到1的時候關閉錄像
? ? ? ? ? ? if (recLen == 1){
? ? ? ? ? ? ? ? customTimer.Stop();
? ? ? ? ? ? ? ? stopRecord();
? ? ? ? ? ? }
? ? ? ? }
? ? };

二、初始化攝像頭

private void initCamera() {
? ? ? ? mCamera = Camera.open(0); ?//①
? ? ? ? mCamera.setDisplayOrientation(90);
? ? ? ? try {
? ? ? ? ? ? mCamera.setPreviewDisplay(mSurfaceHolder);
?
? ? ? ? ? ? mCamera.cancelAutoFocus();//此句加上 可自動聚焦 必須加
? ? ? ? ? ? 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 + "");
? ? ? ? ? ? }
? ? ? ? ? ? //設置分辨率
? ? ? ? ? ? parameters.setPreviewSize(1280, 720);
? ? ? ? ? ? //設置聚焦模式
? ? ? ? ? ? parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_VIDEO);
? ? ? ? ? ? //縮短Recording啟動時間
? ? ? ? ? ? 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預覽
? ? ? ? mediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
? ? ? ? //1.設置采集聲音
? ? ? ? mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
? ? ? ? //設置采集圖像
? ? ? ? mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
? ? ? ? //2.設置視頻,音頻的輸出格式 mp4
? ? ? ? mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
? ? ? ? //3.設置音頻的編碼格式
? ? ? ? mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
? ? ? ? //設置圖像的編碼格式
? ? ? ? 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();
? ? ? ? }
? ? }

六、關閉攝像頭

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

七、點擊開始錄像按鈕

public void onViewClicked(View view) {
? ? ? ? if (Build.VERSION.SDK_INT >= 23) {
? ? ? ? ? ? int REQUEST_CODE_CONTACT = 101;
?
? ? ? ? ? ? //驗證是否許可權限
? ? ? ? ? ? for (String str : permissions) {
? ? ? ? ? ? ? ? if (this.checkSelfPermission(str) != PackageManager.PERMISSION_GRANTED) {
? ? ? ? ? ? ? ? ? ? Toast.makeText(getApplicationContext(),"存儲權限未授權",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;

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

最新評論

象山县| 岑巩县| 巴东县| 浠水县| 乃东县| 曲阜市| 锡林浩特市| 繁峙县| 马鞍山市| 朝阳市| 罗山县| 达日县| 滕州市| 富蕴县| 青田县| 承德市| 宿州市| 东阳市| 铅山县| 蕲春县| 南雄市| 洛宁县| 南安市| 诸暨市| 营口市| 河津市| 淳化县| 玛多县| 固始县| 临汾市| 揭阳市| 扬州市| 阿图什市| 美姑县| 丹东市| 荣昌县| 福清市| 琼结县| 正定县| 于都县| 孟津县|