Android
文章平均质量分 65
童话阿噗
这个作者很懒,什么都没留下…
展开
-
Android应用的流量统计方法
通过shell读取1.获取应用的userId adb shell dumpsyspackagetv.danmaku.ijk.media.example |grep userId 2.根据userId查询/proc/net/xt_qtaguid/stats文件 adb shell cat /proc/net/xt_qtaguid/stats | grep10156 之后会得到类似如下输出: idx|iface|acct_tag_hex|uid_t...原创 2022-03-09 16:14:18 · 5147 阅读 · 0 评论 -
VLC-Android起播丢帧问题分析
最近在搞MEMC优化过程中,经常能够发现视频在起播阶段会丢几帧,记录下问题分析过程。对于AV同步及丢帧等问题的分析,最好就是将数据从demux到decoder最后到output的pts都打印出来,VLC还涉及到stream时间与系统时间的转换,因此clock_point也需要打印出来,这样能够快速地定位到问题原因。对于这题,视频被丢的前几帧和后续的正常帧有一个区别,那就是它们在做时间转换时参考的clock_point不一样。为什么会发生这种情况呢?我们回顾下VLC-Android音画同步原理中关于b原创 2021-11-25 15:14:48 · 3717 阅读 · 0 评论 -
VLC-Android退出流程
最近在分析一个播放器退出ANR的问题时,详细地跟踪了VLC的退出流程,这里问题的分析先按下不表,我们先结合代码详细了解下播放器的退出流程。1.java—>jni—>native的Stop调用流程,没什么好说的,直接上代码 //MediaPlayer.java /** * Stops the playing media * */ publicvoidstop() { synchronized(this) { ...原创 2021-11-18 17:23:03 · 3009 阅读 · 0 评论 -
VLC-Android视频显示流程
最近在做MEMC调试涉及到了播放器刷帧频率的问题,因此深入研究了一下VLC视频的显示流程,仔细研究过后发现还是有挺多坑的,在这里分享下:VLC的视频显示逻辑主要在video_output.c中,其内部维护了一个线程用来接收control和刷新显示(这里和ijkplayer很像): //vout中其实有两个线程,分别名为Thread和ThreadStep,视频正常播放走的是Thread,步进播放走的是ThreadStep(类似ffplay的s键),这里主要还是介绍Thread /****原创 2021-11-15 14:15:00 · 1568 阅读 · 0 评论 -
VLC-Android音频播放不完整问题踏坑
对于音频播放异常的问题,由于我们可以拿到解码前后的数据,因此还是比视频播放异常的问题好分析一些的。通过dump解封装后的es数据和解码后的pcm数据,我们可以快速的定位问题出现的大致位置:demux,decoder,aout。本题也是一样,先dump es和pcm数据,发现都没有问题,那基本就是aout部分惹的祸了。通过加日志,发现在音频播放快结束的时候,aout调用了两次flush。全局搜索aout_DecFlush函数,发现有三种情况下会调用:1.decoder flush;2.decoder de原创 2021-11-12 14:04:11 · 4120 阅读 · 0 评论 -
linux下内存压力测试——stressapptest
一、简介 stressapptest是Stressfull Application Test的简称。 该软件更多的时候测试的是内存控制器和总线接口,而不是存储单元的功能。测试是会最大化总线和内存的交换量,从而使交换失败的概率会增加。 该软件采用多线程对内存进行拷贝和磁盘接口读写,占用85%的内存块,而且每个线程都是随机进行读写操作,一般每个处理开启2个线程,磁盘也是。 该软件在测试系统接口方面比较好,可以评估一些内存信号完整性或者内存芯片、接口总线及磁盘方面的情况;...转载 2021-11-05 09:49:06 · 12002 阅读 · 0 评论 -
ExoPlayer音画同步原理
ExoPlayer和大部分播放器一样,默认采用Audio Master的同步方式,其视频同步原因在MediaCodecVideoRender.java的processOutputBuffer()函数中,下面结合函数详细看下音画同步的原理。protected boolean processOutputBuffer( long positionUs, long elapsedRealtimeUs, @Nullable MediaCodecAdapter codec,原创 2021-11-01 16:06:29 · 594 阅读 · 0 评论 -
应用级播放器对比
VLC ExoPlayer ijkplayer 平台 Android、iOS、Linux、Windows跨平台 Android Android、iOS 封装格式 全面 一般 全面 协议 全面 全面 全面 Android MediaCodec NDK java jni->java Tunnel Mode 不支持 支持 支持 Audio Bypass 不支持 支...原创 2021-11-01 14:46:54 · 1221 阅读 · 0 评论 -
VLC-Android消息机制介绍
VLC通过variables来接受外部控制事件和向外部发送事件,variables同时也可以作为modules之间简单通讯的载体。本文通过举例详细介绍下variables的功能。接受外部控制事件以seek为例,vlc-android在seek时可以调用MediaPlayer.java的setTime()方法。 /** * Sets the movie time (in ms), if any media is being played. * @param time: T..原创 2021-10-28 18:45:00 · 1134 阅读 · 0 评论 -
VLC-Android音画同步原理
简介播放器的音视频同步无外乎三种方式:视频往音频同步、音频往视频同步及音视频同时往系统时钟同步。大部分播放器都是采取第一种方式,例如ffplay、EXOPlayer、Nuplayer、ijkplayer等。而VLC就比较不合群了,它采用音视频同时往系统时钟同步的方式,下面结合代码简单介绍下音画同步的原理。VLC专门有一个clock.c文件,用来维护时钟信息,其核心结构体如下,阐述了VLC音画同步的核心思想: typedef struct { mtime_t i_st...原创 2021-10-25 11:32:47 · 1344 阅读 · 1 评论 -
VLC-Android seek后闪黑屏问题分析
从测试描述了解到该问题复现概率较高,因此决定刷最新版本后重新抓份log。果然,seek几次就遇到了问题,查看log并定位到最后一次seek的位置,可以明显的看到如下异常打印: //seekto指令 04-3012:02:08.8401616416164I PlayerWrapper: [FMPlayer] [3] seekTo(69069) //dequeue_in超时 04-3012:02:10.9021616419639W VLC : [e3f8...原创 2021-10-22 10:26:34 · 1016 阅读 · 0 评论 -
Android HandlerThread踏坑
今天在给前人“擦屁股”时看到了类似如下代码:Button mStartButton;mStartButton = findViewById(R.id.start_button);mStartButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i(TAG, "mStartButton onClick"); i原创 2021-09-24 17:06:22 · 251 阅读 · 0 评论 -
【转载】Android NDK 面试题汇总
一、谈谈你对 JNI 和 NDK 的理解 JNI: JNI 是 Java Native Interface 的缩写,即 Java 的本地接口。 目的是使得 Java 与本地其他语言(如 C/C++)进行交互。 JNI 是属于 Java 的,与 Android 无直接关系。 NDK: NDK 是 Native Develop...转载 2021-09-14 19:49:42 · 363 阅读 · 0 评论 -
Android Tunnel Mode配置简介
目录简介处理方式配置流程VLC适配简介Tunnel Mode是Android专门在TV上提出的多媒体技术方案,用来缓解播放4K高帧率视频播放带来的性能问题。有关Tunnel Mode的官方详细介绍地址如下https://source.android.com/devices/tv/multimedia-tunneling,下面简单介绍下Tunnel Mode的配置方式。关于Tunnel Mode的配置,在Android 11版本以后又发生了一些变化,我们看下Android的官.原创 2021-05-06 15:37:04 · 2443 阅读 · 2 评论