images/loading.gif' data-original="http://images2015.cnblogs.com/blog/1044471/201611/1044471-20161113191201170-2098299350.png" >
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='/images/loading.gif' data-original="@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); } } });
原标题:手机影音4
关键词: