要实现一个万能播放器需要使用多媒体库,可以使用Android自带的MediaPlayer类以及ExoPlayer库。以下是一个简单的示例代码:
- 在XML布局文件中添加一个SurfaceView和几个按钮:
<SurfaceView
android:id="@+id/surfaceView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/buttonPlay"
android:text="Play"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/buttonPause"
android:text="Pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/buttonStop"
android:text="Stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
- 在Java代码中实现MediaPlayer或 ExoPlayer 播放多种格式的视频文件。
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
private MediaPlayer mediaPlayer;
private SurfaceHolder surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button buttonPlay = findViewById(R.id.buttonPlay);
Button buttonPause = findViewById(R.id.buttonPause);
Button buttonStop = findViewById(R.id.buttonStop);
SurfaceView surfaceView = findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);
buttonPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
mediaPlayer.setDataSource("http://example.com/myvideo.mp4");
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.start();
}
});
} catch (IOException e) {
e.printStackTrace();
}
}
});
buttonPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}
});
buttonStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null;
}
}
});
}
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
mediaPlayer = new MediaPlayer();
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
}
这个示例代码演示了如何使用MediaPlayer类播放MP4格式视频。如果需要支持其他格式,则需要使用相应的库或解码器。ExoPlayer是一个开源库,可以播放多种格式的媒体文件,包括MP3,MP4和HLS等格式。