编译成功之后我们就可以在代码里面用它了,这个也很简单一般不会出什么问题。ijplayer里面提供了一个IMediaPlayer,我们初始化它即可:

private void initMediaPlayer() {
if (mMediaPlayer == null) {
mMediaPlayer = new IjkMediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
}

准备工作都做好了,我们要在什么时候开始播放呢?当然是TextureView准备好之后就可以播放了,TextuerView的draw方法中会调用TextureLayer layer = getTextureLayer();方法,而getTextureLayer()这个方法中当surface创建成功之后会执行我们实现的接口方法:

if (mListener != null && createNewSurface) {
mListener.onSurfaceTextureAvailable(mSurface, getWidth(), getHeight());
}

从上面代码可以看出当我们设置了mListener,并且创建surface成功之后会为我们回调onSurfaceTextureAvailable方法,并传递给我们一个mSurface及其宽高。那我们在这个方法里播放视频就可以了:

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
if (mSurfaceTexture == null) {
mSurfaceTexture = surface;
openMediaPlayer();
} else {
mTextureView.setSurfaceTexture(mSurfaceTexture);
}
}

我们自己创建一个SurfaceTexture对象存储TextureView给我传递的SurfaceTexture对象,然后开启视频播放。如果你自己实现了SurfaceTexture,你也可以用你自己的。

private void openMediaPlayer() {
// 屏幕常亮
setKeepScreenOn(true);
// 设置dataSource
try {
mMediaPlayer.setDataSource(mContext.getApplicationContext(), Uri.parse(mUrl));
if (mSurface == null) {
mSurface = new Surface(mSurfaceTexture);
}
mMediaPlayer.setSurface(mSurface);
mMediaPlayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}

使用ijplayer播放视频很简单,只要为其设置数据源即可。但是为了能让视频显示出来,也就是能在view上播放出来,我们需要使用Surface。
创建对象private Surface mSurface;,传入刚才存储的SurfaceTexture对象:mSurface = new Surface(mSurfaceTexture);,然后把这个surface对象传递给播放器即可,最后使用播放器开始播放,注意这个方法是同步的。
完成以上步骤,简单的视频播放器就可以完成了。
代码:
我们把代码进行整理如下:
播放器

public class SmallVideoPlayer extends FrameLayout implements TextureView.SurfaceTextureListener {
private TextureView mTextureView;
private SurfaceTexture mSurfaceTexture;
private Surface mSurface;
private AudioManager mAudioManager;
private IMediaPlayer mMediaPlayer;
private Context mContext;
private String mUrl;

public SmallVideoPlayer(@NonNull Context context) {
this(context, null);
}

public SmallVideoPlayer(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, -1);
}

public SmallVideoPlayer(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.mContext = context;
}

public void setUp(String url) {
mUrl = url;

}

public void start() {
initAudioManager();
initMediaPlayer();
initTextureView();
addTextureView();
}

private void initAudioManager() {
if (mAudioManager == null) {
mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mAudioManager.requestAudioFocus(new AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN).build());
} else {
mAudioManager.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
}
}
}

private void initMediaPlayer() {
if (mMediaPlayer == null) {
mMediaPlayer = new IjkMediaPlayer();
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}
}

private void initTextureView() {
if (mTextureView == null) {
mTextureView = new TextureView(mContext);
mTextureView.setSurfaceTextureListener(this);
}
}

private void addTextureView() {
removeView(mTextureView);
LayoutParams params = new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
Gravity.CENTER);
addView(mTextureView, 0, params);
}

@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
if (mSurfaceTexture == null) {
mSurfaceTexture = surface;
openMediaPlayer();
} else {
mTextureView.setSurfaceTexture(mSurfaceTexture);
}
}

private void openMediaPlayer() {
// 屏幕常亮
setKeepScreenOn(true);

ceTexture);
}
}

private void openMediaPlayer() {
// 屏幕常亮
setKeepScreenOn(true);

[外链图片转存中…(img-mUWaUbvE-1643527455412)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

Android进阶:十一、视频播放器初体验,android开发入门pdf相关推荐

  1. android系统更新视频播放器,基于的Android系统地视频播放器.doc

    本科毕业设计(论文) 基于Android系统的视频播放器Through the implementation of video player based on Android platform 致 谢 ...

  2. android微信网页视频播放器代码下载,android微信中的录音功能 demo

    微信中的录音功能 demo 资源下载此资源下载价格为3D币,请先登录 资源文件列表 weixin_Record/res/values-v11/styles.xml , 324 weixin_Recor ...

  3. 开源安卓Android流媒体音视频播放器实现声音自动停止、恢复、一键静音功能源码

    本文转自EasyDarwin团队John的博客:http://blog.csdn.net/jyt0551/article/details/60802145 我们在开发安卓Android流媒体音视频播放 ...

  4. android 实现视频播放功能,Android项目实现视频播放器

    本文实例为大家分享了Android项目实现视频播放器的具体代码,供大家参考,具体内容如下 VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器. ①在activity_main.x ...

  5. Android学习6——视频播放器

    一.学习目标 1.综合应用课程知识. 2.掌握 App 开发流程及相关工具. 3.设计一个基于 Android 平台的简单视频播放器. 二.环境 1.JDK-15.0.2 以上 2.Android S ...

  6. 适用于Android的最佳视频播放器

    If you have local videos stored on your Android phone, there's no shortage of ways to give them a wa ...

  7. android视频播放器sdk对比,Android项目之android SDK视频播放与vitamio视频播放

    尊重原创,转载请注明:From zsml2016(http://blog.csdn.net/qq_29269233)Power byzsml2016侵权必究! 前言: 今天我想给大家分享Android ...

  8. android ios 传视频播放器,推荐用于iOS / Android全面格式的视频播放器|手机最强大的播放器...

    几天前,一个朋友以ts格式下载了一些高清电视剧,但是无法在iPad上播放,因此我想在计算机上将其转换为MP4格式. 花了时间和精力,结果并不令人满意. 事实上手机上的万能播放器,所有平台现在都具有支持 ...

  9. Android MediaPlayer本地视频播放器

    该文章的目的是,让初学者能够快速掌握一个简单的本地视频播放器.该Demo中用到了SurfaceView.MediaPlayer. 实现效果图: <RelativeLayout xmlns:and ...

最新文章

  1. 国家集训队2009 书堆
  2. Android学习笔记(一) - 如果我们来设计Android
  3. 【Android工具】更新解放双眼听书软件,搜书神器
  4. 34、Power Query-中国式排名
  5. python大作业思路_python大作业
  6. .frm_.myd_myi转换为.sql导入mysql数据库_把.frm,.myd,myi转换为.sql导入数据库
  7. 这可能是大型复杂项目下数据流的最佳实践
  8. 添加phpiredis扩展的时候报错
  9. 你得学会并且学得会的Socket编程基础知识(转)
  10. 微软提高 Microsoft 365 的漏洞奖励
  11. 固定日期时间倒计时,倒计时不可点击,普通倒计时
  12. java枚举菜鸟教程_Java教程--枚举类型使用方法详细讲解
  13. 移动硬盘需要格式化才能打开如何解决?
  14. Android音视频开发之如何合并音频和视频文件?
  15. Linux以百万兆字节显示内存大小
  16. jsp如何跳转java_JSP的三种跳转方式
  17. 目测优衣库董事长只能听到赞扬的声音:3星|《经营者养成笔记》
  18. 利用MATLAB模拟排队论
  19. python爬取手机微信_Python爬取微信好友
  20. 战神引擎修改客户端app名字

热门文章

  1. 百度电商“另谋出路”
  2. 银行账户管理系统c语言链表,课程设计银行储蓄管理系统Word版
  3. vue设置路由登录权限
  4. 时间序列预测12:用电量预测 02 朴素模型多步预测建模
  5. 人工智能(4):模型评估
  6. 教你Win11如何运行安卓app
  7. 软考归来~分享一下历程和心得体会
  8. C# Textbox屏蔽中文输入法
  9. java敏感词、屏蔽词处理(ToolGood.Words)
  10. IO的端口映射和内存映射 (Port mapped I/O 和 Memory mapped I/O说明)