自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 资源 (11)
  • 收藏
  • 关注

原创 ExoPlayer架构详解与源码分析(13)——TeeDataSource和CacheDataSource

书接上回,继续贴下上文的蜘蛛网铺垫了那么多的基础,本篇终于可以来分析下CacheDataSource,上篇重点讲完了图的Cache的下半部分,而将Cache和CacheDataSource关联起来的是一个叫TeeDataSource特殊DataSource。到这里整个DataSource部分就全部结束了,下一篇计划通过ProgressiveMediaPeriod,把SampleQueue,Loder和DataSource贯穿,面向整体讲下他们之间如何协调运作的。版权声明 ©。

2024-04-09 08:30:00 920 2

原创 ExoPlayer架构详解与源码分析(12)——Cache

好了基本的介绍完了,现在可以介绍和了。先看下整体结构:上图这里假设CacheDataSource原始的上游数据是通过OkHttpDataSource从网络获取看完上图,是不是感觉非常复杂,没关系我们可以拆解出几个独立的结构一步步了解,可以看到底层的Cache可以作为一个独立的结构,在说CacheDataSource和TeeDataSource前,先把Cache这个基础先了解下。

2024-03-25 09:01:15 1196 1

原创 ExoPlayer架构详解与源码分析(11)——DataSource

好久不见各位,间隔了一段时间忙项目,终于有时间补上ProgressiveMediaPeriod最后一块拼图——DataSource。间隔太久先来个前情回顾。

2024-03-22 08:30:00 971 4

原创 ExoPlayer架构详解与源码分析(10)——H264Reader

TsExtractor解封完TS数据后,会根据payload中的视频类型使用指定Reader继续解析,如果payload是H.264格式,就会使用H264Reader来继续解析PES payload部分视频数据流。

2023-12-06 10:01:47 1013 2

原创 ExoPlayer架构详解与源码分析(9)——TsExtractor

上篇说完了Extractor的整体结构,本篇将详细讲解Extractor的实现,主要通过TsExtractor这个实现类来讲解,顾名思义TsExtractor是用于TS容器格式的解析器。TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。MPEG组织于1994年推出MPEG-2压缩标准,以实现视/音频服务与应用互操作的可能性,MPEG-2标准是针对标准数字电视和高清晰度电视在各种应用下的压缩方案和系统层的详细规定。

2023-11-17 11:50:51 909

原创 ExoPlayer架构详解与源码分析(8)——Loader

ProgressiveMediaPeriod的左半部分SampleQueue已经在上篇讲完,相对今天说的这部分还算简单,ProgressiveMediaPeriod右半部分主要为Loader,而Loader中及包含数据的获取也包含数据的解析,本篇主要分析Loader的整体机构和数据解析部分结构。

2023-11-15 14:20:57 902 3

原创 ExoPlayer架构详解与源码分析(7)——SampleQueue

ProgressiveMediaPeriod中的SampleQueue部分相对其他部分,结构相对完整独立,没有像加载媒体那部分拆分出很多其他的概念,所以优先了解下SampleQueue。本篇主要解答媒体数据是如何在播放器内部缓存的,以及ExoPlayer是如何保证这些数据稳定高效的读写。

2023-11-15 13:52:19 1611

原创 ExoPlayer架构详解与源码分析(6)——MediaPeriod

上篇看完了MediaSource,发现其中正在发挥作用的是其中的MediaPeriod,如果MediaSource是燃料系统的外壳,那么MediaPeriod就是其外壳下的核心

2023-10-23 17:43:01 602

原创 ExoPlayer架构详解与源码分析(5)——MediaSource

上篇说完整体架构,这里开始分析其中的各个组件,先从MediaSource看起,继续拿运载火箭做对比,MediaSource在整个运载火箭中的角色就类似于燃料系统,确保火箭顺利升空,燃料系统是其中重要的一环,需要能在运行过程从持续稳定的提供燃料。ExoPlayer也一样,为了保证能够持续的渲染出媒体内容,就得保证MediaSource持续稳定提供需要的数据。没了就这么多,燃料系统这么简陋的吗?当然不会,因为它把除了Timeline的管理维护之外的几乎所有的工作都交给别人来完成了,它就是下面要重点讲的。

2023-10-16 14:47:56 1289

原创 ExoPlayer架构详解与源码分析(4)——整体架构

想要直接实现Player接口需要非常复杂的代码逻辑,都写在一个类里肯定不现实,需要通过更多层次的扩展简化来实现,当然ExoPlayer就是这么做的,本篇来讲讲的如何通过BasePlayer来简化设计以及ExoPlayer如何将整个复杂的设计划分给一个个子系统来完成的。可以看到EoxPlayer架构的高度可定制化,基本每一个组件都可以在创建时自定义,然后注入到播放器中实现自定义的播放器。

2023-10-09 10:02:35 1092 1

原创 ExoPlayer架构详解与源码分析(3)——Timeline

如果播放器就是一只火箭,那么火箭发射就必须要有一个基于时序的发射计划,火箭在运行过程中通过获取当前时间点的发射计划就会知道当前的时序状态,以及决定下一步该干什么,如需要在什么时候点火、发动机什么时候停机、各个阶段的姿态调整等等。所以设计了播放器还是不够的,还需要描述出媒体的时序结构,但是播放器播放的媒体种类有很多,可以是一个播放列表、一个mp4文件、一个网络的url,一段视频的流,反正千奇百怪。如何设计一个数据结构可以灵活的表示出上面各种的媒体在不同时间点的时序结构呢。

2023-10-06 10:33:27 689

原创 ExoPlayer架构详解与源码分析(2)——Player

如果让你去开发一款播放器,第一步当然想到的就是设计。使用面向对象的思路,去确定ExoPlayer应该具有哪些功能,对外暴露哪些操作,需要解决哪些问题。

2023-09-26 14:14:01 888

原创 ExoPlayer架构详解与源码分析(1)——前言

现在ExoPlayer 现在已经正式入编,合并到了Androidx 的media3中,而且该项目还在持续更新完善中,可见官方对其还是比较重视的。

2023-09-25 21:09:17 511

原创 Android ViewModel LiveData observe onChanged 方法只执行第一次问题

类似问题发生前提onChanged 回调中发生异常setValue被包含在外部try catch中onChanged函数中没有做异常捕获在网络回调中设置setValue很常见,如果在异常中又没有将异常展示,问题将很难发现,这里记录下。

2023-06-28 11:21:03 530

原创 使用FFmpeg生成视频的预览图缩略图

介绍是会选择典型帧,而不是固定帧,测试下来确实是和上面命令结果不一样(执行耗时也更长,应该涉及到选择计算,n的值越大需要的内存就越高,这里需要谨慎选择),具体是根据什么规则选择帧的有兴趣的同学可以研究下源码,顺便告诉我下哈哈。这里使用thumbnail命令可以达到同样效果,区别是thumbnail根据。

2023-04-17 18:07:22 1600

原创 Android 10(Q) multi-resume(多项恢复)带来的问题

在项目中,ActivityA启动ActivityB,ActivityB启动系统图片选择器,如果从系统图片选择器返回,这个时候ActivityA和ActivityB同时都会回调onResume方法,这个时候如果ActivityA中的onResume方法里有代码执行,而且又不希望在后台中执行就会出问题。那么问题又来了为啥Android 10会做出这样的改变呢,原来是为了兼容多窗口多屏幕,应用在上述设备同一个应用可以有多个resume状态下的Activity,具体可以参照。

2022-09-14 17:41:22 839

原创 ExoPlayer 源码阅读小记--音视频数据流分析

基于ExoPlayer 2.17.1源码分析,分析下音视频数据是如何到播放器播放的

2022-06-10 17:22:42 677

原创 ExoPlayer 源码阅读小记--缓存模块及获取HLS已缓存大小

基于ExoPlayer 2.17.1源码分析:首先回到上一篇文章里第一次涉及到缓存的地方:调用StatsDataSource封装的CacheDataSource,这里会调用TeeDataSource 的open,Tees翻译就是三通的意思,这是个一进二出的三通,一个水龙头冷水进,一路进小厨宝缓存加热后出,一路直接水龙出//TeeDataSourcepublic long open(DataSpec dataSpec) throws IOException { bytesRemaining =

2022-05-24 20:19:18 1068

原创 ExoPlayer 源码阅读小记--HLS播放带缓存加载M3U8文件过程

基于ExoPlayer 2.17.1源码分析

2022-05-23 11:11:31 2520 2

原创 Android 在Service中使用ViewModel

别想了,官方并不推荐这种做法。ViewModel应该与Activity或Fragment紧密结合使用,因此它注定要存在于应用程序的UI层中。因此,我不建议在Service中使用ViewModel。可以将Service和ViewModel的公共代码抽出。具体参考:https://github.com/android/architecture-components-samples/issues/137#issuecomment-327854042The ViewModel should be used

2020-12-04 11:53:00 5355 4

原创 Android Gradle 打包时排除 Assets 目录指定文件

直接上代码,排除 Assets 目录或者子目录下的 qaa.js,ccc.css,bbb.t 这3个文件,多个文件以!开头:结尾。当一个文件夹下所有文件都排除后,空文件夹会自动删除。 buildTypes { debug { aaptOptions { ignoreAssetsPattern '!qaa.js:!ccc.css:!bbb.t:' } }}...

2020-11-24 17:39:50 3306 1

原创 获取 Android Toolbar的真实准确高度问题

项目中设置了Toolbar代码片段如下<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content"&gt

2020-08-16 11:01:13 977

原创 强制开启Android 分区存储 沙盘文件系统

为了测试Android 11下强制分区存储后的应用兼容问题,这里摸索了下目前的打开方式1. 在AS里下载API 30的 虚拟机2. 打开虚拟机,进入首页后,执行adb shell sm set-isolated-storage on3. 安装应用,系统 > 高级 > 开发者选项 > 应用兼容性变更,找到对应应用勾上下面几项4. 卸载应用,重新安装5. 这个时候发现无论应用Target API多少,是否设置requestLegacyExternalStorage 都无法打开

2020-07-23 15:30:29 1279

原创 Android RadioButton 在低版本设置 android:button= @null 去除系统按钮样式失效的解决方法

Android RadioButton 在低版本设置 android:button= @null 去除系统按钮样式失效无效的解决方法具体原因参考这篇文章:https://blog.csdn.net/wl9739/article/details/53744324解决方案:在xml里同时加上 android:button="@null" app:buttonCompat = "@null"...

2020-03-12 10:29:29 849

原创 Kotlin 杂谈之 setOnClickListener 接口入参为什么可以简写成 Lambda

Kotlin 杂谈之 setOnClickListener 为什么可以简写成 Lammbda先上代码://例1 //java里定义的一个接口 public interface OnClickListener { void onClick(View v); } //kotlin调用 view.setOnClickListener { //...

2019-12-30 17:30:54 4339

原创 Intellij或者Eclipse导出可运行jar包运行比IDE里慢的一种原因

Intellij或者Eclipse导出可运行jar包运行比IDE里慢的一种原因现象查找原因解决方法现象最近在写一个百亿级数据库导出程序的时候,发现代码在IED(Eclipse或者Intellij)中导出一个测试的百万级数据库只要36秒,然而当打成jar包单独运行的时候,发现同样的数据量却需要240秒。大致代码如下: String p = path + "/" + exportFil...

2019-12-24 16:44:26 803 1

原创 Android 加载H5页面数据无法传递正确展示的一个可能原因

Android 加载H5页面数据无法传递正确展示的一个可能原因最近解决一个比较有意思的问题:功能:是这样的Android 通过 WebView 加载一个H5网页,然后向网页里动态传递一些数据,传递方式为将数据转成 json,然后通过 loadurl 的方式传递json,调用js设置网页数据。现象:使用过程中发现某些情况下页面无法正确加载传递过去的json数据,导致H5页面展示错误。原因...

2019-11-01 15:49:10 872

原创 直接打开开发者选项,绕过oppo恶心的验证码

这里写自定义目录标题直接打开开发者选项,绕过oppo恶心的验证码直接打开开发者选项,绕过oppo恶心的验证码目前本人的Color OS 3.0测试可用这个方法:新建Android工程,在activty执行以下代码打开开发者即可:/** * 打开开发者模式界面 */ private void startDevelopmentActivity() { ...

2018-12-03 10:42:19 15229 10

原创 android TextView 跟随 seekBar 一起滑动,最简单代码,完美实现,无偏差

开发中遇到如题的需求找了一些方法,发现一起移动都会有偏差,于是就自己修改了下代码,可以实现无偏差一起滑动,代码如下: 1.布局代码&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto...

2018-09-04 20:46:39 1523 1

原创 InputConnectionWrapper commitText StackOverflowError

开发过程中打开 Android Studio 的 Android Profiler 做性能优化, 然后在输入框处准备输入时应用异常退出,代码没有任何修改,只是打开了 之后只要一点开输入文字就异常退出错误如下:04-13 17:36:12.906 9841-9841/demo.greendao D/Error: ERR: exClass=java.lang.StackOverflow...

2018-04-13 17:46:53 611

原创 Android Studio 无关日志太多解决方法

Logcat 右上角 点击 Edit Filter Configuration 然后 Log Tag 填入 ^(?!.(OpenGLRenderer|dalvikvm)).$ 中间要过滤的TAG字符更具实际情况填写,还有别忘了填写Package Name当前包名...

2018-04-10 19:15:00 2622

转载 Gradle 切换阿里云仓库

转载地址:http://xuanzhui.iteye.com/blog/2335870 原因是国内访问jcenter太慢,甚至连接不上,就会报各种关于依赖更新失败的错误。 以前oschina(也就是开源中国)提供了jcenter的镜像地址,然而不幸的是因为各种原因,最近停止服务了开源中国 Maven 镜像库关闭访问幸运的是阿里云提供了jcenter镜像 http://maven.al...

2018-04-09 10:31:16 13602

原创 Android Studio Gradle 代理设置

Android Studio Gradle 代理配置由于使用的是公司内网导致,AS需要代理才可以联网,但是设置了AS的代理并不能使Gradle也处于代理环境需要单独设置Gradle的代理: 修改gradle.preportisesystemProp.http.proxyHost=代理主机地址地址systemProp.http.nonProxyHosts=忽略地址systemPro...

2018-04-09 10:28:11 4588

转载 彻底明确怎样设置minSdkVersion和targetSdkVersion

minSdkVersion和targetSdkVersion相信非常多人都不太理解。我在网上也看了很多关于这两者差别的文章,感觉说的都非常模糊。直到我在stackOverFlow看到Android Min SDK Version vs. Target SDK Version这篇文章后,我才最终弄清楚怎样去设置minSdkVersion和targetSdkVersion。如今我将分享给大家。简言...

2018-02-09 17:21:39 3181

翻译 分享一个PHP PDO 的工具类,采用预编译有效防止SQL注入

分享一个PHP PDO 的工具类,采用预编译有效防止SQL注入

2017-07-27 22:24:56 2225 1

原创 Krpano vtourskin.xml 默认皮肤详解

网上关于Krpano的解释比较少,像XX中文网都是VIP才可以查看,于是就打算将自己学习的东西和大家分享,有详细的注释,主要为自己的一些见解,重在分享,供大家参考,有问题的地方还请告知:)。

2016-11-08 22:28:45 10099 2

原创 Sublime Text 特殊语法 注释快捷键失效的解决方法

Sublime Text 特殊语法 注释快捷键失效的解决方法有时候一些新的语言Sublime Text无法识别,操作注释快捷键时会无法注释,这里有一种解决方案。 打开Sublime text 点击Preferences –> Browse Packages 在资源管理器中打开插件目录。新建一个新的文件夹命名为语言的名称如Java就创建文件夹java,然后在其文件夹下创建一个空的Text文件。Tex

2016-11-06 17:27:20 4420

Oppo Vivo Color OS 打开开发者选项,绕过验证码

Oppo Vivo Color OS 打开开发者选项,绕过验证码,目前再自己的oppo Color OS 3.0上测试可以直接打开,绕过验证码。(这种垃圾系统,以后开发者可以考虑不适配了,对开发者一点也不友好,把原生Android改成shi)

2018-12-03

chrome插件开发文档

chrome插件开发文档 chrome插件开发文档 chrome插件开发文档

2017-12-19

Winmail 4.7破解版

Winmail 4.7破解版,内附破解说明,Winmail 4.7破解版

2017-12-19

Clover_Setup_3.0.406 windows 多标签资源管理器软件,最后一个无广告版本

Clover_Setup_3.0.406 windows 多标签资源管理器软件,最后一个官网无广告版本,且用且珍惜

2017-12-19

Python ip 代理池爬取工具

Python ip 代理池爬取工具,Python ip 代理池爬取工具,Python ip 代理池爬取工具

2017-12-19

javafx 开发必看所有实例集合包含说有控件使用

javafx 开发必看所有实例集合包含说有控件使用,覆盖大部分的效果

2017-12-19

JavaFX 简易音乐播放器

JavaFX 简易音乐播放器,适合javafx学习使用,导入eclipse直接使用

2017-12-19

javafx 选课系统

java javafx 界面开发 选课 系统 ,带设计文档说明,UI设计齐全,直接拿来用

2017-12-19

java图书管理系统

java 图书管理 系统 带界面,带数据库直接导入即可使用

2017-12-19

仿4.0spinner

仿4.0spinner

2015-02-02

SB蛇-----c语言开发的程序

上网发现有个牛人无聊写的新版贪吃蛇,玩了下蛮好玩的,很有挑战性哦!(压缩包里直接有源程序可供学习交流)

2012-03-27

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除