- 博客(159)
- 资源 (9)
- 问答 (1)
- 收藏
- 关注
原创 android 多屏幕显示activity,副屏,无线投屏
多屏支持:是一个设备有多个屏幕,怎么让不同的屏幕显示不同的app,或者是一个app同时用两个屏幕来显示不同的页面内容。2.3 方式,如果把用户的输入信息都加入进来,结合上无线投屏就是 多屏协作了,在电脑端独立使用手机的应用...
2022-08-26 16:01:25 14169 4
原创 <一>Android Audio音频框架
个人对于Android 音频模块的整体理解,分析各个子模块存在的意义,领悟设计者架构思想,探讨未来可能的发展趋势。全文涉及到 AudioFlinger AudioPolicy AudioSystem AudioService AudioManager以及用于音频流数据传输的 AudioTrack OpenSLes AAudio。
2022-08-25 15:57:16 4881 1
原创 Android native层Hander原理分析
本篇探究 Android framework native层多媒体库中的 AHandler+ALooper+AMessage 这三个类的关系和机制,并借鉴此原理,用c++(c++17)重新实现自己的Handler+Looper+Message. 实现可以支持异步和同步的消息处理结构。
2022-08-06 12:37:29 703
原创 4. Android native层直接使用AudioFlinger播放pcm
目录一:概述 一个c语言demo可执行程序,直接使用AudioFlinger 播放pcm.二:实现环境 ubuntu22.04 编译 aosp11 源码源码 main()结果这是一个c语言demo程序,android源码环境,编译得到 bin文件,push到设备上在shell环境运行,播放pcm数据。如果是app java开发,没有系统源码,就不建议往下看了。用于研究AudioFlinger源码,这是一个demo,在源码层面编译,直接获取AuduioFlinger服务,使用AudioFlinger的
2022-06-30 16:15:56 1712
原创 11. Android native层使用TrackPlayer播放pcm
android framework audio 。 安卓音频底层opensl输出接口,TrackPlayer demo c程序。
2022-06-29 11:10:51 1979
原创 android mediacode 解码aac
目录主要流程:mediacode解码aac:mediacode参数"csd-0",如何设定?这里手动解析 aac文件,如果只是本地播放aac文件那么android已经有完善的方法:MediaExtractor + MediaCoddec 或者直接是MediaPlayer, 但有的时候我们有自己的aac帧数据,想利用Mediacode进行解码,里面就有些坑。完整app源码:githubhttps://github.com/Canok7/openScreen/tree/main/clien..
2021-08-11 17:19:11 1447
原创 <一 编译> ndk 编译live555 for android
一:编译live555给android使用,概况个人总结两个方法:一:自己编写 Android.mk 或者是 CMakeLists.txt , 把源码里面的文件都加进来用ndk-build或camek编译。(工作量稍大,另一个问题是如果live555源码有更新,这里升级修改起来也不方便,本人之前即使用这种方式,csdn上有很多都是介绍使用Androd.mk方式编译,主要是live555源码比较少,依赖也不多。)二:根据live555 官方自身提供的编译命令,修改配置使其使用ndk交叉编译器编译。..
2021-08-03 10:44:26 1469 2
原创 ffmpeg 添加视频加文字水印--drawtext 滤镜详解
使用ffmpeg 命令行给视频添加文字水印,利用drawtext滤镜,如果是代码上api调用,也是一样的用法,创建好滤镜图, 在滤镜图描述字符串中,把这里命令行的参数拷贝过去替换就行,改动非常方便。给视频添加文字,简单地添加一个helloworld 很方便,在《FFMPEG 从入门到精通》-刘歧 书第6.2章 有讲解,不过讲的非常浅显,不解其中参数的意义,总是期望哪里有一份官方说明使用手册来告诉我们这些参数的意义,遗憾并没有找到,这本书虽然是ffmpeg官网推荐的却也非常浅显,基本没有涉及源码,索性从源码
2021-07-30 17:15:14 8653
原创 最原始的yuv图像叠加文字的实现--手动操作像素
《Ndk中使用Mediacode解码》《android mediacodec 编码demo(java)》《NDK中使用mediacodec编码h264》《Android native 层使用opengl渲染YUV420p和NV12》《opengl 叠加显示文字》《android studio 编译freeType》直接在yuv图像上手动修改像素,把文字打上去。这里是一个c语言的demo,文字的位图,直接写在代码中,工作量有限,只提取了阿拉伯数字0-9和两个符号: - ,对于显示时间来说..
2021-07-08 15:13:58 2839
原创 android 使用NativeWindow渲染RGB视频
《Android native 层使用opengl渲染YUV420p和NV12》《opengl 叠加显示文字》《android studio 编译freeType》android native渲染图像的三种方式:1.0 java层canvas, 然后在native层修改canvas的bitmap缓存区2.0 使用opengl3.0 使用nativeWindow 直接渲染这里写个demo,使用nativeWindow直接渲染RGBA8888 视频序列。效果:需要一个RGBA8888格式.
2021-06-25 17:27:33 3270 2
原创 Android native 层使用opengl渲染YUV420p和NV12
利用opengl进行yuv的渲染,主要原理利用显卡的加速运算,是把YUV转换成 RGBA ,然后交给gl渲染, 即opengl最终需要的数据还是 RGBA, 我们可以采用cpu软件jisua
2021-05-28 16:17:59 3766 5
原创 旧手机利用(Android),当wifi,当mic,当ipcamera
android 旧设备,通过软件diy 用作无线网卡,usb麦克风,无线显示屏,ip摄像头,
2020-01-28 17:37:00 7389 1
原创 live555推流----局域网延迟的分析
============20191212--追加---------以下主要追究发送比较大的网络数据时多次调用 系统调用send而产生的耗时问题,不过对于实际上传输音视频实时流的使用场景,往往数据不会这么大,延迟的性能瓶颈主要不在于此========================最近在做局域网投屏相关,发现使用vlc做推流和接受,延迟过大(1s以上),改用live555推流和接受,延迟还是过大...
2019-11-18 11:41:39 5301 4
原创 <三:使用,推流端>live555源码分析——RTSP服务端发送数据流程
一直有个疑惑,发送rtp数据的时间间隔在哪里控制的,onDemandServer 从文件中读取h264,aac等,也没有看到sleep,wait等等。但是播放依然是匀速的。【live555使用单线程任务驱动的方式,scheduleDelayedTask(int64_t microseconds,...) 这个就可以添加一个延迟指定时间执行的任务】拿aac ADTSAudioFileSource....
2019-11-14 11:17:38 1066
原创 从零编写rtsp-client端
目录简介:github工程源码:rtsp协议简介rtsp相关的一些问题简介:使用live555接受rtsp流,发现在 使用udp传输的过程中,h264数据丢帧,播放端花屏,起初以为是网络不好出现udp丢包,可是局域网环境下也不至于如此严重。换低码流的数据倒是ok, 传输 1920x1080 @30fps 码率在600KByte/s 的h264视频流,从live555接...
2019-10-23 16:08:55 5121
原创 android播放rtsp视频流app, demo app .使用live555+MediaCodec
用libvlc提供的库播放rtsp,总是延迟比较大(局域网的情况下,存在明显的画面延时),netcaching设置为0还是存在延迟,但是网络延迟已经比较低了,没办法,自己写了一个APP,现在只测试了接受一个视频流的rtp流,没有音频。延迟较低,总的播放延迟基本在网络部分。原理:1.0 解码播放端:使用android 的MediaCodec 播放h264流,先行使用h264裸流文件模拟网络流进行...
2019-09-23 18:04:28 8645 5
原创 vlc源码分析-clock.c 时间戳模块
vlc 播放网络视频流,比如rtsp流,需要进行是否超时的判断,判断是网路的延迟接受,还是因为解码器太慢导致延迟等,利用到网络流的时间戳,把网络流的时间戳和系统实际的时间建立一个对应关系,就是 /src/input/clock.c这个模块的作用。实际从vlc软件实际使用上可以观察出来,比如播放一个网络rtsp流,即使没有丢帧,仔细观察也会发现有些视频画面时快时慢,就是因为网络的不稳定导致接受到数据...
2019-09-04 15:02:21 2035
原创 <三:使用,接收端>live555--接收端 testRTSPClient.cpp 源码分析-读取rtsp流demo
testRTSPClient.cpp 位于live555源码目录 live/testprogs目录下,编译出来 testRTSPClient可以直接用来接收流,不过这个流接受之后只是打印一下信息,然后丢弃,并没有存储到什么文件。例如:#testRTSPClient rtsp://192.168.43.154:8989/stream分析源代码:RTSPClient.cpp 中封装有sen...
2019-07-03 16:27:00 2725 2
原创 以太网帧,ip/tcp/udp协议实体内容的分析--使用wireshark
以太网帧(Ethernet frame),是符合以太网标准的链路层协议数据单元:数据在使用物理层进行传输之前,最后一个处理的数数据链路层,在数据链路层上的数据类型,就是安照下面的以太网帧的格式进行组织数据,不管什么协议到这儿,都是以太网帧+以太网帧数据。 以太网帧里面的负载数据是什么并不和本层次的传输造成什么影响。以太网帧格式:前导码(7 Bytes)、帧起始定界符(1 Bytes)、目的...
2019-05-09 14:25:34 2971
原创 git log
让日期数字化 (这几个英文的月份简写实在看着断片) git log --date=format:"%Y%m%d" 一行显示 + 数字日期 + 作者 + commit git log --date=format:"%Y%m%d" --pretty=format:"%ad %an %s" 反向,最早的放前面。 --reverse git log --date=format:"%Y%m%d" --pretty=format:"%ad %an %s" --reverse 只看自己的: git l
2024-04-01 19:03:58 438
原创 python 桌面软件开发-matplotlib画图鼠标缩放拖动
注意:上面demo监听的是 鼠标左键拖动, event.button==1 这个会导致和原版的工具栏 放大镜 工具冲突,所以也可以 把 event.button == 3 用鼠标右键来判断 (1 是左键,2是中间滚轮按下去键,3是右键。python matplotlib 中缩放,较为简单,只需要通过设置要显示的 x y坐标的显示范围即可。基于此,实现一个鼠标监听回调,在回调中计算滚轮缩放或者鼠标拖动之后的坐标范围,即可。
2023-10-23 21:53:42 1924 1
原创 《java 桌面软件开发》swing 以鼠标为中心放大缩小移动图片
swing 使用Graphic2D 绘制图片,要实现对图片进行缩放和自由拖动。1.以鼠标所在的位置为中心,滚轮控制缩放2.缩放后再支持鼠标拖动。一:所以,我们可以自行创建一个 “绘图区”, 创建一个空的ImageBuffer, 然后获取这个ImageBuffer的 Graphics, 后续全部往这个ImageBuffer的 Graphics 绘制.二: 最后在frame的paintComponent把我们这个 绘图区原样展示出来即可。 即,frame的paintComponent只是固定将
2023-10-20 22:11:31 1539
原创 数据结构-树的理解
深夜有感,灵感乍现,忽然感觉对这个数据结构终于有了一个自己的理解,才感叹这些计算机先驱们的智慧,在此,记录个人对数据结构--树,的理解。按照事情发展的来龙去脉,从需求出发去一步一步演进理解,而不是像课本那样死板地给出定义和规则让人死记硬背,才能更好契合地理解。
2023-02-23 12:27:23 467 1
原创 c++11 新特性
c++11标准对于语言核心部分做了相当大的改动。主要目的有若干个:1.强化静态类型推导。比如c++11标准变更了auto关键字2.支持函数式程序设计的语法,比如引入了lambd表达式、引入了尾式函数申明语法、增加了for语句的冒号语法进行指定范围遍历等3.将构造、析构和赋值过程中的可能错误加以防范,尤其是临时对象生命周期相关的错误4.增加了对于面向对象范型中的一些一直未涵盖之内容的补充,如允许继承而来的构造函数、引入表达禁止继承的final关键字、引入override关键字来支持派生类函数重写等
2023-02-06 15:56:59 609
原创 Android 移植iperf3.13 测试网络
iperf,测试网络性能的,不同于 webrtc里面的gcc 算法预估网络带宽,iperf是实际占用网络来传输数据测量实际的网络性能。 在Android studio中通过 Android.mk 编译iperf3 源码,用于android 设备测试网络
2022-12-08 17:29:09 7180 3
原创 9. android 动态音频策略的原理
如此,对于手机上的场景,可以使用默认的策略,对于汽车,只需要再添加一个app,把新的策略注册进去即可覆盖替换原先的策略。 这个支持app层注册音频规则和控制回调的策略,即动态策略,它包括了 设备选择(mix规则)、音量控制(分频分区域控制音量)、音频焦点申请这三个策略
2022-11-10 17:29:15 2470
原创 2. android 直接使用hal库播放pcm demo
Android native 层 ,直接使用 hal 库播放音频的 简单demo 可执行程序
2022-11-08 11:12:46 1921 3
原创 <10> string
c++ string 常用操作 c++11, 使用STL算法 sort,、ind, 比较==、compare, 查找 find,find_first_of, 子串substr(), 正则表达式regex, 字符串流sstream
2022-10-10 12:29:35 2822
原创 (2)android MediaPlayer 和Nupalyer、MediaCodec、OMX关系
MediaCodec 又转而使用ACodec, (ACodec, 即android codec),注意这里各种命名和包装的关系,很有层次感,并不是无端就这么多层次来恶心人的。 ACodec 才是android平台上codec的实现,但是为了屏蔽硬件厂商的实现差异,对上提供统一的接口,android 上对硬件厂商提供的编解码器用openMax 标准接口进行规范,(原本上openMax不仅仅规定了code的接口形式,甚至是demuxer都有,一套组件接口,但是android 只是使用了 code)。 所以 以O
2022-09-26 18:00:22 1887
原创 <1> c++ 笔记 stl::map
map笔记这里只是记录常用方法,以及部分理解,方便自己查阅。优先查看官网cppreference.com
2022-09-15 16:51:44 2030
原创 1. android tinyalsa 理解
ALSA 是linux上的音频框架,音频设备按照此框架实现自己的驱动 alsa-driver,在应用层即可以通过统一的alsa-lib 来读写控制音频设备。 tinyalsa, 就是简化版的alsa-lib ,用于调试查看 linux内核里面alsa 驱动下的音频设备,其原理,即读写 dev/snd/pcmxx 设备节点,ioctl操作。如果hal层的具体实现不经过alsa,那么这个tinyalsa也就没法调试到这些音频设备。而hal层,是不开源的
2022-09-14 14:20:08 2595
原创 ubuntu 上vscode gdb可视化源码调试live555
要捋清楚源码,不得不说这个live555的风格还是很奇怪的,一段时间没动回过来看几乎又不知所云了,跑着跑着就崩溃了,所以这次准备在ubuntu 上,vscode 可视乎debug一下live555.vscode, 完美替代甚至超出了source insight, 重要的是,免费,三平台通用,各种插件加持下不仅可以编辑,格式化,提示补全,还可以debug
2022-08-24 22:17:01 1373
原创 Android 保持ImageVIew大小不变,让图片按比例拉伸
所以保持图片宽高比总体有两种思路:(只需修改xml布局文件)一: 让图片缩放,来适应控件大小。通过修改图片的缩放方式以及配合背景图二: 让控件大小自适应,保持和图片一样的宽高比,来适应图片。不要混着用, 同时修改android:adjustViewBounds 和android:scaleType 简直凌乱......
2022-08-14 13:45:17 6009
原创 vlc 运行时配置参数读写的实现分析
版本 v3.0.16 源码http://get.videolan.org/vlc/3.0.16/vlc-3.0.16.tar.xz每一完整的软件系统都会有一个参数配置模块,用来实现运行时不同的参数输入,有些软件系统会做得比较简单,直接通过方法的输入,作为参数,有些系统做得比较通用复杂,比如vlc,也是比较完整独立的通用的配置。vlc 使用c语言编写,实质是一个多媒体播放器, 有OB面向对象的设计,对一个结构体的创建,可以类比为创建一个对象,vlc都通过使用malloc等函数,动态申请内存来存...
2022-03-13 21:42:31 4943
原创 git rebase
对rebase,三个常见的场景一:开发分支落后于主干分支。从master分支拉出一个feat分支,用于开发新功能,开发完后准备将这个feat的修改合并到master,(如果使用的是gitlab作为代码审核的话,就是一个MR请求),但是master已经有其他开发者往上合入了其他的代码,甚至有可能和feat分支修改了同样的文件,所以,这个时候需要把master额外的修改也先合入到feat,对feat进行"变基",然后再提MR.二:本地分支落后于远程分支。三: 多条commit合并...
2022-02-20 15:42:53 13366
原创 ubuntu 上搭建Gerrit
ubuntu20.04.03 64bit官网安装文档:Quickstart for Installing Gerrit on Linux1.0 Befor you start按照说明,需要先有Java SE Runtime Environment version 11 and up装个openjdk,官方:OpenJDK: Download and install#sudo apt-get installopenjdk-8-jre运行java -version 有提示:java ..
2022-01-27 21:11:27 2704 5
原创 git 学习
不折腾一下官网,看下原版信息,翻再多的blog都迷茫。Git官方直接有推荐书籍,并且还是多语言版本,在线免费阅读,免费下载Git - Book无力多说,在线书籍已经如此详细完善了,再有补充应该的啃git源码了。...
2022-01-27 15:27:11 427
手机麦克风_womic.rar
2020-01-28
libusb-1.0.22_can.tar.bz2
2019-12-26
java_jni_document_官方在线文档20190807.zip
2019-08-07
抽取linux内核链表模块
2018-08-06
io多路复用c语言版简单http服务器demo
2018-07-24
h264 slice可以单独不依赖其他slice解码么?P_slice怎么回事?
2019-03-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人