- 博客(41)
- 资源 (2)
- 收藏
- 关注
原创 Tensor
data.view(3,2) //1.判断是否是整块内存,data.is_contiguous()data([[0,[1]], [1,2]]) // 返回的第0、1行的1、2列四个元素。data([0,1], [1,2]) //返回第0行第一列,第1行第二列的元素。torch.transpose(data, 1,2) // 交互1纬和2纬的数据。torch.permute(data, [1,2,0])//一次交换多个纬度。data[:,:,0] // 所有纬度中第一列的元素。
2024-12-22 22:23:17
894
原创 音频的传输链路与延迟优化点
麦克风->系统采集模块->APP采集模块->3A、混响等音效->混音->音频编码->RTC网络发送->MediaServer->RTC网络接收->音频jitter buffer->音频解码->音频的后处理(均衡)->APP播放模块->x系统播放模块->扬声器/耳机。整个链路如上;
2024-02-21 12:00:44
1080
1
原创 Linux的进程
1、进程间的通信管道:单项流动pipe适用于半双工的单项流动,必须是父子关系进程间的通信。有名管道:适用于非血缘关系的进程间通信。消息队列:克服了信号传输信号少,管道只能传输无格式的字节流问题共享内存:隐射一段被其他进程访问的内存。信号量:作为同步进程的一种锁机制。套接字:进程间的通信方式信号:比较负责的通信方式。学习使用pipe进程父子间和兄弟间的进程通信。使用fifo进程无血缘关系的进程间通信使用mmap进行无血缘和有血缘关系的进程间通信2、管道管道的本质
2022-04-20 08:51:23
134
原创 FFmpeg开发
1、FFmpeg的日志使用和目录操作文件的删除和重命名avpriv_io_delete() avpriv_io_move()目录操作:avio_open_dir(); avio_read_dir(); avio_close_dir();#include<libavutil/log.h>#include<stdio.h>// 常用的日志级别// AV_LOG_ERROR// AV_LOG_WARNING// AV_LOG_INFO// AV_LOG...
2022-04-18 22:24:53
870
原创 Linux系统函数
execl函数用于执行系统命令。int execl(path, "ls", "-l", NULL);调用execl函数后,子进程的代码段会被替换。执行成功无返回。execl("bin/ls","ls","-l",NULL); 命令的地址通过 which ls 查看。也可以执行自己开发的二进制程序,execl("./test","test",""hello,NULL); 多用于执行用户自定义的应用程序。execlp搜索环境变量,不用带路径。多用于执行系统命令杀死i僵尸进程:不能使用
2022-04-07 14:28:09
3113
原创 Linux 系统函数
Man 2 read 查询read的函数,如果提示找不到,需要安装man的文件sudo yum install man-pages1、perror函数打印报错信息;#include <stdio.h> #include <errno.h> void perror(const char* s); perror("open file failed"); // perror函数用与打印报错信息到控制台,并且带上错误原因。错误原因按照错误变量errno的值来决定 //
2022-04-05 18:57:09
2151
原创 linux系统编程
tips:汇编语言为.s文件1、MakeFIle文件的编写makefile制定了编译规则,哪些文件需要编译,哪些后面编译,类似一个shell脚本,也可以执行系统的命令,编写完成,后面只需要执行一个make命令就可以完成编译。makefile中使用gcc进行编译,最终生成的.o的目标文件或者静态库和动态库文件类型是makefile或者Makefile1.1 makefile的基本规则目标:依赖 (tab) 命令 main: main.c fun1.c gcc -o main main.
2022-03-29 10:52:29
1386
原创 QT面对信号重载的解决办法
面对信号函数重载,可以通过函数指针明确需要调用的具体信号函数函数指针: 指向函数的指针void (QSpinBox:: *spinBoxP)(int) = &QSpinBox::valueChanged;connect(ui->spinBox, spinBoxp, [=](){ });connect(ui->spinBox, spinBoxp, this, &QWidget::print);;QSpinBox:: *spinBoxp 为函数的指针
2022-03-16 10:49:29
1782
1
原创 JNI的基础开发
JNI处理jclass对象和jObject的处理代码extern "C"JNIEXPORT void JNICALLJava_com_example_jnitest_MainActivity_passObject(JNIEnv *env, jobject thiz, jobject bean) { // TODO: implement passObject() // ?怎么操作java对象中的方法?JNI的反射调用 // 反射获取javaClass jclass
2022-02-23 18:02:44
396
原创 多线程基础知识
POSIX线程:主要适用于跨平台,针对win使用,因为本身安卓这样的类Unix已经包含了Posix的线程标准。一般的VS开发多线程需要引入POSIX,使得写出来的多线程代码满足移植标准。使用cmake引入依赖:include_directories("D:/......Pthread-w32-2-9-1-release/Pre-build.2/include");引入动态库和静态库link_directories("D:/......Pthread-w32-2-9-1-release/P
2022-02-22 17:31:12
94
原创 OpenGL编译着色器
1、读入着色器的代码一般着色器的代码可以写在raw下创建glsl文件。gls是openGL的着色语言。1.1、顶点着色器定义的每个单一的顶点,顶点着色器都会调用一次,当他被调用的时候,会在a_Position中接收当前的顶点的位置,这个属性被定义为vec4类型。vec4是一个四分量的向量,这个四分量是x,y,z,w。其中w作为一个特殊的属性。openGL会把定义到gl_Position中存贮的值作为当前顶点的最终位置,并把这些顶点组装成为点、直线、三角形的图元。『光栅化』:就是将上面
2022-02-21 17:28:20
3756
原创 PCM文件转WAV的实现
#include <iostream>using namespace std;typedef struct WAV_HEADER{ char chunkid[4]; unsigned long chunksize; char format[4];} pcmHeader;typedef struct WAV_FMT{ char subformat[4]; unsigned long sbusize; unsigned short a.
2022-02-15 18:05:05
766
1
原创 C++多线程操作队列
队列中如果同时存在pop和push操作,很容易出现冲突,所以多线程操作引入了锁,为了更好的保障在队列为空时,释放CPU,又引入了条件变量。以下SafeQueue.h文件中,为pop和push分别引入了锁和条件变量。#ifndef FFMPEGS_SAFE_QUEUE_H#define FFMPEGS_SAFE_QUEUE_H#pragma once#include <queue>#include <pthread.h>using namespace std;
2022-02-11 14:49:08
3154
原创 音频转aac格式
#include "main.h"#include <iostream>using namespace std;extern "C"{#include <libavcodec/avcodec.h>#include <libavformat/avformat.h>#include <libavutil/avutil.h>#include <libavutil/log.h>#include <libswresample/s.
2022-02-09 21:38:40
1149
原创 FFmpeg
复用与解复用:复用:就是将不同的流按照某种容器的规则放入容器。解复用:把不同的流按照容器的规则从容器中分离出来。常用的支持指令ffmpeg -bsfs 可用的码流ffmpeg -codecs 可用的编解码器ffmpeg -decoders 可用的解码器ffmpeg -encoders 可用的编码器ffmpeg -filters 可用的过滤器ffmpeg -layouts 可用的音频声道ffmpeg -L 可用的licenseffmpeg -pix_fmts 可用的
2022-02-07 18:38:19
1605
原创 C++指针
指针易错点:一、一级指针容易越界;char buf[3] = "abc";二、指针的叠加会不断改变指针的指向,p++,所以这时候再去释放free(p)就会报错。三、返回局部变量的地址四、同一块内存释放多次,会导致对野指针的释放。二级指针文件读写:// 打开文件File * pFile = fopen("./text.txt", "r");if(pFile == NULL){ printf("%d","文件打开失败");}// 获取文件行数int len =
2022-02-07 10:44:24
280
原创 C++语言笔记
引用:引用的本质就是指针常量,因此必须初始哈。int &ref = a;//自动转换为int* const ref = &a;修改的时候,自动转换为*ref= 200;常量引用的使用主要是在形参中添加const进行修饰,防止误操作修改。add(const int &a){ // 传递的过来的a不支持修改, }...
2022-02-07 10:44:12
102
原创 直播架构知识
以上是常见的直播架构图。采集端:一般音频是PCM格式,视频是RGB或者YUV格式。直播的编解码:为了便于手机视频的推流、拉流以及存储,通常采用音视频编码压缩技术来减少体积,编码方式:CBR、VBR,视频-编码格式:H.265、H.264、MPEG-4等,封装容器有TS、MKV、AVI、MP4等。现在比较常用的视频编码是H.264。音频-编码格式:G.711μ、AAC、Opus等,封装有MP3、OGG、AAC等,比较常用的是AAC编码格式。视频经过编码压缩大大提高了视频的存储和..
2022-01-26 17:39:10
3983
原创 OpenGL
OpenGL本身作为一个图形化处理的api,是一个跨平台,跨语言的图形化程序接口,它将计算机资源抽象成为一个个的OpenGL的对象,对这些资源的操作抽象为一个个OpenGL指令。OpenGL ES是面向嵌入式设备的三纬图形化的API子集。1、OpenGL 上下文所谓的上下文其实是一个配置的环境,内部包含了各种参数组成,更像是一个多种参数状态的巨大的状态机,对OpenGL的操作,本质就是对这个上下文环境中的参数的各种修改,由于不同的绘制模块可能需要使用完全独立的状态管理,因此可以在程序中创建不同的
2022-01-20 20:45:55
4476
原创 C++运算符
一个特殊的成员函数 operator+(Person &a)这个成员函数可以简化前面的operator+,实现效果是PersonC= PersonA+PersonB;也可以通过全局函数重载,实现a+b;
2022-01-18 18:19:58
473
原创 FFmpeg
1、基本流程包括:1、av_register_all();//注册所有文件格式和编码库2、avformat_network_init() // 打开网络视频流3、av_open_input_file()// 读取文件头部信息保存到AVFromatContext结构体4、av_find_stream_info()// 为pFormatCtx-> streams 填充正确的信息5、CODEC_TYPE_VIDEO //通过判断得到视频流类型6、avcodec_find_decode
2021-12-14 14:59:09
1453
原创 C++学习笔记
size of不是函数,是操作符,返回的是无符号的整数。变量的修改struct Person{ int lenght; char name; int num;}int test2() { struct Person p = {10, 'b', 30}; p.num = 50; // 或者通过指针进行修改 Pe>rson* pp = &p; p->num = 40;}static 与 extern的区别
2021-11-26 09:29:24
621
原创 Structs应用框架学习总结
Struts定义了通用的Controller(控制器),通过配置文件(通常是 Struts -config.xml)隔离Model(模型)和View(视图),以Action的概念以对用户请求进行了封装,使代码更加清晰易读。 Struts还提供了自动将请求的数据填充到对象中以及页面标签等简化编码的工具。 Struts能够开发大型Java Web项目。1.用户发送一个HttpServle...
2021-09-02 14:26:05
249
原创 《大话数据结构》读后感
第一章 :一个数据元素由若干个数据项组成,数据项是数据不可分割的最小单位。数据对象是性质相同的数据元素的集合,是数据的子集。数据结构:相互之间存在一种或者多种特点关系的数据元素的集合。数据结构分为逻辑结构和物理结构。逻辑结构:指数据对象中数据元素之间的相互关系。分为:集合结构、线性结构、树形结构、图形结构。物理结构:数据的逻辑结构在计算机中的存错形式。分为:顺序存储结构、链式存储结构集合机构:集...
2021-09-02 14:25:14
638
原创 梯度下降原理
引用https://www.jianshu.com/p/c7e642877b0e1、 梯度是微积分中一个很重要的概念,之前提到过梯度的意义在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向 我们可以看到,梯度就是分别对每个变量进行微分,然后用逗号分割开,梯度是用&...
2021-09-02 14:21:52
74
原创 神经网络知识点
神经网络是机器学习中的一种模型,是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。一般来说,神经网络的架构可以分为三类:前馈神经网络:这是实际应用中最常见的神经网络类型。第一层是输入,最后一层是输出。如果有多个隐藏层,我们称之为“深度”神经网络。他们计算出一系列改变样本相似性的变...
2021-09-02 14:21:36
564
原创 推荐系统知识点
推荐的方式:1、根据用户喜好,推荐喜欢的电影。网络设计:输入用户数据和电影数据,通过神经网络提取用户特征和电影特征。计算两者的相似度。将相似度的大小与用户对电影的评分之间建立关系。最终的模型应该是:用户与这个电影的相似度高的,他对这个评分也是高的。从计算相似度到万测会给你推荐的过程:1、读取保存的特征,并根据一个给定的用户ID、电影ID,我们可以索引到对应的向量。2、计算用...
2021-09-02 14:21:02
86
原创 C++学习
指针与constconst char * a; //指向const对象的指针或者说指向常量的指针。 char const * a; //同上 char * const a; //指向类型对象的const指针。或者说常指针、const指针。 const char * const a; //指向const对象的const指针。如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量。所以
2021-09-02 14:20:20
270
原创 Keras 实现MNIST数据集
keras优点:keras是为人类设计而不是为机器涉及的API,因此他用户友好。模块之间彼此独立:neural layers, 神经网络;cost functions, 损失函数;optimizers,优化器; initialization schemes, 初始化方案activation functions 激活函数;regularization schemes 正则化方案;k...
2020-04-13 13:44:44
178
原创 线性回归
线性回归 http://blog.51cto.com/12133258/2051527线性回归(Linear Regression)基本形式一般用向量形式表示:f(x)=wTx+b f(x)=w^Tx+bf(x)=wTx+b,其中w=(w1;w2;...;wd) w=(w1;w2;...;w_d)w=(w1;w2;...;wd),w ww和b学得之后,模型就得以确定。回归算法是试图采用对...
2019-01-03 14:30:00
503
原创 K近邻算法总结分析
KNN是通过测量不同特征值之间的距离进行分类。如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。找特征的距离计算,距离一般使用欧氏距离或曼哈顿距离:其算法的描述...
2018-12-27 23:41:50
417
原创 机器学习—(周志华) 绪论读后感总结
1、了解数据集的概念,理解样本空间和维数的概念。2、理解分类和回归的划分,如果欲预测的是离散的数据,例如分清好坏,此类学习任务是"分类"。如果学习任务是对西瓜成熟度进行划分,此类学习任务是回归任务。在二分类中涉及到正类和反类的概念。得到模型以后,进行预测的过程称为"测试",被测试的样本称为测试样本。3、聚类的概念就是簇的概念,需要主要的是,我们使用的训练样本通常不用有标记信息,所以分的到的...
2018-12-02 19:59:38
742
原创 线性回归算法总结
线性回归: 寻找一条合适的线来拟合数据。参考 https://www.cnblogs.com/God-Li/p/8971595.html我们将上式中的θ和x分别表示成两个一维矩阵[θ0 θ1 θ2]和[x0 x1 x2],X1 X2 X3 分别表示不同的特征值,θ0 θ1 θ2分别是不同特征值的权重参数,则可将上式化为(令x0=1)。 而实际结果不可能完全符合...
2018-11-01 22:21:33
271
原创 《安卓源码设计模式》读后感
1、android 系统中我们经常通过Context获取系统的服务,这些服务会再合适的时候以单例的形式注册在系统中。在我们需要的时候,通过Context的getSystemServce(String name)来获取。2、Context是以后抽象类,他的实现类是ContextImpl类。Activity的入口是ActivityThread 同JAVA方法,他的进入是在Main方法中,Activit...
2018-06-22 15:51:09
234
转载 使用Observer接口实践Observer模式
在Java中我们通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。1. 实现观察者模式实现观察者模式非常简单,[1]创建被观察者类,让它继承自java.util.Observable类;[2]创建观察者类,它实现java.util.Observer接口; 注意他们分别是继承被观察者类
2017-02-21 16:42:44
509
转载 安卓日历日程事件获取和监听汇总
在我们的APP开发过程中,很多时候我们需要获取用户的日历日程事件,便于我们APP更好的了解用户,同时给予用户提醒。要想获得日历日程的相关内容,首先我们需要拥有日历日程的读写权限。主要包括下面两个权限获得对安卓系统日历事件操作的权限,也就是在AndroidManifest.xml文件中加入如下两行· Android:name="android.permission.READ_CAL
2017-02-17 15:52:16
9534
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人