2014-02-17 58 views
0

刚刚录制的视频/音频不适用于某些设备。 “抱歉,视频无法播放”,但在相册中播放的视频相同。只有部分设备不能播放录制的视频/音频。 “抱歉,视频无法播放”,但在相册中播放的视频相同。下面 是我的代码刚录制的视频/音频不会在某些设备上播放。获得“抱歉,视频无法播放”,但在相册中播放的视频相同

public class CaptureImageActivity extends Activity { 
    // Activity request codes 
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 
    private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200; 
    public static final int MEDIA_TYPE_IMAGE = 1; 
    public static final int MEDIA_TYPE_VIDEO = 2; 

    // directory name to store captured images and videos 
    private static final String IMAGE_DIRECTORY_NAME = "ICS Camera"; 

    private Uri fileUri; // file url to store image/video 

    private ImageView imgPreview; 
    private VideoView videoPreview; 
    private TextView cancel, send; 
    private Intent intent1; 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     Intent intent = new Intent(CaptureImageActivity.this, 
       HomeActivity.class); 
     HomeActivity.myempid = 1; 
     startActivity(intent); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_capture_image); 

     imgPreview = (ImageView) findViewById(R.id.imgPreview); 
     videoPreview = (VideoView) findViewById(R.id.videoPreview); 
     cancel = (TextView) findViewById(R.id.cancel); 
     send = (TextView) findViewById(R.id.send); 
     int mode = getIntent().getIntExtra(
       ApplicationConstants.IntentKeys.KEY_MODE, 0); 
     try { 
      if (HomeActivity.camera != null) { 
       HomeActivity.camera.release(); 
       HomeActivity.camera = null; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     if (mode == 0) 
      captureImage(); 
     else 
      recordVideo(); 
     /* 
     * Capture image button click event 
     */ 
     cancel.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Intent intent = new Intent(CaptureImageActivity.this, 
         HomeActivity.class); 
       startActivity(intent); 
       HomeActivity.myempid = 1; 
       CaptureImageActivity.this.finish(); 
      } 
     }); 

     /* 
     * Record video button click event // 
     */ 
     send.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Intent picMessageIntent = new Intent(
         android.content.Intent.ACTION_SEND); 
       picMessageIntent.setType("image/jpeg"); 
       File downloadedPic = new File(fileUri.getPath()); 
       System.out.println("PATH " + fileUri.getPath()); 
       picMessageIntent.putExtra(Intent.EXTRA_STREAM, 
         Uri.fromFile(downloadedPic)); 
       startActivity(picMessageIntent); 
       // CaptureImageActivity.this.finish(); 
      } 
     }); 

     // Checking camera availability 
     if (!isDeviceSupportCamera()) { 
      Toast.makeText(getApplicationContext(), 
        "Sorry! Your device doesn't support camera", 
        Toast.LENGTH_LONG).show(); 
      // will close the app if the device does't have camera 
      finish(); 
     } 
    } 

    /** 
    * Checking device has camera hardware or not 
    * */ 
    private boolean isDeviceSupportCamera() { 
     if (getApplicationContext().getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_CAMERA)) { 
      // this device has a camera 
      return true; 
     } else { 
      // no camera on this device 
      return false; 
     } 
    } 

    /* 
    * Capturing Camera Image will lauch camera app requrest image capture 
    */ 
    private void captureImage() { 
     intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

     fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); 

     intent1.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 

     // start the image capture Intent 
     startActivityForResult(intent1, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
    } 

    /* 
    * Here we store the file url as it will be null after returning from camera 
    * app 
    */ 
    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 

     // save file url in bundle as it will be null on scren orientation 
     // changes 
     outState.putParcelable("file_uri", fileUri); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 

     // get the file url 
     fileUri = savedInstanceState.getParcelable("file_uri"); 
    } 

    /* 
    * Recording video 
    */ 
    private void recordVideo() { 
     intent1 = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 

     fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); 

     // set video quality 
     intent1.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 

     intent1.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image 
                  // file 
                  // name 

     // start the video capture Intent 
     startActivityForResult(intent1, CAMERA_CAPTURE_VIDEO_REQUEST_CODE); 
    } 

    /** 
    * Receiving activity result method will be called after closing the camera 
    * */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // if the result is capturing Image 
     if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 
       // successfully captured the image 
       // display it in image view 

       previewCapturedImage(); 
      } else if (resultCode == RESULT_CANCELED) { 
       System.out.println("RESULT CANCELED"); 
       // user cancelled Image capture 
       Toast.makeText(getApplicationContext(), 
         "User cancelled image capture", Toast.LENGTH_SHORT) 
         .show(); 
       Intent intent = new Intent(CaptureImageActivity.this, 
         HomeActivity.class); 
       startActivity(intent); 
       HomeActivity.myempid = 1; 
       CaptureImageActivity.this.finish(); 
      } else { 
       // failed to capture image 
       Toast.makeText(getApplicationContext(), 
         "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     } else if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 
       // video successfully recorded 
       // preview the recorded video 
       // sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
       // Uri.parse(fileUri.getPath()))); 
       System.out.println("RESULT OK"); 
       previewVideo(); 
      } else if (resultCode == RESULT_CANCELED) { 
       // user cancelled recording 
       Intent intent = new Intent(CaptureImageActivity.this, 
         HomeActivity.class); 
       startActivity(intent); 
       HomeActivity.myempid = 1; 
       Toast.makeText(getApplicationContext(), 
         "User cancelled video recording", Toast.LENGTH_SHORT) 
         .show(); 
       finish(); 
      } else { 
       System.out.println("FAIL"); 
       // failed to record video 
       Toast.makeText(getApplicationContext(), 
         "Sorry! Failed to record video", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     } 
    } 

    /* 
    * Display image from a path to ImageView 
    */ 
    private void previewCapturedImage() { 
     try { 
      // hide video preview 
      videoPreview.setVisibility(View.GONE); 

      imgPreview.setVisibility(View.VISIBLE); 

      // bimatp factory 
      BitmapFactory.Options options = new BitmapFactory.Options(); 

      // downsizing image as it throws OutOfMemory Exception for larger 
      // images 
      options.inSampleSize = 8; 

      final Bitmap bitmap = BitmapFactory.decodeFile(fileUri.getPath(), 
        options); 
      System.out.println(bitmap); 
      imgPreview.setImageBitmap(bitmap); 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } 
    } 

    /* 
    * Previewing recorded video 
    */ 
    private void previewVideo() { 
     try { 
      System.out.println("PATH " + fileUri.getPath()); 
      getContentResolver().notifyChange(Uri.parse(fileUri.getPath()), 
        null); 
      MediaController mc = new MediaController(this); 
      mc.setAnchorView(videoPreview); 
      // mc.setMediaPlayer(videoPreview); 
      // hide image preview 
      // videoPreview.setOnPreparedListener(new OnPreparedListener() { 
      // 
      // public void onPrepared(MediaPlayer mp) { 
      // // TODO Auto-generated method stub 
      // mp.start(); 
      // } 
      // }); 
      imgPreview.setVisibility(View.GONE); 
      // getWindow().clearFlags(
      // WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 
      // getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      // WindowManager.LayoutParams.FLAG_FULLSCREEN); 
      videoPreview.setVisibility(View.VISIBLE); 
      // 02-15 11:51:52.973: I/System.out(17840): PATH 
      // /mnt/sdcard/Pictures/ICS Camera/VID_20140215_115133.mp4 
      videoPreview.setVideoPath(fileUri.getPath()); 
      // videoPreview.setVideoURI(Uri.parse(Provoder.CONTENT_URI_BASE 
      // + Uri.encode(fileUri.getPath()))); 
      videoPreview.setMediaController(mc); 
      videoPreview.requestFocus(); 
      videoPreview.start(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    /** 
    * ------------ Helper Methods ---------------------- 
    * */ 

    /* 
    * Creating file uri to store image/video 
    */ 
    public Uri getOutputMediaFileUri(int type) { 
     return Uri.fromFile(getOutputMediaFile(type)); 
    } 

    /* 
    * returning image/video 
    */ 
    private static File getOutputMediaFile(int type) { 

     // External sdcard location 
     File mediaStorageDir = new File(
       Environment 
         .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
       IMAGE_DIRECTORY_NAME); 

     // Create the storage directory if it does not exist 
     if (!mediaStorageDir.exists()) { 
      if (!mediaStorageDir.mkdirs()) { 
       Log.d(IMAGE_DIRECTORY_NAME, "Oops! Failed create " 
         + IMAGE_DIRECTORY_NAME + " directory"); 
       return null; 
      } 
     } 

     // Create a media file name 
     String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss", 
       Locale.getDefault()).format(new Date()); 
     File mediaFile; 
     if (type == MEDIA_TYPE_IMAGE) { 
      mediaFile = new File(mediaStorageDir.getPath() + File.separator 
        + "IMG_" + timeStamp + ".jpg"); 
     } else if (type == MEDIA_TYPE_VIDEO) { 
      mediaFile = new File(mediaStorageDir.getPath() + File.separator 
        + "VID_" + timeStamp + ".mp4"); 
     } else { 
      return null; 
     } 

     return mediaFile; 
    } 


} 

回答

0

使用下面的代码

import java.io.File; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.pm.PackageManager; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.net.Uri; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.Window; 
import android.widget.ImageView; 
import android.widget.MediaController; 
import android.widget.TextView; 
import android.widget.Toast; 
import android.widget.VideoView; 

import com.kubical.ES.R; 
import com.kubical.ES.util.ApplicationConstants; 

public class CaptureImageActivity extends Activity { 
    // Activity request codes 
    private static final int CAMERA_CAPTURE_IMAGE_REQUEST_CODE = 100; 
    private static final int CAMERA_CAPTURE_VIDEO_REQUEST_CODE = 200; 
    public static final int MEDIA_TYPE_IMAGE = 1; 
    public static final int MEDIA_TYPE_VIDEO = 2; 

    // directory name to store captured images and videos 


    private ImageView imgPreview; 
    private VideoView videoPreview; 
    private TextView cancel, send; 
    private Intent intent1; 
    private String filePath; 

    @Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
     Intent intent = new Intent(CaptureImageActivity.this, 
       HomeActivity.class); 
     HomeActivity.myempid = 1; 
     startActivity(intent); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     setContentView(R.layout.activity_capture_image); 

     imgPreview = (ImageView) findViewById(R.id.imgPreview); 
     videoPreview = (VideoView) findViewById(R.id.videoPreview); 
     cancel = (TextView) findViewById(R.id.cancel); 
     send = (TextView) findViewById(R.id.send); 
     int mode = getIntent().getIntExtra(
       ApplicationConstants.IntentKeys.KEY_MODE, 0); 
     try { 
      if (HomeActivity.camera != null) { 
       HomeActivity.camera.release(); 
       HomeActivity.camera = null; 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     if (mode == 0) 
      captureImage(); 
     else 
      recordVideo(); 
     /* 
     * Capture image button click event 
     */ 
     cancel.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Intent intent = new Intent(CaptureImageActivity.this, 
         HomeActivity.class); 
       startActivity(intent); 
       HomeActivity.myempid = 1; 
       CaptureImageActivity.this.finish(); 
      } 
     }); 

     /* 
     * Record video button click event // 
     */ 
     send.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       Intent picMessageIntent = new Intent(
         android.content.Intent.ACTION_SEND); 
       picMessageIntent.setType("image/jpeg"); 
       File downloadedPic = new File(filePath); 
       System.out.println("PATH " + filePath); 
       picMessageIntent.putExtra(Intent.EXTRA_STREAM, 
         Uri.fromFile(downloadedPic)); 
       startActivity(picMessageIntent); 
       // CaptureImageActivity.this.finish(); 
      } 
     }); 

     // Checking camera availability 
     if (!isDeviceSupportCamera()) { 
      Toast.makeText(getApplicationContext(), 
        "Sorry! Your device doesn't support camera", 
        Toast.LENGTH_LONG).show(); 
      // will close the app if the device does't have camera 
      finish(); 
     } 
    } 

    /** 
    * Checking device has camera hardware or not 
    * */ 
    private boolean isDeviceSupportCamera() { 
     if (getApplicationContext().getPackageManager().hasSystemFeature(
       PackageManager.FEATURE_CAMERA)) { 
      // this device has a camera 
      return true; 
     } else { 
      // no camera on this device 
      return false; 
     } 
    } 

    /* 
    * Capturing Camera Image will lauch camera app requrest image capture 
    */ 
    private void captureImage() { 
     intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent1, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
    } 


    /* 
    * Recording video 
    */ 
    private void recordVideo() { 
     intent1 = new Intent(MediaStore.ACTION_VIDEO_CAPTURE); 

     startActivityForResult(intent1, CAMERA_CAPTURE_VIDEO_REQUEST_CODE); 
    } 

    /** 
    * Receiving activity result method will be called after closing the camera 
    * */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // if the result is capturing Image 
     if (requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 
       previewCapturedImage(data); 
      } else if (resultCode == RESULT_CANCELED) { 
       System.out.println("RESULT CANCELED"); 
       // user cancelled Image capture 
       Toast.makeText(getApplicationContext(), 
         "User cancelled image capture", Toast.LENGTH_SHORT) 
         .show(); 
       Intent intent = new Intent(CaptureImageActivity.this, 
         HomeActivity.class); 
       startActivity(intent); 
       HomeActivity.myempid = 1; 
       CaptureImageActivity.this.finish(); 
      } else { 
       // failed to capture image 
       Toast.makeText(getApplicationContext(), 
         "Sorry! Failed to capture image", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     } else if (requestCode == CAMERA_CAPTURE_VIDEO_REQUEST_CODE) { 
      if (resultCode == RESULT_OK) { 
       previewVideo(data); 
      } else if (resultCode == RESULT_CANCELED) { 
       // user cancelled recording 
       Intent intent = new Intent(CaptureImageActivity.this, 
         HomeActivity.class); 
       startActivity(intent); 
       HomeActivity.myempid = 1; 
       Toast.makeText(getApplicationContext(), 
         "User cancelled video recording", Toast.LENGTH_SHORT) 
         .show(); 
       finish(); 
      } else { 
       System.out.println("FAIL"); 
       // failed to record video 
       Toast.makeText(getApplicationContext(), 
         "Sorry! Failed to record video", Toast.LENGTH_SHORT) 
         .show(); 
      } 
     } 
    } 

    /* 
    * Display image from a path to ImageView 
    */ 
    private void previewCapturedImage(Intent data) { 
     try { 
      // hide video preview 
      videoPreview.setVisibility(View.GONE); 

      imgPreview.setVisibility(View.VISIBLE); 

      // bimatp factory 
      BitmapFactory.Options options = new BitmapFactory.Options(); 

      // downsizing image as it throws OutOfMemory Exception for larger 
      // images 
      options.inSampleSize = 8; 
      Uri selectedImage = data.getData(); 

      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(selectedImage, 
        filePathColumn, null, null, null); 
      cursor.moveToFirst(); 
      int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
      filePath = cursor.getString(columnIndex); 
      System.out.println("PATH IS " + filePath); 
      cursor.close(); 
      final Bitmap bitmap = BitmapFactory.decodeFile(filePath, options); 
      System.out.println(bitmap); 
      imgPreview.setImageBitmap(bitmap); 
     } catch (NullPointerException e) { 
      e.printStackTrace(); 
     } 
    } 

    /* 
    * Previewing recorded video 
    */ 
    private void previewVideo(Intent data) { 
     try { 
      Uri contentUri = data.getData(); 
      String[] proj = { MediaStore.Images.Media.DATA }; 
      Cursor cursor = getContentResolver().query(contentUri, proj, null, 
        null, null); 
      int column_index = cursor 
        .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
      cursor.moveToFirst(); 
      filePath = cursor.getString(column_index); 
      MediaController mc = new MediaController(this); 
      mc.setAnchorView(videoPreview); 
      imgPreview.setVisibility(View.GONE); 
      videoPreview.setVisibility(View.VISIBLE); 
      videoPreview.setVideoPath(filePath); 
      videoPreview.setMediaController(mc); 
      videoPreview.requestFocus(); 
      videoPreview.start(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+0

我面对我录制视频并将其发送到服务器(PHP)现在视频无法播放使用问题解决了我的问题服务器的网址。问题只在于我从相机录制的视频其他视频工作正常。任何帮助,将不胜感激 –