音视频相关demo
安卓端到端投屏软件
简介
这是一个视频画面安卓端到端投屏软件
功能点
视频源数据采集(Camera或者屏幕信息)
视频画面点对点双向传输
H264、H265高清投屏
流程图
图1-1. 点对点视频流程图
功能界面展示
图1-2. H265高清投屏视频效果图
左边为服务端推流视频数据,右边为客户端连接服务端热点后接受视频数据,使用h265编码格式。将左边屏幕展示数据推到右边屏幕展示。
图1-3. H265高清投屏+摄像视频效果图
左边为服务端推流视频数据,右边为客户端连接服务端热点后接受视频数据,使用h265编码格式。将左边摄像头采集到的数据推到右边屏幕展示。
图1-4. H264双向摄像视频效果图
左右两边都为服务端和客户端。分别将自己摄像头采集到的数据展示在右下角并把数据推到对方的屏幕上。
技术栈
WebSocket、MediaProject、VirtualDisplay、Camera、MediaCodec。
测试手机
三星Glaxy a6s、红米Note40
实现详解
代码
https://gitee.com/flying-guy/practical-demo/tree/master/VideoTest
单屏分屏效果
简介
这是一个单个屏幕分屏效果的摄像头效果。
功能界面展示
图2-1. OpenGL分屏效果图
技术栈
CameraX、OpenGL(.fsh、GLThread)
在线电台
简介
在线电台是一个使用喜马拉雅在线电台SDK的免费api做成的一个在线听电台应用。具有推荐、订阅、历史、模糊搜索、播放控制(播放、暂停、按纽上下曲、滑动上下曲、列表模式切换、排序切换)、进度条、播放列表、订阅功能、电台节目详情页、ID3信息专辑图展示、mini播放器等功能。
用例图
图3-1. 喜马拉雅app用例图
功能界面展示
图3-2. 喜马拉雅 app 功能界面图
以上截图分别是推荐、订阅、历史列表界面、电台详情页、播放界面、搜索界面的截图。
demo 视频
待放入
代码
https://gitee.com/flying-guy/practical-projects
技术栈
Android、喜马拉雅 SDK、Java、SQLite、Glide
空间众包任务分配算法研究与实现
简介
空间众包任务分配算法有打车、外卖配送等实际应用场景。该次算法实现是基于基础算法 TBG(基于阈值的贪婪算法)、BB(批处理算法)的基础上,使用 MNTP 算法进行改进,通过缩短最大延迟的方式以改善任务分配的整体延迟效果。
TBG 算法
基于阈值的贪婪算法(TBG)的基本思路就是多层的循环迭代,直到车辆与用户匹配完成。即来一个用户订单就分配一个可用工人去接单。
优点:该算法可以预防请求长时间没有工人接单的情况发生。
缺点:在算法中,服务器需要在每个任务到达的ε时间内对其进行响应,较短时间内对任务进行匹配,这可能会导致稍后到达但更适合请求的工人无法被选择。
BB 算法
为了缓解稍后到达但适合请求的工人无法被选择的这种现象,出现了 BB 算法。使用的基于批处理的算法对请求和工人都进行了缓冲,在缓冲时间内匹配更合适的工人和用户。
优点:该算法无需立刻对刚到达的新请求进行匹配。可以让服务器有更大的选择合适工人的空间,让稍后到达但更适合的工人可以被选择。
缺点:在算法中,对请求和工人都进行了缓冲,且每一批请求都需要缓冲至少一 个时间戳。因此,缓冲时间对任务分配的延迟有较大影响。
分析过程
图4-1. 2016 年 4 月纽约市出租车订单分布热力图
图4-2. 2016 年 4 月纽约市离群任务栅格化图
通过将 TBG、BB 算法跑实际数据测试和将任务订单可视化发现,较远的订单对整体的任务分配延迟有重要的影响。如果能对其进行优化则可以更大的可能缩短整体的订单任务分配延迟时间。
MNTP 算法
对地理位置栅格可视化化,通过分析前几日一个月的订单数据的分布规律,查到大部分任务分配时间长的订单都是在一些偏远的机场或者娱乐中心。我们根据这个规律提取安排合适数量的车辆在合适的时间前去等待。避免用户订单等太久或者没有工人接单的情况出现。
算法验证
使用可能会对算法结果造成影响的因素对算法进行测试,我们可以从图中看出,MNTP 在大多数情况下都优于其他算法。
图4-3. 请求和工人密度对任务分配延迟的影响
请求和工人密度对不同算法性能的影响。图4-3 给出了在请求和工人密度影响下不同算法的有效性,图4-3 中的横坐标 Amount 表示任务匹配完成的订单数, 图4-3(a)的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时的竞争比,图4-3(b) 的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时该批订单里面的最大延迟,图4-3(c)的纵坐标表示不同算法在匹配完成对应横坐标数的订单数时该批订单整体的平均延迟。
图4-4. 时空相对密度差异的影响
时空相对密度对不同算法性能的影响。图4-4 给出了不同时空相对密度下不同算法的有效性,我们通过改变时间跨度来模拟不同的时空相对密度,不同的时空相对跨度拥有不同密度的订单数和可用车辆。图4-4 中的横坐标 Amount 表示不同的时间跨度,图4-4(a)的纵坐标表示不同算法在不同时空跨度下的竞争比,图4-4(b)的纵坐标表示不同算法在对应横坐标数时间跨度下的匹配完成的订单里面的最大延迟,图4-4(c)的纵坐标表示不同算法在对应横坐标数时间跨度下的匹配完成的订单里面的平均延迟。
图4-5. 不同时间段的影响
析不同时间段对算法性能的影响。图4-5 给出了不同时间段下不同算法的有效性,图4-5 中的横坐标表示选取的时间段,我们这里选取一些具有代表性的时间段。图4-5(a)的纵坐标表示,不同算法在不同时间段的竞争比。图4-5(b)的纵坐标表示不同算法在不同时间段匹配完成的订单中的最大延迟。图4-5(c)的纵坐标表示不同算法在不同时间段匹配完成的订单中平均延迟。
创新点
对历史数据进行可视化分析发现,通常情况下,离任务群较远的任务点拥有最差的单个性能。本文的创新点是将时间段划分为时间片,将空间众包涉及的地理位置进行栅格化,分析历史数据,预测出单位时间片单位网格内的任务数量,得到离任务群较远的任务点,提前安排合适的工人前往任务请求的位置,缩短任务请求者等待合适工人出现的时间和工人行进到任务请求者的位置的时间,最大可能的最小化最差单个性能带来的最大延迟。
技术栈
中英文文献阅读并提取关键信息能力、算法实现与改进、python 数据处理及可视化分析、GIS 数据、Jupyter、Excel、算法有效性验证。
介绍视频
待放入
代码
https://gitee.com/flying-guy/spatial-crowedsourcing-task-allocation-algorithm
自定义view
自定义RecylerView
https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CustomRecyclerview
旋转的小车
https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CarView
自定义TextView
https://gitee.com/flying-guy/ds/tree/master/CustomComponent/CustomTextView
自定义游动的🐟
https://gitee.com/flying-guy/ds/tree/master/fish
粒子爆炸
https://gitee.com/flying-guy/ds/tree/master/subassembly/CanvasExplosion
歌词解析及展示
https://gitee.com/flying-guy/ds/tree/master/subassembly/LyricTest
旋转的小球+图片扩散
https://gitee.com/flying-guy/ds/tree/master/subassembly/LyricTest
常用组件
SeekBar、ProgressBar、DatePicker、TimePicker
https://gitee.com/flying-guy/ds/tree/master/subassembly/app
Glide
https://gitee.com/flying-guy/ds/tree/master/subassembly/GlideTest
LooperViewPager
LooperViewPager1
https://gitee.com/flying-guy/ds/tree/master/subassembly/LooperPage
ViewPager2+List
https://gitee.com/flying-guy/android-practice/tree/master/ViewPager/ListViewPager2
ViewPager2+Fragment
https://gitee.com/flying-guy/android-practice/tree/master/ViewPager/FragmentViewPager2
ExoPlayer
https://gitee.com/flying-guy/android-practice/tree/master/ExoPlayerDemo
日常练习
安卓
《第一行代码》和《安卓艺术开发探索》
https://gitee.com/flying-guy/ds/tree/master/HelloWorldDemo
组件化开发
APT
https://gitee.com/flying-guy/ds/tree/master/Start_Modular_APT
Gradle
https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Gradle
Javapoet
https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Javapoet
Rout
https://gitee.com/flying-guy/ds/tree/master/Start_Modular_Routing_Design
多渠道
https://gitee.com/flying-guy/ds/tree/master/%E5%A4%9A%E6%B8%A0%E9%81%93%E9%85%8D%E7%BD%AE/TestDemo
阿里云仓库代理配置
https://gitee.com/flying-guy/ds/blob/master/build.gradle
通过反射实体类创建数据库表
https://gitee.com/flying-guy/ds/tree/master/DatabaseTest
NDK/JNI
使用ffmpeg从mp3提取pcm数据
https://gitee.com/flying-guy/practical-demo/tree/master/FFmpegDemo/FFmpegAudioPlayer
使用ffmpeg播放视频
https://gitee.com/flying-guy/practical-demo/tree/master/FFmpegDemo/FFmpegVideoPlayer
C++11
https://gitee.com/flying-guy/c--practice/tree/master/c++11
音视频
基于windows环境下的qt项目ffmpeg相关demo。
AVPacket/AVFrame内存模型测试案例
https://gitee.com/flying-guy/c--practice/tree/master/ffmpeg/01-buffer
ffmpeg解封装
https://gitee.com/flying-guy/c--practice/tree/master/ffmpeg/07-01-ffmpeg-demux
ffmpeg ADTS分析
鸿蒙
TypeScript、ArkUI(Image/Text/TextInput/Button/Slider/Column/Row/List/自定义组件/状态管理/页面路由/动画)、Stage模型、网络连接(http/axios/promise/await sycn)、数据持久化(preferences/rdb)
https://gitee.com/flying-guy/harmony-practice/tree/master
JAVA后端
在线办公系统
https://gitee.com/flying-guy/office
传统Web前后端
共享租赁平台
知识积累
IPC
SDK、Gradle和应用资源
壁纸预览、分屏小窗与U盘播放时长记忆功能可行性方案分析
内存分析
Layout Inspector image server for API
AndroidManifest、Activity、Fragment和常用控件
构建首个应用和应用基础知识
安卓wifi点对点视频实时传输实例及原理
FFmpeg命令基础使用
音视频相关知识
JVM
C++
CMake/MakeFile
鸿蒙开发