自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Canok

遇到问题就解决问题

  • 博客(159)
  • 资源 (9)
  • 问答 (1)
  • 收藏
  • 关注

原创 android 多屏幕显示activity,副屏,无线投屏

多屏支持:是一个设备有多个屏幕,怎么让不同的屏幕显示不同的app,或者是一个app同时用两个屏幕来显示不同的页面内容。2.3 方式,如果把用户的输入信息都加入进来,结合上无线投屏就是 多屏协作了,在电脑端独立使用手机的应用...

2022-08-26 16:01:25 11953 2

原创 <一>Android Audio音频框架

个人对于Android 音频模块的整体理解,分析各个子模块存在的意义,领悟设计者架构思想,探讨未来可能的发展趋势。全文涉及到 AudioFlinger AudioPolicy AudioSystem AudioService AudioManager以及用于音频流数据传输的 AudioTrack OpenSLes AAudio。

2022-08-25 15:57:16 4174 1

原创 Android native层Hander原理分析

本篇探究 Android framework native层多媒体库中的 AHandler+ALooper+AMessage 这三个类的关系和机制,并借鉴此原理,用c++(c++17)重新实现自己的Handler+Looper+Message. 实现可以支持异步和同步的消息处理结构。

2022-08-06 12:37:29 662

原创 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 1643

原创 11. Android native层使用TrackPlayer播放pcm

android framework audio 。 安卓音频底层opensl输出接口,TrackPlayer demo c程序。

2022-06-29 11:10:51 1729

原创 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 1308

原创 <一 编译> 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 1326 2

原创 ffmpeg 添加视频加文字水印--drawtext 滤镜详解

使用ffmpeg 命令行给视频添加文字水印,利用drawtext滤镜,如果是代码上api调用,也是一样的用法,创建好滤镜图, 在滤镜图描述字符串中,把这里命令行的参数拷贝过去替换就行,改动非常方便。给视频添加文字,简单地添加一个helloworld 很方便,在《FFMPEG 从入门到精通》-刘歧 书第6.2章 有讲解,不过讲的非常浅显,不解其中参数的意义,总是期望哪里有一份官方说明使用手册来告诉我们这些参数的意义,遗憾并没有找到,这本书虽然是ffmpeg官网推荐的却也非常浅显,基本没有涉及源码,索性从源码

2021-07-30 17:15:14 7592

原创 最原始的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 2436

原创 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 2959 2

原创 android studio 编译freeType

《Android native 层使用opengl渲染YUV420p和NV12》《》

2021-06-17 10:29:31 1291 1

原创 Android native 层使用opengl渲染YUV420p和NV12

利用opengl进行yuv的渲染,主要原理利用显卡的加速运算,是把YUV转换成 RGBA ,然后交给gl渲染, 即opengl最终需要的数据还是 RGBA, 我们可以采用cpu软件jisua

2021-05-28 16:17:59 3190 5

原创 旧手机利用(Android),当wifi,当mic,当ipcamera

android 旧设备,通过软件diy 用作无线网卡,usb麦克风,无线显示屏,ip摄像头,

2020-01-28 17:37:00 7005 1

原创 live555推流----局域网延迟的分析

============20191212--追加---------以下主要追究发送比较大的网络数据时多次调用 系统调用send而产生的耗时问题,不过对于实际上传输音视频实时流的使用场景,往往数据不会这么大,延迟的性能瓶颈主要不在于此========================最近在做局域网投屏相关,发现使用vlc做推流和接受,延迟过大(1s以上),改用live555推流和接受,延迟还是过大...

2019-11-18 11:41:39 4808 4

原创 <三:使用,推流端>live555源码分析——RTSP服务端发送数据流程

一直有个疑惑,发送rtp数据的时间间隔在哪里控制的,onDemandServer 从文件中读取h264,aac等,也没有看到sleep,wait等等。但是播放依然是匀速的。【live555使用单线程任务驱动的方式,scheduleDelayedTask(int64_t microseconds,...) 这个就可以添加一个延迟指定时间执行的任务】拿aac ADTSAudioFileSource....

2019-11-14 11:17:38 1015

原创 从零编写rtsp-client端

目录简介:github工程源码:rtsp协议简介rtsp相关的一些问题简介:使用live555接受rtsp流,发现在 使用udp传输的过程中,h264数据丢帧,播放端花屏,起初以为是网络不好出现udp丢包,可是局域网环境下也不至于如此严重。换低码流的数据倒是ok, 传输 1920x1080 @30fps 码率在600KByte/s 的h264视频流,从live555接...

2019-10-23 16:08:55 4476

原创 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 8429 5

原创 vlc源码分析-clock.c 时间戳模块

vlc 播放网络视频流,比如rtsp流,需要进行是否超时的判断,判断是网路的延迟接受,还是因为解码器太慢导致延迟等,利用到网络流的时间戳,把网络流的时间戳和系统实际的时间建立一个对应关系,就是 /src/input/clock.c这个模块的作用。实际从vlc软件实际使用上可以观察出来,比如播放一个网络rtsp流,即使没有丢帧,仔细观察也会发现有些视频画面时快时慢,就是因为网络的不稳定导致接受到数据...

2019-09-04 15:02:21 1861

原创 <三:使用,接收端>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 2570 2

原创 以太网帧,ip/tcp/udp协议实体内容的分析--使用wireshark

以太网帧(Ethernet frame),是符合以太网标准的链路层协议数据单元:数据在使用物理层进行传输之前,最后一个处理的数数据链路层,在数据链路层上的数据类型,就是安照下面的以太网帧的格式进行组织数据,不管什么协议到这儿,都是以太网帧+以太网帧数据。 以太网帧里面的负载数据是什么并不和本层次的传输造成什么影响。以太网帧格式:前导码(7 Bytes)、帧起始定界符(1 Bytes)、目的...

2019-05-09 14:25:34 2823

原创 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 368 1

原创 c++打印log宏定义

while(0)// 定义LOGD类型。仿android 自动添加系统时间,进程号,线程号。记录,以备不时之需.

2024-02-29 22:44:12 288

原创 python 桌面软件开发-matplotlib画图鼠标缩放拖动

注意:上面demo监听的是 鼠标左键拖动, event.button==1 这个会导致和原版的工具栏 放大镜 工具冲突,所以也可以 把 event.button == 3 用鼠标右键来判断 (1 是左键,2是中间滚轮按下去键,3是右键。python matplotlib 中缩放,较为简单,只需要通过设置要显示的 x y坐标的显示范围即可。基于此,实现一个鼠标监听回调,在回调中计算滚轮缩放或者鼠标拖动之后的坐标范围,即可。

2023-10-23 21:53:42 1573 1

原创 《java 桌面软件开发》swing 以鼠标为中心放大缩小移动图片

swing 使用Graphic2D 绘制图片,要实现对图片进行缩放和自由拖动。1.以鼠标所在的位置为中心,滚轮控制缩放2.缩放后再支持鼠标拖动。一:所以,我们可以自行创建一个 “绘图区”, 创建一个空的ImageBuffer, 然后获取这个ImageBuffer的 Graphics, 后续全部往这个ImageBuffer的 Graphics 绘制.二: 最后在frame的paintComponent把我们这个 绘图区原样展示出来即可。 即,frame的paintComponent只是固定将

2023-10-20 22:11:31 1199

原创 数据结构-树的理解

深夜有感,灵感乍现,忽然感觉对这个数据结构终于有了一个自己的理解,才感叹这些计算机先驱们的智慧,在此,记录个人对数据结构--树,的理解。按照事情发展的来龙去脉,从需求出发去一步一步演进理解,而不是像课本那样死板地给出定义和规则让人死记硬背,才能更好契合地理解。

2023-02-23 12:27:23 439 1

原创 c++11 新特性

c++11标准对于语言核心部分做了相当大的改动。主要目的有若干个:1.强化静态类型推导。比如c++11标准变更了auto关键字2.支持函数式程序设计的语法,比如引入了lambd表达式、引入了尾式函数申明语法、增加了for语句的冒号语法进行指定范围遍历等3.将构造、析构和赋值过程中的可能错误加以防范,尤其是临时对象生命周期相关的错误4.增加了对于面向对象范型中的一些一直未涵盖之内容的补充,如允许继承而来的构造函数、引入表达禁止继承的final关键字、引入override关键字来支持派生类函数重写等

2023-02-06 15:56:59 566

原创 Android 移植iperf3.13 测试网络

iperf,测试网络性能的,不同于 webrtc里面的gcc 算法预估网络带宽,iperf是实际占用网络来传输数据测量实际的网络性能。 在Android studio中通过 Android.mk 编译iperf3 源码,用于android 设备测试网络

2022-12-08 17:29:09 5990 3

原创 9. android 动态音频策略的原理

如此,对于手机上的场景,可以使用默认的策略,对于汽车,只需要再添加一个app,把新的策略注册进去即可覆盖替换原先的策略。 这个支持app层注册音频规则和控制回调的策略,即动态策略,它包括了 设备选择(mix规则)、音量控制(分频分区域控制音量)、音频焦点申请这三个策略

2022-11-10 17:29:15 2270

原创 2. android 直接使用hal库播放pcm demo

Android native 层 ,直接使用 hal 库播放音频的 简单demo 可执行程序

2022-11-08 11:12:46 1761 3

原创 c++ 左值,右值

c++ 左值和右值。摘自两本书《c++程序设计语言》(Bjarne Strousstrup)和《c++Primer》第五版。

2022-10-30 14:09:49 344

原创 <10> string

c++ string 常用操作 c++11, 使用STL算法 sort,、ind, 比较==、compare, 查找 find,find_first_of, 子串substr(), 正则表达式regex, 字符串流sstream

2022-10-10 12:29:35 2628

原创 (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 1719

原创 <1> c++ 笔记 stl::map

map笔记这里只是记录常用方法,以及部分理解,方便自己查阅。优先查看官网cppreference.com

2022-09-15 16:51:44 1894

原创 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 2280

原创 ubuntu 上vscode gdb可视化源码调试live555

要捋清楚源码,不得不说这个live555的风格还是很奇怪的,一段时间没动回过来看几乎又不知所云了,跑着跑着就崩溃了,所以这次准备在ubuntu 上,vscode 可视乎debug一下live555.vscode, 完美替代甚至超出了source insight, 重要的是,免费,三平台通用,各种插件加持下不仅可以编辑,格式化,提示补全,还可以debug

2022-08-24 22:17:01 1284

原创 Android 保持ImageVIew大小不变,让图片按比例拉伸

所以保持图片宽高比总体有两种思路:(只需修改xml布局文件)一: 让图片缩放,来适应控件大小。通过修改图片的缩放方式以及配合背景图二: 让控件大小自适应,保持和图片一样的宽高比,来适应图片。不要混着用, 同时修改android:adjustViewBounds 和android:scaleType 简直凌乱......

2022-08-14 13:45:17 5056

原创 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 4617

原创 git rebase

对rebase,三个常见的场景一:开发分支落后于主干分支。从master分支拉出一个feat分支,用于开发新功能,开发完后准备将这个feat的修改合并到master,(如果使用的是gitlab作为代码审核的话,就是一个MR请求),但是master已经有其他开发者往上合入了其他的代码,甚至有可能和feat分支修改了同样的文件,所以,这个时候需要把master额外的修改也先合入到feat,对feat进行"变基",然后再提MR.二:本地分支落后于远程分支。三: 多条commit合并...

2022-02-20 15:42:53 3955

原创 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 2570 5

原创 git 学习

不折腾一下官网,看下原版信息,翻再多的blog都迷茫。Git官方直接有推荐书籍,并且还是多语言版本,在线免费阅读,免费下载Git - Book无力多说,在线书籍已经如此详细完善了,再有补充应该的啃git源码了。...

2022-01-27 15:27:11 416

手机麦克风_womic.rar

https://wolicheng.com/womic/ win7_64 亲测 20200128 wo_mic 旧手机当电脑mic使用,可以通过蓝牙,WiFi,usb等链接。一个pc端客户端程序4.5版本。 一个Android端服务程序4.6版本。两个个pc虚拟mic驱动程序,(官网下载的新版本win7上异常,wo_mic_driver_signed这个备用) 20200128womic 官网下载版本。

2020-01-28

libusb-1.0.22_can.tar.bz2

源码参考型demo. 在ubuntu上,实现实时监听小米纯麦无线K歌话筒的声音输出,从usb读取pcm流,到alas音频输出,利用libusb库读取usb数据,含源码,无需依赖alas-lib库,代码嵌入tinyalas供能。

2019-12-26

java_jni_document_官方在线文档20190807.zip

甲骨文官网上对jni的说明帮助文档,原为在线文档 https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/jniTOC.html 下载编译成 本地 .CHM帮助文件,可以离线查看。截止制作日期 20190807,如果和官网有差异请注意生成日期。。。。(有个问题打开看的时候会有个脚本错误的提示,选择继续运行就行)(为什么csdn现在不让自己设置下载所需积分?????)

2019-08-07

抽取linux内核链表模块

linux内核中有关于list 、kfifo等数据结构的实现,从源码中抽取出list部分,可以在linux应用编程中使用。有详细的抽取过程原理,ubunt12.04上完成

2018-08-06

io多路复用c语言版简单http服务器demo

使用C语言实现的io多路复用http服务器的一个简单例子,可以显示简单的图片文字等,内含makefile,所用到的图片和html,编译运行即可

2018-07-24

百度文字转语音工具下载

使用百度语音合成api,将输入文字转换成对应语音文件的小工具使用百度语音合成api,将输入文字转换成对应语音文件的小工具

2018-07-17

Cool Edit pcm文件播放,音频编辑,音频文件格式转换

cool edit 中文版,可以播放pcm原生音频文件,修改mp3文件的采样率通道数等,转换音频文件格式

2018-07-17

x264测试yuv文件

X264测试用原始yuv文件,用x264将该文件编码成h264等等X264测试用原始yuv文件,用x264将该文件编码成h264等等

2018-06-06

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

TA关注的人

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