自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 资源 (5)
  • 收藏
  • 关注

原创 鸿蒙学习笔记

DevEco Studio是华为开发的一款集成开发环境(IDE),用于开发基于华为鸿蒙操作系统(HarmonyOS)的应用程序。它提供了丰富的开发工具和功能,包括代码编辑器、调试器、模拟器、版本控制等,使开发者能够方便地创建、调试和发布应用程序。ArkTS(Ark Type Script)是鸿蒙生态的应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。

2024-01-05 16:35:46 863 2

原创 鸿蒙工程目录结构

熟悉JNI的应该可以看出C接口的导出方式跟JNI类似,env应该是做了一层封装。

2024-01-03 00:10:45 620

原创 webrtc ios build signing

报错,这个错误是因为存在多个签名的问题,通过错误信息知道其中有一个是无效的(被吊销),移除之后重新执行构建命令就好了。

2023-10-25 10:32:37 639

原创 数据库Database

数据库(Database)是用于存储和管理数据的系统。它提供了一种结构化的方式来组织、存储、检索和更新数据,以满足不同应用程序的需求。数据库可以分为两类:关系型数据库和非关系型数据库。关系型数据库(Relational Database):关系型数据库使用表格(表)来组织数据,表由行和列组成,每个表都有一个唯一的标识符(主键),用于区分不同的记录。关系型数据库使用结构化查询语言(SQL)来操作和查询数据。

2023-08-30 11:18:01 248

原创 rust基础

rust的主要文档就是官方文档,还有中文的。学习之后从在这里找一些优秀的开源项目学习一下。开发的时候可以从找找有那些适合自己使用的库避免重复造轮子。

2023-08-24 10:43:58 1681

原创 rust工程

Rust 是一种现代的、系统级的编程语言,它强调并发安全、内存安全和高性能。Rust 的设计目标是提供一种有着良好抽象能力,同时又能够保证代码运行效率和安全性的语言。它将内存安全、并发安全和数据竞争检测等特性作为语言的一部分,通过所有权系统、借用检查器和生命周期等机制来防止常见的编程错误。Cargo 是 Rust 的包管理工具和构建系统。它能够自动管理 Rust 项目的依赖关系,并提供命令行工具来构建、测试和运行项目。

2023-08-22 18:15:17 1381 1

原创 ffmpeg

除了内置的过滤器,libavfilter 还提供了接口供开发者自定义过滤器。开发者可以按照自己的需求编写自定义过滤器,实现特定的音视频处理算法。这样可以满足一些特殊需求,并将自定义过滤器与内置过滤器一同组成过滤器链进行处理。

2023-08-21 10:43:25 749

原创 C++简介

C++是一种高级编程语言,它是对C语言的扩展和增强。C++由Bjarne Stroustrup于1980年发明,主要用于系统级编程、游戏开发、嵌入式系统等领域。C++具有许多特性,其中最重要的是面向对象编程(OOP)。面向对象编程使得软件开发更加模块化、可重用和易于理解。C++还支持其他编程范式,如泛型编程、函数式编程等。高效性:C++编译生成的机器码效率高,可以直接与硬件进行交互,可以在性能要求较高的应用中使用。跨平台性。

2023-08-20 23:13:57 2231

原创 JavaScript TypeScript

在 package.json 文件的 “scripts” 部分,你可以添加自定义的脚本命令,并通过。

2023-08-17 22:41:23 220

原创 React && React Native

通过比较虚拟 DOM 的变化,React 可以确定要更新的最小元素集,并将这些变化应用到真实 DOM 上,以减少不必要的 DOM 操作,提高性能。尽管需要一些额外的工作来适配代码,但 React 和 React Native 使用相同的开发模型和语法,因此你可以借鉴 React 中的组件设计和业务逻辑,以更高效地构建移动应用程序。在 React 中,通过使用虚拟 DOM(Virtual DOM),将组件的状态和属性映射到真实 DOM 上,从而实现高效的 UI 渲染和更新。

2023-08-16 23:33:32 1168

原创 Gradle

Gradle Wrapper 是一个用于管理 Gradle 版本的工具,它使用该配置文件来指定要下载和使用的特定 Gradle 版本。总的来说,Groovy是一门功能丰富的编程语言,可以与Java无缝集成,并提供了许多便利的特性和工具,使得开发更加高效和愉快。Gradle Wrapper是一个用于下载和运行特定版本Gradle的脚本,它可以使你的项目保证使用相同的Gradle版本,无论在何处构建。上的文档,查找与你使用的Android Gradle插件版本相对应的Gradle插件版本。

2023-08-16 21:43:31 327

原创 unsupported flags dt_flags_1=0x8000001

unsupported flags dt_flags_1=0x8000001

2023-03-06 14:42:54 845 1

原创 WebRTC通话的同时播放本地音乐

方案一(模拟一路接收流)把本地音乐当做一路对端过来的流来处理,这个方案的好处是不需要修改WebRTC的代码,调用WebRtcVoiceMediaChannel对象的AddRecvStream方法来添加一路流即可。通过WebRtcVoiceMediaChannel对象的OnPacketReceived方法传递数据数据需要打包为RTP格式方案二(播放混音)把数据结构webrtc::AudioState的webrtc::AudioMixer对象导出来通过webrtc::AudioMixer对象的

2022-01-11 14:12:53 2410 8

原创 WebRTC Win10平台编译下载错误

使用fetch下载Windows平台WebRTC代码的时候遇到了如下错误The system cannot find the file C:\Users\stoneliu\Desktop\depot_tools\python3_bin_reldir.txt.[E2021-12-30T11:28:59.735399+08:00 11572 0 annotate.go:273] goroutine 1:#0 go.chromium.org/luci/vpython/venv/config.go:309 -

2021-12-30 14:17:34 2988

原创 WebRTC rtc_base简介

rtc_base属于WebRTC的基础模块,属于最基础的模块,它里面大部分的封装主要解决平台差异(不同的平台间相同的功能系统函数会存在差异以及平台间提供的功能会有差异或者缺失),它封装了各种使用功能以及对第三库进一步封装让其更加好用,它封装了各种通用数据结构与算法。字符处理相关的封装:封装了兼容Win32的wchar_t和char类型的各种字符串处理函数,封装了各种类型的编码转换文件(夹)相关的封装:路径管理Pathname、文件操作File、文件件迭代器DirectoryIterator、文件系统操

2021-12-22 17:22:51 1096

原创 WebRTC hostname解析

ResolveHostname是对getaddrinfo的封装,hints.ai_flags = AI_ADDRCONFIG表示当系统支持IPv4时返回IPv4地址,支持IPv6时返回IPv6地址,如果同时支持则同时返回IPv4和IPv6地址。如果family等于AF_UNSPEC时返回支持的所有地址,如果指定了特定的类型则只返回特定类型的地址再调用IPFromAddrInfo把struct addrinfo转换为IPAddress(WebRTC封装的一个IP地址类,比较使用)类型bool IPFr.

2021-12-06 16:06:31 2500

原创 C++通用智能指针的实现

shared_ptr通过__shared_weak_count指针来管理引用计数。__shared_weak_count是__shared_count(实现共享指针的计数)的子类,在__shared_count的基础上实现了弱引用计数。__shared_ptr_pointer是__shared_weak_cou

2021-12-01 19:04:22 977

原创 全日制本科生入户东莞指南

文章目录说明条件资料办理流程说明最近我需要把户口迁入东莞,所以就简单记录一下,也希望能帮到其他人。这里主要是列举了全日制本科学历条件入户,其他条件可以参考东莞市人力资源和社会保障局最新(2020-03-06 09:24)发布的条件准入类人才入户申请指引。条件根据东莞市人力资源和社会保障局最新(2020-03-06 09:24)发布的条件准入类人才入户申请指引知道,全日制本科生入户需要满足三个条件。在本市行政区域内就业、经商的非本市户籍人员无参加国家禁止的组织及其活动,无刑事犯罪记录具备全日制

2021-11-23 17:46:45 807

原创 WebRTC获取本机默认网卡的IP地址

当我们创建一个socket并且不绑定一个特定网络设备的时候(bind),我们通过getsockname接口总是会返回一个INADDR_ANY地址当我们不指定一个网络设备的时,我们要send时系统会给我们指定一个默认的设备如何获取系统的默认设备的地址呢?通过connect一个DNS地址再通过getsockname获取就可以了,以下是WebRTC的实现,P2P就是这样拿到本机地址的。// These addresses are used as the targets to find out the d.

2021-11-19 18:33:11 3402

原创 clang简介

文章目录clang编译器clang选项阶段选择选项语言选择和模式选项目标选择选项代码生成选项-O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4-g, -gline-tables-only, -gmodules-fstandalone-debug -fno-standalone-debug-flto, -flto=full, -flto=thin, -emit-llvm驱动程序选项诊断选项预处理器选项环境变量clang编译器此文档基于clang的版本是:

2021-10-29 18:15:04 6509

原创 ffmpeg命令行使用

要什么要使用命令行呢?ffmpeg提供的功能几乎都能通过命令行使用,ffmpeg提供了丰富的选项可以对每一个环节进行配置。在写代码之前先用命令行参数验证可行性如何知道具体的选项还有哪些可选的配置呢?通过ffmpeg -h full 2>/dev/null > ffmpeg.txt导出所有选项的详细说明,可以在里面找到每个选项的详细说明,也可以直接阅读官方文档 ffmpeg-all想要知道ffmpeg的常规用法可以通过命令man ffmpeg或者阅读官方文档 ffmpeg关于日期格式、.

2021-10-25 18:43:19 1792

原创 Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8

问题描述把Gradle插件版本更新到7.0.2之后编译失败,出现如下错误:A problem occurred evaluating project ':app'.> Failed to apply plugin 'com.android.internal.application'. > Android Gradle plugin requires Java 11 to run. You are currently using Java 1.8. You can try s

2021-10-12 10:43:03 16417 2

原创 ffmpeg自定义IO

所谓的自定义IO就是实现复用结构体AVFormatContext的pb字段,这个字段的结果类型是AVIOContext,可以通过avio_alloc_context函数构造一个此结构体如果是要读文件需要实现函数指针read_packet和seek,如果是要写文件需要实现函数指针write_packet和seekbuffer和buffer_size必须是有效的,如果是写文件,在写之前数据存储在此buffer中。如果是读文件,会预先读取到此buffer中。所以此buffer的大小应当大于我们一次性读写的大.

2021-09-16 15:40:05 544

原创 vim替换匹配的内容

关于正则表达式可以阅读维基百科的正则表达式替换匹配的内容为指定内容:%s/123/456/g替换匹配的一个完整的单词为指定内容:%s/\<123\>/456/g替换指定行内匹配的内容为指定的内容# 从第2行到第40行,包括第2和第40行:2,40s/123/456/g# 从第2行到最后一行,包括第2和最后一行:2,$s/123/456/g使用匹配的内容# 例如文本为Stone999TEST,经过下面的命令之后变成[Stone999](https://b

2021-09-16 11:13:02 985

原创 ffmpeg hls动态切换分辨率

HLS支持多分辨率,在M3U8中会写明支持的分辨率,如下(随便找的一个例子)#EXTM3U#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360360_out.m3u8#EXT-X-STREAM-INF:BANDWIDTH=750000,RESOLUTION=854x480480_out.m3u8#EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1280x720720_out.m3u8#EXT.

2021-09-15 17:32:03 1926 2

原创 如何在ubuntu docker镜像上安装tzdata

在Ubuntu中/etc/localtime是用来描述本机时间,localtime函数就是读取该文件获取本机时间的,/etc/timezone是用来描述本机所属的时区。# 使用Ubuntu镜像FROM ubuntu# 先更新源,再安装tzdataRUN apt-get -y update && DEBIAN_FRONTEND="noninteractive" apt -y install tzdata# 设置时区ENV TZ=Asia/Shanghai# 创建一个我们期望的时区

2021-08-18 11:51:29 2752

原创 WebRTC多平台编译

WebRTC本身是支持多平台,不过它在下载的时候是区分平台的,本身也不支持一个项目多平台编译(Linux、Windows和MacOS),稍微改动一下编译脚本就可以支持了,我们还需要把用到的所有第三方库都一起下载下来放到一个项目中。build 修改修改build/config/clang/clang.gni文件,根据不同的平台选择不同的llvm,我们需要分别下载不同的平台的llvm,然后放到指定的位置。也可以自行升级对应的clang。也可以使用我的配置,我放在github上了WebRTC-llvm-bu

2021-07-20 11:23:44 1280 9

原创 WebRTC视频接收JitterBuffer

文章目录视频接收JitterBuffer网络接收组帧(以H.264为例)解码流程(以H.264为例)请求丢失的包 - NackModule收到一个包 - OnReceivedPacket找到满足条件缺失的包列表 - GetNackBatch隔一段时间检查一次是否发送丢包请求 - Process组帧 - PacketBuffer新包插入 - InsertPacket更新丢失的包 - UpdateMissingPackets判断包的连续性 - PotentialNewFrame找到完整的帧 - FindFram

2021-07-06 17:35:19 1010

原创 MediaSoup媒体处理分析

文章目录MediaSoupRTP处理MediaSoup2019年3月写的文章了,后续也没有再跟进这个项目有没有新变化。MediaSoup是一个开源的SFU库,分为客户端和服务端。服务端分为JS层和C++层,C++层用于处理媒体和SDP等数据。我个人主要关注媒体相关的处理,也就是RTP和RTCP相关的处理。我们的项目不会用到这个项目,看它的代码主要是解决我的两个疑问:多人会议,它是如何能保证每一个接收端都能流畅?它是如何处理各个发送端以及接收端的RTCP包?第一个问题,它不做任何处理,接收

2021-06-15 10:23:59 756

原创 Android NDK Address Sanitizer

文章目录构建运行堆栈轨迹二进制测试此文章是基于官方文档Address Sanitizer的基础上做了一些扩展说明。从 API 级别 27 (Android O MR 1) 开始,Android NDK 可支持 Address Sanitizer(也称为 ASan)。为啥从27开始呢?因为wrap.sh 仅适用于 API 级别 27 及更高级别。ASan 是一种基于编译器的快速检测工具,用于检测原生代码中的内存错误。ASan 可以检测以下问题:堆栈和堆缓冲区上溢/下溢释放之后的堆使用情况超出范围

2021-06-02 18:56:45 1945 6

原创 xcode调试可执行程序

文章目录应用场景配置及说明应用场景插件开发,我们开发的是一个动态库,可执行程序会动态加载我们的动态库。已经用其他构件工具(Ninja、Cmake、Makefile)编译好的可执行程序,有些开源项目自带了构建工具能方便的编译出测试程序,我们没必要再使用xcode来编译了,这样的情况下直接使用xcode调试就好了。配置及说明新建一个空工程:Xcode -> File -> New -> Project…配置Scheme:Xcode -> Product -> Sc

2021-05-20 14:24:38 1368 4

原创 xcode-select error

不知道做了啥操作突然间这个xcodebuild就不能使用了,出现如下错误,这个错误是因为developer directory设置有误导致的。我们只需设置正确的目录就好了,如果我们不知道正确的目录是那个,那么我们就重置它:sudo xcode-select -rxcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools'

2021-05-18 09:42:15 560

原创 RPC gRPC ProtoBuf之间的关系

文章目录RPCProtoBufmessage定义message扩展Services定义protoc(Protocol Compiler)gRPC编译gRPC(mac)编译examples/cpp/helloworld代码理解(examples/cpp/helloworld)proto文件(helloworld.proto)helloworld.grpc.pb.h(cc)文件同步RPC例子greeter_client.cc和greeter_server.cc异步RPC例子greeter_async_clien

2021-05-14 18:32:23 2363

原创 C++ functional

文章目录std::function std::bad_function_callstd::bindstd::ref std::cref std::reference_wrapperstd::mem_fn类模板std::function是通用多态函数封装器。 std::function的实例能存储、复制及调用任何可调用函数、 lambda表达式、 bind表达式或其他函数对象,还有指向成员函数指针和指向数据成员指针。若 std::function 不含目标,则称它为空。调用空std::function的目

2021-05-13 10:11:02 3564

原创 C++ 时间和日期

文章目录ctimestd::timestd::localtimestd::gmtimestd::asctimestd::ctimestd::strftimechronostd::ratiostd::chrono::durationstd::chrono::duration_caststd::chrono::time_pointstd::chrono::system_clockstd::chrono::steady_clockC++提供日期和时间相关的实现,分为C风格和C++风格。C风格的提供了获取当前

2021-05-12 19:20:51 1365

原创 C++ 线程、锁、条件变量和异步

文章目录线程thread设置线程名字设置线程优先级互斥锁mutextimed_mutexrecursive_mutexrecursive_timed_mutexstd:locktry_locktry_lock_for, try_lock_untillock_guard, unique_lock, shared_lockdefer_lock, try_to_lock, adopt_lock条件变量condition_variablecondition_variable_anynotify_all_at_thr

2021-05-11 15:57:31 775

原创 C++ tuple

属于C++11标准库函数的一部分,常用于接收不定参数。需要理解以下关键字和模块,以便理解后面的例子。decltype的作用是获取变量的类型typename的作用是声明后面的部分属于类型,因为在模板中是不知道它是类型还是变量的remove_reference的作用是如果是引用类型只保留类型tuple的使用make_tuple用于构造一个tuple、tuple_size用于获取tuple的参数个数、get获取tuple指定索引的值get只能传递常量,所以如果要依次获取tuple内的值,我们需要

2021-05-07 22:49:52 3346

原创 C++ Enum转字符串

文章目录cc++ mapc++ template枚举类型定义如下enum Color { Color_Red, Color_Blue, Color_Green, kColor_Last = Color_Green,};const char* ToString(Color c);cconst char* ToString(Color c){ switch (c) { case Color_Red: return "Red";

2021-05-07 17:59:57 7094

原创 处理命令行参数args、argc

文章目录支持的功能如何实现如何使用代码来自WebRTC中的rtc_base基础模块,flags.h 、flags.cc支持的功能每个Flag有一个默认的值,不指定时使用指定值,指定时使用指定的值,能检查类型是否匹配Flag不需要通过函数去传递,允许在任意一个文件定义选择能同时支持-和--,支持注释,支持打印所有的Flag如何实现定义一个union类型的FlagValue,支持bool、int、double、const char*类型// Internal use only.unio

2021-04-28 21:11:28 342

原创 GLFW简介

文章目录BuildGetting startedExamplesGLFW 是配合 OpenGL 使用的轻量级工具程序库,缩写自 Graphics Library Framework(图形库框架)。GLFW 的主要功能是创建并管理窗口和 OpenGL 上下文,同时还提供了处理手柄、键盘、鼠标输入的功能。有类似功能的库还有GLUT和SDL。Build下载$ git clone https://github.com/glfw/glfw.git编译 && 安装$ cd glfw

2021-04-14 10:04:18 11931

Visual Assist X10.9.2212完美破解版

Visual Assist X 10.9.2212 最新版 破解版 替换VA_X.dll即可

2018-07-17

linux64 gn文件

webrtc中的Linux64版本的gn文件和clang-format文件

2017-05-04

elecard_hevc_analyzer

elecard的H.265分析工具

2016-07-22

adb 1.0.32

adb 1.0.32

2016-07-05

android 4.4.2 sdk源码

打开Eclipse -> 随便找一个工程点击一个关键字Ctrl+左键 -> Add Source -> Add Folder -> 找到刚刚下载的Source -> 确定 -> 完成。 因为已经添加过了以上流程根据印象写的。

2014-12-11

空空如也

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

TA关注的人

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