使用IjkMediaPlayer结合surface
2017-12-20 11:18
295 查看
使用IjkMediaPlayer集合surfaceView播放视频,自己写的播放和暂停按钮
导入依赖
/*ijkPlayer*/
// required, enough for most devices.
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.7.8.1'
compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.7.8.1'
// Other ABIs: optional
compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.7.8.1'
compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.7.8.1'
// ExoPlayer as IMediaPlayer: optional, experimental
compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.7.8.1'
清单文件中加入权限
<uses-permission android:name="android.permission.INTERNET" />布局文件中
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3">
<SurfaceView
android:id="@+id/viedo_surface"
android:layout_width="match_parent"
android:layout_height="300dp" />
<Button
android:id="@+id/start"
android:layout_alignBottom="@+id/viedo_surface"
android:text="播放"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_alignParentRight="true"
android:id="@+id/pause"
android:layout_alignBottom="@+id/viedo_surface"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>代码
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
@BindView(R.id.viedo_surface)
SurfaceView mSurfaceView;
@BindView(R.id.start)
Button start;
@BindView(R.id.pause)
Button pause;
private IjkMediaPlayer mPlayer;
boolean isPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
isPlay = false;
pause.setEnabled(false);
mSurfaceView.getHolder().addCallback(this);
initPlayer();
}
private void initPlayer() {
IjkMediaPlayer.loadLibrariesOnce(null);
IjkMediaPlayer.native_profileBegin("libijkplayer.so");
mPlayer = new IjkMediaPlayer();
/* try {
//http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4
mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");
} catch (IOException e) {
e.printStackTrace();
}
mPlayer.prepareAsync();
mPlayer.start();*/
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mPlayer.setDisplay(holder);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
@OnClick({R.id.start, R.id.pause})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.start:
mPlayer.reset();
try {
mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");//读取视频文件地址
mPlayer.prepareAsync(); //预加载视频
mPlayer.setDisplay(mSurfaceView.getHolder()); //将视频画面输出到surface上
mPlayer.start(); //开始播放
pause.setText("暂停"); //pause此时为暂停
pause.setEnabled(true); //pause按钮此时可用
isPlay = true;
}catch (IOException e){
Toast.makeText(MainActivity.this,"发生错误",Toast.LENGTH_LONG).show();
}
break;
case R.id.pause://点击暂停时候 如果正在播放 就显示继续按钮
if (isPlay == true) {
pause.setText("继续");
mPlayer.pause();
isPlay = false;
} else {
mPlayer.start();
pause.setText("暂停");
isPlay = true;
}
break;
}
}
}
导入依赖
/*ijkPlayer*/
// required, enough for most devices.
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.7.8.1'
compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.7.8.1'
// Other ABIs: optional
compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.7.8.1'
compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.7.8.1'
// ExoPlayer as IMediaPlayer: optional, experimental
compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.7.8.1'
清单文件中加入权限
<uses-permission android:name="android.permission.INTERNET" />布局文件中
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3">
<SurfaceView
android:id="@+id/viedo_surface"
android:layout_width="match_parent"
android:layout_height="300dp" />
<Button
android:id="@+id/start"
android:layout_alignBottom="@+id/viedo_surface"
android:text="播放"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:layout_alignParentRight="true"
android:id="@+id/pause"
android:layout_alignBottom="@+id/viedo_surface"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>代码
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
@BindView(R.id.viedo_surface)
SurfaceView mSurfaceView;
@BindView(R.id.start)
Button start;
@BindView(R.id.pause)
Button pause;
private IjkMediaPlayer mPlayer;
boolean isPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
isPlay = false;
pause.setEnabled(false);
mSurfaceView.getHolder().addCallback(this);
initPlayer();
}
private void initPlayer() {
IjkMediaPlayer.loadLibrariesOnce(null);
IjkMediaPlayer.native_profileBegin("libijkplayer.so");
mPlayer = new IjkMediaPlayer();
/* try {
//http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4
mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");
} catch (IOException e) {
e.printStackTrace();
}
mPlayer.prepareAsync();
mPlayer.start();*/
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
mPlayer.setDisplay(holder);
}
@Override
public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {
}
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
}
@OnClick({R.id.start, R.id.pause})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.start:
mPlayer.reset();
try {
mPlayer.setDataSource("http://ips.ifeng.com/video19.ifeng.com/video09/2014/06/16/1989823-102-086-0009.mp4");//读取视频文件地址
mPlayer.prepareAsync(); //预加载视频
mPlayer.setDisplay(mSurfaceView.getHolder()); //将视频画面输出到surface上
mPlayer.start(); //开始播放
pause.setText("暂停"); //pause此时为暂停
pause.setEnabled(true); //pause按钮此时可用
isPlay = true;
}catch (IOException e){
Toast.makeText(MainActivity.this,"发生错误",Toast.LENGTH_LONG).show();
}
break;
case R.id.pause://点击暂停时候 如果正在播放 就显示继续按钮
if (isPlay == true) {
pause.setText("继续");
mPlayer.pause();
isPlay = false;
} else {
mPlayer.start();
pause.setText("暂停");
isPlay = true;
}
break;
}
}
}
相关文章推荐
- 使用IjkMediaPlayer结合surface
- 使用IjkMediaPlayer结合surfaceView播放视频,自己写的播放和暂停按钮(四)
- Android 使用 MediaPlayer + SurfaceView 播放视频
- Android中使用SurfaceView+MediaPlayer+自定义的MediaController实现自定义的视屏播放器
- 使用mediaplayer + surfaceview来播放视频
- Android视频播放框架Vitamio集成及使用MediaPlayer+SurfaceView、VideoView+MediaController实现播放网络视频
- android下面使用SurfaceView+ mediaPlayer播放视频
- Android中使用surfaceview+MediaPlayer播放视频
- 使用SurfaceView+MediaPlayer+SeekBar实现视频播放
- 使用SurfaceView+MediaPlayer+SeekBar实现视屏播放器
- android使用MediaPlayer+Surface实现简单视频播放器
- 使用mediaplayer + surfaceview来播放视频
- android中使用surfaceview+MediaPlayer播放视频
- 使用SurfaceView+MediaPlayer视频播放
- AxMediaPlayer控件使用方法(非AxWindowsMediaPlayer控件)
- android视频播放MediaPlayer+SurfaceView
- Window 下 Qt5 使用QMediaplayer 进行视频播放 流播放问题
- Android MediaPlayer与Http Proxy结合之基础篇
- Swift - 使用ijkplayer框架播放直播视频2——(RTSP视频流播放)
- VLC media player - 使用笔记 x86