重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

咸鱼flutter,咸鱼之王礼包码

Flutter浪潮下的音视频研发探索

文/陈炉军

你所需要的网站建设服务,我们均能行业靠前的水平为你提供.标准是产品质量的保证,主要从事网站建设、做网站、企业网站建设、成都做手机网站、网页设计、成都品牌网站建设、网页制作、做网站、建网站。创新互联建站拥有实力坚强的技术研发团队及素养的视觉设计专才。

整理/LiveVideoStack

大家好,我是阿里巴巴闲鱼事业部的陈炉军,本次分享的主题是Flutter浪潮下的音视频研发探索,主要内容是针对闲鱼APP在当下流行的跨平台框架Flutter的大规模实践,介绍其在音视频领域碰到的一些困难以及解决方案。

分享内容主要分为四个方面,首先会对Flutter有一个简单介绍以及选择Flutter作为跨平台框架的原因,其次会介绍Flutter中与音视频关系非常大的外接纹理概念,以及对它做出的一些优化。之后会对闲鱼在音视频实践过程中碰到的一些Flutter问题提出了一些解决方案——TPM音视频框架。最后是闲鱼Flutter多媒体开源组件的介绍。

Flutter

Flutter是一个跨平台框架,以往的做法是将音频、视频和网络这些模块都下沉到C++层或者ARM层,在其上封装成一个音视频的SDK,供UI层的PC、iOS和Android调用。

而Flutter做为一个UI层的跨平台框架,顾名思义就是在UI层也实现了一个跨平台开发。可以预想的是未Flutter发展的好的话,会逐渐变为一个从底层到UI层的一个全链路的跨平台开发,技术人员分别负责SDK和UI层的开发。

在Flutter之前已经有很多跨平台UI解决方案,那为什么选择Flutter呢?

我们主要考虑性能和跨平台的能力。

以往的跨平台方案比如Weex,ReactNative,Cordova等等因为架构的原因无法满足性能要求,尤其是在音视频这种性能要求几乎苛刻的场景。

而诸如Xamarin等,虽然性能可以和原生App一致,但是大部分逻辑还是需要分平台实现。

我们可以看一下,为什么Flutter可以实现高性能:

原生的native组件渲染以IOS为例,苹果的UIKit通过调用平台自己的绘制框架QuaztCore来实现UI的绘制,图形绘制也是调用底层的API,比如OpenGL、Metal等。

而Flutter也是和原生API逻辑一致,也是通过调用底层的绘制框架层SKIA实现UI层。这样相当于Flutter他自己实现了一套UI框架,提供了一种性能超越原生API的跨平台可能性。

但是我们说一个框架最终性能怎样,其实取决于设计者和开发者。至于现在到底是一个什么状况:

在闲鱼的实践中,我们发现在正常的开发没有特意的去优化UI代码的情况下,在一些低端机上,Flutter界面的流畅性是比Native界面要好的。

虽然现在闲鱼某些场景下会有卡顿闪退等情况,但是这是一个新事物发展过程中的必然问题,我们相信未来性能肯定不会成为限制Flutter发展的瓶颈的。

在闲鱼实践Flutter的过程中,混合栈和音视频是其中比较难解决的两个问题,混合栈是指一个APP在Flutter过程中不可能一口气将所有业务全部重写为Flutter,所以这是一个逐步迭代的过程,这期间原生native界面与Flutter界面共存的状态就称之为混合栈。闲鱼在混合栈上也有一些比较好的输出,例如FlutterBoost。

外接纹理

在讲音视频之前需要简要介绍一下外接纹理的概念,我们将它称之为是Flutter和Frame之间的桥梁。

Flutter渲染一帧屏幕数据首先要做的是,GPU发出的VC信号在Flutter的UI线程,通过AOT编译的机器码结合当前Dart Runtime,生成Layer Tree UI树,Layer Tree上每一个叶子节点都代表了当前屏幕上所需要渲染的每一个元素,包含了这些元素渲染所需要的内容。将Layer Tree抛给GPU线程,在GPU线程内调用Skia去完成整个UI的渲染过程。Layer Tree中有PictureLayer和TextureLayer两个比较重要的节点。PictureLayer主要负责屏幕图片的渲染,Flutter内部实现了一套图片解码逻辑,在IO线程将图片读取或者从网络上拉取之后,通过解码能够在IO线程上加载出纹理,交给GPU线程将图片渲染到屏幕上。但是由于音视频场景下系统API太过繁多,业务场景过于复杂。Flutter没有一套逻辑去实现跨平台的音视频组件,所以说Flutter提出了一种让第三方开发者来实现音视频组件的方式,而这些音视频组件的视频渲染出口,就是TextureLayer。

在整个Layer Tree渲染的过程中,TextureLayer的数据纹理需要由外部第三方开发者来指定,可以把视频数据和播放器数据送到TextureLayer里,由Flutter将这些数据渲染出来。

TextureLayer渲染过程:首先判断Layer是否已经初始化,如果没有就创建一个Texture,然后将Texture Attach到一个SufaceTexture上。

这个SufaceTexture是音视频的native代码可以获取到的对象,通过这个对象创建的Suface,我们可以将视频数据、摄像头数据解码放到Suface中,然后Flutter端通过监听SufaceTexture的数据更新就可以顺利把刚才创建的数据更新到它的纹理中,然后再将纹理交给SKIA渲染到屏幕上。

然而我们如果需要用Flutter实现美颜,滤镜,人脸贴图等等功能,就需要将视频数据读取出来,更新到纹理中,再将GPU纹理经过美颜滤镜处理后生成一个处理后的纹理。按Flutter提供的现有能力,必须先将纹理中的数据从GPU读出到CPU中,生成Bitmap后再写入Surface中,这样在Flutter中才能顺利的更新到视频数据,这样做对系统性能的消耗很大。

通过对Flutter渲染过程分析,我们知道Flutter底层需要渲染的数据就是GPU纹理,而我们经过美颜滤镜处理完成以后的结果也是GPU纹理,如果可以将它直接交给Flutter渲染,那就可以避免GPU-CPU-GPU这样的无用循环。这样的方法是可行的,但是需要一个条件,就是OpenGL上下文共享。

OpenGL

在说上下文之前,得提到一个和上线文息息相关的概念:线程。

Flutter引擎启动后会启动四个线程:

第一个线程是UI线程,这是Flutter自己定义的UI线程,主要负责GPU发出的VSync信号时候用当前Dart编译的机器码和当前运行环境创建出Layer Tree。

还有就是IO线程和GPU线程。和大部分OpenGL处理解决方案中一样,Flutter也采取一个线程责资源加载,一部分负责资源渲染这种思路。

两个线程之间纹理共享有两种方式。一种是EGLImage(IOS是 CVOpenGLESTextureCache)。一种是OpenGL Share Context。Flutter通过Share Context来实现纹理共享,将IO线程的Context和GPU线程的Context进行Share,放到同一个Share Group下面,这样两个线程下资源是互相可见可以共享的。

Platform线程是主线程,Flutter中有一个很奇怪的设定,GPU线程和主线程共用一个Context。并且在主线程也有很多OpenGL 操作。

这样的设计会给音视频开发带来很多问题,后面会详细说。

音视频端美颜处理完成的OpenGL纹理能够让Flutter直接使用的条件就是Flutter的上下文需要和平台音视频相关的OpenGL上下文处在一个Share Group下面。

由于Flutter主线程的Context就是GPU的Context,所以在音视频端主线程中有一些OpenGL操作的话,很有可能使Flutter整个OpenGL被破坏掉。所以需要将所有的OpenGL操作都限制在子线程中。

通过上述这两个条件的处理,我们就可以在没有增加GPU消耗的前提下实现美颜和滤镜等等功能。

TPM

在经过demo验证之后,我们将这个方案应用到闲鱼音视频组件中,但改造过程中发现了一些问题。

上图是摄像头采集数据转换为纹理的一段代码,其中有两个操作:首先是切进程,将后面的OpenGL操作都切到cameraQueue中。然后是设置一次上下文。然后这种限制条件或者说是潜规则往往在开发过程中容易被忽略的。而这个条件一旦忽略后果就是出现一些莫名其妙的诡异问题极难排查。因此我们就希望能抽象出一套框架,由框架本身实现线程的切换、上下文和模块生命周期等的管理,开发者接入框架以后只需要安心实现自己的算法,而不需要关心这些潜规则还有其他一些重复的逻辑操作。

在引入Flutter之前闲鱼的音视频架构与大部分音视频逻辑一样采用分层架构:

1:底层是一些独立模块

2:SDK层是对底层模块的封装

3:最上层是UI层。

引入Flutter之后,通过分析各个模块的使用场景,我们可以得出一个假设或者说是抽象:音视频应用在终端上可以归纳为视频帧解码之后视频数据帧在各个模块之间流动的过程,基于这种假设去做Flutter音视频框架的抽象。

咸鱼Flutter多媒体开源组件

整个Flutter音视频框架抽象分为管线和数据的抽象、模块的抽象、线程统一管理和上下文同一管理四部分。

管线,其实就是视频帧流动的管道。数据,音视频中涉及到的数据包括纹理、Bit Map以及时间戳等。结合现有的应用场景我们定义了管线流通数据以Texture为主数据,同时可以选择性的添加Bit Map等作为辅助数据。这样的数据定义方式,避免重复的创建和销毁纹理带来的性能开销以及多线程访问纹理带来的一些问题。也满足一些特殊模块对特殊数据的需求。同时也设计了纹理池来管理管线中的纹理数据。

模块:如果把管线和数据比喻成血管和血液,那框架音视频的场景就可以比喻成器官,我们根据模块所在管线的位置抽象出采集、处理和输出三个基类。这三个基类里实现了刚才说的线程切换,上下文切换,格式转换等等共同逻辑,各个功能模块通过集成自这些基类,可以避免很多重复劳动。

线程:每一个模块初始化的时候,初始化函数就会去线程管理的模块去获取自己的线程,线程管理模块可以决定给初始化函数分配新的线程或者已经分配过其他模块的线程。

这样有三个好处:

一是可以根据需要去决定一个线程可以挂载多少模块,做到线程间的负载均衡。第二,多线程并发式能够保证模块内的OpenGL操作是在当前线程内而不会跑到主线程去,彻底避免Flutter的OpenGL 环境被破坏。第三,多线程并行可以充分利用CPU多核架构,提升处理速度。

从Flutter端修改Flutter引擎将Context取出后,根据Context创建上下文的统一管理模块,每一个模块在初始化的时候会获取它的线程,获取之后会调用上下文管理模块获取自己的上下文。这样可以保证每一个模块的上下文都是与Flutter的上下文进行Share的,每个模块之间资源都是共享可见的,Flutter和音视频native之间也是互相共享可见的。

基于上述框架如果要实现一个简单的场景,比如画面实时预览和滤镜处理功能,

1:需要选择功能模块,功能模块包括摄像头模块、滤镜处理模块和Flutter画面渲染模块,

2:需要配置模块参数,比如采集分辨率、滤镜参数和前后摄像头设置等,

3:在创建视频管线后使用已配置的参数创建模块

4:最后管线搭载模块,开启管线就可以实现这样简单的功能。

上图为整个功能实现的代码和结构图。

结合上述音视频框架,闲鱼实现了Flutter多媒体开源组件。

组要包含四个基本组件分别是:

1:视频图像拍摄组件

2:播放器组件

3:视频图像编辑组件

4:相册选择组件

现在这些组件正在走内部开源流程。预计9月份,相册和播放器会实现开源。

后续展望和规划

1:实现开头所说的从底层SDK到UI的全链路的跨端开发。目前底层框架层和模块层都是各个平台各自实现,反而是Flutter的UI端进行了跨平台的统一,所以后续会将底层也按照音视频常用做法把逻辑下沉到C++层,尽可能的实现全链路跨平台。

2:第二部分内容为开源共建,闲鱼开源的内容不仅包括拍摄、编辑组件,还包括了很多底层模块,希望有开发者在基于Flutter开发音视频应用时可以充分利用闲鱼开源出的音视频模块能力,搭建APP框架,开发者只要去负责实现特殊需求模块就可以,尽可能的减少重复劳动。

一些华丽优美的句子

1. 谁捡走了我的玻璃鞋,寻找遗失的玻璃鞋.

2. 命里哊时钟需哊 命里无时莫强求

3. 没有谁对不起谁,只有谁不懂得珍惜谁.

4. 记忆零落的恨,像被刀子划过叻的鱼鳞,囿些还畱在身体仩,囿些是掉在叻水裏叻,讲水一搅,囿几片还会翻腾,闪烁,然而中间混着血丝

5. 我喜欢冬天,因为白昼短暂而黑夜漫长,这样会有更多的时间来逃避

6.我的世界不允许你的消失,不管结局是否完美.

7. 爱情是一个精心设计的谎言

8.承诺常常很像蝴蝶,美丽的飞盘旋然后不见

9.依然习惯被爱的感觉,也许某天在喧哗的城市中,你我擦肩而过,我会停住脚步,凝望着那个正在远去的背影告诉自己,那个人…..我曾经爱过.

10.为什么幸福总是擦肩而过,偶尔想你的时候….就让….回忆来陪我.

11.爱情…在指缝间承诺 指缝….在爱情下交缠.

12. 我很爱你,从那天世界

完全属你 爱埋藏在日记而我的世界 仍然属于你

13. 我仍怀著志气 爱原没有限期

这夜仍旧要别离 无人望见 我轻吻那空气

14. 挂在叶子上的雨滴

是天使的泪

我的心

如果它能为你带来快乐

我情愿

15. 人总是喜欢解脱束缚,寻求另外一种新鲜刺激的生活。就像穿鞋,穿久了,光着脚走路,就会有一种全新的体验。然而,光脚一旦遇上了玻璃碴,就容易受伤……

16. ……………………

爱情不应该是省略号

—— —— ——

爱情不应该是破折号

!!!!!!!

爱情不应该是感叹号

好象…… —— !!!

她就只能是一个问号

17. 我的脚步想去流浪,我的心却想靠岸,我的影子想去飞翔,我的人还在地上,我的笑容想去伪装,我的泪却想投降。我这样的人没有你想象中坚强,如果你寂寞的胸膛是我依靠的地方,我将在那里生活一辈子.....

18. 周刊的封面彩照抢眼

叙述最新的荒诞笑话

中间添加几多设计的对白

19. 如果你为着错过夕阳而哭泣,那么你就要错群星了

20. 人活着 总是要得罪一些人的 就要看那些人是否值得得罪

21. 我问上帝:怎样才可以对悲伤的事情一边笑一边忘记?

上帝回答:把自己弄的疯掉。(from:笑面人)

22. 心若改变,你的态度跟着改变;态度改变,你的习惯跟着改变;

习惯改变,你的性格跟着改变;性格改变,你的人生跟着改变。

在顺境中感恩,在逆境中依旧心存喜乐,认真活在当下。

23. 玫瑰花安静的盛开,紫罗兰安静的谢了。野草安静的蔓延,一丝沉没与压抑,却有品味。我沉默,不再离去……

24. 凋谢是真实的 盛开只是一种过去

25. 摘不到的星星,总是最亮的

溜掉的小鱼,总是最美丽的

错过的电影,总是最好看的

失去的情人,总是最懂我的

我是始终不明白,这究竟是什么道理

-------------------------------------

和她相比,他更像是一个贪玩的孩子,他没有长大,还是躲在自己的城堡里玩耍,一旦要接近残忍现实的世界,他选择的面对方式就是逃避和沉默。于是,他会在她手足无措的夜晚体察不到她的崩溃,在她歇斯底里的哭泣里面无法体谅她的失控,她将裂开,而他选择了一次又一次的躲避。

O 每次两人分开,她总是一转身就走掉,他几乎怀疑她根本就是一个绝情的人。她似乎什么都可以放得开,她有时候又似乎非常感性,看电影会失声哭起来。她拒绝给自己一个温情怀抱,她不过是容易制造苦情气氛的女子,有孽缘,又太灵性,这样怎么会快乐起来呢。

O她忍不住发笑,她永远有痴狂症,以为自己是天使,而天国,哪里容忍她这般满目疮痍的女子作使者。

O 有的爱,一开始就注定带来忧郁和创伤,硬要接受下来,必定是肝肠寸断的结局。

O 写作这碗饭,不是人人都能吃的,这是天赐的饭碗,不是靠辛苦努力就可以得到的。有辛苦没有天赋,只能是吐血身亡并无建树,有天赋没有辛苦,又只能暗自蹉跎,最后被老天收回了去。

O 有那样一种女子,是罕见的,与众不同的,她们文艺而敏感,行为简单却思维深刻;她们也许不美,但是她们总能洋溢着耀眼光华,区别于众俗之中。她们通常不会很快乐,她们有着突出的特质,也有重大的缺憾。她们不断地行走红尘,感受那些凡俗的伤感,夜里躲在天上哭泣,白天踏着泪变的露珠,可是她们还是那样华丽。

O 她没有真心,他们没有灵魂,俗尘凡世一相逢,便注定要散落。

O 人世间勇敢的男人少到只能在小说里看到,而勇敢的女人却比比皆是;吹起人间烟火的是男人,持续着的却多是女人。不甘心不情愿,爱成残缺,努力争取,和命运抗争,终究还是敌不过与人分享热爱或者遭人临时抽身的尴尬。

O 网络成就了多少人的梦想,点开窗口就可以言爱,可是,谁的爱会蜿蜒着携带真心而来?

O 毕竟,生活是生活,不是无关痛痒的小说。小说永远会在最关键的时刻止住,留给你无穷的遐思,生活则是枝叶相连的纠葛。

O 你的身上有一种咄咄逼人的气质。这样的气质会令你丧失很多受宠爱的机会——因为很少会有人敢接近你。

O 很多人爱着,爱累了,爱成了无能,麻木地活着,却少不了男欢女爱。爱无能着,身体的器官还在蓬勃着,于是,也就只能男欢女爱了。

O 没有爱情,对于一个单身男人来说,未尝不是一件幸福的事情。空心人不一定比多心人活得逊色,至少他们心情愉快,远离烦忧。

O 她更容易被强势的人所带领和指引,这个倾向没有人知道,面对她的人总是视她为脆弱或者天使,能恭敬她就恭敬她,能保护她就保护她。

O 她就如同一只软体的寄生动物,而他正好是一株坚强的树木,她慢慢找到了他,开始依附于他生存,慢慢慢慢,她的精神和他就融合在了一起。

O 有时候感情就是这么奇怪的一个东西,你拼命找寻的时候,它隐藏逃匿,你视它为不顾,它却突然现身出来。

O 若有一天她找到了自己的真命天子,她一定迎上前去,泪流满面地狠狠掐他的胳膊,直到掐得他痕迹斑斑。她会委屈地说,我找了你那么多年,你为什么现在才出现?

O 他一直没有告诉她,撇去她的其他不谈,只是她的样子,就已经如一个有魔力的咒语一样地围绕着他了,一旦出现,全盘笼罩,他的生活里再也不能没有她的痕迹。

O 原来这样的转变,不过是一个拥抱,或者一句话语。爱与不爱之间,只隔一线,先前的那些,都不过是勇敢的铺垫

O 她绝望的笔下,那片废墟一样的空旷,是由他造成的。她不过是一个简单的女人,希望这场无妄的爱能够落地开花,而他,始终固守在他自己建造的城堡之中,步步为营,不敢前行。

O 再浓烈的感情,一旦决意斩断,熄灭不过是一念之间。

O 时间不恰当,浪漫变成了拖累。

O 他几乎要失控地伸手去拉她的手,请她不要那么快将欢乐给予他,而又将悲伤一并携来。他远没有她想象中那样坚强,他也不是能够受得了伤害的。

O 她曾经在没有太阳的深夜里遇到他,被他的阴暗所吸引,而她终于是要浮出水面见到阳光的。那种暗晦的病态直接影响到了她,他们慢慢变成了一样的瘦弱、病态、萎靡不振,像台湾中生代导演作品里面的人物,每个人都在变态的边缘茫然。有人觉得那很美,她不这样认为。

O 不是全世界都像你那么好运,遇到梦中情人,现在满大街上都是疤拉眼、秃子、罗圈腿和胖子——小雷那样的胖子。他们一样有尊严,也要生活,也会爱。

O 只有天真的人,才会说出心无城府的攻击的话。她对于她的无理,一直是那样认为的。

O 她紧紧地拥抱他,实物的触摸能够安慰空荡的灵魂,此刻她唯有如此,才能够慰藉到自己走失的灵魂。

O 如果她终于找到那个人,她见到他的时候,一定会掐他的胳膊,掐到他有伤痕,她会说,你怎么会这样晚才出现。

O 她真不觉得插科打诨有什么可乐的,但是有千千万万的人,会那么专心地听,那么会心地笑。开心,来得那么那么容易,为什么离她就那么遥远。

O 已经有多久,没有这样近地接触人,看着他的眉眼,面对面说一些真挚的话。眼神是不会骗人的,表情亦是不会骗人的,原来这是真的。

O 女人没有必要去跟男人拼智慧。男人们拼命积攒知识,有时候也是希望自己能在和平时代的女人眼里,成为英雄。

O 其实她不过就是一个心智脆弱的孩子,为什么她身边的人都会不自觉地将她悬挂在高处,然后使出全身的防备去面对她。她一直需要的,不过是一个简单又单纯的拥抱。

O 幸福,在别人那里都是唾手可得的简单,而在她,却是上青天般的艰难。她努力找寻着,攀援着,它始终就是在空中悠闲地看着她,她挣扎,用岁月作为祭祀,荒废了一年又一年,它始终是那样的遥远。即使只是一个手指的距离,也依然无法达到。

O 他就是一个为自己营造了一个梦想国的自卑男子,靠着空间的力量迷上了说谎的游戏,在这场谎言里,他是王子,他站在至高无上的位置享用着一个奇怪女子的爱和崇拜,他沉迷于其中,过一天便算一天。他蒙蔽了自己的双眼,他以为永远都可以这样,做着美丽的梦,维持着他的枯燥乏味。

O 她在这些年飘荡的岁月里,已经逃开了许多世俗的规则,她如一个游牧民族一样生活着,谁都无法将她的灵魂掌握在手中。

O 在爱情面前,肥胖显得那么不合时宜,它令一切的美好破灭于眼前,那个心高气傲的男人,在爱情里委曲求全,也许他会在无人的时候偷偷哭泣。不过是为了取得爱一个女人的权利,令自己委屈至此。

O 曾经她以为,他和她的纠缠可以一直持续下去,持续到两个人都花白了头发,都未能有什么结果。而现在,她细数了一下,不过才只有一年的光景。一年,三百多个日夜,她已然对他无动于衷了。

O 她是一个多么弱小的动物,只要一个坚定的承诺就能够给她无比的决心,但是他吝于给予。小男人通常都会犯的毛病,太喜欢斤斤计较,太在意收入支出的平衡,太不珍惜难得的真情,他怎么能盛载她那样磅礴的热情呢?她如同一片汪洋,而他不过是一叶小舟,单薄摇曳,海上轻风便可将之吹翻,更何况是这样猛烈的风暴。那些壮烈,只能是给自己伤口,给自己难堪的。其实一切都可以圆满地解释过去:他不过是一个凡人,她却要他做着天上人间的事迹,她何必这样地为难于他呢?

O 他们不该是平行线上勉为其难的交织,他们只能顺其自然地互相对视,才能成就欣赏和憧憬。

O 轻松并不难,一个念头就可以解开的扣,很多人沉浸在情绪里,如她一样难以自拔,那或者真的需要一种拯救或者祈望一份神奇。

O 孤独的女人往往缺乏纯粹的信心,看上去的傲慢和凉薄只不过是类似于一种颜色的保护,使得自己与外界有一种心安理得的隔断,这种隔断,会带来无比安全。而这些外界主动涌过来的爱慕、欣赏或者喜爱,无疑是颜色之外与她的肌肤呈现友好的信号,或者说可以搭一座桥,令她慢慢放松警惕。

O 我想把你改造成一个俗气的姑娘,整天在太阳底下没心没肺地笑,晒得黑壮健康的,翻脸也不是不可以,有点烟火气息。可是这样的想法一产生,我就会自责得不行,我怎么可以把天使拽到人间。

O 想到这样的情景许明媚的心都碎了。似乎心里爬出来了几百只小虫子,一起在啮噬着她的骨头,那种酸涩难当的感觉她第一次感受。嫉妒吗?是嫉妒吧。嫉妒原来是这样折磨人的一种可怕东西。

O 她总觉得婚姻是距离她太遥远的一种相处形式,那包含着世俗的责任和繁琐。而她所盼望的生活,不过就是两个人简单地在一起,好像在一起,就意味着天长地久,这对于她来说,就是能够延展的所有想象。

O 你和我是不一样的,你永远拥有蓝天白云,而我只有一个狭小的空间,容纳自己已经不算轻松。

O 所谓华丽,非是容颜上的夺目,实在是一些不可解说的潜质透过平常的肌肤所散发出来的奇异光芒,她如此华丽,她如此不堪,她如此年轻。

O 这些穿梭在她生命里,与她的情感密切相关的人,岁月过后,已经变成了某种暧昧又疏远的符号,类似于她生命中的图腾,每个图腾都代表着她一段特殊的岁月。她也许不再对他们有任何鲜活的情感,但是她一辈子都不会忘记他们。

O 他手里捏着他们之间的线,他如拂尘一般的就将那根线给扫断了,她没有来得及做任何的准备便一个趔趄栽倒下去,这一个跟头的狼狈她简直无从想象,似乎是将她二十七年来所有积攒的信念全部都跌损,甚至连爬起来的力气都没有。

O一座庞大的城,将他和她之间,隔到了山水不重逢的绝情。

《同学少年不言情》

O 开始写日记,就像对着他说话,一句一句,可以顽皮,可以真挚,可以耍赖,可以勇敢。如果能够在一起,如果可以在一起,可是,那简直不啻于对天堂的奢望。我一笔一笔地描述着梦想天堂的样子,那里有风吹过,有鸟儿飞翔,还有迎风矗立的苏格,和身边灰灰暗暗的我——我又忍不住地忧伤,我只能是灰灰土土的样子,我该有怎么样的明媚,才可以衬得上苏格这个忧伤的太阳。

《光年里这样一个黎明》

O 记忆可以不在,与记忆有关的歌却一直存在。就这样一代一代地,从流行变为滥俗,再变为经典,从不同人的嘴里唱出,勾引着那些陈年旧事,和曾经温暖过你生命的某个片刻然后谢幕消失的那些人一样,起着怀旧的作用。

O 我第一次明白了情敌的滋味,她是我的情敌,而我没有勇气说起我的爱,我也是爱他的,可是,在她的气焰下,我突然觉得自己是如此的卑微,她如一个胜券在握的女皇,而我不过是那个尚未蜕变的灰姑娘,我们同时跌入王子的倒影里。她既霸道又光明磊落,而我,却如此畏畏缩缩,战战兢兢。

O 那样的快乐。仿佛这一生,惟一不求回报,惟一卑微到只要喜欢就可以了,也就只有对他才会这样。

《风中的卡布其诺》

O 记住一个人,只需要一个轻而易举的理由。

比如一个特别的眼神,比如某个特别的时刻,比如一杯咖啡。

《爱恨分七年》

O 在年轻的时候,谁不曾有过甜美的梦想,不过我这个梦,做得有点长久,它就这样地,星星点点地,就烧燎了原。

O 他的眼神寂寞而淡薄,充满了异乡人的寡淡,而就是他那样特别的样子,将感情的潮水,理直气壮地推向了那个年代整日做梦的我,我手脚并用都无抵抗之力,并且沾沾自喜着。因为,我终于在最好的年纪,做了一个流浪歌手的情人。

O 有一种人,当你和他遭遇的时候,你们的关系就只能是一种,要么是爱情,要么是仇恨,永远无法平静地做什么知己或者是朋友。

O 因为无比清醒,所以竟然没有怎么悲伤,我似一个早已知道死期的囚犯,镇定地等待着生命的终结,从容得连自己都惊诧。

O 凌晨的北京有一种孤独的华丽,华灯灿烂,行人却寥落,如此一座空泛的城,类似于遥远的西安,一样的孤独,一样的华丽,一样的空泛。每个城市都在上演着类似的悲欢,都在流行着类似的音乐,都在穿着类似的颜色,可是我和元浩离的故事,看上去是那么的辛酸和悲苦,似乎一直就是灰色的主题,褐色的旋律,黑色的结局,这一场边缘爱恋永远见不得阳光,永远无法正常地盛开,我们只能在一年一年的蹉跎里,渐渐变老。

《寂如流年》

O 这样的男人类似于一颗浸毒的摇丸,外表光鲜无比,一旦接近,就会上瘾,最后是绝决地毁灭。

《我在城外,想起你来》

O 真正爱一个人,不是风平浪静时候的甜言蜜语,而是风浪来临时的一双手。如此而已。

O 在她和他见面的第二天,她便知道他从此不再是她的梦想了。所有的之前的一切臆想,不过都是顺着他甜美的语言营造起来的一个海市蜃楼而已。雾气散尽之后,实则空无一物。

O 但是她对他,是无比懒惰的眷恋和无比习惯的依赖。她习惯于将自己的精神挂在他身上,然后可以给自己一个虚晃的假象,然后她可以神游,可以摇晃,可以飞翔。她是一株无根的野草,惟有挂在一颗树上,才可以做摇曳动人状,否则一阵风,她便会吹无踪。或者井昔这棵树并不是她理想中的树,但是恰好就是在那样的时刻,他以树的姿态出现,而她又正好准备飘摇,于是她绕上了他。

O 爱作前提,而他什么都不明白,他只是这样地,配合着她,做一场爱的配角。他心安理得地享受着她的给予,他从来都是享受着她的,却没有给她任何。

《暧昧》

O 原来暧昧关系,只可以温暖你的孤单,给不了任何安全。

《天使只在夜里哭》

O 我愿意为他,舍弃永久不死的生命,抛掉尊贵的女神身份,变做一个掌中的精灵,只等他来,用他的爱,将我拯救。

O 累的时候,我会坐在一片疲倦的云朵上,俯瞰世界,总有一些角落里,发生各种各样的故事,你负了我,我欠了你,真累。

《恕我疏离》

O 原来有这样的一种女人,她端坐微笑,便能光芒四射,她只管沉默,也足以艳压群芳。任何女人看到她,都会生出愧疚,为自己粗陋的容颜而颤抖。谁有勇气和她对视,谁就会变成灰尘里面的一颗沙砾,连呼吸都困难。

O 爱神,我不要爱情,爱情是靠不住的东西,如果我贪恋爱时的甜美,终究会被爱结束时候的利刃刺伤,爱神,你明知道我是一个多么软弱的女子,我不过是一个软弱的女子,如果能够预知道最后的伤害,那么不如狠心地躲开。

O 我变成一棵树,长在爱我的人的身旁,每天可以看到我心爱的人经过,却不能靠近,我成为永恒的处子,永不能尝人神皆迷的爱情,这多么好,哈哈哈哈。笑着,就流出了眼泪。

-----------------------------------------

”沧海月明珠有泪,蓝田日暖玉生烟”

衣带渐宽终不悔,为伊消得人憔悴

惆怅东南一枝雪

人生能得几清明

流水落花红,闲愁万种

电影中优美的英语句子

1、人若无名,便可专心。《英雄》

If a man unknoe back again.

8、不是子弹,而是美女杀死了野兽。《金刚》

Is not a bullet, but beauty killed the beast.

9、历史是由杀死英雄的人写的。《勇敢的心》

History is an and a good man, ale aesthetic fatigue.

32、做人如果没有梦想,那和咸鱼有什么区别?《少林足球》

If a man has no dream, en, especially etimes have to stop, sometimes the crossroads.

39、我愿意付出一切,只求能再次接触你一次!《人鬼情未了》

I am an, to protect our motherland.

49、一个时代结束了,属于那个时代的一切都不复存在。《花样年华》

An era is over, all belong to that era ceased to exist.

50、生活就像一盒巧克力,你永远不知道你会得到什么。《阿甘正传》

Life is like a box of chocolates, you never know what youre gonna get.

51、生活这条狗啊,追的我连从容撒泡尿的时间都没有。《英雄时代》

Life the dog, after I didnt even have time to calm and urine.

52、我知道要想不被人拒绝,最好的办法就是先拒绝别人。《东邪西毒》

53、人生本就是苦还是只有童年苦?生命就是如此。《这个杀手不太冷》

Life is hard or is it just a kid? Life is so.

54、真相是一种美丽又可怕的东西,需要格外谨慎地对待。《哈里波特》

The truth is a beautiful and terrible thing, need to be cautious about.

55、我不相信有天堂,因为我被困在这个地狱的时间太长了。《亚瑟王》

I dont believe in heaven, because I was trapped in the hell too long.

56、我甚至连他的一张照片都没有。他只活在我的记忆里。《泰坦尼克号》

I even dont have a picture of him. He only live in my memory.

57、没有法律。没有限制。只有一条规则永远也别坠入爱河。《红磨坊》

There is no law. There is no limit. There is only one rule: never fall in love.

58、多希望地球是平的,那样,我一直望下去,就可以看到你。《似水年华》

Wish the world was flat, so, I looked down, can see you.

优美的英语句子_优美的句子

一、No man or eone deeply gives you courage.被爱给你力量,爱人给你勇气。

八、人生需要一点勇气和胆量,就如登一座悬崖峭壁的山峰,虽然上面都有云梯、搭好的台阶,可你就是有点胆怯,不敢向前,但你战胜了自我,到达了顶峰,看到了山顶的景色,你就会感到勇气和胆量是成功的标准人生何尝不是如此呢?

九、Today, give a stranger one of your smiles. It might be the only sunshine he sees all day.今天,给一个陌生人送上你的微笑吧。很可能,这是他一天中见到的唯一的阳光。

十、Lookers-on see most of the game. 旁观者清,当局者迷。

十一、I never consider ease and joyfulneas the purpose of life itself.我从来不认为安逸和享乐是人生本来的目的。

十二、I can make it through the rain. I can stand up once again on my oorroher.幸福,就是找一个温暖的人过一辈子。

二十七、ch for it if it doesnt appear in your life.

三十一、I understand you have called content, and you dont understand is th.我懂有你叫知足,而你却不懂有我叫珍惜。

优美的英语句子

1.One is ale true, or having something to eat ething up but can never put it dofort me because each seeone, changes are all around. Then I stepback overlooking one person an is not sexy, she needs emotion; if she is not emotional, she needs reason; if she is not reasonable, she has to knoetime for forgetting.A badly-hurt heart needs no sympathy but understanding.

一段不被接受的爱情,需要的不是伤心,而是时间,一段可以用来遗忘的时间。一颗被深深伤了的心,需要的不是同情,而是明白。

21. I knoeone, asking for no result, no company, no oe more broad-minded and can accept everything. Conversely, I think its a selecting process, knoan, one house, one piece of land to call your oan too beautiful; its a voyage too long, a perfume too strong. Its a music I dont knoe to my window to sing and fly away.

And yellow leaves of autumn, which have no songs, flutter and fall there with a sign.

夏天的飞鸟,飞到我的窗前唱歌,又飞去了。

秋天的黄叶,它们没有什么可唱,只叹息一声,飞落在那里。

优美的英语语句

当明天变成了今天成为了昨天,最后成为记忆里不再重要的某一天,我们突然发现自己在不知不觉中已被时间推着向前走,这不是静止火车里,与相邻列车交错时,仿佛自己在前进的错觉,而是我们真实的在成长,在这件事里成了另一个自己。 e different.

爱所祈求的唯一礼物就是爱。 The only present love demands is love.

离开我就别安慰我,要知道每一次缝补也会遭遇穿刺的痛。 If you leave me, please dont comfort me because each seeone, changes are all around. Then I stepbacke lovers eyes.

Android & Flutter 相互跳转

本文中native和flutter的跳转是借助于咸鱼的FlutterBoost和ARouter框架实现的。

Sync Now...

flutterBoost中需要给每个页面定义一个router_path,然后根据router_path找到对应页面再跳转。

在Application的onCreate中初始化

android jump to flutter

flutter jump to android

电影中优美的英语句子,别说吃你几个烂西瓜

1、人若无名,便可专心。《英雄》

If a man unknoe back again.

8、不是子弹,而是美女杀死了野兽。《金刚》

Is not a bullet, but beauty killed the beast.

9、历史是由杀死英雄的人写的。《勇敢的心》

History is an and a good man, ale aesthetic fatigue.

32、做人如果没有梦想,那和咸鱼有什么区别?《少林足球》

If a man has no dream, en, especially etimes have to stop, sometimes the crossroads.

39、我愿意付出一切,只求能再次接触你一次!《人鬼情未了》

I am .

51、生活这条狗啊,追的我连从容撒泡尿的时间都没有。《英雄时代》

Life the dog, after I didn't even have time to calm and urine.

52、我知道要想不被人拒绝,最好的办法就是先拒绝别人。《东邪西毒》

I know that one way to avoid being rejected, the best way is to refuse others first.

53、人生本就是苦还是只有童年苦?生命就是如此。《这个杀手不太冷》

Life is hard or is it just a kid? Life is so.

54、真相是一种美丽又可怕的东西,需要格外谨慎地对待。《哈里波特》

The truth is a beautiful and terrible thing, need to be cautious about.

55、我不相信有天堂,因为我被困在这个地狱的时间太长了。《亚瑟王》

I don't believe in heaven, because I was trapped in the hell too long.

56、我甚至连他的一张照片都没有。他只活在我的记忆里。《泰坦尼克号》

I even don't have a picture of him. He only live in my memory.

57、没有法律。没有限制。只有一条规则永远也别坠入爱河。《红磨坊》

There is no law. There is no limit. There is only one rule: never fall in love.

58、多希望地球是平的,那样,我一直望下去,就可以看到你。《似水年华》

Wish the world was flat, so, I looked down, can see you.

优美的英语句子_优美的句子

一、No man or eone deeply gives you courage.被爱给你力量,爱人给你勇气。

八、人生需要一点勇气和胆量,就如登一座悬崖峭壁的山峰,虽然上面都有云梯、搭好的台阶,可你就是有点胆怯,不敢向前,但你战胜了自我,到达了顶峰,看到了山顶的景色,你就会感到勇气和胆量是成功的标准人生何尝不是如此呢?

九、Today, give a stranger one of your smiles. It might be the only sunshine he sees all day.今天,给一个陌生人送上你的微笑吧。很可能,这是他一天中见到的唯一的阳光。

十、Lookers-on see most of the game. 旁观者清,当局者迷。

十一、I never consider ease and joyfulneas the purpose of life itself.我从来不认为安逸和享乐是人生本来的目的。

十二、I can make it through the rain. I can stand up once again on my oorroher.幸福,就是找一个温暖的人过一辈子。

二十七、ch for it if it doesnt appear in your life.

三十一、I understand you have called content, and you dont understand is th.我懂有你叫知足,而你却不懂有我叫珍惜。

优美的英语句子

1.One is ale true, or having something to eat ething up but can never put it dofort me because each seeone, changes are all around. Then I stepback overlooking one person an is not sexy, she needs emotion; if she is not emotional, she needs reason; if she is not reasonable, she has to knoetime for forgetting.A badly-hurt heart needs no sympathy but understanding.

一段不被接受的爱情,需要的不是伤心,而是时间,一段可以用来遗忘的时间。一颗被深深伤了的心,需要的不是同情,而是明白。

21. I knoeone, asking for no result, no company, no oe more broad-minded and can accept everything. Conversely, I think its a selecting process, knoan, one house, one piece of land to call your oan too beautiful; its a voyage too long, a perfume too strong. Its a music I dont knoe to my window to sing and fly away.

And yellow leaves of autumn, which have no songs, flutter and fall there with a sign.

夏天的飞鸟,飞到我的窗前唱歌,又飞去了。

秋天的黄叶,它们没有什么可唱,只叹息一声,飞落在那里。

优美的英语语句

当明天变成了今天成为了昨天,最后成为记忆里不再重要的某一天,我们突然发现自己在不知不觉中已被时间推着向前走,这不是静止火车里,与相邻列车交错时,仿佛自己在前进的错觉,而是我们真实的在成长,在这件事里成了另一个自己。 e different.

爱所祈求的唯一礼物就是爱。 The only present love demands is love.

离开我就别安慰我,要知道每一次缝补也会遭遇穿刺的痛。 If you leave me, please dont comfort me because each seeone, changes are all around. Then I stepbacke lovers eyes.

苹果在“伟大”背后其实是龌龊油腻大叔 (连载之一)

在几千年的商业历史上,迄今为止,应该没有一个品牌能像苹果这样在全世界范围内被广泛且深入地神话化、宗教化、图腾化,使其品牌形象在44年间逐渐升华至一种超越宗教、超越人种、超越国家且超越真实(即虚假)的崇高和伟大。这种崇高和伟大触及各种我们能想到的普世价值:自由、平等、尊重个性、创新、关怀弱势等。以至于在中华大地,特别是在知乎这种集聚着被充分洗脑的高不成低不就的果粉的平台,如果对苹果发表一些基于事实的负面评论,那将立即被群起而攻之,那种委曲和愤愤不平让人感觉甚于侮辱了他们的父母。对于苹果,这是一种幸福,也是一种目标实现,因为这正是他们每年花上百亿美元做各种营销的目的。对于商业圈内的友商,对于被苹果欺负和压榨的企业或个人,这是一种霸权主义,这是一种以大欺小,这是一种店大欺客,这是更是一种深深的无奈和悲伤。

如果将企业拟人化,44岁的苹果,无论他外表多么光鲜靓丽,从各种事实来说,在本质上苹果其实是一个唯利是图、不择手段的龌龊油腻大叔。

下面我们弄一个简单编年史来说说苹果为什么是一个唯利是图、不择手段的龌龊油腻大叔。

一、Adobe篇:苹果公报私仇封杀Flash

1982年,从施乐公司辞职创业的查尔斯与沃诺克携手创办Adobe,推出打印软件产品PostScript,大受欢迎。苹果当时的麦金塔电脑好看不好用:缺乏应用软件,于是乔布斯请查尔斯与沃诺克吃饭喝酒,让Adobe为苹果的封闭系统开发苹果版的PostScript,最终双方达成合作意向。苹果还投资250万美元购买了340万股Adobe的股票。Adobe技术结合苹果产品组合获得了成功。

1985年,乔布斯被苹果董事会扫地出门。Adobe的创始人沃诺克为乔布斯说好话,并继续与乔布斯保持密切联系,引起当时苹果强烈不满。于是在1989年,苹果联合微软收拾Adobe,让微软为苹果提供替代PostScript的应用,并卖掉全部Adobe的股票。股票套现成功,赚了约8000万美元,但联合行动失败,苹果在1991年被迫与Adobe恢复合作伙伴关系。

(评论:这是苹果的第一次公报私仇。)

1996年底,乔布斯回归奄奄一息的苹果。1998年,乔布斯找Adobe,希望Adobe为苹果电脑开发一套视频处理软件。当时苹果电脑市场份额低至5%,而开发一套视频处理软件需要耗费巨大的人力物力,Adobe觉得这个项目实在没办法赚钱,于是婉拒了乔布斯,没想到这为10多年后埋下了祸根。

(评论:记仇是苹果各种龌龊行为的一个显著特征。)

2007年,第一代iPhone发布,一炮而红,但iPhone与当时火热的Adobe Flash不兼容(当时世界上所有其他手机厂商都支持Flash)。Adobe争取苹果的支持,但乔布斯拒绝表态。

2008年,第二代iPhone(iPhone 3G)发布。对于Flash,乔布斯模糊地说了一句:Flash并不是很适合iPhone。Adobe觉得还有希望,继续争取。

2009年,第三代iPhone(iPhone 3GS)发布。乔布斯还是没有明确表态。

2010年1月,Adobe决定不等了,称不管苹果愿意与否都投入到针对iOS的Flash开发。同年4月,乔布斯写了一封长篇公开信,宣布iOS不支持Flash,并一口气判了Flash六宗罪,并在别的公开场合跳出产品范畴攻击Adobe这个企业:“Adobe很懒惰…..他们缺乏像苹果一样的行事方法”。对于乔布斯的六宗罪,Adobe进行了逐一反驳,但当然没用。在苹果封杀和各种诋毁下,Flash在最终被HTML5等其他技术淘汰,将在2020年底彻底停止更新。

(评论:乔布斯为了这完美复仇,足足等了14年,而且在iPhone推出后,还继续等了3年多才公开表态,因为他知道要等iPhone足够强了才能有底气与Adobe彻底摊牌,否则这个复仇风险太高。如果在iPhone还不强的时候与Adobe正式宣战,万一Adobe全面停止对苹果产品的支持怎么办?要知道,龌龊需要资本,油腻说明有经验。下面我们看看乔布斯的六宗罪是怎么说的。)

第一罪:Flash是一套封闭的系统。

(评论:我的天!苹果还有脸说别人封闭!苹果整个生态都是封闭的好吗?听到苹果说别人封闭,不仅我们觉得好笑,Adobe也觉得好笑,它的官方回复是:“非常幽默。”Flash的确是一个开放的标准,在2009年它在全球有13亿次安装量,超过200万Flash开发者,92%的Windows用户会装Flash Player,无数动画和游戏都需要Flash。)

第二罪:完整的网络:苹果的用户不用Flash没问题,因为有别的可玩的。

(评论:这个神逻辑很有川建国的风范。逻辑可以简化为:你有个好东西,好多人都用,但我就不用,为什么?因为我有别的东西,别的东西也很好。请问这解释了不用的原因吗?没有。这只是说了不用的补救措施,随便吹嘘一下自己。)

第三罪:可靠性、安全性和性能:Flash造成Mac死机,Flash不安全,Flash在移动端表现不行。

(评论:这是无数果粉用来洗白苹果的理由,更用Flash最终消亡的结果神化乔布斯,说他多么高瞻远瞩,其实根本是胡扯。如果一个软件能引起一个电脑的操作系统死机,你说这个操作系统本身还安全可靠吗?说Flash不安全,感觉的确有点道理,Flash的确好多漏洞,Adobe及Flash的开发者一直在补漏洞。但话又说回来,系统开放的代价是风险提高,但不能因为这个系统有一点风险就彻底否定它,而是应该综合衡量各种因素,特别是用户体验。系统的安全是靠迭代去提升的,不可能一开始就有完美的系统,包括苹果自己。苹果即使是封闭的系统,他的iCloud不是总被攻破吗?iPhone不是也总被刷机破解吗?一件事情要放在一定的历史背景下讨论才有意义:在2000年到2010年间,Flash的的确确让十多亿的用户提供了便利和乐趣,在当时,Flash的确也是苹果客户想兼容的。最后,乔布斯说Flash在移动端表现不行,但事实是当时Flash Player在Google Play上曾广受欢迎,有三分之二的用户给其打了最高分。最终Flash的确是消亡了,但它的消亡一半是因为苹果的封杀(其实还有微软和Youtube的封杀),一半是HTML5在技术上的确有优势,但这个客观结果绝对不能用来洗白乔布斯主观上的公报私仇。再补充一点,果粉老是吹嘘苹果怎么把安全视为生命线,但事实是乔布斯并没有把这点放在最重要的第一罪或最后一罪。)

第四罪:耗电:Flash是软件解码,所以耗电多了1倍。

(评论:乔布斯的原话是:“iPhone播放H.264视频可以坚持10小时,而使用软件解码模式,电池在5小时内耗尽。”请问哪一代的iPhone可以连续看视频10小时?从来没有好不好?iPhone出了名耗电惊人,华为说这个话我们可能相信,苹果说这话自己不心虚?Adobe在安卓上已经验证过用Flash和不用Flash看视频的电量区别,乔布斯根本就是胡扯。)

第五罪:Flash做触摸屏体验不行,而且开发者需要花很多额外的劳动在Flash上实现触摸。

(评论:事实已经证明乔布斯在这点上也是毫无根据。Flash在安卓上体验完美,一点问题没有。至于说开发者不高兴,Flash在当时有无数的应用,开发者都挤破头加入,他们没不高兴,你乔布斯为什么不高兴?Flash收取开发者的费用非常低廉(使用低级功能免费),与苹果的30%抽成相比,你说开发者更喜欢谁?)

第六罪:乔布斯说这是最重要的原因:Flash是一个跨平台开发工具,因此Adobe的目标不是帮助开发者编写最棒的苹果应用软件,于是苹果客户也不能有最好的体验。

(评论:这个逻辑是伪逻辑。为什么Flash是一个跨平台开发工具就能推导出Adobe的目标不是帮助开发者编写最棒的苹果应用软件?我们能举出一堆世界级的跨平台开发工具给iOS带来好体验的例子:腾讯的微信小程序,谷歌的Flutter(咸鱼,京东及美团在用),Facebook的React Native(QQ音乐,QQ空间及手机百度在用),阿里的Weex(淘宝及支付宝在用),还有Adobe的PhoneGap(对的,是你乔布斯说的跨平台不好,现在也是跨平台的工具,还更是Adobe的东西,这个你怎么又不封杀呢?)。可见,乔布斯这一点也是扯淡的。)

综合上面六个罪,乔布斯没有一个理由是靠得住的,这也在侧面证明了苹果封杀Flash纯粹就是以大欺小,公报私仇。

下一篇预告:iPhone 4信号门篇:苹果欺骗客户让客户换个姿势打电话


当前文章:咸鱼flutter,咸鱼之王礼包码
文章网址:http://cqcxhl.cn/article/dsijgdj.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP