<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[u012314708的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u012314708</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u012314708]]></copyright><item><title><![CDATA[从0开始，快速简单搭建webrtc服务器]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/120087227</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/120087227</guid><author>u012314708</author><pubDate>Fri, 03 Sep 2021 17:53:43 +0800</pubDate><description><![CDATA[WebRTC这几年很火，本篇文章我们就讲讲如何快速搭建一个webrtc服务器。



什么是WebRTC

WebRTC是一个由Google发起的实时通讯解决方案，其中包含视频音频采集，编解码，数据传输，音视频展示等功能，我们可以通过技术快速地构建出一个音视频通讯应用。虽然其名为WebRTC，但是实际上它不光支持Web之间的音视频通讯，还支持Android以及IOS端，此外由于该项目是开源的，我们也可以通过编译C++代码，从而达到全平台的互通。



pion是golang语言开发的一个开源的流媒体框架，本]]></description><category></category></item><item><title><![CDATA[C++ 配置文件类（linux与window可跨平台使用）]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/80583255</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/80583255</guid><author>u012314708</author><pubDate>Tue, 05 Jun 2018 16:37:31 +0800</pubDate><description><![CDATA[编写程序一直在用的配置文件类，感觉很好用，做一下总结：class inirw{
public:
	inirw(const char *filename){iniFileLoad(filename);};
	~inirw(){iniFileFree();};
	//加载ini文件至内存

	char gFilename[SIZE_FILENAME];
	char *gBuffer;
	int gBu...]]></description><category></category></item><item><title><![CDATA[自己写的C++日志类log]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/52130973</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/52130973</guid><author>u012314708</author><pubDate>Fri, 05 Aug 2016 17:12:42 +0800</pubDate><description><![CDATA[主要功能是在服务器运行的时候可以打印日志到日志文件中，主要运用到的知识点有线程， 线程锁，条件变量，STL的deque。大致思路是这样的：
            这个类提供一个接口，可以直接调用他，并且可以打印日志到日志文件中。但是不能影响到服务器的正常运行，也就是说不能进行大量的文件操作；

大致 实现流程：
    对象初始化时候创建一个线程在后台读取队列，并将读到的数据写入到日志文]]></description><category></category></item><item><title><![CDATA[变量命名的通用规则]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/52130961</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/52130961</guid><author>u012314708</author><pubDate>Fri, 05 Aug 2016 17:11:40 +0800</pubDate><description><![CDATA[1．变量名只能是字母（A-Z,a-z）、数字(0-9)或下划线。 

 2．第一个字母不能是数字，例如2Lerver这不是一个合法的C++变量。

  3．不能是c++关键字，例如不能用class这个单词来命名一个变量。

  4．区分大小写，例如iA和ia是两个不同的变量。 
理论上，在遵守了上面几条规则的前提下，所声明的变量名称都是合法的。比如下面的命名： 
char  xue]]></description><category></category></item><item><title><![CDATA[给linux添加回收站]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/52130955</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/52130955</guid><author>u012314708</author><pubDate>Fri, 05 Aug 2016 17:10:48 +0800</pubDate><description><![CDATA[linux下常常使用rm，导致误操作删除一些重要，很难恢复（当然也能恢复，不过比较复杂），所以在这种情况下，我们如果能给linux添加一个回收站就好多了，说白了，这个回收站机制也比较简单，就是使用  mv封装一个rm，简单的可以自己写个脚本，复杂点的就是在bin下添加这个封装命令就行了。

给linux添加一个回收站。
mkdir /tmp/trash_tmp 建立一个回收站目录
vi /]]></description><category></category></item><item><title><![CDATA[C++读写配置文件 config类]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/52102786</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/52102786</guid><author>u012314708</author><pubDate>Wed, 03 Aug 2016 13:35:27 +0800</pubDate><description><![CDATA[config类自我实现


 
 

#ifndef CONFIG_H_
#define CONFIG_H_
#include 
#include 
#define COMMENT_CHAR '#'
#define CONFIG_NAME "./config/config.txt"
/**
* 读取配置文件的操作
*/
class Config
{
public:]]></description><category></category></item><item><title><![CDATA[C++头文件里编写实现代码]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/52102743</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/52102743</guid><author>u012314708</author><pubDate>Wed, 03 Aug 2016 13:27:25 +0800</pubDate><description><![CDATA[C里面一般是不允许把代码直接写在.h文件中的，但是在C++中则完全不一样：
1. 简单的代码鼓励写成inline并放在.h文件中，这样编译器可以将代码直接嵌入调用的部分、进行深层次优化并且减少调用开支。当编译器认为不适合inline时也可以自动处理。类中将实现直接写在类声明中的自动成为inline函数。
2. 模板类必须把代码写在.h中间，因为是到用时才编译的。
事实上现在的C++编译器完全]]></description><category></category></item><item><title><![CDATA[C/C++全局变量的定义与引用问题]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/51984330</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/51984330</guid><author>u012314708</author><pubDate>Thu, 21 Jul 2016 16:59:50 +0800</pubDate><description><![CDATA[最近在忙live555项目；说实话这是我做的第一个大型项目。虽然工作这么久还真是第一次做这么大项目；感觉自己这一年还真是没有一点进步；加个全局变量废了我半天力。废话不多说，切入正题


全局变量，最早我看书C primer Plus里说的应该是叫做局外变量吧。总是就是以关键字extern 在一个头文件 声明的，然后这个被声明的变量可以被项目里的任意一个.cpp或者.c文件引用，引用的方式有两]]></description><category></category></item><item><title><![CDATA[Textiew 跑马灯]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/51179195</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/51179195</guid><author>u012314708</author><pubDate>Mon, 18 Apr 2016 14:10:32 +0800</pubDate><description><![CDATA[TextView中可以设置一个ellipsize属性,作用是当文字长度超过textview宽度时的显示方式:

例如，"encyclopedia"显示, 只是举例，以实际显示为准：）


android:ellipsize=”start”—–省略号显示在开头 "...pedia"
android:ellipsize=”end”——省略号显示在结尾  "encyc..."
androi]]></description><category></category></item><item><title><![CDATA[ubuntu运行android studio出错unable to run mksdcard sdk]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50717640</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50717640</guid><author>u012314708</author><pubDate>Mon, 22 Feb 2016 16:32:38 +0800</pubDate><description><![CDATA[系统是ubantu 15.10  64位
原因：meiyou 64weide jdk xuyaozhuang 32lib    缺少lib 


解决方法：
sudo apt-get install lib32z1 lib32ncurses5  lib32stdc++6
完美解决。]]></description><category></category></item><item><title><![CDATA[Linux网络套接字]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50460577</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50460577</guid><author>u012314708</author><pubDate>Tue, 05 Jan 2016 10:20:17 +0800</pubDate><description><![CDATA[Linux网络套接字 

分类： LINUX

    套接字连接的过程如同（客户）打一个电话到一个大公司，接线员（服务器进程）接听电话并把它转接到你要找的部门，然后再从那里转到你要找的人（服务器套接字），然后接线员（服务器进程）再继续转接其它（客户）的电话。
    套接字有本地套接字和网络套接字两种。本地套接字的名字是Linux文件系统中的文件名，一般放在/tmp或/usr/tmp目]]></description><category></category></item><item><title><![CDATA[Linux网络编程之套接字基础]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50460551</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50460551</guid><author>u012314708</author><pubDate>Tue, 05 Jan 2016 10:17:27 +0800</pubDate><description><![CDATA[Linux网络编程之套接字基础

1．套接字的基本结构
struct sockaddr
这个结构用来存储套接字地址。
数据定义：
struct sockaddr {
unsigned short sa_family; /* address族, AF_xxx */
char sa_data[14]; /* 14 bytes的协议地址 */
};
sa_family 一般来说，都是]]></description><category></category></item><item><title><![CDATA[U盘系列 之U盘挂载信息的获取]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50455003</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50455003</guid><author>u012314708</author><pubDate>Mon, 04 Jan 2016 11:31:52 +0800</pubDate><description><![CDATA[程序内读取/etc/mtab或者/proc/mounts，解析字符串较为繁琐，可以使用mntent提供的方便函数：

FILE *setmntent(const char *filename, const char *type);
struct mntent *getmntent(FILE *filep);
int endmntent(FILE *filep);

 
（1）setmnt]]></description><category></category></item><item><title><![CDATA[GTK异形窗口；异形组件]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50442189</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50442189</guid><author>u012314708</author><pubDate>Thu, 31 Dec 2015 16:01:10 +0800</pubDate><description><![CDATA[#include 
     
    void show_image(GtkWidget *widget,cairo_t *cr,cairo_surface_t *img)
    {
     cairo_region_t *mask;
     
     cairo_set_source_surface(cr,img,0,0);
     cairo_paint(cr);]]></description><category></category></item><item><title><![CDATA[GTK 滚动窗口构件(GtkScrolledWindow)]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50433408</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50433408</guid><author>u012314708</author><pubDate>Wed, 30 Dec 2015 11:24:11 +0800</pubDate><description><![CDATA[一、滚动窗口构件

滚动窗口构件(GtkScrolledWindow)用于创建一个可滚动区域，并将其他构件放入其中。可以在滚动窗口中插入任何其他构件，在其内部的构件不论尺寸大小都可以通过滚动条访问到。

 

1．

名称:：
gtk_scrolled_window_new

功能：
创建滚动窗口构件

函数原形：    
GtkWidget *gtk_scrolle]]></description><category></category></item><item><title><![CDATA[GTK构件 tree_view]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50433381</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50433381</guid><author>u012314708</author><pubDate>Wed, 30 Dec 2015 11:20:44 +0800</pubDate><description><![CDATA[这次网络管理工具的编写主要使用GTK作为画图工具；在这里回顾一下其中用到的tree_view构件

GtkTreeView 构件是一个高级的构件，利用他可以制作出漂亮的普通列表或者是树状的列表；这个构件里可以包含一或者多行

在GtktreeView构件中还有着其他几个独立的对象结构（objects）。其中 GtkCellRenderer 决定了在GtkTreeViewColumn中的数据]]></description><category></category></item><item><title><![CDATA[url解析]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50428153</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50428153</guid><author>u012314708</author><pubDate>Tue, 29 Dec 2015 17:37:56 +0800</pubDate><description><![CDATA[这几天一直在做网络管理；其中有一块需要设计一个后台的下载程序，本来想使用调用系统命令，但考虑到会多开两个进程，于是自己用socket写了一个下载程序，其中关键部分就是对下载链接url的解析。
统一资源定位符 (Uniform Resource Locator, URL)  
是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。 
Internet上的每一个网页都具有一个唯一]]></description><category></category></item><item><title><![CDATA[github/gitlab多账户下设置ssh keys]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/50428125</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/50428125</guid><author>u012314708</author><pubDate>Tue, 29 Dec 2015 17:33:49 +0800</pubDate><description><![CDATA[背景
在公司一直使用gitlab进行开发，后来想着自己弄一个github保存一下自己的代码，方便以后拿来用。
生成gitlab秘钥
默认你已经注册了gitlab/github账户，以我自己为例，公司项目用的gitlab，自己代码托管在github。先进行公司账号的设置：
本地生成ssh keys命令：ssh-keygen -t rsa -C "注册的gitlab邮箱"，生成的公司秘钥会提示]]></description><category></category></item><item><title><![CDATA[gentoo安装笔记（1）]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/49304661</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/49304661</guid><author>u012314708</author><pubDate>Wed, 21 Oct 2015 15:00:22 +0800</pubDate><description><![CDATA[算是一个组长布置的作业吧；
看我们几个太没事了：以下是我的配置安装笔记；图形界面还没安装上
一、
1,下载镜像文件
官网地址：http://distfiles.gentoo.org/releases/x86/autobuilds/current-iso/
使用 dd命令制作引导U盘
记录电脑的硬件配置；为之后的编译内核做准备；cpu、显卡、网卡和声卡、
U盘启动
二、
1,启动后]]></description><category></category></item><item><title><![CDATA[python基础回顾笔记]]></title><link>https://blog.youkuaiyun.com/u012314708/article/details/48734187</link><guid>https://blog.youkuaiyun.com/u012314708/article/details/48734187</guid><author>u012314708</author><pubDate>Fri, 25 Sep 2015 15:53:16 +0800</pubDate><description><![CDATA[变量不需要声明： 内置函数 type(),用以查询变量类型
输出 ：print后边可以添加多个输出；中间以逗号隔开 print a,b

基本数据类型：

a=10         # int 整数
a=1.3        # float 浮点数
a=True       # 真值 (True/False)
a='Hello!'   # 字符串



序列：

s1 ]]></description><category></category></item></channel></rss>