Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.15 KB | None | 0 0
  1. import android.app.Activity;
  2. import android.app.AlertDialog;
  3. import android.content.DialogInterface;
  4. import android.content.Intent;
  5. import android.content.pm.PackageManager;
  6. import android.graphics.Bitmap;
  7. import android.graphics.BitmapFactory;
  8. import android.graphics.Matrix;
  9. import android.hardware.Camera;
  10. import android.hardware.Camera.CameraInfo;
  11. import android.media.CamcorderProfile;
  12. import android.media.MediaMetadataRetriever;
  13. import android.media.MediaRecorder;
  14. import android.os.Bundle;
  15. import android.os.Environment;
  16. import android.os.SystemClock;
  17. import android.util.Base64;
  18. import android.util.Log;
  19. import android.view.View;
  20. import android.view.View.OnClickListener;
  21. import android.widget.Button;
  22. import android.widget.Chronometer;
  23. import android.widget.FrameLayout;
  24. import android.widget.ImageView;
  25. import android.widget.RelativeLayout;
  26. import android.widget.Toast;
  27. import com.itw.toshalsg.util.CameraPreview;
  28. import com.itw.toshalsg.util.CommonUtils;
  29. import java.io.ByteArrayOutputStream;
  30. import java.io.File;
  31. import java.io.IOException;
  32.  
  33. public class VideoRecorderActivity extends Activity implements OnClickListener {
  34.  
  35. private static final String TAG = "VideoRecorderActivity";
  36.  
  37. FrameLayout preview;
  38.  
  39. private Camera mCamera;
  40. private CameraPreview mPreview;
  41. private MediaRecorder mMediaRecorder;
  42. private boolean isRecording = false;
  43. private boolean iscamera_swap = false;
  44.  
  45. Chronometer timer_view;
  46.  
  47. Button captureButton;
  48. ImageView imag_camera_swap;
  49. private int cameraId = 0;
  50. String video_Path, video_duration, video_thum_image;
  51.  
  52. /*@Override
  53. protected void onStart()
  54. {
  55. super.onStart();
  56. FlurryAgent.onStartSession(this, getResources().getString(R.string.flurry_key));
  57. }
  58.  
  59. @Override
  60. protected void onStop()
  61. {
  62. super.onStop();
  63. FlurryAgent.onEndSession(this);
  64. }*/
  65.  
  66. @Override
  67. protected void onCreate(Bundle savedInstanceState) {
  68. super.onCreate(savedInstanceState);
  69. setContentView(R.layout.video_recorder);
  70.  
  71. if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
  72. Toast.makeText(this, "This phone has no camera!", Toast.LENGTH_SHORT).show();
  73. finish();
  74. }
  75.  
  76. captureButton = (Button) findViewById(R.id.button_capture);
  77. imag_camera_swap = (ImageView) findViewById(R.id.imag_camera_swap);
  78. captureButton.setOnClickListener(this);
  79. imag_camera_swap.setOnClickListener(this);
  80.  
  81. video_Path = getExternalDirectoryPath()+"Toshal_Video"+ CommonUtils.getCurrentTimeStamp()+".mp4";
  82. }
  83.  
  84. private int findFrontFacingCamera() {
  85. int cameraId = -1;
  86. // Search for the front facing camera
  87. int numberOfCameras = Camera.getNumberOfCameras();
  88. for (int i = 0; i < numberOfCameras; i++) {
  89. CameraInfo info = new CameraInfo();
  90. Camera.getCameraInfo(i, info);
  91. if (info.facing == CameraInfo.CAMERA_FACING_FRONT) {
  92. Log.d("findFrontFacingCamera", "Camera found");
  93. cameraId = i;
  94. break;
  95. }
  96. }
  97. return cameraId;
  98. }
  99.  
  100. @Override
  101. protected void onResume() {
  102. super.onResume();
  103.  
  104. try {
  105.  
  106. mCamera = Camera.open();
  107. mCamera.setDisplayOrientation(90);
  108. // Create our Preview view and set it as the content of our activity.
  109. mPreview = new CameraPreview(this, mCamera);
  110.  
  111. preview = (FrameLayout) findViewById(R.id.camera_preview);
  112. preview.addView(mPreview);
  113.  
  114. RelativeLayout relaytive_bottom = (RelativeLayout) findViewById(R.id.relaytive_bottom);
  115.  
  116. timer_view = (Chronometer) findViewById(R.id.timer_view);
  117. captureButton.setText("Start");
  118.  
  119. relaytive_bottom.bringToFront();
  120. } catch (Exception e) {
  121. Log.e("err on resume", "camera load");
  122. e.printStackTrace();
  123. }
  124. }
  125.  
  126. @Override
  127. protected void onPause() {
  128. super.onPause();
  129. releaseMediaRecorder(); // if you are using MediaRecorder, release it first
  130. releaseCamera(); // release the camera immediately on pause event
  131. }
  132.  
  133. private void releaseMediaRecorder() {
  134. if (mMediaRecorder != null) {
  135. mMediaRecorder.reset(); // clear recorder configuration
  136. mMediaRecorder.release(); // release the recorder object
  137. mMediaRecorder = null;
  138. mCamera.lock(); // lock camera for later use
  139. }
  140. }
  141.  
  142. private void releaseCamera() {
  143. if (mCamera != null) {
  144. mCamera.release(); // release the camera for other applications
  145. mCamera = null;
  146. }
  147. }
  148.  
  149. private boolean prepareVideoRecorder() {
  150.  
  151. // StrictMode.ThreadPolicy old = StrictMode.getThreadPolicy();
  152. // StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitDiskWrites().permitDiskReads().permitCustomSlowCalls().build());
  153.  
  154. mMediaRecorder = new MediaRecorder();
  155. /*try {
  156. mCamera.setPreviewDisplay(null);
  157. } catch (IOException ioe) {
  158. Log.d(TAG, "IOException nullifying preview display: " + ioe.getMessage());
  159. }*/
  160. // Step 1: Unlock and set camera to MediaRecorder
  161.  
  162. mCamera.unlock();
  163. mMediaRecorder.setCamera(mCamera);
  164. //mMediaRecorder.setOrientationHint(180);
  165. // Step 2: Set sources
  166. mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
  167. mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
  168.  
  169. // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
  170. if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_480P)) {
  171. mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_480P));
  172. Log.i("quality_480p", "QUALITY_480p");
  173. } else if (CamcorderProfile.hasProfile(cameraId, CamcorderProfile.QUALITY_QVGA)) {
  174. mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_QVGA));
  175. Log.i("quality_qvga", "QVGA");
  176. }
  177.  
  178. mMediaRecorder.setVideoEncodingBitRate(690000);
  179. // Step 4: Set output file
  180. // mMediaRecorder.setOutputFile(MediaUtil.getOutputMediaFile(MediaUtil.MEDIA_TYPE_VIDEO).toString());
  181. mMediaRecorder.setOutputFile(video_Path);
  182. // Step 5: Set the preview output
  183. mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface());
  184.  
  185. // Step 6: Prepare configured MediaRecorder
  186. try {
  187.  
  188. mMediaRecorder.prepare();
  189. // StrictMode.setThreadPolicy(old);
  190. } catch (IllegalStateException e) {
  191. Log.e(TAG, "IllegalStateException preparing MediaRecorder: " + e.getMessage());
  192. e.printStackTrace();
  193. // releaseMediaRecorder();
  194. return false;
  195. } catch (IOException e) {
  196. Log.e(TAG, "IOException preparing MediaRecorder: " + e.getMessage());
  197. e.printStackTrace();
  198. // releaseMediaRecorder();
  199. return false;
  200. } catch (Exception e) {
  201. Log.e("cam prepare err", "" + e);
  202. e.printStackTrace();
  203. return false;
  204. }
  205. return true;
  206. }
  207.  
  208. @SuppressWarnings("deprecation")
  209. @Override
  210. public void onClick(final View v) {
  211.  
  212. try {
  213.  
  214. if (v == imag_camera_swap) {
  215. mCamera.stopPreview();
  216. mCamera.release();
  217. //releaseMediaRecorder();
  218. if (iscamera_swap) {
  219. mCamera = Camera.open();
  220. iscamera_swap = false;
  221. } else {
  222. cameraId = findFrontFacingCamera();
  223. Log.d("cameraId", cameraId + "==");
  224. if (cameraId < 0) {
  225. Toast.makeText(this, "No front facing camera found.", Toast.LENGTH_LONG).show();
  226. mCamera = Camera.open();
  227. iscamera_swap = true;
  228. } else {
  229. mCamera = Camera.open(cameraId);
  230. // mCamera.startPreview();
  231. iscamera_swap = true;
  232. }
  233. }
  234.  
  235. try {
  236. mCamera.setPreviewDisplay(mPreview.getHolder());
  237. mCamera.setDisplayOrientation(90);
  238. mCamera.startPreview();
  239. } catch (IOException e) {
  240. e.printStackTrace();
  241. } catch (Exception e) {
  242. e.printStackTrace();
  243. }
  244. }
  245. } catch (Exception e) {
  246. Log.e("cam swap err", "" + e);
  247. e.printStackTrace();
  248. }
  249. if (v == captureButton) {
  250.  
  251. if (isRecording) {
  252. // stop recording and release camera
  253. //releaseCamera();
  254.  
  255. AlertDialog alertDialog = new AlertDialog.Builder(this).create();
  256.  
  257. alertDialog.setTitle("Alert");
  258. alertDialog.setMessage("Are you sure you want to stop Recording?");
  259. // alertDialog.setIcon(R.drawable.tick);
  260. alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
  261.  
  262. public void onClick(DialogInterface dialog, int which) {
  263. Boolean is_recorded = false;
  264. try {
  265. mMediaRecorder.stop(); // stop the recording
  266. is_recorded = true;
  267. } catch (Exception e) {
  268. Log.e("mMediaRecorder Stop", e + "");
  269. e.printStackTrace();
  270. File mfile = new File(video_Path);
  271. mfile.delete();
  272. is_recorded = false;
  273. }
  274.  
  275. timer_view.stop();
  276. releaseMediaRecorder(); // release the MediaRecorder object
  277. mCamera.lock(); // take camera access back from MediaRecorder
  278.  
  279. // inform the user that recording has stopped
  280. Button b = (Button) v;
  281. b.setText("Start");
  282. isRecording = false;
  283.  
  284. if (is_recorded) { handleCameraVideo(); }
  285. }
  286. });
  287.  
  288. alertDialog.setButton2("Cancel", new DialogInterface.OnClickListener() {
  289.  
  290. public void onClick(DialogInterface dialog, int which) {
  291. dialog.dismiss();
  292. }
  293. });
  294. alertDialog.show();
  295. } else {
  296. Log.i("else", "hi");
  297. if (prepareVideoRecorder()) {
  298. // Camera is available and unlocked, MediaRecorder is prepared,
  299. // now you can start recording
  300. try {
  301. Log.i("else if", "hi");
  302. mMediaRecorder.start();
  303. timer_view.setBase(SystemClock.elapsedRealtime());
  304. timer_view.start();
  305. // inform the user that recording has started
  306. Button b = (Button) v;
  307. b.setText("Stop");
  308.  
  309. isRecording = true;
  310. } catch (Exception e) {
  311. e.printStackTrace();
  312. }
  313. } else {
  314. // prepare didn't work, release the camera
  315. releaseMediaRecorder();
  316. // inform user
  317. }
  318. }
  319. }
  320. }
  321.  
  322. private void handleCameraVideo() {
  323. Log.i("recorging screen selectedPath:", video_Path + "==");
  324.  
  325. MediaMetadataRetriever retriever = new MediaMetadataRetriever();
  326. try {
  327. retriever.setDataSource(video_Path);
  328. Bitmap bitmap = retriever.getFrameAtTime(0, MediaMetadataRetriever.OPTION_CLOSEST);
  329.  
  330. Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true);
  331.  
  332. // create a matrix object
  333. Matrix matrix = new Matrix();
  334. matrix.postRotate(90); // anti-clockwise by 90 degrees//ANT TIME DERREGEE CHANGE HERE
  335.  
  336. // create a new bitmap from the original using the matrix to transform the result
  337. Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true);
  338.  
  339. //Bitmap image_bitmap = getResizedBitmap(rotatedBitmap,200,320);
  340.  
  341. ByteArrayOutputStream mByteArrayOutputStream = new ByteArrayOutputStream();
  342. rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 75, mByteArrayOutputStream);
  343. byte[] mbyte_array = mByteArrayOutputStream.toByteArray();
  344. video_thum_image = Base64.encodeToString(mbyte_array, Base64.DEFAULT);
  345.  
  346. Log.i("base 64", video_thum_image);
  347.  
  348. /* ExifInterface exif = new ExifInterface(send_video_image);
  349. int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
  350.  
  351. Log.i("orientation", orientation+"===");*/
  352.  
  353. } catch (IllegalArgumentException ex) {
  354. ex.printStackTrace();
  355. } catch (RuntimeException es) {
  356. es.printStackTrace();
  357. } catch (Exception e) {
  358. e.printStackTrace();
  359. }
  360. video_duration = timer_view.getText().toString();
  361. //Log.i("video_duration", video_duration);
  362.  
  363. Intent data = new Intent();
  364. data.putExtra("video_duration", video_duration);
  365. if (video_thum_image != null) {
  366. data.putExtra("video_thum_image", video_thum_image);
  367. } else {
  368.  
  369. try {
  370. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.plain_image);
  371. Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth(), bitmap.getHeight(), true);
  372.  
  373. // create a matrix object
  374. Matrix matrix = new Matrix();
  375. matrix.postRotate(90); // anti-clockwise by 90 degrees//ANT TIME DERREGEE CHANGE HERE
  376.  
  377. // create a new bitmap from the original using the matrix to transform the result
  378. Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap, 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true);
  379.  
  380. //Bitmap image_bitmap = getResizedBitmap(rotatedBitmap,200,320);
  381.  
  382. ByteArrayOutputStream mByteArrayOutputStream = new ByteArrayOutputStream();
  383. rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 75, mByteArrayOutputStream);
  384. byte[] mbyte_array = mByteArrayOutputStream.toByteArray();
  385. video_thum_image = Base64.encodeToString(mbyte_array, Base64.DEFAULT);
  386.  
  387. Log.i("base 64", video_thum_image);
  388.  
  389. data.putExtra("video_thum_image", video_thum_image);
  390. } catch (IllegalArgumentException ex) {
  391. ex.printStackTrace();
  392. } catch (RuntimeException es) {
  393. es.printStackTrace();
  394. } catch (Exception e) {
  395. e.printStackTrace();
  396. }
  397. }
  398.  
  399. data.putExtra("video_Path", video_Path);
  400. setResult(RESULT_OK, data);
  401. finish();
  402. }
  403.  
  404. @Override
  405. protected void onDestroy() {
  406. // TODO Auto-generated method stub
  407. super.onDestroy();
  408. releaseCamera();
  409. releaseMediaRecorder();
  410. }
  411.  
  412. private String getExternalDirectoryPath(){
  413. String mainDirectoryPath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "FolderName" + File.separator;
  414. File mainDirectoryPathFile = new File(mainDirectoryPath);
  415. Log.i("external file path", mainDirectoryPathFile.getAbsolutePath());
  416.  
  417. if (!mainDirectoryPathFile.exists()) {
  418. mainDirectoryPathFile.mkdirs();
  419. }
  420.  
  421. String mainFolderPath = mainDirectoryPathFile.getAbsolutePath() + File.separator + "FolderName" + File.separator;
  422. File mainFolderPathFile = new File(mainFolderPath);
  423. Log.i("external folder path", mainFolderPathFile.getAbsolutePath());
  424.  
  425. if (!mainFolderPathFile.exists()) {
  426. mainFolderPathFile.mkdirs();
  427. }
  428. return mainFolderPathFile.getAbsolutePath() + File.separator;
  429. }
  430.  
  431. public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
  432. private static final String TAG = "CameraPreview";
  433.  
  434. private SurfaceHolder mHolder;
  435. private Camera mCamera;
  436.  
  437. public CameraPreview(Context context, Camera camera) {
  438. super(context);
  439. mCamera = camera;
  440.  
  441. // Install a SurfaceHolder.Callback so we get notified when the
  442. // underlying surface is created and destroyed.
  443. mHolder = getHolder();
  444. mHolder.addCallback(this);
  445. // deprecated setting, but required on Android versions prior to 3.0
  446. mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
  447. }
  448.  
  449. public void surfaceCreated(SurfaceHolder holder) {
  450. // The Surface has been created, now tell the camera where to draw the preview.
  451. try {
  452. mCamera.setPreviewDisplay(holder);
  453. mCamera.startPreview();
  454. } catch (IOException e) {
  455. Log.d(TAG, "Error setting camera preview: " + e.getMessage());
  456. }
  457. }
  458.  
  459. public void surfaceDestroyed(SurfaceHolder holder) {
  460. // empty. Take care of releasing the Camera preview in your activity.
  461. }
  462.  
  463. public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
  464. // If your preview can change or rotate, take care of those events here.
  465. // Make sure to stop the preview before resizing or reformatting it.
  466.  
  467. if (mHolder.getSurface() == null){
  468. // preview surface does not exist
  469. return;
  470. }
  471.  
  472. // stop preview before making changes
  473. try {
  474. mCamera.stopPreview();
  475. } catch (Exception e){
  476. // ignore: tried to stop a non-existent preview
  477. }
  478.  
  479. // set preview size and make any resize, rotate or
  480. // reformatting changes here
  481.  
  482. // start preview with new settings
  483. try {
  484. mCamera.setPreviewDisplay(mHolder);
  485. mCamera.startPreview();
  486.  
  487. } catch (Exception e){
  488. Log.d(TAG, "Error starting camera preview: " + e.getMessage());
  489. }
  490. }
  491. }
  492. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement