自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (10)
  • 收藏
  • 关注

原创 如何识别 macos/ios 使用跨平台宏定义

在xcode中系统内置的跨平台宏定义在头文件中#ifdef #ifdef APPLE#include <TargetConditionals.h>#endif此头文件中各个平台的宏定义有(以Mac为例):#define TARGET_OS_MAC 1#define TARGET_OS_WIN32 0#define TARGET_OS_UNIX 0#de...

2019-01-05 16:59:51 5210

原创 如何编译protobuf for IOS

在为IOS平台编译google protobuf时,我自己制作了一个脚本 :protobuf-build-script该脚本可以自动下载指定版本的源码,并且进行编译,可以修改脚本内部的版本号来编译各个版本。一次编译直接生成armv7 armv7s arm64静态库。xcode8 protobuf-2.6.1 测试通过。希望大家一起维护这个脚本。...

2019-01-05 16:58:35 821

转载 语音编码常见概念解释--摘选自speex codec文档

原文地址:http://www.speex.org/docs/manual/speex-manual/node4.htmlCodec descriptionThis section describes Speex and its features into more details.ConceptsBefore introducing all the Speex features, her...

2019-01-05 16:47:45 23693 1

转载 有关音频编码的知识与技术参数

自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。##1、什么是采样率和采样大小(位/bit)?  声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行...

2019-01-05 16:47:12 23138 1

原创 如何裁剪YUV420图像,抓取指定区域,制作方形视频,模仿Instagram

###I420格式介绍在webrtc中android和ios系统采集摄像头获取到原始数据后,一帧原始图像会被转化为标准的YUV420P格式,也就是I420格式,转换的函数使用的是libyuv中的ConvertToI420()函数###YUV格式详细讲解进行裁剪操作需要对I420格式的内存分布有深入的了解,推荐大家看这篇文章:http://blog.csdn.net/jefry_xdz/...

2019-01-05 16:46:42 2466 2

原创 如何下载旧版本android NDK

我们可能会有一些旧代码需要旧版本的NDK来编译那么如何下载旧版本NDK呢?方法为:根据版本号拼接下载地址32位版本后缀为x86,64位版本后缀为x86_641、版本号<=r10btar.gz for linux /macos and .zip for windowsLinux:http://dl.google.com/android/ndk/android-ndk-r9b-lin...

2019-01-05 16:44:29 2291

原创 git 生成版本号 git describe

##如果使用git命令行工具,产生版本号?Git describe如果符合条件的tag指向最新提交则只是显示tag的名字否则会有相关的后缀来描述该tag之后有多少次提交以及最新的提交commit id。不加任何参数的情况下,git describe 只会列出带有注释的tag$ git describev1.0.3-6-g0c2b1cf 1、6:表示自打tag v1.0.3以来有6...

2019-01-05 16:43:56 17565

原创 cef中c++和javascript数据交互的几种方法

cef中c++和javascript数据交互的几种方法基础知识cef中有两种进程,render进程和browser进程。render进程render进程负责显示web页面,运行javascript代码。v8引擎的初始化是在render进程中调用的,所以你的javascript代码是在render进程中执行的。即使你在browser进程中调用frame->ExecuteJavaS...

2019-01-05 16:43:11 7783 1

原创 如何修改cef源码支持windows xp

公司目前使用的cef版本是1547,是一个2013年的版本,目前发现了一些bug。所以打算升级到最新版本,但是需要支持windowsxp。##cef版本选择谷歌浏览器chromium从50版本开始不支持xp了,所以对应的cef从2704开始不支持xp。cef-2623是最后一个支持xp的版本。但是经过验证cef-2623并没有修复我们发现的bug:这个bug是当显示pdf时,pdf页面内...

2019-01-05 16:42:39 2775 3

原创 从源码编译cef的经验

##最近需要编译cef的3163版本,是20170829发布的版本为了支持windowsxp需要修改chromium代码,因为chromium已经不支持windowsxp了,使用了一些新系统才有的api。所以需要从源码编译cef和chromium由于最近国家限制vpn非常严重,导致经常失败。结果下载chromium一个星期过去了,还没搞完。##总结一下经验,便于下次下载时少走弯路###...

2019-01-05 16:42:08 1145

原创 cef中javascript和c++交换二进制数据(arraybuffer)的方法

javascript的arraybuffer如何传到c++?javascript可以通过XMLHttpRequest的Get请求得到arraybuffer类型的数据,也可以通过POST请求,向服务器发送arraybuffer数据。那么利用http请求和cef的custom scheme机制,javascript就可以与本地的c++代码交换arraybuffer数据。注意:javascript...

2019-01-05 16:41:40 2198 2

原创 cef利用off-screen-rendering离屏渲染进行视频录像

##windows客户端如果是通过cef来实现的,那么可以通过osr模式来进行视频录像。##cef off-screen rendering介绍cef的off-screen rendering功能,可以把需要渲染的图像数据,以回调的方式回调给我们,由我们自己来绘制。比如使用opengl绘制纹理。我们可以利用这个数据来进行客户端的屏幕录像。##开启离屏渲染功能###一、修改CefSett...

2019-01-05 16:41:09 6385

原创 cef降低视频渲染时cpu使用率的方法

windows客户端中使用了基于webrtc的音视频sdk,同时界面使用的是cef。当webrtc解码出大尺寸视频时,需要通过某些技术将数据投递给javascript进行绘制。##一、使用canvas绘制bmp数据webrtc解码图像后,将数据转换为BMP图像,保存在内存中,javascript通过自定义scheme进行图像的获取,比如请求zhangpengtest://image001....

2019-01-05 16:40:39 4377 1

原创 webrtc远端图像尺寸改变时,如何调整webrtc ios view的大小

当使用ios版webrtc objective-c的api时,我们使用RTCEAGLVideoView来显示远端图像@interface RTCEAGLVideoView : UIView <RTCVideoRenderer>@property(nonatomic, weak) id<RTCEAGLVideoViewDelegate> delegate;@end...

2019-01-05 16:39:46 2072

原创 基于路由表的webrtc流媒体服务器方案

##概述在开发流媒体服务器时,rtp数据如何在服务器之间转发,对于降低音视频延时和丢包有很重要的影响。我设想了一种可以降低音视频延时的转发方案。思想来源于IP协议的路由表选路算法。TCP UDP协议的区别我们经常说tcp和udp的区别是,tcp是有连接的,udp是无连接的。TCP的有连接什么是连接?连接就是一个固定的路径,这个路径是由网络上一些路由器、交换机组成。这个连接途经的...

2019-01-05 16:39:07 1018 2

原创 webrtc封装sdk(八)使用webrtc desktop_capture截屏

###简介webrtc的modules中有一个模块desktop_capture,该模块负责截屏,目前只支持windows和mac平台,android,ios没有实现。desktop_capture中有两种截屏方式,第一种是截单个窗口,叫做WindowCapturer,第二种是截整个屏幕,叫做ScreenCapturer。window_capture/screen_capture都继承于基...

2019-01-05 16:37:56 6009 3

原创 webrtc封装sdk(七)如何在macos上编译Android版本webrtc

有些开发的朋友习惯使用macos来工作,所以需要在macos上编译webrtc android版本,但是根据webrtc官方的说法,目前只支持在linux系统下编译webrtc android版本,经过自己的研究发现,其实可以通过很少的修改,在mac上编译通过webrtc android。这里说的方法不是使用linux虚拟机,是真的在macos下编译。下面讲解一下如果操作。##准备阶段...

2019-01-05 16:37:18 2534 1

原创 webrtc封装sdk(六)获取本地pcm语音数据和远端混音后的pcm数据

做录音时首先需要获取本地采集的pcm数据和所有远端用户合成后的pcm数据,也就是播放时投递给扬声器的pcm数据,本文讲解一下如何获取webrtc的原始音频数据。##webrtc版本说明本文使用的webrtc api依赖于webrtc分支版本<=branch57在branch57以及以前的版本应该都能测试通过。在branch>=58中VoEExternalMedia可能会被移除。...

2019-01-05 16:36:31 2524

原创 [小米面试题]一个乱序数组a[0...n-1],求a[j]-a[i]的最大值

##小米面试题一个乱序数组a[0…n-1],求a[j]-a[i]的最大值,其中i<j##一、观察现象观察一个数组 int a[] = {5,19,40,2,100,844,12,3,6,8,33,90};很明显最大差值应该是844-2=842我们把数组分为前后两部分,分割位置为元素2的后面数组分为两个子数组:int a1[] = {5,19,40,2};int a2[] = ...

2019-01-05 16:36:05 1465

原创 webrtc封装sdk(五)编译webrtc android遇到的问题

按照官方的编译步骤就可以编译出android版本的各个静态库libxxx.a当我们使用这些静态库,并且还需要编译自己写的那些c++代码时,可能会遇到以下两个问题自己本地的android ndk和webrtc内部使用的ndk版本不同ndk版本相同但是stl的libc++库类型不同,如llvm-libc++,gnustl,stlport等以上两个问题会导致如下类型的链接错误:un...

2019-01-05 16:30:43 1998

原创 webrtc封装sdk(四)使用swig生成跨平台的api

##如何发布我们的sdk?当我们封装好了webrtc sdk后,建议使用swig处理c++头文件,来生成objc,java平台的api。##为何推荐使用swig使用swig的好处是当我们修改了c++接口后,只需要执行生成脚本,就可以更新objc和java类。不需手动修改,减少了工作量。我们仅需手动维护一份c++实现即可,对于android/IOS/MacOS平台的支持完全利用swig去支...

2019-01-05 16:30:17 633

原创 webrtc封装sdk(三)VoiceEngine的使用方法

WebRtc中VoiceEngine的使用方法webrtc中的VoiceEngine是用来管理语音通道channel的类提供了控制语音整个过程的接口VoiceEngine的实现类VoiceEngineImpl通过继承的方式将很多不同类型的接口集成在了一个类对象中。这些接口一共分为以下几种类型:VoiceEngine :基础接口,可以设置log文件路径,创建VoiceEngineImpl...

2019-01-05 16:29:50 25713 1

原创 webrtc封装sdk(二)call api的使用

##为什么使用Call Api目前新版webrtc的api和以前已经有很大不同,如果希望封装webrtc为一个音视频sdk,目前最简单的方法就是了解并使用call类的api。本文简单介绍Webrtc::Call的基本使用方法。文中提到的代码可以参考我的开源项目:Mac端可以运行的call调用demofoxrtc–基于webrtc封装的sdk##Call简介Call类的头...

2019-01-05 16:29:27 25881 3

原创 webrtc封装sdk(一)思路

很多公司使用webrtc来做音视频sdk,但是大部分公司在使用上层的api,使用起来很繁琐,需要了解很多会话协议,《webrtc封装sdk》系列文章为大家讲述一种更简单的封装方法,只需几天,就可以封装出一个sdk。为何如此简单?本文讲述的方法,不处理会话管理部分的逻辑,只针对音视频数据包,通过使用webrtc内部的c++接口来实现音视频的基本功能,并且能够回调上来原始的rtp/rtcp数据包,...

2019-01-05 16:28:57 28410 2

原创 WebRTC gateway janus入门教程:从配置到插件编写

文章链接: http://webrtc.org.cn/webrtc-janus-180426/本文介绍了janus的环境搭建,janus的设计思想,和插件的编写方法。阅读本文后,你能够对janus的使用有基本的认识。具体的细节可以通过阅读源码的方式继续深入了解。...

2019-01-05 16:28:21 3085

原创 json解析实例-使用picojson.h

通常c++解析json会使用jsoncpp,使用起来也很方便,但是需要引入几个源文件。如果你不希望引入源文件或第三方库,那么picojson就是一个比较好的选择,因为它只有一个头文件。本文通过一个例子来讲解如何使用picojson##情景介绍统计某一个问题的答题情况,包括每个选项有多少人选择,一共多少人答题。{ "questionId":1, "answerSummary": {...

2019-01-05 16:26:04 2727

原创 c++虚表的使用 通过虚表调用虚函数的演示代码

    //演示一下c++如何找到虚表地址vptr以及如何通过虚表调用虚函数    #include <iostream>    using namespace std;    class CTest    {    public:        CTest(){}        virtual void Print(){cout<<"hello world"...

2019-01-05 16:25:25 266

原创 坚持读《深入理解计算机系统》

从2016年11月1日开始,每天晚上都坚持读《深入理解计算机系统》这本书。全面的了解了计算机是如何工作的。按照目前的的进度,应该在2016年12月15日就可以看完了。我也想晚上可以放松下,看看电影,可是总是觉得没什么意义。还是在年轻时多学学吧。本书已经在20161212看完了 图片发自简书App 图片发自简书App...

2019-01-05 16:24:17 229

原创 在团队管理中使用瀑布IM

团队现状目前团队中开发人员约20人,其中中涉及到的平台有安卓,IOS,linux平台 选择瀑布主要是看中它的跨平台特点,我们的安卓开发人员使用windows版本或者ubuntu版本,IOS开发人员使用MAC版本和IOS版本瀑布IM有哪些特点呢?聊天信息跨平台、跨设备支持文件上传并永久保存消息中支持传代码丰富的快捷键应用举例1、不同开发小组的管理 瞧我加入了好多小组呀,把不同兴趣的人加到

2015-10-24 01:17:09 1794

转载 语音编码常见概念解释--摘选自speex codec文档

Codec descriptionThis section describes Speex and its features into more details.ConceptsBefore introducing all the Speex features, here are some concepts in speech coding that help better und

2015-10-16 13:02:49 2021 1

转载 有关音频编码的知识与技术参数

自然界中的声音非常复杂,波形极其复杂,通常我们采用的是脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。 1、什么是采样率和采样大小(位/bit)?  声音其实是一种能量波,因此也有频率和振幅的特征,频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采

2015-09-11 11:13:35 1336

原创 c++虚表的使用 通过虚表调用虚函数的演示代码

//演示一下c++如何找到虚表地址vptr以及如何通过虚表调用虚函数//[email protected] 20130811#include using namespace std;class CTest{public: CTest(){} virtual void Print(){cout<<"hello world"<<endl;}};int

2013-08-11 22:04:15 2733

原创 linux磁盘分区方法 重新分区方法 新建分区方法

进入系统,查看分区假设对sda5分区进行重新分区,分成两个分区,sda5,sda6,大小分别为50G,76G首先删除sda5分区:输入fdisk /dev/sda可输入m显示帮助信息,现在输入d,再输入5,删除sda5重启系统进入维护模式,输入root密码执行fdisk /dev/sda新建分区,操作步骤如下:输入n新建分区,起始位置使用默认值,大小输入

2012-10-17 17:17:43 18399

原创 跨平台的EVENT事件 windows linux

#ifndef _HIK_EVENT_H_ #define _HIK_EVENT_H_#ifdef _MSC_VER#include #define hik_event_handle HANDLE#else#include typedef struct { bool state; bool manual_reset; pthrea

2012-06-29 12:50:21 6322

原创 unicode转多字节字符

wcstombs()当第一个参数为空时,返回存储结果字符串需要的字节数支持中文转换需要在调用之前加入语句 :setlocale(LC_ALL,"");完成之后调用:setlocale(LC_ALL,"C");示例代码如下:char * wchar2char(const wchar_t *wch) { assert(wch != NULL);

2011-12-27 13:05:12 2053

原创 LevelDB数据库使用

向数据库插入数据的操作如下: leveldb::DB* LocalCacheDB:: m_pDB=NULL;leveldb::Options LocalCacheDB:: m_options;bool WriteToDB(INFO& info){    leveldb::WriteOptions wo;    leveldb::ReadOptions ro;    wo

2011-12-24 15:31:33 8365

原创 教你使用微软小型数据库esent

#include #include #include #pragma comment (lib, "esent.lib")using namespace std;JET_ERR WriteTest(JET_SESID& sessionID,JET_DBID& dbID){    JET_TABLEID iTableID;    JET_COLUMNID iColum

2011-11-30 17:12:28 4703 1

原创 福利贴csdn博客积分详解

转:     博客积分是衡量博客水平的重要标准,博客的排名也将按照积分排列。积分规则具体如下: 1、每发布一篇原创或者翻译文章:可获得10分 2、每发布一篇转载文章:可获得2分 3、博主的文章每被评论一次:可获得1分 4、每发表一次评论:可获得1分(自己给自己评论、博主回复别人对自己博文的评论不获得积分) 5、每篇博文阅读次数每超过100次:可获得1分,阅读加分最高加到10

2011-11-25 12:32:30 5653 53

原创 C++算法——用递归求排列

通常我们希望检查n 个不同元素的所有排列方式以确定一个最佳的排列。比如,a,b 和c 的排列方式有:a b c, a c b, b a c, b c a, cab 和c b a。n 个元素的排列方式共有n !种。由于采用非递归的C + +函数来输出n 个元素的所有排列方式很困难,所以可以开发一个递归函数来实现。令E= {e1 , ..., en }表示n 个元素的集合,我们的目标是生成

2011-11-24 14:18:37 2435 1

原创 C++算法——递归

统计元素a [ 0 ]至a[n-1] 的和(简记为a [ 0 : n - 1 ])。从代码中我们可以得到这样的递归公式:当n = 0时,和为0;当n > 0时,n个元素的和是前面n - 1个元素的和加上最后一个元素#include using namespace std;int RecursiveSum(int num[],int n);const int MAX=100;

2011-11-24 10:55:55 2045

MFC邮件客户端毕业设计改进版 南京理工大学 张鹏 20150414更新

修改了2013年和以前传的旧代码。修改了一些bug。实现发邮件、收邮件、草稿箱、发件箱、已发送等功能。开发工具vs2008+sp1

2015-04-14

MFC邮件客户端毕业设计改进版 张鹏

修改了以前传的一份旧代码。修改了一些bug。实现发邮件、收邮件、草稿箱、发件箱、已发送等功能。vs2008+sp1

2013-04-13

Visual Assist X 最新版破解版

Visual Assist X 最新版 破解版 免费版 Visual Assist X 最新版 破解版 免费版 Visual Assist X 最新版 破解版 免费版 Visual Assist X 最新版 破解版 免费版

2011-11-16

MFC实现输出sin函数图象

MFC实现输出sin函数图象 MFC实现输出sin函数图象 MFC实现输出sin函数图象 MFC实现输出sin函数图象 MFC实现输出sin函数图象

2011-11-16

c++ 实现的内存池 memorypool

c++ 实现的内存池 memorypool。此内存池可防止频繁申请和释放内存造成的内存碎片

2011-11-16

MFC实现的贪吃蛇游戏(水平有限仅供参考)

用MFC实现的贪吃蛇游戏,只有最基础的功能哦。但是大家可以参考下思路,以及MFC绘图的方法。

2011-11-16

C++电话本管理程序

C++电话本管理程序 C++电话本管理程序 C++电话本管理程序

2011-09-18

C++学生成绩管理系统

C++学生成绩管理系统 实现成绩管理的各种操作。满足一般需求

2011-09-18

电子邮件客户端软件 毕业设计

电子邮件客户单 可以收163,qq,gmail等所有邮件系统的邮件

2011-09-18

C#局域网聊天程序

聊天程序 局域网聊天 群聊 多人聊天 大学作业 满足聊天作业需求

2011-09-18

空空如也

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

TA关注的人

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