本文实例为大家分享了android surfaceView实现播放视频的具体代码,供大家参考,具体内容如下
RelativeLayout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
<? xml version = "1.0" encoding = "utf-8" ?> < RelativeLayout 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" tools:context = ".MainActivity" > < com.example.examday11_4_1.surfaceview.MySurfaceView android:id = "@+id/sv" android:layout_width = "match_parent" android:layout_height = "250dp" /> < TextView android:id = "@+id/te_nowTiem" android:textColor = "#fff" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_alignBottom = "@id/sv" android:layout_marginLeft = "60dp" android:layout_marginBottom = "10dp" android:text = "00:00" /> < SeekBar android:id = "@+id/sb" android:layout_width = "200dp" android:layout_height = "wrap_content" android:layout_alignBottom = "@id/sv" android:layout_centerHorizontal = "true" android:layout_marginBottom = "10dp" /> < TextView android:id = "@+id/te_allTiem" android:textColor = "#fff" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_alignBottom = "@id/sv" android:layout_marginLeft = "320dp" android:layout_marginBottom = "10dp" android:text = "00:00" /> < Button android:id = "@+id/but_play" android:layout_width = "50dp" android:layout_height = "40dp" android:layout_alignBottom = "@+id/sv" android:layout_marginLeft = "10dp" android:text = "S/P" android:textSize = "10sp" /> </ RelativeLayout > |
mySurfaceView
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
package com.example.examday11_4_1.surfaceview; import android.content.Context; import android.media.MediaPlayer; import android.util.AttributeSet; import android.view.SurfaceHolder; import android.view.SurfaceView; import java.io.IOException; import java.text.SimpleDateFormat; public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { private SurfaceHolder surfaceHolder; private MediaPlayer mediaPlayer; public MySurfaceView(Context context) { super (context); } public MySurfaceView(Context context, AttributeSet attrs) { super (context, attrs); surfaceHolder = getHolder(); surfaceHolder.addCallback( this ); if (mediaPlayer == null ){ mediaPlayer = new MediaPlayer(); } } public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr) { super (context, attrs, defStyleAttr); } public MySurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super (context, attrs, defStyleAttr, defStyleRes); } public void setDataPath(String path){ mediaPlayer.reset(); try { mediaPlayer.setDataSource(path); mediaPlayer.prepareAsync(); mediaPlayer.setOnPreparedListener( new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer.start(); } }); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceCreated(SurfaceHolder holder) { mediaPlayer.setDisplay(surfaceHolder); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { if (mediaPlayer!= null ){ mediaPlayer.release(); mediaPlayer = null ; } } //暂停/开始播放 public void playOrNo(){ if (mediaPlayer!= null ){ if (mediaPlayer.isPlaying()){ mediaPlayer.pause(); } else { mediaPlayer.start(); } } } //拖动更新进度 public void seekTo( int progress){ if (mediaPlayer!= null ){ int duration = mediaPlayer.getDuration(); int current = progress * duration / 100 ; mediaPlayer.seekTo(current); } } //获取播放进度 public int getProgress(){ if (mediaPlayer!= null ){ int druation = mediaPlayer.getDuration(); int currentPosition = mediaPlayer.getCurrentPosition(); int progress = currentPosition * 100 / druation; return progress; } return 0 ; } //获取播放时长 public String getCurrentTime(){ if (mediaPlayer!= null ){ long currentPostion = mediaPlayer.getCurrentPosition(); SimpleDateFormat format = new SimpleDateFormat( "mm:ss" ); String f = format.format(currentPostion); return f+ "" ; } return "" ; } //获取时长 public String getDuration(){ if (mediaPlayer!= null ){ long duration = mediaPlayer.getDuration(); SimpleDateFormat format = new SimpleDateFormat( "mm:ss" ); return format.format(duration)+ "" ; } return "" ; } } |
MainActivity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
package com.example.examday11_4_1; import android.Manifest; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.Button; import android.widget.SeekBar; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import com.example.examday11_4_1.surfaceview.MySurfaceView; import java.util.Timer; import java.util.TimerTask; public class MainActivity extends AppCompatActivity { private MySurfaceView mySurfaceView; private TextView teNowTiem; private SeekBar sb; private TextView teAllTiem; private Button butPlay; private Timer timer; private Handler handler = new Handler(); private String path = "http://uvideo.spriteapp.cn/video/2019/0512/56488d0a-7465-11e9-b91b-1866daeb0df1_wpd.mp4" ; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ requestPermissions( new String[]{ Manifest.permission.READ_EXTERNAL_STORAGE }, 100 ); } initView(); initTimer(); } private void initTimer() { timer = new Timer(); timer.schedule( new TimerTask() { @Override public void run() { final String currentTime = mySurfaceView.getCurrentTime(); final String duration = mySurfaceView.getDuration(); final int progress = mySurfaceView.getProgress(); handler.post( new Runnable() { @Override public void run() { sb.setProgress(progress); //设置进度条 teAllTiem.setText(duration); //设置总时长 teNowTiem.setText(currentTime); //设置当前时长 } }); } }, 0 , 100 ); } private void initView() { mySurfaceView = (MySurfaceView) findViewById(R.id.sv); mySurfaceView.setDataPath(path); teNowTiem = (TextView) findViewById(R.id.te_nowTiem); sb = (SeekBar) findViewById(R.id.sb); teAllTiem = (TextView) findViewById(R.id.te_allTiem); butPlay = (Button) findViewById(R.id.but_play); //设置拖动 sb.setOnSeekBarChangeListener( new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { if (fromUser){ mySurfaceView.seekTo(progress); //视频播放拖动 } } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onStopTrackingTouch(SeekBar seekBar) { } }); //暂停播放 butPlay.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { mySurfaceView.playOrNo(); } }); } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_45697390/article/details/105836280