你的位置:首页 > 操作系统

[操作系统]手机影音4


1.MediaPlayer和VideoView介绍

Android 系统中提供开发者开发多媒体应用(音视频方面)

一,MediaPlayer,

解码的是底层,MediaPlayer负责和底层打交道,封装了很多方法 start,pause,stop ,播放视频的类

这个MediaPlayer可以播放本地 和网络 的音视频 播放网络资源的时候,要联网权限

1,执行流程    

2.视频支持的格式 mp4,3gp,.m3u8 直接用pc的.mp4文件

二,VideoView

显示视频,继承SurfaceView类,实现MediaPlayerControl接口,封装了MediaPlayer start,pause,stop,本质上是调用MediaPlayer

SurfaceView 视频的原理和小故事

SurfaceView默认使用双缓冲技术的,它支持在子线程中绘制图像,这样就不会阻塞主线程了,所以它更适合于游戏和视频播放器的开发

实现MediaPlayerControl接口,便于控制面板调用VideoView的方法

 public interface MediaPlayerControl {    void  start();    void  pause();    int   getDuration();    int   getCurrentPosition();    void  seekTo(int pos);    boolean isPlaying();    int   getBufferPercentage();    boolean canPause();    boolean canSeekBackward();    boolean canSeekForward();    /**     * Get the audio session id for the player used by this VideoView. This can be used to     * apply audio effects to the audio track of a video.     * @return The audio session, or 0 if there was an error.     */    int   getAudioSessionId();  }

  videoview.setMediaController(new MediaController(this));

 

2.播放器控制栏顶部

 

 1 <LinearLayout 2   android:id="@+id/ll_top" 3   android:layout_width="match_parent" 4   android:layout_height="wrap_content" 5   android:orientation="vertical"> 6  7   <LinearLayout 8     android:layout_width="match_parent" 9     android:layout_height="wrap_content"10     android:background="@drawable/bg_player_status"11     android:gravity="center_vertical"12     android:orientation="horizontal">13     <TextView14       android:id="@+id/tv_name"15       android:layout_width="wrap_content"16       android:layout_height="wrap_content"17       android:layout_marginLeft="8dp"18       android:layout_weight="1"19       android:text="视频名称"20       android:textColor="#ffffff" />21 22     <ImageView23       android:id="@+id/iv_battery"24       android:layout_width="wrap_content"25       android:layout_height="wrap_content"26       android:layout_marginRight="8dp"27       android:src="@drawable/ic_battery_10" />28 29     <TextView30       android:id="@+id/tv_system_time"31       android:layout_width="wrap_content"32       android:layout_height="wrap_content"33       android:layout_marginLeft="8dp"34       android:layout_marginRight="8dp"35       android:text="12:00"36       android:textColor="#ffffff" />37   </LinearLayout>38 39   <LinearLayout40     android:layout_width="match_parent"41     android:layout_height="wrap_content"42     android:background="@drawable/bg_player_top_control"43     android:gravity="center_vertical"44     android:orientation="horizontal">45     <Button46       android:id="@+id/btn_voice"47       android:layout_width="wrap_content"48       android:layout_height="wrap_content"49       android:background="@drawable/btn_voice_selector" />50 51     <SeekBar52       android:id="@+id/seekbar_voice"53       android:layout_width="match_parent"54       android:layout_height="wrap_content"55       android:layout_weight="1"56       android:maxHeight="6dp"57       android:minHeight="6dp"58       android:progressDrawable="@drawable/progress_horizontal"59       android:thumb="@drawable/progress_thumb" />60 61     <Button62       android:id="@+id/btn_swich_player"63       android:layout_width="wrap_content"64       android:layout_height="wrap_content"65       android:background="@drawable/btn_swich_player_selector" />66   </LinearLayout>67 68 </LinearLayout>

View Code

 

3.播放器控制栏底部

 

 1 <LinearLayout 2   android:id="@+id/ll_bottom" 3   android:layout_width="match_parent" 4   android:layout_height="wrap_content" 5   android:layout_alignParentBottom="true" 6   android:orientation="vertical"> 7  8   <LinearLayout 9     android:layout_width="match_parent"10     android:layout_height="wrap_content"11     android:background="@drawable/bg_player_bottom_seekbar"12     android:gravity="center_vertical"13     android:orientation="horizontal">14 15     <TextView16       android:id="@+id/tv_current_time"17       android:layout_width="wrap_content"18       android:layout_height="wrap_content"19       android:layout_marginLeft="8dp"20       android:text="0:00"21       android:textColor="#ffffff" />22 23     <SeekBar24       android:id="@+id/seekbar_video"25       android:layout_width="match_parent"26       android:layout_height="wrap_content"27       android:layout_marginLeft="8dp"28       android:layout_marginRight="8dp"29       android:layout_weight="1"30       android:maxHeight="6dp"31       android:minHeight="6dp"32       android:progressDrawable="@drawable/progress_horizontal"33       android:thumb="@drawable/progress_thumb" />34 35     <TextView36       android:id="@+id/tv_duration"37       android:layout_width="wrap_content"38       android:layout_height="wrap_content"39       android:layout_marginRight="8dp"40       android:text="20:00"41       android:textColor="#ffffff" />42 43   </LinearLayout>44 45 46   <LinearLayout47     android:layout_width="match_parent"48     android:layout_height="wrap_content"49     android:background="@drawable/bg_player_bottom_control"50     android:gravity="center_vertical"51     android:orientation="horizontal">52 53     <Button54       android:id="@+id/btn_exit"55       android:layout_width="wrap_content"56       android:layout_height="wrap_content"57       android:layout_weight="1"58       android:background="@drawable/btn_exit_selector" />59 60     <Button61       android:id="@+id/btn_video_pre"62       android:layout_width="wrap_content"63       android:layout_height="wrap_content"64       android:layout_weight="1"65       android:background="@drawable/btn_video_pre_selector" />66 67     <Button68       android:id="@+id/btn_video_start_pause"69       android:layout_width="wrap_content"70       android:layout_height="wrap_content"71       android:layout_weight="1"72       android:background="@drawable/btn_video_pause_selector" />73 74     <Button75       android:id="@+id/btn_video_next"76       android:layout_width="wrap_content"77       android:layout_height="wrap_content"78       android:layout_weight="1"79       android:background="@drawable/btn_video_next_selector" />80 81     <Button82       android:id="@+id/btn_video_siwch_screen"83       android:layout_width="wrap_content"84       android:layout_height="wrap_content"85       android:layout_weight="1"86       android:background="@drawable/btn_video_siwch_screen_full_selector" />87   </LinearLayout>88 89 </LinearLayout>

View Code

 

4.视频seekBar进度更新

1.视频的总时长和SeekBar的setMaxt(总时长); 注意:准备好了的回调后

2.实例化Handler,每秒得到当前视频播放进度,SeekBar.setProgress(当前进度);

int duration = videoview.getDuration();//把毫秒转换成 12:22.40tv_duration.setText(utils.stringForTime(duration));     //设置视频的总长度为video_seekBar的多少等分video_seekBar.setMax(duration);     //发消息开始更新handler.sendEmptyMessage(PROGRESS);

 

5.实现视频的拖动

video_seekBar.setOnSeekBarChangeListener(newOnSeekBarChangeListener() {   //手指停止滑动的时候回调  @Override  public void onStopTrackingTouch(SeekBar seekBar) {   }   //手指刚开始滑动的时候回调  @Override  public void onStartTrackingTouch(SeekBar seekBar) {   }   //手指滑动状态发送变化的时候回调  @Override  public void onProgressChanged(SeekBar seekBar, int progress,booleanfromUser) {	 if(fromUser){//     seekBar.setProgress(progress);		videoview.seekTo(progress);	 }   }  });