练习demo与知识积累

音视频相关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前后端

共享租赁平台

rent-product: 实战共享租赁平台

知识积累

IPC

石墨云档

SDK、Gradle和应用资源

石墨文档

壁纸预览、分屏小窗与U盘播放时长记忆功能可行性方案分析

石墨文档

内存分析

石墨文档

Layout Inspector image server for API

石墨文档

AndroidManifest、Activity、Fragment和常用控件

石墨文档

构建首个应用和应用基础知识

石墨文档

安卓wifi点对点视频实时传输实例及原理

石墨文档

FFmpeg命令基础使用

石墨文档

音视频相关知识

石墨文档

JVM

石墨文档

C++

石墨文档

CMake/MakeFile

石墨文档

鸿蒙开发

石墨文档

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值