Android SurfaceView视频播放器
来源:互联网 发布:cmd修复网络连接 编辑:程序博客网 时间:2024/05/24 05:03
视频播放器其实本质上与音乐播放器大同小异,说到底本质上就是音频源的不同,所以我就不像上一篇将音乐播放器那样详细了,只用手机内存卡中的视频做示范。
音乐播放器博客地址http://blog.csdn.net/zhangkaidsy/article/details/75571038
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.android27_zhangkai_playvideo.MainActivity"> <SurfaceView android:layout_width="match_parent" android:layout_height="400dp" android:id="@+id/sv_main_surface" /> <SeekBar android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/sb_main_bar" /> <ImageButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@android:drawable/ic_media_play" android:onClick="playOrPause" /></LinearLayout>
MainActivity.java
package com.example.android27_zhangkai_playvideo;import android.media.AudioManager;import android.media.MediaPlayer;import android.net.Uri;import android.os.Environment;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.SurfaceView;import android.view.View;import android.widget.ImageButton;import android.widget.SeekBar;import java.io.IOException;public class MainActivity extends AppCompatActivity { private MediaPlayer mediaPlayer; private SeekBar sb_main_bar; private SurfaceView sv_main_surface; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); sb_main_bar = (SeekBar) findViewById(R.id.sb_main_bar); sv_main_surface = (SurfaceView) findViewById(R.id.sv_main_surface); //给进度条设置滑动监听 sb_main_bar.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 currentPosition=seekBar.getProgress(); //跳转到某个位置进行播放 mediaPlayer.seekTo(currentPosition); } }); } public void playOrPause(View view){ final ImageButton imageButton= (ImageButton) view; //实例化MediaPlayer if(mediaPlayer==null){ if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ String sdPath=Environment.getExternalStorageDirectory().getAbsolutePath(); mediaPlayer=new MediaPlayer(); //设置音频流的类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置音源 try { mediaPlayer.setDataSource(this, Uri.parse("file://"+sdPath+"/dcim/camera/video_20161013_233717.mp4")); mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } //将画面展示到 SurfaceView上 mediaPlayer.setDisplay(sv_main_surface.getHolder()); mediaPlayer.start(); //暂停图标 imageButton.setImageResource(android.R.drawable.ic_media_pause); //获取音乐的播放时间 int time=mediaPlayer.getDuration(); //设置进度条的最大值 为 视频的播放时间 sb_main_bar.setMax(time); 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_bar.getProgress()<sb_main_bar.getMax()){ //获取音乐当前的播放位置 int currentPosition=mediaPlayer.getCurrentPosition(); sb_main_bar.setProgress(currentPosition); } } }}
上述代码就可以实现视频播放器了。
除了上述的方式,还有一种更为简单的方式:
那就是使用VideoView标签
activity_video.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <VideoView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/vv_video" /></LinearLayout>
VedioActivity.java
package com.zking.administrator.g160628_android28_playvideo;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.widget.MediaController;import android.widget.VideoView;public class VideoActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video); VideoView vv_video= (VideoView) findViewById(R.id.vv_video); vv_video.setVideoURI(Uri.parse("file://mnt/sdcard/dcim/camera/VID_20170715_140439.mp4")); MediaController mediaController=new MediaController(this); mediaController.setMediaPlayer(vv_video); vv_video.setMediaController(mediaController); }}
上述代码也可实现视频播放
阅读全文
1 0
- android SurfaceView 视频播放器
- Android SurfaceView视频播放器
- android surfaceview 播放视频
- Android SurfaceView 播放视频
- Android--SurfaceView播放视频
- Android中使用SurfaceView视频播放器
- Android中使用SurfaceView视频播放器
- Android SurfaceView + MediaPlayer实现视频播放器
- Android中使用SurfaceView视频播放器
- android MediaPlayer SurfaceView 网络视频播放器
- android surfaceView+mediaPlayer 自定义视频播放器
- 【Android SurfaceView】视频播放器 简单例子
- Android-SurfaceView+VideoView视频播放器实例
- Android 视频播放器SurfaceView+Mediaplayer
- Android,SurfaceView播放视频源码
- Android SurfaceView播放视频源码
- Android SurfaceView播放视频源码
- android使用SurfaceView播放视频
- 转义字符(\*)
- ORA-12560: TNS: 协议适配器错误
- WebView明文存储密码风险描述及解决方案
- Python灰帽子笔记一
- 1054. The Dominant Color (20)
- Android SurfaceView视频播放器
- Android新手如何学习开发一款app?
- InputStream 、 InputStreamReader和BufferedReader
- python 爬虫下载图片
- 约数个数与具体值的求解
- Actitity与Fragment之间传递数据
- 【树状数组】AtCoder Regular Contest 075 E
- Python灰帽子笔记二
- FFMPEG在VS2010中的配置