上一篇文章我们主要讲了视频播放器开发之前需要准备的一直个知识,TextureView,用于对图像流的处理。这篇文章开始构建一个基础的视频播放器。
一、准备工作
在之前的文章已经说过了,播放器也是一个view,我们要在这个view上播放视频流。所以我们要自定义一个简单的viewgroup,比如继承FrameLayout。还出就是布局简单,其他控件可以往上面添加。大家见过的视频播放器的控制器都是放在视频的上方的。这样就是用FrameLayout布局是最好的。
class SmallVideoPlayer extends FrameLayout
二、初始化TextureView
这是一个用于承载显示‘数据流’的View,它不会创建新的窗口来显示内容。它是将内容流直接投放到View中,并且可以和其它普通View一样进行移动,旋转,缩放,动画等变化。
TextureView初始化方式如下,并且我们这个播放器View要实现其监听方法:
class SmallVideoPlayer extends FrameLayout implements TextureView.SurfaceTextureListener
private void initTextureView() {
if (mTextureView == null) {
mTextureView = new TextureView(mContext);
mTextureView.setSurfaceTextureListener(this);
}
}
然后我们把这个TextureView添加到我们的视频播放器的view上,并且设置跟视频播放器View一样大小:
private void addTextureView() {
removeView(mTextureView);
LayoutParams params = new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
Gravity.CENTER);
addView(mTextureView, 0, params);
}
三、初始化播放器内核
一个公司想要实现机的播放器内核需要一定的成本,所以大部分公司都选择使用第三方的内核,比如bilibili开源的ijkplayer。ijkplayer是一个基于FFmpeg的轻量级Android/iOS视频播放器。FFmpeg的是全球领先的多媒体框架,能够解码,编码,转码,复用,解复用,流,过滤器和播放大部分的视频格式。它提供了录制、转换以及流化音视频的完整解决方案。这里我们也用它。
在项目module的gradle里面添加依赖:
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.3'
implementation 'tv.danmaku