android 编写简易视频播放器

简介:
+关注继续查看
public class VideoActivity extends Activity {
private static final String TAG = "VideoActivity";
private EditText filenameText;
private SurfaceView surfaceView;
private MediaPlayer mediaPlayer;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ButtonClickListener listener
= new ButtonClickListener();
ImageButton playButton
= (ImageButton) this.findViewById(R.id.play);
playButton.setOnClickListener(listener);
ImageButton pauseButton
= (ImageButton) this.findViewById(R.id.pause);
pauseButton.setOnClickListener(listener);
ImageButton resetButton
= (ImageButton) this.findViewById(R.id.reset);
resetButton.setOnClickListener(listener);
ImageButton stopButton
= (ImageButton) this.findViewById(R.id.stop);
stopButton.setOnClickListener(listener);
// 重点 这个地方需要设置回调函数 继承Callback 类实现三个方法
surfaceView.getHolder().addCallback(new myCallback());
filenameText
= (EditText) this.findViewById(R.id.filename);
surfaceView
= (SurfaceView) findViewById(R.id.surfaceView);
surfaceView.getHolder() .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// 设置这个大小
surfaceView.getHolder().setFixedSize(176, 144);
mediaPlayer
= new MediaPlayer();
}
private class myCallback implements android.view.SurfaceHolder.Callback {
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
}
}
// 当来电话的时候需要停掉播放业务
@Override
protected void onPause() {
if (mediaPlayer.isPlaying())
mediaPlayer.pause();
super.onPause();
}
@Override
protected void onResume() {
if (mediaPlayer.isPlaying())
mediaPlayer.pause();
super.onResume();
}
@Override
protected void onDestroy() {
if (mediaPlayer.isPlaying())
mediaPlayer.stop();
// 注意这个地方是释放
mediaPlayer.release();
super.onStop();
}
private class ButtonClickListener implements View.OnClickListener {
@Override
public void onClick(View v) {
try {
String filename
= filenameText.getText().toString();
switch (v.getId()) {
case R.id.play:
// 得到文件名称 重点代码
String filenames = filenameText.getText().toString();
// 第一步对给对象进行重设
mediaPlayer.reset();
// 设置流的类型 关键代码
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
// 设置数据来源
mediaPlayer.setDataSource("/sdcard/" + filenames); // 设置需要播放的视频
// 把视频输出到显示控件上 重点代码
mediaPlayer.setDisplay(surfaceView.getHolder());
// 播放时前需要缓冲一下
mediaPlayer.prepare();
mediaPlayer.start();
break;
case R.id.pause:
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
else {
mediaPlayer.start();
}
break;
case R.id.reset:
if (!mediaPlayer.isPlaying()) {
mediaPlayer.start();
}
// 跳回到起始的地方重新播放
mediaPlayer.seekTo(0);
break;
case R.id.stop:
if (mediaPlayer.isPlaying()) {
mediaPlayer.stop();
}
break;
}
}
catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}
}
复制代码



相关文章
|
20天前
|
编解码 网络协议 Android开发
Android平台RTMP|RTSP直播播放器功能进阶探讨
很多开发者在跟我聊天的时候,经常问我,为什么一个RTMP或RTSP播放器,你们需要设计那么多的接口,真的有必要吗?带着这样的疑惑,我们今天聊聊Android平台RTMP、RTSP播放器常规功能,如软硬解码设置、实时音量调节、实时快照、实时录像、视频view翻转和旋转、画面填充模式设定、解码后YUV、RGB数据回调等:
|
21天前
|
缓存 网络协议 开发工具
庖丁解牛之-Android平台RTSP|RTMP播放器设计
我们在做Android平台RTSP或者RTMP播放器开发的时候,需要注意的点非常多,以下,以大牛直播SDK(官方)的接口为例,大概介绍下相关接口设计:
|
21天前
|
前端开发 开发工具 Android开发
Android播放器之SurfaceView与GLSurfaceView
Surface的官方介绍:Handle onto a raw buffer that is being managed by the screen compositor,Surface是一个raw buffer的句柄,通过它在raw buffer上进行绘制,可以通过Surface获得一个Canvas。
|
21天前
|
开发工具 Android开发 iOS开发
Android、iOS平台RTMP/RTSP播放器实现实时音量调节
介绍移动端RTMP、RTSP播放器实时音量调节之前,我们之前也写过,为什么windows播放端加这样的接口,windows端播放器在多窗口大屏显示的场景下尤其需要,尽管我们老早就有了实时静音接口,相对实时静音来说,播放端实时音量调节粒度更细,从[0, 100],用户体验更好。
|
22天前
|
数据处理 开发工具 Android开发
Android平台RTMP/RTSP播放器开发系列之解码和绘制
本文主要抛砖引玉,粗略介绍下Android平台RTMP/RTSP播放器中解码和绘制相关的部分(Github)。
|
22天前
|
Android开发 开发者
Android播放器实现视频窗口实时放大缩小功能
很多开发者希望Android播放端实现视频窗口的放大缩小功能,为此,我们做了个简单的demo,通过播放端回调RGB数据,直接在上层view操作处理即可,Github:https://github.com/daniulive/SmarterStreaming
|
2月前
|
编解码 Ubuntu Java
Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器
Android流媒体开发之路三:基于NDK开发Android平台RTSP播放器
64 0
|
5月前
|
缓存 编解码 网络协议
从零开发一款Android RTMP播放器
当时在做一款游戏SDK,SDK主要提供了游戏画面声音采集、音视频编解码、直播推流、直播拉流播放等,SDK为游戏提供直播功能,播放也是采用了现成的ijkplayer播放器。但是SDK推广的时候遇到了问题,游戏厂家嫌弃SDK体积大(其实总共也就3Mb左右),我们需要一款体积小,性能高的播放器,由于开发成本的原因一直没有时间做,后面换工作期间,花了一个月时间把这款播放器开发出来,并开源了出来。oarplayer 是基于MediaCodec与srs-librtmp,完全不依赖ffmpeg,纯C语言实现的播放器。本文主要介绍这款播放器的实现思路。
127 0
|
6月前
|
Android开发
android实现万能播放器思路,flutter层实现调用
要实现一个Android万能播放器,可以播放MP4视频、Alpha格式以及Flutter通过通道调用,并使用外部纹理来实现整体流程,需要分为以下几个步骤
android实现万能播放器思路,flutter层实现调用
|
XML Android开发 数据格式
Android MediaPlayer音频播放器详解
Android MediaPlayer音频播放器详解
388 0
Android MediaPlayer音频播放器详解
相关产品
云迁移中心
推荐文章
更多