Android进阶:十一、视频播放器初体验,android开发入门pdf
编译成功之后我们就可以在代码里面用它了,这个也很简单一般不会出什么问题。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相关推荐
- android系统更新视频播放器,基于的Android系统地视频播放器.doc
本科毕业设计(论文) 基于Android系统的视频播放器Through the implementation of video player based on Android platform 致 谢 ...
- android微信网页视频播放器代码下载,android微信中的录音功能 demo
微信中的录音功能 demo 资源下载此资源下载价格为3D币,请先登录 资源文件列表 weixin_Record/res/values-v11/styles.xml , 324 weixin_Recor ...
- 开源安卓Android流媒体音视频播放器实现声音自动停止、恢复、一键静音功能源码
本文转自EasyDarwin团队John的博客:http://blog.csdn.net/jyt0551/article/details/60802145 我们在开发安卓Android流媒体音视频播放 ...
- android 实现视频播放功能,Android项目实现视频播放器
本文实例为大家分享了Android项目实现视频播放器的具体代码,供大家参考,具体内容如下 VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器. ①在activity_main.x ...
- Android学习6——视频播放器
一.学习目标 1.综合应用课程知识. 2.掌握 App 开发流程及相关工具. 3.设计一个基于 Android 平台的简单视频播放器. 二.环境 1.JDK-15.0.2 以上 2.Android S ...
- 适用于Android的最佳视频播放器
If you have local videos stored on your Android phone, there's no shortage of ways to give them a wa ...
- android视频播放器sdk对比,Android项目之android SDK视频播放与vitamio视频播放
尊重原创,转载请注明:From zsml2016(http://blog.csdn.net/qq_29269233)Power byzsml2016侵权必究! 前言: 今天我想给大家分享Android ...
- android ios 传视频播放器,推荐用于iOS / Android全面格式的视频播放器|手机最强大的播放器...
几天前,一个朋友以ts格式下载了一些高清电视剧,但是无法在iPad上播放,因此我想在计算机上将其转换为MP4格式. 花了时间和精力,结果并不令人满意. 事实上手机上的万能播放器,所有平台现在都具有支持 ...
- Android MediaPlayer本地视频播放器
该文章的目的是,让初学者能够快速掌握一个简单的本地视频播放器.该Demo中用到了SurfaceView.MediaPlayer. 实现效果图: <RelativeLayout xmlns:and ...
最新文章
- 国家集训队2009 书堆
- Android学习笔记(一) - 如果我们来设计Android
- 【Android工具】更新解放双眼听书软件,搜书神器
- 34、Power Query-中国式排名
- python大作业思路_python大作业
- .frm_.myd_myi转换为.sql导入mysql数据库_把.frm,.myd,myi转换为.sql导入数据库
- 这可能是大型复杂项目下数据流的最佳实践
- 添加phpiredis扩展的时候报错
- 你得学会并且学得会的Socket编程基础知识(转)
- 微软提高 Microsoft 365 的漏洞奖励
- 固定日期时间倒计时,倒计时不可点击,普通倒计时
- java枚举菜鸟教程_Java教程--枚举类型使用方法详细讲解
- 移动硬盘需要格式化才能打开如何解决?
- Android音视频开发之如何合并音频和视频文件?
- Linux以百万兆字节显示内存大小
- jsp如何跳转java_JSP的三种跳转方式
- 目测优衣库董事长只能听到赞扬的声音:3星|《经营者养成笔记》
- 利用MATLAB模拟排队论
- python爬取手机微信_Python爬取微信好友
- 战神引擎修改客户端app名字