找过好过视频播放器的例子,但是都特么给一半代码,不给一半代码!
还有的给个apk例句?
我也是醉了!把自己以前的笔记发一下吧,
虽然有缺陷:
1,横屏切换的时候,线程会死掉,不能激活...
2,停止的时候,线程释放了资源,但是还是有一张图片在
3,待机状态,还有有声音播放的。
现在还没有解决,希望公布代码后,有人提出改进建议...
暂时实现了:
1,进度条绑定播放器的进度
2,三个按钮:播放,暂停,停止
3,视频从SD卡读取,就在根目录,当前是hand.mp4(其他格式嘛?应该不支持吧....)
这是布局:
播放:
暂停:
TestVedioActivity.java
package com.open_open.android_ch14_2;
import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
/ *视频播放器素材:1280x 720,来自sd卡
表面:原始图形缓冲区,
Surface是管理显示内容的数据,储存数据的交换
* /
public class TestVedioActivity extends Activity {
私有SurfaceView sfview; //在Surface的基础上,显示视频
私人SurfaceHolder夹具; //在Surface的基础上,控制尺寸大小和格式
private SeekBar sb; //进度条
private MediaPlayer mp; //媒体播放器
@覆盖
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_vedio);
sb =(SeekBar)findViewById(R.id.sb);
sfview =(SurfaceView)findViewById(R.id.sfView);
holder = sfview.getHolder();
sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@覆盖
public void onStopTrackingTouch(SeekBar seekBar){
if(mp!= null)
mp.seekTo(seekBar.getProgress());
}}
@覆盖
public void onStartTrackingTouch(SeekBar seekBar){
}}
@覆盖
public void onProgressChanged(SeekBar seekBar,int progress,boolean fromUser){
}}
});
}}
public void doPlay(View view){
if(mp!= null)
返回;
mp = new MediaPlayer();
String path = Environment.getExternalStorageDirectory()。getAbsolutePath()+“/ hand.mp4”;
尝试{
mp.setDataSource(path);
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDisplay(holder);
mp.prepare();
sb.setMax(mp.getDuration());
mp.start();
//控制进度条
新线程(新Runnable(){
@覆盖
public void run(){
while(mp.getCurrentPosition()<= sb.getMax()){
sb.setProgress(mp.getCurrentPosition()); //设置进度条当前进度
SystemClock.sleep(200);
}}
}}
});
} catch(Exception e){
e.printStackTrace();
}}
}}
public void doPause(View view){
if(mp!= null && mp.isPlaying()){
mp.pause(); //暂停
((Button)view).setText(“继续播放”);
} else if(mp!= null && mp.isPlaying()== false){
mp.start(); //播放
((Button)view).setText(“暂停”);
}}
}}
public void doStop(View view){
if(mp!= null){
sb.setProgress(0);
mp.stop();
mp.release();
mp = null;
}}
}}
}}
<?xml version =“1.0”encoding =“utf-8”?>
<LinearLayout xmlns:android =“http://schemas.android.com/apk/res/android”
xmlns:tools =“http://schemas.android.com/tools”
android:layout_width =“match_parent”
android:layout_height =“match_parent”
android:orientation =“vertical”>
<SeekBar
android:id =“@ + id / sb”
android:layout_width =“match_parent”
android:layout_height =“wrap_content”
/>
<LinearLayout android:layout_width =“match_parent”
android:layout_height =“wrap_content”
android:orientation =“horizo??ntal”>
<按钮
android:layout_width =“wrap_content”
android:layout_height =“wrap_content”
android:text =“播放”
android:onClick =“doPlay”
/>
<按钮
android:layout_width =“wrap_content”
android:layout_height =“wrap_content”
android:text =“暂停”
android:onClick =“doPause”
/>
<按钮
android:layout_width =“wrap_content”
android:layout_height =“wrap_content”
android:text =“停止”
android:onClick =“doStop”
/>
</ LinearLayout>
<SurfaceView
android:id =“@ + id / sfView”
android:layout_width =“match_parent”
android:layout_height =“300sp”
/>
</ LinearLayout>
【Android SurfaceView】视频播放器 简单例子
原文:http://blog.csdn.net/ssh159/article/details/56277376