android基础07

1.SoundPool
指定声音池的最大音频流数目为10,声音品质为0(这参数没什么用,一般为0)
pool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 0);

载入音频流,返回在池中的id,load方法是异步方法,这个方法没执行完,下个方法可能就开始了
final int sourceid = pool.load(this, R.raw.pj, 0);

播放音频,第二个参数为左声道音量;第三个参数为右声道音量;第四个参数为优先级,0表示最低;第五个参数为循环次数,0不循环,-1一直循环;
第六个参数为速率,速率最低0.5最高为2,1代表正常速度
pool.play(sourceid, 1, 1, 0, -1, 1);

2.SurfaceView
主要是用来显示视频的,内部维护了一个双缓冲的机制,提高画面显示的速度和质量。
SurfaceView surfaceView = (SurfaceView)this.findViewById(R.id.surfaceView);

mediaPlayer.setDisplay(surfaceView.getHolder()); 设置播放填充器,将surfaceview的内容设置到surfaceHolder中显示
surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 设置缓冲区,它有种双缓冲机制
surfaceView.getHolder().setKeepScreenOn(true); 保持屏幕一直开着

3.音频播放器
1.MediaPlayer mediaPlayer = new MediaPlayer();
2.if (mediaPlayer.isPlaying()) {
mediaPlayer.reset(); 重置为初始状态
  }
3.mediaPlayer.setDataSource("/mnt/sdcard/god.mp3"); 设置播放数据
4.mediaPlayer.prepare(); 准备播放,可能需要一点时间 同步操作
5.mediaPlayer.start(); 开始或恢复播放
6.mediaPlayer.pause(); 暂停播放
7.mediaPlayer.start(); 恢复播放
8.mediaPlayer.stop(); 停止播放
9.mediaPlayer.release(); 释放资源
10.mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 播出完毕事件
@Override public void onCompletion(MediaPlayer arg0) {
mediaPlayer.release();
}
  });
11.mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { 错误处理事件
@Override public boolean onError(MediaPlayer player, int arg1, int arg2) {
mediaPlayer.release();
return false;
}
  });

4. player.getDuration(); 获取播放时间的长度,为毫秒
SeekBar.setMax(毫秒); 设置进度条的最大范围值
ImageButton.setImageResource(图片id); 设置图片按钮的图片
player.getCurrentPosition(); 获取播放器当前的毫秒值
SeekBar.setProgress(毫秒); 设置进度条的进度
SeekBar.isPressed(); 判断进度条是否被按下
player.seekTo(SeekBar.getProgress()); 将播放器的进度移动到进度条的进度

5.当正在视频播放时,来了个电话,挂完电话后又回到了播放界面,这个过程只要surfaceview不在最前显示,它就被销毁了,
回来后,它又回到原来设置的那个Display,这样就能继续播放原来的位置。
surface.getHolder.addCallback(SurfaceView.Callback callback);
callback的
surfaceDestroyed()的方法,surfaceview被摧毁时执行的方法,可以在该方法里设置当前播放的位置(毫秒数)
int position = player.getCurrentPosition(); 获取当前播放进度
surfaceCreated()的方法,重新从position位置开始播放,
即:player.seekTo(position);

6.mediaPlayer采用异步的方式准备,需要给mediaPlayer注册一个 OnPreparedListener
mediaPlayer.prepareAsync(); 采用异步的方式准备
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

public void onPrepared(MediaPlayer mp) {
// TODO Auto-generated method stub
mediaPlayer.start();
bt_play.setEnabled(false);
bt_play.setClickable(false);
}
});

7.MediaPlayer的生命周期,
1.new 出来MediaPlayer对象
2.调用setDataSource(url);
3.调用prepare()准备;
4.调用start方法

8.在清单文件activity节点下,设置 android:screenOrientation="landscape" ,显示横屏

9.在layout控件之间,可以设置 android:layout_weight="100" 来设置显示界面的优先级,值越小优先级越大

10.获取照相机所有的参数
camera.getParameters().flatten()

11.使用摄像头拍照
1.Camera camera = Camera.open(0); 0是后置摄像头,1是前置摄像头
WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
2.Camera.Parameters parameters = camera.getParameters(); 获取摄像机参数
parameters.setPreviewSize(display.getWidth(), display.getHeight());//设置预览照片的大小
parameters.setPreviewFrameRate(3);//每秒3帧
parameters.setPictureFormat(PixelFormat.JPEG);//设置照片的输出格式
parameters.set("jpeg-quality", 85);//照片质量
parameters.setPictureSize(display.getWidth(), display.getHeight());//设置照片的大小
3.camera.setParameters(parameters); 把设置好的参数应用到摄像头
4.camera.setPreviewDisplay(surfaceView.getHolder());//通过SurfaceView显示取景画面
5.camera.startPreview();//开始预览
6.camera.autoFocus(null);//自动对焦
7.camera.takePicture(null, null, jpegCallback);//拍照片
8.camera.stopPreview();//停止预览
9.camera.release();//释放摄像头

12.音视频采集(录像)
第一步:在功能清单文件AndroidManifest.xml中添加音频刻录和照相机权限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
第二步:编写音频刻录代码:
recorder.reset();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); //从照相机采集视频
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setVideoSize(320, 240);
recorder.setVideoFrameRate(3); //每秒3帧
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263); //设置视频编码方式
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/mnt/sdcard/itcast.3gp");
recorder.setPreviewDisplay(surfaceView.getHolder().getSurface());
recorder.prepare();//预期准备
recorder.start();//开始刻录
...
recorder.stop();//停止刻录
recorder.release(); //刻录完成一定要释放资源

猜你喜欢

转载自xpchou.iteye.com/blog/1629300
今日推荐