- 博客(157)
- 资源 (16)
- 收藏
- 关注
原创 EXOPlayer学习
本文主要分析了EXOPlayer1的源码实现及关键问题。首先介绍了学习前的准备工作,包括视频流硬解、音频硬解的代码实现要求,以及解决音视频同步、网络视频流硬解等问题。随后详细剖析了EXOPlayer的源码结构,重点跟踪了播放流程:从PlayerActivity初始化播放器、创建解码器,到处理播放资源、prepare阶段的数据解析,再到MediaCodec的渲染过程。文中详细解读了核心类ExoPlayerImpl和ExoPlayerImplInternal的实现,分析了HLS资源的处理流程,以及MediaCo
2025-11-13 09:34:28
585
原创 android11 native binder service入门之创建一个自己的service
本文实现了一个Android Binder服务"myservice",包含服务端和客户端两部分。服务端通过继承BBinder类实现了一个加法服务,接收两个整数并返回它们的和。客户端通过ServiceManager获取该服务,发送40和50两个整数,成功获取到结果90。代码展示了Binder跨进程通信的基本流程,包括服务注册、事务处理和结果返回等关键步骤。该实现验证了Android Binder机制的可行性,为开发系统服务提供了参考范例。
2025-10-28 16:58:58
892
原创 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
433
原创 性能分析ubuntu系统perf
这篇文章介绍了使用FlameGraph工具生成火焰图的方法。首先通过git克隆FlameGraph项目并设置环境变量,然后使用perf record命令记录程序运行数据,接着用perf script和stackcollapse-perf.pl处理数据生成折叠的堆栈跟踪,最后用flamegraph.pl生成SVG格式的火焰图。文章还提到直接抓取进程ID的方式记录的数据量较少。整个过程展示了如何利用这些工具分析程序性能并生成直观的火焰图。
2025-10-22 13:53:29
164
原创 性能分析工具simpleperf
本文介绍了使用simpleperf工具进行Android性能分析的完整流程:1)通过命令行抓取进程性能数据;2)使用NDK工具生成HTML报告和火焰图数据文件;3)利用FlameGraph工具将数据转换为可视化火焰图;4)在浏览器中查看分析结果。文中还提到运行过程中出现的报错可以忽略,并提示FlameGraph工具需要自行下载。
2025-10-21 16:49:59
180
原创 c++ 11 特性笔记
防止头文件被多次包含(比 include guard 简单)cpp// ...等价于:cpp// ...#endif#define MYHEADER_H 防止头文件被重复包含,避免重复定义错误。名字可以不和头文件一样。
2025-06-30 17:57:54
258
原创 WIFI快连协议层原理-mdns
WIFI物联网解决方案中,通常我们需要对设备进行绑定,需要通过某种方法先对设备进行发现,比如硬件采用广播的方式,定时向外发送上线消息或者采用一问一答的方式进行发现,Bonjour是由苹果公司实现的一种零配置网络(Zeroconf)协议,它是一种基于服务的设备发现协议,不仅能够自动获取有效IP地址,还可以通过查询服务的方式来找到设备地址,只要双方约定好服务(service)的名称,设备的IP地址和端口都是可以变化的!一、mDNS协议和DNS-SD协议。
2025-06-24 09:59:38
1123
原创 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
935
转载 ijkplayer 解码实现分析——硬解篇
本文主要在基于ijkplayer 解码框架分析和ijkplayer video显示分析的基础上,分析了ijkplayer在android上的硬解pipenode——mediacodec的封装和使用。
2025-05-23 15:00:10
322
原创 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
595
原创 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
1105
原创 AHandle ALooper AMessage 总结
/如果之前消息队列为空,没有event,loop是处于阻塞状态的,此处当有消息进入时,先通知looperthread启动。//1. registerHandler会调用AHandler的setID方法将looper设置到Handler里面。//创建一个AHandler实例。//创建一个ALooper实例。//进到looper线程。
2025-03-13 16:00:12
52
转载 AHandler AMessage ALooper消息机制
普通消息被Post到消息队列,Looper不断的从队列中取出消息并分发给相应的Handler处理。如果是需答复消息的话使用Handler处理完以后通过postReply将消息返回给发送方,发送方通过新建的接收。
2025-03-13 11:51:33
140
原创 Android线程间异步通信机制源码分析
本文简单介绍了Android系统线程之间异步通信的机制,从源码的角度简单谈论了线程通信时的基本工作。其中未详细深入到messageQueue的具体管理操作,只是简单提及了message对象的回收,具体细节有空再补上。
2025-03-13 10:51:29
889
原创 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
711
转载 ijkplayer-丢帧策略深入分析
1.测试拿过来个视频,发现用ijk播放器与系统播放器(mediaplayer)播放感觉不一样,用ijk播放感觉播放页面卡顿一点,没有系统播放器那么流畅。下面看一下这个问题,这个问题的原因其实很简单,由于我丢帧值设置的是5,改成1就可以感觉2个播放器在体验上感觉差不多了。(丢5帧人眼就可以看出来差别了!2.在高通660的机器上播放一个4k(30fps)视频,但是无法正常播放,实际一秒的解码帧只有20帧,实际播放只有4帧这样。导致画面卡顿,音视频不同步。
2024-10-22 13:57:16
386
原创 wifi p2p 设置ssid android wifi p2p协议
wifi p2p 设置ssid android wifi p2p协议_温柔一刀的技术博客_51CTO博客
2024-10-16 14:20:03
130
原创 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
375
原创 ijkplayer 自定义协议播放加密内容 Android
想对播放的音视频进行加密,防止资源被盗用,该怎么办呢?这篇文章从自定义协议的角度来提供一中实现思路。在 ijkplayer 的基础上,通过实现自定义协议对文件进行解密。边解边播,以此为基础,还可以实现在线资源边下载边解密边播放。结合 ijkplayer 源码阅读本文效果最佳。
2024-08-02 11:10:20
1941
原创 从零开始,手把手教你如何在Ubuntu下编译VLC-Android源码
公司项目中使用的库文件,有点老,对系统兼容性太差了,当程序运行在系统上时,回弹出警告框,提示异常,虽然,程序播放视频没有问题,但是,总是弹出提示框就非常不友好了,为此,就需要重新编译一个新的库文件。由于,在编译中遇到了一大堆难题,足足花了3天时间才将源码编译成功。期间在网上查找了不少参考资料,但是,大都介绍太过详细,好多地方没有将清楚,非常容易误导他人,所以,决定下一篇详细的教程来记录此次编译的过程,希望能给大家带来帮助。从零开始在Linux编译VLC-Android开源项目这篇博客给我带来的帮助。
2024-07-16 09:30:17
972
原创 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
960
3
转载 WebRTC实现Android传屏demo
WebRTC (Web Real-Time Communications) 是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和音频流或其他任意数据的传输。目前,WebRTC的应用已经不局限在浏览器与浏览器之间,通过官方提供的SDK,我们可以很容易的实现本地应用间的音视频传输。在Android平台上,我们也非常容易的集成WebRTC框架,用非常简洁的代码就能实现强大、可靠的音视频传输功能。
2024-03-21 14:25:29
764
1
转载 Miracast技术详解(四):Sink源码解析
Miracast Sink端源码最早出现在上,通过可以很方便的查看:但是在以后,Google却移除掉了这部分源码,详细的commit记录在:1234虽然移除了Sink端代码,但是Source端源码是还在的,我们可以通过Android手机的投射功能实现Miracast投屏发送端。最终,通过回调音视频裸流给进行解码,进行音视频数据的播放,整个端的流程就到此结束了。相信看完上面所有源码解析后,自己写这部分逻辑也不是难事,当然更好的办法肯定是基于Sink端的代码进行移植。移植。
2024-03-21 14:23:28
976
转载 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
1025
转载 Miracast技术详解(二):RTSP协议
在上一篇博客中我们已经通过Wi-Fi P2P建立好了Source和Sink端的TCP连接,在Miracast后续的音视频传输过程中,将采用RTSP协议来对流媒体进行控制。因此接下来的步骤就到了RTSP协商、会话建立及流媒体传输的阶段。首先,什么是RTSP协议呢?实时流协议是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于创建和控制终端之间的媒体会话。
2024-03-21 14:20:46
1182
转载 Miracast技术详解(一):Wi-Fi Display
Miracast是由Wi-Fi联盟于2012年所制定,以Wi-Fi直连(Wi-Fi Direct)为基础的无线显示标准。支持此标准的消费性电子产品(又称3C设备)可透过无线方式分享视频画面,例如手机可透过Miracast将影片或照片直接在电视或其他设备播放而无需任何连接线,也不需透过无线热点(AP,Access Point)。
2024-03-21 14:19:06
3416
1
原创 MediaPlayer到ACodec到OMX流程(Android7.1 NuPlayer)
【代码】MediaPlayer到ACodec到OMX流程(Android7.1 NuPlayer)
2024-03-13 09:19:26
690
原创 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
797
原创 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
1991
转载 流媒体开发学习7 ffmpeg API保存流到文件demo
3)之所以要除以time_base,是因为AVStream中的duration的单位是time_base,注意这和AVFormatContext中的duration的单位(单位是AV_TIME_BASE,固定取值为1000000)是不一样的。(2)通过已知流的时长。(1)如果AVFormatContext中没有bit_rate信息,就把所有AVStream的bit_rate加起来作为AVFormatContext的bit_rate信息。
2023-06-17 11:41:01
628
转载 IjkPlayer数据读取-read_thread(含s->io_open)
这三个地方总共耗时加起来大概已经180ms左右,所以需要针对这三个过程进行优化。至此,ijkplayer的prepared过程结束。在video_thread,audio_thread等解码完成后,会将解码完成的数据包同步到video_refresh_thread线程中进行时钟同步,同步完后,则会开始绘制第一帧。函数中,初始化完视频,音频,字幕的帧队列后,启动了两个线程。所以如果没有修改的话,则使用该函数打开文件。
2023-06-13 20:54:38
254
原创 android性能测试-内存详解
dex文件代码占用内存。类函数的代码和常量占用的内存,dex mmap是映射classex.dex文件,Dalvik虚拟机从dex文件加载类信息和字符串常量等。Dex文件有索引区和Data区。通常来说,“private dirty”内存是其最重要的部分,因为只被自己的进程使用。它只在内存中存储,因此不能做分页存储到外存(Android不支持swap)。Dalvik堆和本地堆中和Zygote进程共享的部分是共享dirty内存。所有分配的Dalvik堆和本地堆都是“private dirty”内存;
2023-05-25 09:34:06
1484
原创 ijkplayer音视频同步
如果当前这一帧的播放时间已经过了,并且其和当前系统时间的差值超过了AV_SYNC_THRESHOLD_MAX,则将当前这一帧的播放时间改为系统时间,并在后续判断是否需要丢帧,其目的是为后面帧的播放时间重新调整frame_timer,如果缓冲区中有更多的数据,并且当前的时间已经大于当前帧的持续显示时间,则丢弃当前帧,尝试显示下一帧。通过实时计算每秒输入缓冲区的数据和发送出去数据,如果发送出去的数据小于输入缓冲区的数据,那么说明网络带宽不行,这时候缓冲区的数据会持续增多,这时候就要启动相应的机制。
2023-05-18 16:59:06
1413
转载 FFmpeg Heap Overflow 漏洞分析及利用
FFmpeg是一个著名的处理音视频的开源项目,使用者众多。2016年末paulcher发现FFmpeg三个堆溢出漏洞分别为CVE-2016-10190、CVE-2016-10191以及CVE-2016-10192。本文详细分析了CVE-2016-10190,是二进制安全入门学习堆溢出一个不错的案例。操作系统:Ubuntu 16.04 x64FFmpeg版本:3.2.1按照编译。
2023-05-11 14:24:11
641
原创 Android WebView 的 addJavascriptInterface 探究
Java和JS交互的方式有多种,这里探讨的方式是通过以下方式进行的交互。这篇文章是想弄明白 JavaScript 和 Java是如何实现这种方式互调的,就从源码角度开始分析。
2023-05-09 17:49:37
1462
原创 ffmpeg音视频解码和渲染流程
其实 ffpmeg 自带的播放器实例 ffplay 就是一个跨平台的播放器,得益于其依赖的多媒体库 SDL 实现了多平台的音视频渲染。但是 SDL 库过于庞大,并不适合整体移植到移动端。本文介绍的跨平台实现方案也是借鉴了 SDL2.0 的内部实现,只是重新设计了渲染接口。
2023-02-28 17:47:04
1382
FLEX从入门到精通
2017-09-19
linux环境编程
2017-09-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅