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
- Android多媒体(视频播放器-拍照-录像)
- Android------多媒体(视频播放器-拍照-录像)
- 28.Android-多媒体(视频播放器-拍照-录像)
- 多媒体(视频播放器-拍照-录像)
- 多媒体(视频播放,拍照,录像)
- Android 多媒体(拍照-录像)
- Android—多媒体(视频播放、拍照)
- 多媒体之视频播放、拍照
- 视频播放器MediaPlayer拍照Camera-录像MediaRecorder
- 安卓——多媒体(视频播放器-拍照-)
- 多媒体(拍照+录像)
- 多媒体(拍照-录像)
- 多媒体(拍照录像)
- android 多媒体 视频播放
- Android-多媒体之VideoView视频播放器
- Android MediaPlayer 多媒体(视频播放器)
- 多媒体开发---视频播放器开发(android)
- 多媒体(视频播放器)
- 程序员编程技术迅速提高终极攻略
- 机器人的运动范围
- Android之MVVM开发模式和DataBinding的简单用法
- Java的System.getProperty()方法获取信息的用法
- YOLO图解
- Android------多媒体(视频播放器-拍照-录像)
- HTML 4.01 笔记一
- 分布式架构的演进
- Linux系统格式化磁盘+挂载分区
- Android应用的启动优化
- Android-php后台优化之数据库优化(一)表的优化2
- 对windows 10 UWP中控件的外观进行定制(customization)
- Java 中Comparable和Comparator区别比较
- android的design库-----TabLayout的简单使用