自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 资源 (2)
  • 收藏
  • 关注

原创 音频的传输链路与延迟优化点

麦克风->系统采集模块->APP采集模块->3A、混响等音效->混音->音频编码->RTC网络发送->MediaServer->RTC网络接收->音频jitter buffer->音频解码->音频的后处理(均衡)->APP播放模块->x系统播放模块->扬声器/耳机。整个链路如上;

2024-02-21 12:00:44 774 1

原创 音视频网络冗余策略

视频通信冗余策略

2022-09-15 17:17:29 368 1

原创 FFMpeg的安卓集成问题

ffmpeg的安卓引入

2022-07-21 17:10:29 535

原创 YUV 播放器

YUV 播放器

2022-07-14 18:34:58 822

原创 Linux的进程

1、进程间的通信管道:单项流动pipe适用于半双工的单项流动,必须是父子关系进程间的通信。有名管道:适用于非血缘关系的进程间通信。消息队列:克服了信号传输信号少,管道只能传输无格式的字节流问题共享内存:隐射一段被其他进程访问的内存。信号量:作为同步进程的一种锁机制。套接字:进程间的通信方式信号:比较负责的通信方式。学习使用pipe进程父子间和兄弟间的进程通信。使用fifo进程无血缘关系的进程间通信使用mmap进行无血缘和有血缘关系的进程间通信2、管道管道的本质

2022-04-20 08:51:23 111

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

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

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

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

原创 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 1697 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 353

原创 多线程基础知识

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 73

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

原创 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 721 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 3008

原创 音频转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 1098

原创 FFmpeg

复用与解复用:复用:就是将不同的流按照某种容器的规则放入容器。解复用:把不同的流按照容器的规则从容器中分离出来。常用的支持指令ffmpeg -bsfs 可用的码流ffmpeg -codecs 可用的编解码器ffmpeg -decoders 可用的解码器ffmpeg -encoders 可用的编码器ffmpeg -filters 可用的过滤器ffmpeg -layouts 可用的音频声道ffmpeg -L 可用的licenseffmpeg -pix_fmts 可用的

2022-02-07 18:38:19 1574

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

原创 C++语言笔记

引用:引用的本质就是指针常量,因此必须初始哈。int &ref = a;//自动转换为int* const ref = &a;修改的时候,自动转换为*ref= 200;常量引用的使用主要是在形参中添加const进行修饰,防止误操作修改。add(const int &a){ // 传递的过来的a不支持修改, }...

2022-02-07 10:44:12 82

原创 直播架构知识

以上是常见的直播架构图。采集端:一般音频是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 3863

原创 OpenGL

OpenGL本身作为一个图形化处理的api,是一个跨平台,跨语言的图形化程序接口,它将计算机资源抽象成为一个个的OpenGL的对象,对这些资源的操作抽象为一个个OpenGL指令。OpenGL ES是面向嵌入式设备的三纬图形化的API子集。1、OpenGL 上下文所谓的上下文其实是一个配置的环境,内部包含了各种参数组成,更像是一个多种参数状态的巨大的状态机,对OpenGL的操作,本质就是对这个上下文环境中的参数的各种修改,由于不同的绘制模块可能需要使用完全独立的状态管理,因此可以在程序中创建不同的

2022-01-20 20:45:55 4432

原创 ffmpeg在clion下的引入

Clion下ffmpeg的集成

2022-01-19 18:37:10 2410

原创 C++运算符

一个特殊的成员函数 operator+(Person &a)这个成员函数可以简化前面的operator+,实现效果是PersonC= PersonA+PersonB;也可以通过全局函数重载,实现a+b;

2022-01-18 18:19:58 460

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

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

原创 Structs应用框架学习总结

Struts定义了通用的Controller(控制器),通过配置文件(通常是 Struts -config.xml)隔离Model(模型)和View(视图),以Action的概念以对用户请求进行了封装,使代码更加清晰易读。 Struts还提供了自动将请求的数据填充到对象中以及页面标签等简化编码的工具。 Struts能够开发大型Java Web项目。1.用户发送一个HttpServle...

2021-09-02 14:26:05 225

原创 《大话数据结构》读后感

第一章 :一个数据元素由若干个数据项组成,数据项是数据不可分割的最小单位。数据对象是性质相同的数据元素的集合,是数据的子集。数据结构:相互之间存在一种或者多种特点关系的数据元素的集合。数据结构分为逻辑结构和物理结构。逻辑结构:指数据对象中数据元素之间的相互关系。分为:集合结构、线性结构、树形结构、图形结构。物理结构:数据的逻辑结构在计算机中的存错形式。分为:顺序存储结构、链式存储结构集合机构:集...

2021-09-02 14:25:14 563

原创 梯度下降原理

引用https://www.jianshu.com/p/c7e642877b0e1、 梯度是微积分中一个很重要的概念,之前提到过梯度的意义在单变量的函数中,梯度其实就是函数的微分,代表着函数在某个给定点的切线的斜率 在多变量函数中,梯度是一个向量,向量有方向,梯度的方向就指出了函数在给定点的上升最快的方向 我们可以看到,梯度就是分别对每个变量进行微分,然后用逗号分割开,梯度是用&...

2021-09-02 14:21:52 58

原创 神经网络知识点

神经网络是机器学习中的一种模型,是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。一般来说,神经网络的架构可以分为三类:前馈神经网络:这是实际应用中最常见的神经网络类型。第一层是输入,最后一层是输出。如果有多个隐藏层,我们称之为“深度”神经网络。他们计算出一系列改变样本相似性的变...

2021-09-02 14:21:36 519

原创 推荐系统知识点

推荐的方式:1、根据用户喜好,推荐喜欢的电影。网络设计:输入用户数据和电影数据,通过神经网络提取用户特征和电影特征。计算两者的相似度。将相似度的大小与用户对电影的评分之间建立关系。最终的模型应该是:用户与这个电影的相似度高的,他对这个评分也是高的。从计算相似度到万测会给你推荐的过程:1、读取保存的特征,并根据一个给定的用户ID、电影ID,我们可以索引到对应的向量。2、计算用...

2021-09-02 14:21:02 71

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

原创 Keras 实现MNIST数据集

keras优点:keras是为人类设计而不是为机器涉及的API,因此他用户友好。模块之间彼此独立:neural layers, 神经网络;cost functions, 损失函数;optimizers,优化器; initialization schemes, 初始化方案activation functions 激活函数;regularization schemes 正则化方案;k...

2020-04-13 13:44:44 154

原创 线性回归

线性回归 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 449

原创 K近邻算法总结分析

KNN是通过测量不同特征值之间的距离进行分类。如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别,其中K通常是不大于20的整数。KNN算法中,所选择的邻居都是已经正确分类的对象。该方法在定类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。找特征的距离计算,距离一般使用欧氏距离或曼哈顿距离:其算法的描述...

2018-12-27 23:41:50 373

原创 机器学习—(周志华) 绪论读后感总结

1、了解数据集的概念,理解样本空间和维数的概念。2、理解分类和回归的划分,如果欲预测的是离散的数据,例如分清好坏,此类学习任务是"分类"。如果学习任务是对西瓜成熟度进行划分,此类学习任务是回归任务。在二分类中涉及到正类和反类的概念。得到模型以后,进行预测的过程称为"测试",被测试的样本称为测试样本。3、聚类的概念就是簇的概念,需要主要的是,我们使用的训练样本通常不用有标记信息,所以分的到的...

2018-12-02 19:59:38 679

原创 线性回归算法总结

线性回归: 寻找一条合适的线来拟合数据。参考 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 236

原创 《安卓源码设计模式》读后感

1、android 系统中我们经常通过Context获取系统的服务,这些服务会再合适的时候以单例的形式注册在系统中。在我们需要的时候,通过Context的getSystemServce(String name)来获取。2、Context是以后抽象类,他的实现类是ContextImpl类。Activity的入口是ActivityThread 同JAVA方法,他的进入是在Main方法中,Activit...

2018-06-22 15:51:09 216

转载 使用Observer接口实践Observer模式

在Java中我们通过Observable类和Observer接口实现了观察者模式。Observer对象是观察者,Observable对象是被观察者。1. 实现观察者模式实现观察者模式非常简单,[1]创建被观察者类,让它继承自java.util.Observable类;[2]创建观察者类,它实现java.util.Observer接口;  注意他们分别是继承被观察者类

2017-02-21 16:42:44 468 1

转载 安卓日历日程事件获取和监听汇总

在我们的APP开发过程中,很多时候我们需要获取用户的日历日程事件,便于我们APP更好的了解用户,同时给予用户提醒。要想获得日历日程的相关内容,首先我们需要拥有日历日程的读写权限。主要包括下面两个权限获得对安卓系统日历事件操作的权限,也就是在AndroidManifest.xml文件中加入如下两行·  Android:name="android.permission.READ_CAL

2017-02-17 15:52:16 9352

原创 Viewpager切换滑动速度的修改

默认情况下,viewpager的setcurrentItem()方法的切换时间是写死的我们要想修改他的滑动时间,需要引入新的类继承Scroller具体代码如下:import android.content.Context;import android.view.animation.Interpolator;import android.widget.Scroller;

2015-12-30 11:29:36 365

数字信号处理(第三版) 程佩青 课后习题答案

这个文件是通信专业必看的书,课后习题很经典,本文档去除水印,比一般都版本都清楚,不会出现打不开情况。

2015-05-09

基础常见单片机知识百问

关于单片机的相关问题答疑,关于单片机应用技巧的100问

2010-06-10

空空如也

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

TA关注的人

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