因为最近要做直播功能,故而花费了一些时间看了一下鼎鼎大名的B站开源视频框架--------ijkplayer。这个框架已经十分成熟,网上也能找到很多实例,查了两天的资料,对官方开源的demo也做了一些提取,主要是删除一些并不常用的类,所以在这做一个小小的记录。
首先,先安利一下一个非常棒的开源代码
这个demo几乎包含了现在视频软件的所有功能,且注释详细,基本可以对照着对自己所提取的代码进行适当修改,实现部分功能。编译的时候会出现一些资源缺失,自己替换一些即可。
进入正题,记录提取的心酸历程。当下载完demo后,会发现有很多的类,截图如下:
其中最为主要的类IjkVideoView,就是播放器的主要实现.打开这个类之后,会发现他继承了MediaPlayerControl接口
这个接口是安卓sdk中MediaController里面的接口。从文字的意思不难得知,其实这个MediaController就是为了实现对视频的控制,比如快进,后退,里面的很多资源文件及布局都证明了这一点,实际是一个控制条。而在官方的demo中的VideoActivity中(该类是播放视频的activity)也可以看见控制条的存在,截图如下
所以,官方demo的AndroidMediaController就是用来控制视频进度的,点进去返现他是继承自sdk的MediaController,另外一个接口是demo定义的,可适当进行修改及增加。
其实当运行其demo后,会发现底下的控制条根本无法满足实际要求,但是由于是底层的代码,所以又难以改动,所以提取的第一步骤,就是修改AndroidMediaController,所以,需要将SDK中mediController以及与他相关的布局文件的源码提取,再将官方的AndroidMediaControll糅合进去。这里需要注意的是,在提取style时候,记得在item命名的前面加上android:,截图如下
同时,需要将报错的相关定义一并从sdk中的源码复制到工程中。这些工作完成后,就可以随意定义控制条并且随意改变其中的资源文件了。而后继续进行提取,最后提取的目录应该如下(即只有这些文件是必须)
其中video下面的是自己定义的主界面,布局文件如下:
Java文件如下,需要注意的是图中红框的代码,这是初始化的代码,必须要,同事setOnPrepareListener监听也必须要
最后一点,有可能你复制过来的源码,没有PhoneWindow这个文件,即标红报错找不到,在AndroidController的这个方法类初始化即可(利用反射),截图如下:
同时,widget里面删除的文件用途备注如下:
TableLayoutBinder和InfoHudViewHolder:官方demo的视频信息框
FileMediaDataSource:用于选择本地视频
删除这些文件的时候,将对应的引用全部删除即可。
最后送上初步成果的链接,后期会慢慢继续研究,并继续完善