- 博客(164)
- 资源 (16)
- 收藏
- 关注
原创 BnMediaPlayerService 中的onTransact 是怎么被调用到的
Android系统跨进程通信中,BnMediaPlayerService::onTransact()的调用流程如下:客户端通过BpMediaPlayerService发起transact()请求,Binder驱动将事务转发到服务端进程。服务端Binder线程池接收事务后,通过BBinder::transact()调用子类重写的onTransact()方法处理具体业务。该机制实现了异步跨进程通信的统一入口,客户端与服务端通过事务码和Parcel数据进行交互,底层由Binder驱动完成进程切换和数据传输。整个过
2026-02-09 15:00:04
599
原创 Android9 BpMediaHTTPConnection接收端实现即MediaHTTPConnection.java
摘要:MediaHTTPConnection通过继承IMediaHTTPConnection.Stub成为Binder服务端,实现与C++层BpMediaHTTPConnection的通信。核心功能包括接收Binder事务、解析参数、处理业务逻辑并返回结果。Stub基类自动完成事务处理流程,确保线程安全,并通过统一的接口描述符与C++层匹配。这种设计使得Java层能直接处理C++层的Binder调用,简化开发,是Android 9中MediaHTTPConnection实现的关键机制。
2026-02-09 11:03:21
601
转载 Nuplayer简介
Android流媒体框架的核心是NuPlayer,自Android 2.3引入后逐步取代AwesomePlayer。文章详细介绍了MediaPlayer的使用方法,包括创建实例、设置数据源(资源文件、本地文件、网络文件)、控制播放状态(prepare/start/pause等)以及设置监听器。重点分析了NuPlayer的架构,其基于ALooper/AHandler异步机制,通过Source模块解析数据,Decoder连接ACodec进行解码,Render负责音视频同步输出。文章还通过序列图展示了NuPlay
2026-02-06 14:02:06
66
原创 AHandler 没有registerHandler(this) 怎么调用到onMessageReceived
摘要: AHandler/ALooper/AMessage机制的核心在于外部Looper注册Handler的设计范式。LiveSession继承AHandler后,其注册动作由上层类(如LivePlayer)通过mLiveLooper->registerHandler(mLiveSession)完成,而非自身调用。AMessage通过保存Handler的强引用和唯一ID实现精准分发,Looper根据消息中的ID从映射表查找对应Handler并触发onMessageReceived。这种设计实现了一个L
2026-02-06 13:52:19
596
原创 BnMediaExtractor BpMediaExtractor IMediaExtractor MediaExtractor 的关系
Android媒体框架中的IMediaExtractor/BpMediaExtractor/BnMediaExtractor/MediaExtractor四类构成了Binder跨进程解封装体系。IMediaExtractor是根接口定义解封装方法;Bn/BpMediaExtractor是AIDL生成的Binder服务端/客户端骨架;MediaExtractor是实际业务实现类,继承BnMediaExtractor并承载解封装核心逻辑。在Android9中,RemoteMediaExtractor作为BnMe
2026-01-30 10:26:08
613
原创 BpMediaExtractorService 隐私调用
Android框架通过Binder接口实现跨进程通信,其中BpMediaExtractorService作为IMediaExtractorService的客户端代理,其创建和调用完全由interface_cast模板函数隐式完成。该模板函数会调用IMediaExtractorService::asInterface方法,自动创建BpMediaExtractorService实例并返回接口指针,使调用者无需直接操作代理类。实际调用场景主要出现在NuPlayer::GenericSource和MediaExtr
2026-01-29 17:50:11
581
原创 BpMediaExtractorService BnMediaExtractorService IMediaExtractorService MediaExtractorService 关系
Android媒体框架中,MediaExtractorService的实现遵循Binder跨进程通信标准设计:IMediaExtractorService作为根接口定义方法规范,由AIDL自动生成BnMediaExtractorService(服务端骨架)和BpMediaExtractorService(客户端代理),而MediaExtractorService则是开发者手动实现的业务逻辑类。从Android9到10+,核心区别在于服务进程归属变化(从MediaServer到独立media.extracto
2026-01-29 17:48:26
615
原创 EXOPlayer学习
本文主要分析了EXOPlayer1的源码实现及关键问题。首先介绍了学习前的准备工作,包括视频流硬解、音频硬解的代码实现要求,以及解决音视频同步、网络视频流硬解等问题。随后详细剖析了EXOPlayer的源码结构,重点跟踪了播放流程:从PlayerActivity初始化播放器、创建解码器,到处理播放资源、prepare阶段的数据解析,再到MediaCodec的渲染过程。文中详细解读了核心类ExoPlayerImpl和ExoPlayerImplInternal的实现,分析了HLS资源的处理流程,以及MediaCo
2025-11-13 09:34:28
676
原创 android11 native binder service入门之创建一个自己的service
本文实现了一个Android Binder服务"myservice",包含服务端和客户端两部分。服务端通过继承BBinder类实现了一个加法服务,接收两个整数并返回它们的和。客户端通过ServiceManager获取该服务,发送40和50两个整数,成功获取到结果90。代码展示了Binder跨进程通信的基本流程,包括服务注册、事务处理和结果返回等关键步骤。该实现验证了Android Binder机制的可行性,为开发系统服务提供了参考范例。
2025-10-28 16:58:58
941
原创 live555 编译
本文介绍了live555的编译安装过程。首先下载live555-latest.tar.gz并解压,进入live目录后执行./genMakefiles linux-64bit生成Makefile,然后make编译(遇到std::atomic_flag错误时改用./genMakefiles linux-gdb-no-std-lib解决)。最后执行sudo make install完成安装,会将库文件和可执行程序安装到/usr/local目录下。测试时运行testProgs下的testH264VideoStrea
2025-10-23 14:22:55
493
原创 性能分析ubuntu系统perf
这篇文章介绍了使用FlameGraph工具生成火焰图的方法。首先通过git克隆FlameGraph项目并设置环境变量,然后使用perf record命令记录程序运行数据,接着用perf script和stackcollapse-perf.pl处理数据生成折叠的堆栈跟踪,最后用flamegraph.pl生成SVG格式的火焰图。文章还提到直接抓取进程ID的方式记录的数据量较少。整个过程展示了如何利用这些工具分析程序性能并生成直观的火焰图。
2025-10-22 13:53:29
208
原创 性能分析工具simpleperf
本文介绍了使用simpleperf工具进行Android性能分析的完整流程:1)通过命令行抓取进程性能数据;2)使用NDK工具生成HTML报告和火焰图数据文件;3)利用FlameGraph工具将数据转换为可视化火焰图;4)在浏览器中查看分析结果。文中还提到运行过程中出现的报错可以忽略,并提示FlameGraph工具需要自行下载。
2025-10-21 16:49:59
237
原创 c++ 11 特性笔记
防止头文件被多次包含(比 include guard 简单)cpp// ...等价于:cpp// ...#endif#define MYHEADER_H 防止头文件被重复包含,避免重复定义错误。名字可以不和头文件一样。
2025-06-30 17:57:54
284
原创 WIFI快连协议层原理-mdns
WIFI物联网解决方案中,通常我们需要对设备进行绑定,需要通过某种方法先对设备进行发现,比如硬件采用广播的方式,定时向外发送上线消息或者采用一问一答的方式进行发现,Bonjour是由苹果公司实现的一种零配置网络(Zeroconf)协议,它是一种基于服务的设备发现协议,不仅能够自动获取有效IP地址,还可以通过查询服务的方式来找到设备地址,只要双方约定好服务(service)的名称,设备的IP地址和端口都是可以变化的!一、mDNS协议和DNS-SD协议。
2025-06-24 09:59:38
1238
原创 ijkplayer编译ffmpeg4.0时加入libxml2库时出现: ERROR: libxml-2.0 not found using pkg-config, 解决方法及原因
由于需要ijkplayer-android支持dash流媒体协议,而dash协议又依赖于libxml2库,所以需要将libxml2加入ffmpeg中。但是在加入libxml2后编译出现了很多问题,在此记录一下解决过程以及思路。修改ijkplayer/android/contrib/tools/do-compile-ffmpeg.sh,如下;ijkplayer中ffmpeg4.0编译问题。特别注意需要使用静态库,libxml2.a。:编译libxml2。
2025-06-10 11:52:40
997
转载 ijkplayer 解码实现分析——硬解篇
本文主要在基于ijkplayer 解码框架分析和ijkplayer video显示分析的基础上,分析了ijkplayer在android上的硬解pipenode——mediacodec的封装和使用。
2025-05-23 15:00:10
619
原创 FFmpeg3.4 libavcodec协议框架增加新的decode协议
查看ffmepg下面的configure文件发现,config.h文件;解码协议的配置是通过libavcodec/allcodecs.c文件,通过查找DEC关键字生成的。1、在libavcodec/allcodecs.c 新增。3、在libavcodec下新增mycode.c文件。2、在libavcodec/ makefile新增。
2025-05-13 09:56:04
614
原创 FFmpeg3.4 libavformat协议框架增加新的protocol协议
新建live.c文件,实现URLProtocol中感兴趣的函数,代码如下#endifint ttl;int dscp;return 0;return 0;return 0;2、protocols.c文件增加3、libavformat/Makefile增加4、完成这三步后,则可以将原有url修改为到此,就完成了协议的替换了。后面live协议中的实现就任由你折腾了。
2025-05-09 11:37:12
1156
原创 AHandle ALooper AMessage 总结
/如果之前消息队列为空,没有event,loop是处于阻塞状态的,此处当有消息进入时,先通知looperthread启动。//1. registerHandler会调用AHandler的setID方法将looper设置到Handler里面。//创建一个AHandler实例。//创建一个ALooper实例。//进到looper线程。
2025-03-13 16:00:12
100
转载 AHandler AMessage ALooper消息机制
普通消息被Post到消息队列,Looper不断的从队列中取出消息并分发给相应的Handler处理。如果是需答复消息的话使用Handler处理完以后通过postReply将消息返回给发送方,发送方通过新建的接收。
2025-03-13 11:51:33
192
原创 Android线程间异步通信机制源码分析
本文简单介绍了Android系统线程之间异步通信的机制,从源码的角度简单谈论了线程通信时的基本工作。其中未详细深入到messageQueue的具体管理操作,只是简单提及了message对象的回收,具体细节有空再补上。
2025-03-13 10:51:29
921
原创 Android MediaPlayer的核心原理
对于Android这样一个完整又相对复杂的系统, 一个MediaPlayer功能的实现不在其具体的功能,而是具体功能如何适应Android系统Android MediaPlayer的主要具体实现在OpenCore的Player中,这部分不是本文的关注点。在各个库中,libmedia.so位于核心的位置,它对上层的提供的接口主要是MediaPlayer类,类libmedia_jni.so通过调用 MediaPlayer类提供对JAVA的接口,并且实现了android.media.MediaPlayer类。
2025-03-13 09:52:23
776
转载 ijkplayer-丢帧策略深入分析
1.测试拿过来个视频,发现用ijk播放器与系统播放器(mediaplayer)播放感觉不一样,用ijk播放感觉播放页面卡顿一点,没有系统播放器那么流畅。下面看一下这个问题,这个问题的原因其实很简单,由于我丢帧值设置的是5,改成1就可以感觉2个播放器在体验上感觉差不多了。(丢5帧人眼就可以看出来差别了!2.在高通660的机器上播放一个4k(30fps)视频,但是无法正常播放,实际一秒的解码帧只有20帧,实际播放只有4帧这样。导致画面卡顿,音视频不同步。
2024-10-22 13:57:16
465
原创 wifi p2p 设置ssid android wifi p2p协议
wifi p2p 设置ssid android wifi p2p协议_温柔一刀的技术博客_51CTO博客
2024-10-16 14:20:03
164
原创 remote: Support for password authentication was removed on August 13, 2021.
2021年8月13日 github修改了验证的方法,相关的密码不能够直接输入,需要通过相关的秘钥token进行输入。因此我们需要在自己的账户生成对应的token才可以正常的在本地push对应的代码到远程github上。生成对应的token。
2024-08-07 17:59:06
392
原创 ijkplayer 自定义协议播放加密内容 Android
想对播放的音视频进行加密,防止资源被盗用,该怎么办呢?这篇文章从自定义协议的角度来提供一中实现思路。在 ijkplayer 的基础上,通过实现自定义协议对文件进行解密。边解边播,以此为基础,还可以实现在线资源边下载边解密边播放。结合 ijkplayer 源码阅读本文效果最佳。
2024-08-02 11:10:20
2018
原创 从零开始,手把手教你如何在Ubuntu下编译VLC-Android源码
公司项目中使用的库文件,有点老,对系统兼容性太差了,当程序运行在系统上时,回弹出警告框,提示异常,虽然,程序播放视频没有问题,但是,总是弹出提示框就非常不友好了,为此,就需要重新编译一个新的库文件。由于,在编译中遇到了一大堆难题,足足花了3天时间才将源码编译成功。期间在网上查找了不少参考资料,但是,大都介绍太过详细,好多地方没有将清楚,非常容易误导他人,所以,决定下一篇详细的教程来记录此次编译的过程,希望能给大家带来帮助。从零开始在Linux编译VLC-Android开源项目这篇博客给我带来的帮助。
2024-07-16 09:30:17
1032
原创 ndk编译android系统下运行的ffmpeg配置
bin/bashthenfiAPI=28CPU=$1ARCH=""SYSROOT=""CC=""CXX=""thenARCH=armelsefi--cc=$CC \build()CPU=$1make -j32thenelsefimake cleanmake clean。
2024-04-29 15:11:09
1010
3
转载 WebRTC实现Android传屏demo
WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和音频流或其他任意数据的传输。目前,WebRTC的应用已经不局限在浏览器与浏览器之间,通过官方提供的SDK,我们可以很容易的实现本地应用间的音视频传输。在Android平台上,我们也非常容易的集成WebRTC框架,用非常简洁的代码就能实现强大、可靠的音视频传输功能。
2024-03-21 14:25:29
833
1
转载 Miracast技术详解(四):Sink源码解析
Miracast Sink端源码最早出现在上,通过可以很方便的查看:但是在以后,Google却移除掉了这部分源码,详细的commit记录在:1234虽然移除了Sink端代码,但是Source端源码是还在的,我们可以通过Android手机的投射功能实现Miracast投屏发送端。最终,通过回调音视频裸流给进行解码,进行音视频数据的播放,整个端的流程就到此结束了。相信看完上面所有源码解析后,自己写这部分逻辑也不是难事,当然更好的办法肯定是基于Sink端的代码进行移植。移植。
2024-03-21 14:23:28
1066
转载 Miracast技术详解(三):RTP & MPEG2-TS
在上一篇文章中,我们已经成功完成RTSP能力协商与会话的建立,并准备开始音视频流的传输阶段。那么下一步,就是对音视频流进行解析,并将音视频展示给用户的过程。这样整个Miracast的流程就算分析完毕了。先简单来总结下,在Miracast底层的实现中,是采用RTP协议对MPEG2-TS数据包进行封装,其中MPEG2-TS又同时封装了Audio和Video两种ES(Elementary Stream)。其中Audio格式一般为AAC,Video则为H.264。
2024-03-21 14:22:20
1144
转载 Miracast技术详解(二):RTSP协议
在上一篇博客中我们已经通过Wi-Fi P2P建立好了Source和Sink端的TCP连接,在Miracast后续的音视频传输过程中,将采用RTSP协议来对流媒体进行控制。因此接下来的步骤就到了RTSP协商、会话建立及流媒体传输的阶段。首先,什么是RTSP协议呢?实时流协议是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。
2024-03-21 14:20:46
1310
转载 Miracast技术详解(一):Wi-Fi Display
Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。
2024-03-21 14:19:06
3626
1
原创 MediaPlayer到ACodec到OMX流程(Android7.1 NuPlayer)
【代码】MediaPlayer到ACodec到OMX流程(Android7.1 NuPlayer)
2024-03-13 09:19:26
786
原创 TS流分析
PAT表主要包含频道号码和每一个频道对应的PMT的PID号码,这些信息我们在处理PAT表格的时候会保存起来,以后会使用到这些数据。[cpp]//节目号// 节目映射表的PID,节目号大于0时对应的PID,每个节目对应一个[cpp]">//PMT 表定义[cpp]//指示特定PID的节目元素包的类型。该处PID由elementary PID指定//该域指示TS包的PID值。这些TS包含有相关的节目元素//前两位bit为00。该域指示跟随其后的描述相关节目元素的byte数。
2023-09-25 13:50:30
865
原创 MediaCodec 低延时解码
我们在使用Android的硬解进行解码时,如果是Android11以上则可以使用其特性低延迟,以下是Android 11支持的低时延特性:ANGLE支持:Android 11引入了ANGLE(Almost Native Graphics Layer Engine)支持,它是一个开源的跨平台图形引擎,可以将OpenGL ES和Vulkan API转换为DirectX API。使用ANGLE可以提高图形渲染的性能和稳定性。
2023-08-04 10:30:23
2074
FLEX从入门到精通
2017-09-19
linux环境编程
2017-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅