00:00
同学们,接下来我们讲什么呢?好,也就是大家认为的一个神奇之处,哎,我们这个空间怎么就直就直接可以播了。就这个空间了。很神奇呀,对吧。神奇真神奇是吧,这个这个就像那个。啊,就那个董永一样,看到那个那个树啊,那说谎他就特别神奇。董勇大家看过吧,那董永他不是被那个七仙女把那个树啊说出话来,董永就唱歌真神气耶是吧?好的同学们我们看一下,那也就是说对于我们一个程序员也发现,诶一个类怎么可以不起来。是不是,那么为什么呢?啊是这么回事,它里面用到了一个类,它封装了mini play。对。这个是负责我们播放。视频的啊,同学们也就在我们这地方里面啊,这个video u它继承了U里面封装了me play。
01:05
好me干嘛嘞,Me类,它是用来播放视频和音乐的一个控件,是我们安卓系统提供的。它里面真正用到的是C代码啊,它就能解码,那这个时候我们要去调C代码,通过什么减I对吧,它可以用来播放视频,用来播放音乐,和底层打交道。使用它啊,使用它和蜂呢,它要遵循一定的机制。好,大家要注意这一点,好我们看一下me play,它有哪些方法呢?好,我们来看了一点进去play。好,那刚才我说play和底层打交道通过GI,那么是不是肯定基它加载一个动态链接库啊?好,那这个时候就是我们来手文件,大家可以看一下,是肯定有个静态代码呀。好,我们地方里面有一个叫sister啊,我们这样搜吧,然后叫你看。
02:06
这个大家学有兼爱吧,J里面不是说嘛,在退款里面是加了一个什么库,看没有。好,那么这个地方里面我们有一些方法,比如说是大枣。直大是开始播放啊,对不对,这个地方连最终它掉的是这个方法,这个方法是什么方法。那个方法,那这个方法是调通过它可以调C啊。是不是好,那我们地方还有一个就设我们的data。你看是对的,是有好多啊。好设置我们的这个date,好大家看一下最终的话呢,就这。走着走着,好,大家再现在往下走。啊,这地方里面呢,它会走这个走走走走走走走这里。好,最终他走了一个什么,这个方法是内,那这个时候他是解码器就通过,这样的话呢,就进入解码器,就把播放地。
03:06
知道吧,还有一些方法,比如说涨停。你看最终他也是掉了什么。底层吧,好,那我们在这个它有一个play啊,有一个啊stop吧,Stop,好大家可以看一下,它最终也是掉底层的吧。对不对。好,还有我们的。比如说我们准备好了,准备好了应该也是由外界给调过来吧,它这里面呢,就设置我们的准备好了,这个准备好了是由外界传过来,看到没有。然后这个时候呢,我们可以看一下。好,这个地方里面如果释放的时候把它作为钠。好,然后这个地方你看这里面是回调谁实这个时候是是谁谁实现这个我就回调谁呀。好,但是这里面它是一个什么。
04:00
监考。看到没有?咱们用过借口吧,嗯。它也是毁掉回去,谁实现了这个接口,我就毁掉谁。知道吧,好。那么再看一下,其实还有一个就是设的L。你看是也是纯进来大家看啊,我在这里里面也会发现它也会调用。你看。这个时候这不就掉塔了吗?对不对,LL,那么我们在系统这里面是实现L啊,这时候就会被被回调。明白了吧,他用了接口,那你我们现在第一如果没说错的话,应该是第三次弹到接口了。是不是后面还有借口,你再不会的话。就有点不好意思了吧,是吧,好。那有的过后同学们在我地方里面呢,又用的接口好,再看一下,比如说设的准备好了。
05:01
好,就是播放膜了到文的,你看这个也是由外接传过来的吧,然后这地方呢也也会调用。好,再看一下,你看是回来,回去就把当前make题传进去。好,那就是这个地方里面呢,就是啊做了一个啊,含的就是内部的一个啊,就它里面通过它去做回调。好,这是media,好,那media一个啊,这是我们的me media play,那media play,那么它的生命周期是什么,一个一个一个一个状态呢?帮我们去选一个播放器,我们播放器的生命周期就是遵循它的机制。好,这一张图。给他看一下。这张图的话呢,你看懂了的话,这播放器就明白了。好,再看一下。这是Java类的一个图,如果他执行这个方法都处于什么状态啊?空闲状态好。大家看一下这个方法叫。
06:04
好,你下载过后,你看它这过后呢,他把这什么清除看到没有可啊关闭掉好那这种的话呢,执行这个方法过后,它就处于我们的空闲状态,好,他最终也会掉什么。底层吧。好就属于空间的,那么主这个方法是属于什么,播放结束。释放资源了嘛啊。啊,这个时候呢,你看他把这些都什么。就难了。明白吧,怎么弄?好,那接下来如果空闲状态过后,接下来我们设置一个data source。就是次的播放地址的话。好。这个包地址。那么刚才我们代码里面怎么体现呢?来看一下,我们是通过设的地址是通过这个。点看一下注意啊,看好这是张video哦,点进去看哦,还是video,然后这里面on video,然这里面有一个叫做。
07:03
浏览一个媒体分类吧,那它里面有个方法叫做。诶。进来了吧,所以大家看到的的方法,所以他用一个方法是代表各种各样的设置地址啊。它是一个什么统一的一种叫法啊。那有,然后这里面这个方法去执行都处于什么状态啊。初初始化了的状态。好,出发状态过后,我们开始准备,大家可以看一下这个代码里面呢,它就要开始准备了啊,一一设置过后啊在这里啊,他设置对决过后,然后这时候他开始准备,这是源码源代码。这系统的源代码,那这个准备他是什么准备啊。异步的还是同步的?弥补的好,所以呢,走着。视频播放器默认是走一步的。异步和同步是什么意思啊?
08:03
异步和同步是什么呀?啊。一步和同步是什么?啊,一模同步时有什么区别啊?你说一下英文有什么区别?嗯,就是。就是这个县城安全。是,嗯。两个县,两个县共同同一个资源。好好,我我来说一下,其实对这样的话是这样的。这个方法呢,我直接我就直接说了,这个方法是。你要调这个方法的话,就是假如说你改为这个同步的,不是异步的,那他一样等这个方法执行后,我下面才能干活。所以是吧,就刚才你说的同步,就是必须得等上一个这个方法成功后,我下面的才能改。
09:02
那么但是这个准备如果是网络的一个视频,他可能花很长时间。多多长的可能。可能是十,就是可能会15分钟。我以以前我测测试过,在网络特别慢的情况下,但是又有网的情况下,准备15分钟才把视频播出来。咱们出。大概是五六秒。那么也就是说我15分钟才做出来,N早就弹出来了。那么如果我认为的稳件能弹出哪个异常?下载软件你觉得可以吗?就是显得就是程序员很垃圾的。知道吧,就是你犯了咱们II92开发程序的一个大忌,就是你肯定是在主线程里面做耗时操作。导致的,那么如果你直接调这个方法,那就证明你在哪,如果你直接用这个方法,那么你就相当于在主线层。
10:04
就是相当于同,就是相当于同步的,同步的话,这个时候要等他执行过后,下面才有机会执行,那么是一个网络视频的话,是可能很耗时啊。不到,那什么时候掉呢。本地的可以知道吧,本地的视频本地页面你调查没问题,知道吧,同学们。啊。那么网络的应用它注意,那既然如此,那么本地的我可以用它吗?当然可以啊,对不对,当然可以好,那么也就是说它既然是异步的,那么也就是说他一样过后是相当于他单独去开一个线程呢,那这个时候他什么时候执行好,他才告诉我谁会有一个什么。有一个回调,也就是刚才我们在地方里面用的这个回调,就是他底层准备好了,他会回调给我。回到给我过后,这时候我师大的就开始播放了。也就是说,相当于在神舟六号升天的时候,他都会过样准备。
11:01
好,各种电影院准备了好能料准备了好这个这个风向啊,调查了没有什么天气意外是吧,各个系统的人准备好了,好,接下来回家我就开始吃大餐。开工是吧,就勃起来了。对不对,就把这个这个。差不多啊。好,那播起来之后,它处于播放状态,这个时候呢,我们就可以拖动啊,看一下同学们我播的时候。你看我是可以拨,你看可以拖动啊。啊,我就可以在播的过程中我去拖拖它暂停的时候其实我也可以拖。啊,也可以拖动。你看这个也也跳动了,好,就这你看。好,是不是调到了吧,好,那有的后,所以的话呢,我们一点这时候就准备好了,调这个方法后,或者说掉了这个方法回调好过后,它是属于。准备好了状态准备好了之后,我们调这个。
12:01
好,这个的话在这个时候就可以。The c two就可以掉,C two用来干嘛呢?啊。是什么意思啊?是可以定位到某个地方呢,假如说你之前你看了一个片,看了一半。这是你女朋友?叫你去逛街啊好,但是你下次逛街回来不是想接着看啊,那你再点击进来,是不是可以定位到上次播放那个位置啊,明白了吧,才可以做这个事情,当然还可以,就是你你看这个片的时候,你想拖。诶拖到这个地方,然后就重新定位到某个地方就可以去直播知道吧。好了以后过后,接下来我们就定位到历史,然后就开始,当然也可以适大的再C个求都可以。好的,接下来这个里面播放过后,它处于播放好的状态,播放好了之后它是给个c two啊,然后再调室打的也没问题,就像我刚才这个状态。
13:01
这个状态,比如说我们点一个视频。这个太小了,给别定这视频,然后我们现在在播的过程中,我们任意图看到没有,这样可以啊,暂停色我给任意坨看到没有。好,暂停是我的一坨是没问题啊。好,所以这样的。好,又涨停时候可以任意拖,又掉涨停没事,然后涨停可以调一次大台就什么。我起来。然后播起来之后再叫暂停就什么。暂停。但是如果你掉是多补了,或者你拨的时候掉是多普了,你看有还有回去的线吗。对吧,所以的话,有时候假如说你你跟一个女生是吧,你特别伤了她的心,你再去追她,她肯定不理你了。就是已经破裂了,比如说朋友之间也是一样,是吧,如果说你你真的太过分了,那可能他觉得你这个人。不值得跟你继续交往,不能回去,但偶尔开点玩笑,他生点小气思吧,你还可以让他原谅。
14:00
所以这个stop的方法就相当于什么呢?已经放弃别人了是吧?Stop,那OK,你还想要跟别人交朋友是吧?那你重新来一遍。看到没有,这里面就重新准备看到吧,这里如果是网络的视频,那你要重新异步准备,如果是本地的就是是,所以这个方法是不可逆的。是不对,懂意思了吧,这就就说你要结婚,你看你的人生就是这么个道理,就有东西你是不能回去的是吧。然后同学们在这个里面有过后,如果正常播着,播着一个视频,它时间是有限的,它播完播完过后它就回调播放完成。是不是啊,播着播着大家可以看一下,我们播着播着的话呢,它会播放完成。好,我播五套末尾好一会的话呢,它播完成。总就退出了,看到没有,他就说靠回调,回调到哪里。刚才咱们做这个不是不是。播放完整。
15:00
那么波纹成呢,它是有个条件就是。你呢,没有设置循环的情况下。知道吧,好,那假如说你看啊,这里面是光完成就给就finish吧,那假如说我我设置一个循环播放。怎么做的,我在这个地方里面。然后它有个方法,就是说这里面它没有,它这里面叫set lo,我看一下。没有没有这个方法,没有循环播放,那么但是我可以在这里设置用它。然后。赛们的录屏为多少?为你不想我测试循环播放。这个时候,同学们。它播放完成呢,可能就没有了啊,我看看啊。再看看。点击。两秒钟是吧,啊播一个。然后我们拖到后面。
16:01
啊,大家好。就从头开始呀,那么这个回调还起作用吗?不作用了。明白吧,所以他告诉我们,他说在我们地方里面或这个循环为for时的时候,是才有机会执行的,对不对,如果是这个播放完成这个循环,录屏循环为two,它是不是又重新播放,看到没有,这个是不是这个状态你看。我们把这个图就全部读完了,那么我们我们音乐播放器有一个功能叫单曲循环,其实就设置这个维就可以了。还有我们视频播放循环,播放也要做循环,有这样的需求吗?其实也有,我见过一个爱奇爱奇艺,爱奇艺里面的它有个功能就是就是就是我们的MTV的桌面有个模块,就是MV的,那MV就是唱歌呗,是吧,那假如说你们有你们一个,咱们班有一个小主播,他看网上一个舞蹈特别火,你们想。
17:05
跟着跳,那你是不是希望这个视频一直循环播呀,那这个时候我们就可以设置为循环播放。方便把一个方法搞定好,但是这个方法呢,它又没有封装在预留域里面,所以我直接它毁掉过来,是不是这那那里面有啊,就设置就可以了,明白了吧,你看刚才我在这块里面,大家可以看一下同学们。在这里面我呢也去设置一个。诶,卡住了啊。切换一下。好,然后这里面设一个。有这个方法吗?没有,就他没有封装,就是说这个阅读域它并没有把我们的me所有的方法封装,所以当时我们会指定地。这这样的话是能把所有的方法给用上了。
18:00
明白吧,是这样子的,同学们。好,那么这时候有了过后呢,同学们在我们这个地方里面,我们叫啊这个功能呢,咱们就mid play,我们就知道它是干嘛了,对不对啊me。好,我们继续来看这个图,这个图的话呢,基本上就明白了吧,那如果大家大家对这个图不是很清楚的话呢,大家可以看这里面有一个me play和一个介绍,其中这里面就是对me类的一个状态机制的一个说明。啊,你就看一下这文字,就刚才我所讲的全是这个口头描述出来,你呢,就可以看一看它怎么一回事,好,那么我们meeting介绍完了。那也就是说通过这个们就可以去播放我们的视频,也不放我们一面这么问吧。好,现在明白了吧,那么他才是真正负责播放我们音乐和视频的,对不对?好,那这个U又出马了,U是什么呢?它既是Su,并且封装了。
19:02
那么它继承you,那s you是什么呢?好,我们又来了解一下了啊,这个是什么呢。沙皮又是什么呢?好,给大家看看啦。好,这里面呢,有展开。好。我们就看关键点啊就行了。Such you啊,我们看一下啊,Such哪里就是。啊少,我们直接看这个地方。嗯,参考这个文档上U是U的一个什么子类,这没问题是吧,我们可以看一下上U点进去。他是三是U的,是U吧,OK,你看他说的一点没错。然后他内嵌了桌面要绘制的一个杀。啊,这是表皮的意思,你可以控制这个surface的尺寸。
20:01
这个。这个格式和尺寸大家想一想,我们播放视频有全屏播放,有那比例播放嘛,所以它呢,有这么一个特点是可以控制尺寸的,3U控制上U的废置位置,它可以控制位置。在是一个纵生排序的,一个一个众生排序的。说啊,说明它总是在自己所在的窗口的后边,S提供一个可见的区域,只有在这个可见区域上可以内容,所以大家看播放视频的时候,大家看一下这边呢,是只有这个可见区域啊,是不是没有内容啊。好,那萨米玉鲁的排版显示受到层次啊,受到这个视图层次关系影响,他的兄弟视图的节点会在顶端显示,这意味着上面内容总归其他兄弟给遮盖,你看,所以用它这个特点的话,我们就你看其实这个U和上面这个它是一个同一个层次的,但是这个上面用能总被他的兄弟,这就是兄弟知道吧给遮盖,就因为他有这个特点是不,我们可以在上面可以做一些按钮啊。
21:09
对吧,OK,然后这些特性可以用来。放我们的覆盖物啊覆盖物。例如我脑按按键控流。啊,按钮等等。注意3U的上面呢,有透明空间,那么每次三的变化会引起我们的这个主机绘制啊。好,那上月的默认呢,使用双反的就注意。U是用双缓冲技术,它支持在直线中绘制图,这是这是亮点的。注意它双缓动技术,它支持在直线的绘制图像,这样就不会阻塞主线程了。所以它是否。游戏的开发以及视频的开发,明白吧。好,大家想想视频你们知道是怎么形成的吗?你看。
22:00
视频,其实它就是一秒钟有有十多张甚至20多张画面在切换,这画面是图片吗?千万,那就说一秒钟,你想这么多画面在屏幕上渲染是特别的消耗资源啊,如果你在主线程中做是肯定的话,你除非有可能会出现AI异常啊,所以你会发现用它播放视频的话,他。它因为它是在直线渲染,一般不会出现AR异常。但是你会发现。剥一会视频后特别发烫。大家有没有在手机看过半个小时一个小时这样的一个静电,如果有的话,你会发现手机特别好,明白了吧,就是因为它一秒钟啊,几张画面在切换,对吧。跟你们讲一个小的一个一个故事,就是葫芦娃,大家知道吗?他其实啊,最初是设计十个葫芦娃的,但是为了节约成本呢,他设计了七个。
23:00
你可以百度一下,因为我我看那个作者就是之前我看过,呃这个啊,这个回回访那种那种节目呢,那个,呃,当年设计这个葫芦娃的设计师,他讲他们呢,大在这个的国产,他就讲国产动漫的一个历史嘛,讲他们这个葫芦娃的一个创作过程,然后呢,最初的是10个,但是发现十个的话呢,成本会增加很多,为啥呢?你想你要找大量的人去画这个。每个葫芦娃的动作,每一个葫娃的动作都是一张画,知道吧,另外拼起来连续动作,然后再上配音。所以。做一部动漫不亚于拍电影。知道吧,甚至比电影。排队就是阿富达的,知道吧,阿富达是怎么拍摄的,是他就是也是动漫的,但是这个呢,他有先真的。是吧,把动作,比如打的这种动作先拍出来,然后再用。在处理知道吧,然后它的制作成本很高。
24:03
好像是1.2个亿还是多少,具体忘了啊,反正上亿光是成本。对吧,你想这么都行,但然票房也挺高的,对不对,说到很多就是说拍一个动漫花钱,当然国内如果拍什么这个这个这个大头还是小头,文化是什么还是。不高,但是即便如此也不低,为啥它也是,即便大大的是小的爸爸,它也是要画出来,对不对,再加上配音吧。是吧,当然国内的这种这个大头儿子小头爸爸行羊这种也但是有创意,但是他的画面。比较简单对吧,但是如果你看一下那个3D效果,那成本就更高了,对不对?有些人功夫熊猫把它填好了,我感觉很有武侠气色是吧?功夫熊猫来看过吧,那么这个时候它就是一张一张画面形成的,所以的话你会发现动漫的话不好弄。
25:00
好,那同学们,那有了过后呢,好,大家注意它是在子线程渲染,这就不会阻碍主线程,所以我们播放视频的有戏的用途了,包括3D。3D效果,那么。做,就如果你要做一个3D效果,基本上也是进行他做的。知道吧,大家注意一下这个啊,以后你去看代码就知道哦,产品U我老师讲过了,这个们呢在仔细的渲染,所以的话不会阻塞主线成子啊好,那么他菜比呢,主要有三个嘞。啊有这些类啊,更有有一个,一个是创建,一个是改变的时候,一个消费,消费的时候,通常我们把视频给停掉。好,那么我们看一下S域里面呢,它这三个类在域域里面是怎么表现的。好,我们看一下它这里面呢,有一个叫,嗯。好,我们看看啊,这个类的话呢,在这。一个是创建是吧,好。看到没有,当一次上面一创建的时候,我们就去调这个方法,就开始去创建me play,就开始开始要准备播放了吧。
26:07
好,接下来再看一下他状态改变的时候做了什么事情。这改变的时候,你看是他重新师大的呀,就重新师大的,好当他销毁的哦,就创建,但是销毁的时候。看到没有,销毁的时候,它是干嘛,是把控制栏隐藏掉,然后再把这个。释放了,因为销毁了,是不是就不敢,这个用户已经点击返回了。明白吧,所以为什么同学们在阅读里面播放视频,大家看好,你看啊,我播一个视频,现在是播了的,我退出。停止了,为什么?为什么?是因为我们的you,它发生什么?Join了,Join过后我的代码里面就做了一个什么释放处理,你都释放了,是不是就自然就停止了。
27:04
明白吧?明白了吧,所以的话一点返回就自然会退出。知道吧。OK,现明白了吧,它会执行,也就是说当我们销毁的时候,它会回掉这个方法,这时候我们就把它给什么。就通常会退出游戏,比如说声播放,声播放器的话就会有停止,一般会在该方法中停止。这个绘制啊,绘图线成啊会停止啊,它会帮正动停止。好的代码在下面。好,那么呢,这就是我们上水U。Salu,好,这个门它继承了Su,然后当我们me当封到me时候,按照me机制去封装,那Su默认是双反的技术。啊啊,这个预留U啊,它进上啊,那上右的话呢,它在执行程中会逐向这样的不阻不组上,我们主行程可以更适合游戏开发和视的显示。
28:01
明白吧,好,那这个地方里面有一个小案例。就是用杀U直接选择一个播放器,我们现在用的播放器是怎么做播放器啊,是直接阅读U啊,那么其实我们因为这个阅读里面是本身就封装了我们的U用U和啊,也就是说以后我不用这个类了,只用和也可以啊。好,所以这边有个案例,大家感兴趣可以看看,在这个资料。有一个叫代码。代码在这里呀,就是这个小于好,我们把它给打过来,大家看一下啊,大家要。看一看,像这样的话,以后你知道怎么回事啊,如果你要选播放器的话,我我以后可以不用系统机的阅读用啊,然后呢,也可以做到。是吧?好,那么我们去把它运行起来,当然这个地方呢,我看一下这类啊,大家可以看一看,在这里面有有一个类啊,这个是一个叫。
29:05
沙皮,然后这里面沙皮。好,然后呢,我们去。注意它这里面用用两个may,这个may地方呢,用的是预留用,这没问题吧,留用啊这种做法那播放一个本地的。然后在我们地方里面,现在我们默认的话,现在是用。先用Su了,你点进去来Su才可以看一下源代码放本地的,那这个时候呢,要注意了,我现在把服务器开启起来,因为它是一个网络的视频,知道吧。要把它U盘把它包起来过后地方里面,你看这是用的you you的话呢,这里有一个的一个。就是当他创业的时候,我就开始什么播放,看到没有。和和我们这来准备,我们用的是异步准备。然后拨起来好。给大家看看。点赞。
30:03
一起来。那么这个的话,你要知道我这个老师之前提过是吧,稍用,因为我们没用嘛,不用它。看播起来吧,还是网络的这些照样能播,看到没有?好,还可。我看还有个截图呢。是吧?节奏卡住了,咱们重播吧。是不是可以拖动这样可以啊,时间跳动对啊,好点窗口你看全屏摸了。不是。啊,还有一个动画效果的啊。播放。暂停播放。对不对,好这样的效果好,那也就是这个案例里面的话呢,他就把我们做成这样的效果,你看他这你看布局,他布局用的是谁啊沙看到没有。You。来吧,他同级的兄弟是佛在他上面了,看到没有他同级的兄弟啊?
31:03
对不对,这个案例的话,大家啊,要有能力去看了啊,这个东西的话呢,都有每一行都有注释。你看这个是是个球摸的是个Q0。播放暂停等等。好,那么大家知道这个案例就可以了。那有那个货在我们地方里面的话呢,好看一下。那么在安卓系统中,一般给开发者提供开发视频这方面的软件呢?啊,就是视频这方面和音乐这方面软件再有两个类类和这个是开发视频企业直接用它。对吧,如果视频播放,我们就可以直接用预读证明题吧,还有一种就用me和什么。结合知道吧。这两种,所以所以暴风影音啊,暴风影音它的原版我看过。然后呢,就采用这种方式。知道吧。play和。在H里面去封装啊,它采用这种方式,然后呢,音乐播放器注意了,一般用服务和me结合,就是我们的me封装在哪里啊。
32:08
放到里面。为什么呢?因为音乐播放器需要一个什么。后台播放知道吧,这个后台播放啊,所以的话,他需要这么一个特点,好了同学们,也就是说大家要注意,那么这个音乐播放器啊,到时候我们也会讲,知道吧,这时候呢,我们会在me play里面。啊,把me到service里面,这时候呢,就可以播放,然后在当我们退出页面的时候,这个服务,这个服务是还可以播放上一个下一个,因为我们退出的时候。里面的数据消毁了,但是里可以消毁吧,所说这样的事情现在明白了吧。好,那同学们,这就是我们所讲的me和video的一个介绍,好,我们把这个视频呢保存一下好。
我来说两句