- 博客(37)
- 资源 (7)
- 收藏
- 关注
原创 OpenGL ES:纹理参数设置
在使用OpenGL ES渲染视频流时,需要将图像以纹理的方式送入渲染,这个过程需要设置纹理的相关参数,包括纹理的拉伸方式和纹理的过滤方式。首先生成一个纹理对象int textures[] = {0};glGenTextures(1, &textures[0]);OpenGL ES设置纹理参数的函数是glTexParameteri /glTexParameterf,函数原型是void glTexParameteri(int target, int pname, i...
2020-06-14 15:21:10 903
原创 OpenGL ES:理解VBO和VAO
VBO(Vertex Buffer Object)顶点缓冲区对象,是OpenGL ES2.0之后一个可使用的功能。表示存在于GPU内存中的一个对象,用于存储顶点坐标、纹理坐标等相关信息。如果不使用VBO则是将顶点、纹理坐标等数据存放在CPU内存中,在每次绘制之前通过通IO将其传递到GPU中,这样做的缺点是显而易见的,每次传递的数据相同还要花费同样的IO开销,所以绘制这些数据不发生变化的物体尽量使用VBO方式,提升性能。下面是使用传统方法绘制的代码首先获取顶点坐标是数据public...
2020-06-11 11:35:56 940 1
原创 OpenGL ES:渲染管线
顶点着色器 顶点着色器是一个可编程的处理单元执行顶点的变换(透视矩阵)、光照、材质的应用等与计算等顶点的相关操作每个顶点执行一次顶点着色器OpenGL ES的工作流程为首先将原始的顶点几何信息及其他属性传送到顶点着色器中经过顶点着色器处理后产生顶点坐标、颜色、位置等后续流程需要的各项定点属性信息然后传递给图元装配图元装配 图元装配不可编程它主要分为图元组装和图元处理两个阶段图元组装将顶点着色器处理好的顶点以点绘制...
2020-06-08 16:23:12 308
原创 C/C++:继承基类模版之后的友元声明
这段代码中如果不将继承的基类模版声明为友元类就会出现编译错误,因为基类函数调用了子类的保护(也可以是私有)构造函数template <typename T>class Base{public: static T* instance() { return new T(); } Base() = default;...
2019-11-11 15:50:57 314
原创 C/C++: Pure virtual function called! 错误解析
了解这个错误的原因,首先要知道 C++对象 在构造和析构时,都做了什么事情?首先要说明这种情况是在 C++基类包含纯虚函数以及虚析构函数的时候出现的。那么,C++构造函数都做了什么事情呢?第一步:构造最顶层的基类部分 a、让实例指向基类的虚函数表 b、构造基类实例成员变量 c、执行基类构造函数第二步:构造派生类独有部分 a、让实例指向派...
2019-10-19 18:15:10 2581 1
原创 Android:OpenSLES采集和渲染的选项设置
转载请标明原创:https://blog.csdn.net/qq_29621351/article/details/94562600 在Android应用程序中采用NDK原生的OpenSLES进行声音的播放是一个不错的选择(由于在OpenSLES是在C++层播放,跟硬件比较接近所以效率高,采集和播放的延迟也比Android组件延迟小得多),如果说有什么缺点,就是接口比较复杂,而且只...
2019-07-03 15:32:53 2220
原创 Windows:传统声音API waveOut
在网上找到了一个 Windows传统声音API接口waveOut的使用demo,先保存下来以后用到的时候再拿来看。原文:https://blog.csdn.net/gb1230/article/details/41350189值得注意的是waveOutSetVolume(...)这个设置音量的函数,它可以设置程序音量和系统音量(网上有讨论说有些情况设置系统音量无效)关于这个函数的详细解释在...
2019-06-28 15:42:46 1681 1
原创 Android : 音频焦点
当打开一个音频应用的时候,解决与另一个正在运行的音频应用的焦点争夺问题(例如:微信电话、网易云音乐)audioManager = (AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE);// 请求焦点的参数说明:// AUDIOFOCUS_GAIN:长期占有焦点,失去焦点者stop播放和释放// AUDIO...
2019-06-26 11:39:48 351
原创 C/C++:lambda
一篇极好的文章,建议直接转到https://shaharmike.com/cpp/lambdas-and-functions/然后...再多说一点,lambda表达式只要没有最后表示执行的括号,其实就是一个对象,如下int main(){ int a; int b; char c; char d; auto func = [&a, b...
2019-06-08 16:07:10 5201
原创 Android:JNI 在 loadLibrary() 时如何从外部存储中导入 .so 库
在工作中具有这样一个场景,我们编译好的 .so 文件,被包装成 .aar 供Android顶层接口调用,但是如果 .so 中的C++代码出现了什么问题,修改并重新编译成 .so之后再想从产品线上替换掉已经打好的包并进行产品线上的测试就会比较麻烦(产品线不能轻易的更新),因此想出了这样一种方式,在程序数据空间和外部存储(这里的外部存储指用户可见,同时也可用的存储空间)都有 .so 文...
2019-03-18 17:58:20 845
原创 C/C++:用ifstream/FILE重复读取同一个文件
在音频的采集编码发送端,用 std::ifstream 将采集到的原始数据、前处理后的pcm数据或编码后的RTP数据包替换掉,就可以指定音频的输入源,在特定的输入源之下衡量音频传输/处理的效果。假如要替换pcm原始音频数据////////////////////////////////////////////////////////#include <fstrea...
2019-01-11 13:25:42 3276
原创 C/C++:std::function 和 std::bind 以及占位符 std::placeholders::_n 的使用
头文件:<functional>std::function<...> std::function的实例可以对任何能够调用的目标实体进行封装调用,这些目标实体包括普通函数、lambda表达式、函数指针、仿函数、类的普通成员函数和类的静态成员函数等。std::function对象是对C++中现有的可调用实体的一种类型安全的封装(我们知道像函数指针这类可调用实...
2018-12-14 20:42:59 4058
原创 WebRTC:音频QoS中的前向纠错 (FEC) 技术解析
转载请标明出处:https://blog.csdn.net/qq_296213511. 前言 WebRTC语音传输中保证传输质量的主要措施分为丢包重传 (NACK) 和前向纠错 (FEC),其中NACK主要是接收端在检测到数据包RTP序列号不连续的时候,发送重传请求,发送端接收到重传请求后重新向接收端发送丢失的数据。FEC主要通过后一个数据包携带前一个数据包的冗余包,这样当前一...
2018-11-22 12:50:53 5145 1
原创 WebRTC:丢包重传的代码实现—NackTracker类
WebRTC通过NackTracker类实现丢包重传,下面是该类的源码。源码中包含公共变量和方法,也包含私有变量和方法,公共变量和方法可以被看作是对外部提供的接口。class NackTracker {public: // 重传列表的上限为500个包(20ms,10s) static const size_t kNackListSizeLimit = 500; ...
2018-10-26 13:53:42 1432
原创 WebRTC:源码时间戳缩放类TimestampScaler解析
WebRTC中的时间戳缩放类用于将外部时间戳转换为内部时间戳,或者将内部时间戳转换为外部时间戳。内部 / 外部时间戳概念外部时间戳即为RTP携带的时间戳字段,它表示RTP报文发送的时钟频率,在语音中通常等于pcm语音的采样率(RTP携带Opus编码时 时钟频率设置为固定的48kHz,而采样率可以有很多值),在视频中无论是哪种是视频编码,外部时间戳(时钟频率)都设置为固定的90kHz。外...
2018-10-24 11:50:46 800
原创 WebRTC :NetEQ源码分析
参考: https://www.cnblogs.com/talkaudiodev/p/9142192.html https://www.cnblogs.com/talkaudiodev/p/9185067.html https://www.cnblogs.com/talkaudiodev/p/9231526.html ...
2018-10-23 17:36:11 3005 5
原创 C/C++:从内存布局理解C++虚继承的实现原理
准备测试环境:Visual Studio 2017Visual Studio提供给用户显示C++对象在内存中的布局的选项:/d1reportSingleClassLayoutXXX // XXX替换为类的名字/d1reportAllClassLayout 创建工程取名为research,在research中找到research源文件右键该文件点击属性在r...
2018-09-13 21:08:29 1681
原创 C/C++:互斥锁和条件变量
互斥锁、条件变量和信号量是实现线程间同步的三种方式。在多线程程序访问临界资源时,可以对各个线程进行访问限制,每次只允许一个线程访问临界资源。条件变量相当于是互斥锁的一种补充,是线程中的东西,就是等待某一条件的发生,和信号一样。占有临界资源的线程在执行完对于资源的操作后,会发出“信号”,然后其它未占有资源的线程在感知到“信号”后就会抢占资源。互斥锁的使用需要的头文件:pthre...
2018-08-24 15:39:58 7770 1
原创 WebRTC :NetEQ几种数据缓冲区的代码实现
WebRTC音频引擎NetEQ在处理音频数据时,主要用到了4块内存区域用于暂存处理过程中间的临时数据,分别是抖动缓冲区,解码缓冲区,DSP算法缓冲区和语音缓冲区。 抖动缓冲区用于暂存网络中到来的未解码的音频数据包,然后这些数据包会通过解码器解码成为pcm原始音频数据,这些pcm数据存放的位置就是解码缓冲区,在需要经过音频信号处理的情况下,NetEQ会将解码缓冲区中的数据进...
2018-08-16 17:46:23 2355
原创 C/C++:标准库容器vector的用法及内存管理
C++中的标准库容器vector是一个类模板,可以根据想装入元素的具体类型来实例化一个vector容器,vector相当于一个动态数组,当你无法知道自己需要的数组规模具体要多大时,可以用它来解决问题,而且使用很方便。1.文件包含、变量声明#include <vector>#include <iostream>int main(){ std...
2018-08-15 16:44:42 1077
原创 编解码器:Opus编码器内置FEC功能测试
Opus功能十分强大,内置了FEC和DTX功能,Opus对FEC的使用方式是动态的,也就是说Opus能根据对端反馈的丢包率来动态的使用FEC功能,48k采样率,单声道、16k码率并且帧长度为20ms时,这种情况下只有在丢包率高于20%的时候Opus才会使用FEC,今天主要对Opus在这种条件下的FEC的功能进行了测试,本问是基于Opus接口的那篇文章写的,如果没看过可以链接到编解码器...
2018-08-03 21:20:24 4728 2
原创 计算机基础:字节序转换
转载请标明出处:https://blog.csdn.net/qq_29621351/article/details/81238589 字节序,顾名思义就是计算机存储基本数据类型时 字节的排列顺序,计算机存储字节的顺序分为两种:大端字节序和小端字节序,存储方式为 大端字节序的0x11在硬件地址的高位,而小端字节序的0x11在地址的低位。如图数值:0x11223344大端:0x1...
2018-07-27 22:08:58 2265
原创 WebRTC:如何从WebRTC中提取出音频QoS代码(Windows下并编译成dll库文件)
转载请注明出处:https://blog.csdn.net/qq_29621351/article/details/80991615WebRTC版本:M66 WebRTC的语音QoS机制几乎可以说是行业的标杆,其实现的方式主要融入了三种技术,包括丢包重传(NACK),前向纠错(FEC)以及原GIPS公司的网络均衡器(NetEqualizer,简称NetEQ)。前两种都是在牺牲一...
2018-07-24 22:14:53 1959 8
原创 编解码器:Opus编解码器的接口及使用
1.源码下载及编译编解码器版本采用opus-1.3-beta,opus官网:https://www.opus-codec.org/下载完成后解压源码,在VS2015上打开源码 opus-1.3-beta\win32\VS2015\opus.sln,共有5个项目,其中opus项目是opus编解码器的主要实现以及对外部提供接口,实际写程序的时候一定是基于该项目中接口的,opus_demo是基...
2018-07-24 11:10:32 8544 1
原创 音视频基础:RTP/RTCP协议
RTP协议 RFC3550定义实时传输协议RTP和它的控制协议RTCP。RTP协议是Internet上针对流媒体传输的基础协议,该协议详细说明在互联网上传输音视频的标准数据包格式。RTP本身只保证实时数据的传输,并不能提供可靠传输、流量控制和拥塞控制等服务质量保证,这需要RTCP协议提供这些服务。 IETF的RFC3550定义RTP/RTCP协议的基本内容,包括报文格式、传输规则等。...
2018-07-18 21:41:37 3764
原创 WebRTC:如何编译Windows版本的WebRTC(M66)
我主要做安卓上的WebRTC,然而为了读懂源码,不得不使用PC版本来调试源码。so... 环境: Windows 10,Visual Studio 2017(企业版),Python,depot_toolsVS 2017下载器链接 https://download.csdn.net/download/caoshangpa/10410923注意:2017版本的下载器如果提示因为网络原因...
2018-07-10 21:58:02 4491
原创 C/C++:定义指针的引用
C++中定义指针的引用有什么好处呢?首先指针引用的定义方式(以char类型为例): char* &ptr = xxx 我们知道在C语言中如果想改变实参指针所指向的位置,就要定义重指针,如下面的例子// 错误 实参指针不能被赋值void changePtr( char* ptr ){ ptr = (char*)malloc(100*sizeof(char))...
2018-06-10 12:37:21 3705
原创 WebRTC:下载与编译Android版本的WebRTC(M66)
WebRTC是Google公司开源的一套免费的网页实时音视频通信的解决方案,可以说性能非常强大。可以在Google WebRTC网站https://webrtc.org上下载并使用。源码 下载源码下载需要一套工具,因为Google为WebRTC源码的迁出设计了独立的工具集depot_tools,其实也就是对git和svn的配合使用。工具下载参考https://dev.chr...
2018-06-03 10:53:54 1670
原创 Linux常见操作
1. 设置永久环境变量 vim ~/.bashrc export PATH=/path/to/your/dir:$PATH ($PATH:/path/to/your/dir) source ~/.bashrc
2018-05-30 17:52:56 543
原创 C/C++:宏定义的有效范围
在C/C++中,宏定义的有效范围被规定为当前文件内有效。 “当前文件内有效”分为两种情况,一种是定义在头文件中,另一种是定义在源文件中。 在头文件中的宏定义随着头文件一同被包含到源文件中时,此时宏定义在该源文件中也有效,但是当头文件中的宏定义随着该头文件一起被包含到另一个头文件中,而这另一个头文件又被一个源文件包含,则该宏定义在最终被包含的源文件中无效,也就是说,想使用头文件中...
2018-05-28 19:44:03 13047 5
原创 Android : C++调用Java
转载请标明出处:https://blog.csdn.net/qq_29621351/article/details/79870319通过这段时间接触JNI的过程,觉得JNI里面的坑还是挺多的,有的地方理解的也不是很周到,如果发现理解错的地方,请大家能够指出,我会立即改正。JNI可以理解为三层:Java层,JNI层,C++层。Java层就是Java语言编写的程序,C++层...
2018-04-15 15:54:55 1722
原创 C/C++ 常用函数(持续更新)
1. strchr()函数 和 strrchr() 函数strchr定义于头文件 <string.h>const char *strchr( const char *str, int ch );寻找ch(按照如同(char)ch的方式转换成char后)在str所指向的空终止字节字符串(每个字符都被看做unsigned char)中的首次出现位置。终止的空字符被认为是字符串的一部分,并且...
2018-04-10 20:33:28 595
原创 C/C++ 常用宏(持续更新)
刚刚接触C++,发现这个语言比起Java来真是难出屎了,但是要做音视频开发,C++怎么说都是不可避免的,趁我还年轻,决心将它学好。言归正传..... C/C++标准库中包含许多宏定义,既然是在标准库中,那么这些宏定义肯定就是与平台无关的,当然还有一种宏就是与平台相关的预编译宏,大家基本也都见过。 为了以后查找方便,开了这篇帖子,记录一下见过的C/C++宏。当前源代码行号 ...
2018-04-10 19:47:29 1489
转载 OpenSIPS+FreeSWITCH负载均衡+NAT+黑名单
原文出处:https://freeswitch.org/confluence/display/FREESWITCH/OpenSIPS+configuration+for+2+or+more+FreeSWITCH+installsAboutAfter much searching and experimentation, I've found an opensips.cfg that d...
2018-04-09 17:58:34 7883
原创 Linux在Terminal中利用C语言进行清屏
想自己做一个腾讯课堂视频上面的在Linux终端上做火车票管理系统或者学生管理系统,对于界面的部分查了好久,原本以为是用了C语言的ncurses.h头文件,实际上只是打印了这个。这个是 ANSI/VT100 Terminal Control Escape Sequences详见 http://www.termsys.demon.co.uk/vtansi.htm#include &l...
2017-03-29 22:03:00 2242
staruml 3.0.2 破解文件
2019-02-22
《FreeSWITCH : VoIP实战》
2017-03-22
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人