Android------多媒体(视频播放器-拍照-录像)

来源:互联网 发布:长虹电视机怎么样 知乎 编辑:程序博客网 时间:2024/04/30 07:14

1.视频播放器:
(1)播放内存卡中的视频文件(自己写的,SeekBar ,ImageButton,SurfaceView)

public class MainActivity extends AppCompatActivity {    private SeekBar sb_main_seekbar;    private MediaPlayer mediaPlayer;    private ImageButton imageButton;    private SurfaceView sv_main_suface;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sb_main_seekbar = (SeekBar) findViewById(R.id.sb_main_seekbar);        sv_main_suface = (SurfaceView) findViewById(R.id.sv_main_suface);        //设置进度条的拖动事件        sb_main_seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {            }            @Override            public void onStartTrackingTouch(SeekBar seekBar) {            }            @Override            public void onStopTrackingTouch(SeekBar seekBar) {              int  progress=seekBar.getProgress();              mediaPlayer.seekTo(progress);            }        });    }    public void IsplayerOrPause(View view) throws IOException {        imageButton = (ImageButton) view;        if (mediaPlayer==null){            //播放内存卡的音频            mediaPlayer=new MediaPlayer();            //设置音频流的类型            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);            //播放内存卡中的视频文件            mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Movies/sister.mp4"));            //准备一下(内存卡)            mediaPlayer.prepare();            //将媒体播放器捕捉的画面展示到sv_main_suface            mediaPlayer.setDisplay(sv_main_suface.getHolder());                    mediaPlayer.start();                    imageButton.setImageResource(android.R.drawable.ic_media_pause);                    //获取视频的播放时长                    int duration=mediaPlayer.getDuration();                    //设置进度条的最大值为:音乐的播放时长                    sb_main_seekbar.setMax(duration);                    new MyThread().start();     });        }        else if(mediaPlayer.isPlaying()){            mediaPlayer.pause();            imageButton.setImageResource(android.R.drawable.ic_media_play);        }        else{            mediaPlayer.start();            imageButton.setImageResource(android.R.drawable.ic_media_pause);        }    }    class MyThread extends Thread{        @Override        public void run() {            super.run();            while (sb_main_seekbar.getProgress()<=sb_main_seekbar.getMax()){             int currentPosition=mediaPlayer.getCurrentPosition();                sb_main_seekbar.setProgress(currentPosition);            }        }    }}

清单文件中配置:

<uses-permission android:name="android.permission.CAMERA" />    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.RECORD_AUDIO" />

(2)VideoView 的使用,播放内存卡视频

public class PlayActivity extends AppCompatActivity {    private VideoView vv_main_view;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_play);        vv_main_view = (VideoView) findViewById(R.id.vv_main_view);        //设置视频的路径        vv_main_view.setVideoPath("file://mnt/sdcard/Movies/advideo.mp4");        //实列化媒体控制器        MediaController mediaController=new MediaController(this);        mediaController.setMediaPlayer(vv_main_view);        vv_main_view.setMediaController(mediaController);    }}

2.拍照(自己写程序来保存照片)
照片格局文件lay.xml里要先进行定义

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.android27_playcamera.MainActivity">    <SurfaceView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/sv_main_surface"        />    <Button        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:onClick="takePhoto"        android:text="拍照"        /></RelativeLayout>

其中SurfaceView是用来进行预览的

public class MainActivity extends AppCompatActivity {    private SurfaceView sv_main_surface;    private Camera camera;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        sv_main_surface = (SurfaceView) findViewById(R.id.sv_main_surface);        sv_main_surface.getHolder().addCallback(new SurfaceHolder.Callback() {            @Override            public void surfaceCreated(SurfaceHolder holder) {                //打开照相机                camera = Camera.open();                //设置参数                Camera.Parameters  parameters=camera.getParameters();                parameters.setPictureFormat(PixelFormat.JPEG);                parameters.set("jpeg-quality",85);                camera.setParameters(parameters);                //将画面展示到SurfaceView                try {                    camera.setPreviewDisplay(sv_main_surface.getHolder());                    //开启预览                    camera.startPreview();                } catch (IOException e) {                    e.printStackTrace();                }            }            @Override            public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {            }            @Override            public void surfaceDestroyed(SurfaceHolder holder) {                //关闭照相机                if(camera!=null){                    camera.release();                    camera.stopPreview();                    camera=null;                }            }        });    }    public void takePhoto(View view){        //DCIM/Camera/        camera.takePicture(null, null, new Camera.PictureCallback() {            @Override            public void onPictureTaken(byte[] bytes, Camera camera) {                //压缩(图片)                //将字节数组转成Bitmap                Bitmap bitmap= BitmapFactory.decodeByteArray(bytes,0,bytes.length);                try {                    //实例化文件输出流                    FileOutputStream fos=new FileOutputStream("/mnt/sdcard/DCIM/Camera/G150831_"+System.currentTimeMillis()+".png");                    bitmap.compress(Bitmap.CompressFormat.PNG,85,fos);                    //重新继续拍照                    camera.stopPreview();                    camera.startPreview();                } catch (FileNotFoundException e) {                    e.printStackTrace();                }            }        });    }}

自己编程的话需要注意,容易引起系统出错意外终止

3.录像(实现类似微信的小视频功能,可以录制一个视频然后播放该视频)
视频录制,布局文件:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.android27_playcamera.MediaRecorderActivity">    <SurfaceView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:id="@+id/sv_media_recorder_surface"        />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content">        <Button            android:layout_width="0dp"            android:layout_height="wrap_content"            android:text="开始"            android:onClick="start"            android:layout_weight="1"            />        <Button            android:layout_width="0dp"            android:layout_height="wrap_content"            android:text="停止"            android:onClick="stop"            android:layout_weight="1"            />    </LinearLayout></RelativeLayout>

实现方法MediaRecorderActivity.java

public class MediaRecorderActivity extends AppCompatActivity {    private SurfaceView sv_media_recorder_surface;    private MediaRecorder mediaRecorder;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_media_recorder);        sv_media_recorder_surface = (SurfaceView) findViewById(R.id.sv_media_recorder_surface);        //媒体录制器        mediaRecorder = new MediaRecorder();    }    public void  start(View view){        mediaRecorder.reset();        //设置音频,视频来源        mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);        //设置输出格式        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);        //设置编码格式(视频,音频)        mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);        //设置保存路径        mediaRecorder.setOutputFile("/mnt/sdcard/G150831_"+System.currentTimeMillis()+".mp4");        //画面        mediaRecorder.setPreviewDisplay(sv_media_recorder_surface.getHolder().getSurface());        //准备        try {            mediaRecorder.prepare();            mediaRecorder.start();        } catch (IOException e) {            e.printStackTrace();        }    }    public void  stop(View view){        mediaRecorder.stop();    }}
0 0
原创粉丝点击