Android多媒体视频——MediaRecorder&MediaPlayer

    xiaoxiao2021-03-25  97

    MediaRecorder可以实现音频和视频的录制,录制视频首先需要渲染一个SurfaceView用以展示预览,接着便可以通过MediaRecorder录制视频文件了。MediaPlayer可实现播放视频。


    MediaRecorder录制视频的步骤

    获得MediaRecorder对象设置录制设备设置输出格式设置录制大小(非必须)(和录制视频的清晰度有关)设置录制帧率(非必须)设置压缩格式设置输出文件准备录制开始录制停止录制释放资源 录制时一定要先设置录制源,其次设置输出格式;接着如果要设置大小必须在编码之前,否则设置会失效。
    public class MainActivity extends Activity implements SurfaceHolder.Callback { //录制视频变量 SurfaceView sv; SurfaceHolder holder; Button recordVedio; Button stopRecordVedio; MediaRecorder recorder; String path="/sdcard/shipin.3gp"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ininView(); //录制视频 recordVedio.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 initRecorder();//初始化录制器 record();//开始录制 } }); stopRecordVedio.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 recorder.stop(); recorder.release(); } }); } //视图初始化 private void ininView() { // TODO 自动生成的方法存根 sv=(SurfaceView)findViewById(R.id.surfaceView1); recordVedio=(Button)findViewById(R.id.button1); stopRecordVedio=(Button)findViewById(R.id.button2); holder=sv.getHolder(); } //初始化播放器 protected void initRecorder() { // TODO 自动生成的方法存根 recorder=new MediaRecorder(); recorder.setPreviewDisplay(holder.getSurface());//获得surface对象 recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);//设置录制源 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出格式 recorder.setVideoFrameRate(25);//设置帧率,部分设备无效 recorder.setVideoSize(800, 480);//设置视频大喜,必须在编码之前,否则无效 recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);//设置编码格式 recorder.setOutputFile(path);//设置输出文件 } //开始录制 protected void record() { // TODO 自动生成的方法存根 try { recorder.prepare(); recorder.start(); } catch(Exception e){ e.printStackTrace(); } } }

    别忘了在注册文件中添加权限:

    <uses-permission android:name="android.permission.CAMERA"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-feature android:name="android.hardware.camera" />

    MediaPlayer播放视频

    使用SurfaceView完成视频的显示。进行视频播放的步骤为: 1. 获得MediaPlayer对象 2. 绑定播放组件 3. 设置数据源 4. 准备播放 5. 开始播放 6. 暂停播放 7. 停止播放 8. 释放资源


    public class MainActivity extends Activity implements SurfaceHolder.Callback { SurfaceView sv; SurfaceHolder holder; //播放视频变量 Button playVedio; Button stopPlayVedio; Button pausePlayVedio; MediaPlayer player; boolean isPrepared=false; boolean isPlaying=false; String path="/sdcard/shipin.3gp"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ininView();//视图初始化 //播放视频 initPlayer();//初始化播放器 playVedio.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 if(!isPlaying) { play();//播放 isPlaying=true; } } }); stopPlayVedio.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 if(player.isPlaying()) { player.stop(); isPrepared=false; } isPlaying=false; player.release();//释放资源后便不能再启动播放,不执行释放,停止后还可以启动播放 } }); pausePlayVedio.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO 自动生成的方法存根 if(isPlaying) { player.pause(); isPlaying=false; } } }); } //初始化播放器 private void initPlayer() { // TODO 自动生成的方法存根 player=new MediaPlayer(); //获得播放器对象 //player.setDisplay(holder); //绑定显示组件,在player.start之前设置显示参数,所用的版本会提示错我 try { player.setDataSource(path);//设置数据源 } catch (IllegalArgumentException e) { // TODO: handle exception e.printStackTrace(); } catch (IllegalStateException e) { // TODO: handle exception e.printStackTrace(); } catch (IOException e) { // TODO: handle exception e.printStackTrace(); } } protected void play() { // TODO 自动生成的方法存根 try{ if(!isPrepared) { player.prepare(); isPrepared=true; } player.start(); //最好保证mediaPlayer.start()之后,在进行mediaPlayer.setDisplay()的设置,不过一般问题不大。 //有时候会遇到只有声音没有图像的情况,那是因为surfaceview的创建优先级并不高,因此在mediaPlayer开始之后, //surfaceView还没有创建出来,因此会出现有声音没图像的问题 player.setDisplay(holder); //绑定显示组件 //监听是否播放完成 player.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { // TODO 自动生成的方法存根 isPlaying=false;//播放完成,则设置参数 } }); } catch(Exception e){ e.printStackTrace(); } } private void ininView() { // TODO 自动生成的方法存根 sv=(SurfaceView)findViewById(R.id.surfaceView1); holder=sv.getHolder(); playVedio=(Button)findViewById(R.id.button3); stopPlayVedio=(Button)findViewById(R.id.button4); pausePlayVedio=(Button)findViewById(R.id.button5); } }
    转载请注明原文地址: https://ju.6miu.com/read-22103.html

    最新回复(0)