日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android倒计时录制视频下载,android录制视屏(预览,倒计时)

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android倒计时录制视频下载,android录制视屏(预览,倒计时) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

android用mediarecord錄制視屏,可以設置視屏格式,大小,還有拍攝前預覽,倒計時功能要自己用hander做。

1,CameraPreview.java

//預覽class

public class CameraPreview extends SurfaceView implements Callback {

private static final String TAG = "TAG-CameraPreview";

private SurfaceHolder mHolder;

private Camera mCamera;

public CameraPreview(Context context, Camera camera) {

super(context);

mCamera = camera;

// 安裝一個SurfaceHolder.Callback

mHolder = getHolder();

mHolder.addCallback(this);

// 針對低于3.0的Android

mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

public void surfaceCreated(SurfaceHolder holder) {

// 把預覽畫面的位置通知攝像頭

try {

mCamera.setPreviewDisplay(holder);

mCamera.startPreview();

} catch (IOException e) {

Log.d(TAG, "Error setting camera preview: " + e.getMessage());

}

}

public void surfaceDestroyed(SurfaceHolder holder) {

// TODO

}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {

if (mHolder.getSurface() == null){

// 預覽surface不存在

return;

}

// 更改時停止預覽

try {

mCamera.stopPreview();

} catch (Exception e){

}

// 在此進行縮放、旋轉和重新組織格式

// 以新的設置啟動預覽

try {

mCamera.setPreviewDisplay(mHolder);

mCamera.startPreview();

} catch (Exception e){

Log.d(TAG, "Error starting camera preview: " + e.getMessage());

}

}

}

2,RecordMp4.java

public class RecordMp4 extends Activity implements SurfaceHolder.Callback {

private Button mStopButton;

// private SurfaceView mSurfaceView;

private SurfaceHolder mSurfaceHolder;

private MediaRecorder mMediaRecorder;

private String path, pid, uid;

private CheckBox playOrStop;

private Camera mCamera;

private CameraPreview mSurfaceView;

private TextView recor_mp4_left_time;

private int second = 20;

Handler handler;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// 去掉標題欄

requestWindowFeature(Window.FEATURE_NO_TITLE);

// 設置全屏

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,

WindowManager.LayoutParams.FLAG_FULLSCREEN);

// 設置橫屏顯示

setContentView(R.layout.record_mp4);

handler = new Handler();

pid = getIntent().getStringExtra("pid");

uid = getIntent().getStringExtra("uid");

init();

}

private void init() {

playOrStop = (CheckBox) findViewById(R.id.etsound_playstop);

playOrStop.setOnClickListener(new ClickListenerImpl());

recor_mp4_left_time = (TextView) findViewById(R.id.recor_mp4_left_time);

mCamera = getCameraInstance();

// 創建Preview view并將其設為activity中的內容

mSurfaceView = new CameraPreview(this, mCamera);

FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);

preview.addView(mSurfaceView);

mSurfaceHolder = mSurfaceView.getHolder();

mSurfaceHolder.addCallback(this);

mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

Runnable runnable = new Runnable() {

@Override

public void run() {

second--;

if (second <= 0) {

handler.removeCallbacks(this);

} else {

recor_mp4_left_time.setText("還剩" + second + "s");

handler.postDelayed(this, 1000);

}

}

};

private Camera getCameraInstance() {

Camera c = null;

try {

// 獲取Camera實例

c = Camera.open();

c.setDisplayOrientation(90);

} catch (Exception e) {

// 攝像頭不可用(正被占用或不存在)

}

// 不可用則返回null

return c;

}

@SuppressLint("NewApi")

private void initMediaRecorder() {

// next codes is right for 2.3 and 4.0

mMediaRecorder = new MediaRecorder();

// mCamera = Camera.open();

// mCamera.setDisplayOrientation(90);

mCamera.unlock();

mMediaRecorder.setCamera(mCamera);

// 設置視頻源

mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

mMediaRecorder.setOrientationHint(90);// 視頻旋轉90度

// 設置音頻源

mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);

// 設置文件輸出格式

mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

// 設置視頻編碼方式

mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);

// 設置音頻編碼方式

mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

// 設置視頻高和寬,注意文檔的說明:

// Must be called after setVideoSource().

// Call this after setOutFormat() but before prepare().

// 設置錄制的視頻幀率,注意文檔的說明:

// Must be called after setVideoSource().

// Call this after setOutFormat() but before prepare().

mMediaRecorder.setVideoFrameRate(16);

// 設置預覽畫面

mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());

// 設置輸出路徑

path =this.getFilesDir().getAbsolutePath()+File.separator+System.currentTimeMillis()+".mp4";

mMediaRecorder.setOutputFile(path);

mMediaRecorder.setVideoSize(640, 480);

// 設置視頻的最大持續時間

mMediaRecorder.setMaxDuration(20000);

// 為MediaRecorder設置監聽

mMediaRecorder.setOnInfoListener(new OnInfoListener() {

public void onInfo(MediaRecorder mr, int what, int extra) {

if (what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {

TCommUtil.showToast(RecordMp4.this, "已經達到最長錄制時間", true);

System.out.println("已經達到最長錄制時間");

if (mMediaRecorder != null) {

mMediaRecorder.stop();

mMediaRecorder.release();

mMediaRecorder = null;

}

}

}

});

}

private class ClickListenerImpl implements OnClickListener {

public void onClick(View v) {

CheckBox checkBox = (CheckBox) v;

if (checkBox.getId() == R.id.etsound_playstop) {

if (mMediaRecorder == null) {

try {

initMediaRecorder();

mMediaRecorder.prepare();

mMediaRecorder.start();

handler.postDelayed(runnable, 0);

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

} else {

if (mMediaRecorder != null) {

mMediaRecorder.stop();

releaseMediaRecorder();

mCamera.lock();

}

}

}

}

}

@Override

protected void onPause() {

super.onPause();

handler.removeCallbacks(runnable);

// 如果正在使用MediaRecorder,首先需要釋放它。

releaseMediaRecorder();

// 在暫停事件中立即釋放攝像頭

releaseCamera();

}

private void releaseMediaRecorder() {

if (mMediaRecorder != null) {

// 清除recorder配置

handler.removeCallbacks(runnable);

mMediaRecorder.reset();

// 釋放recorder對象

mMediaRecorder.release();

mMediaRecorder = null;

// 為后續使用鎖定攝像頭

mCamera.lock();

}

}

private void releaseCamera() {

if (mCamera != null) {

// 為其它應用釋放攝像頭

mCamera.release();

mCamera = null;

}

}

// SurfaceHolder.Callback接口

public void surfaceCreated(SurfaceHolder holder) {

try {

} catch (IllegalStateException e) {

e.printStackTrace();

}

}

// ?在 surfaceChanged以后,才在?initMediaRecorder()方法里?MediaRecorder 變量設置參數,不然 會在

//mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 出報錯。

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

System.out.println("SurfaceView---->Changed");

}

public void surfaceDestroyed(SurfaceHolder holder) {

System.out.println("SurfaceView---->Destroyed");

if (mMediaRecorder != null) {

mMediaRecorder.stop();

mMediaRecorder.release();

mMediaRecorder = null;

}

}

}

3,record_mp4.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/solid_white" >

android:id="@+id/camera_preview"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/etsound_rlcontent"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_alignParentBottom="true"

android:background="@color/transparent"

android:clickable="true"

android:focusable="true"

android:focusableInTouchMode="true"

android:visibility="visible" >

android:id="@+id/recor_mp4_left_time"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"

android:layout_marginTop="10dp"

android:textColor="@color/titlebar_bg"

android:text="20s"

android:textSize="25sp" />

android:id="@+id/etsound_playstop_fl"

android:layout_width="100dp"

android:layout_height="100dp"

android:layout_alignParentBottom="true"

android:layout_centerHorizontal="true"

android:background="@drawable/round_video" >

android:id="@+id/etsound_playstop"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:background="@drawable/play_video_stop_selector"

android:button="@null"

android:padding="10dp" />

原文:http://www.cnblogs.com/lsc183/p/3823338.html

總結

以上是生活随笔為你收集整理的android倒计时录制视频下载,android录制视屏(预览,倒计时)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。