<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiaojun11的专栏]]></title><description><![CDATA[专注于流媒体技术和机器学习]]></description><link>https://blog.youkuaiyun.com/xiaojun111111</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaojun111111]]></copyright><item><title><![CDATA[boost：asio的同步方式和异步方式]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/147548396</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/147548396</guid><author>xiaojun111111</author><pubDate>Sun, 27 Apr 2025 09:52:00 +0800</pubDate><description><![CDATA[Asio是一个跨平台的网络及底层IO的C++编程库，它使用现代C++手法实现了统一的异步调用模型。名空间ASIO库能够使用TCP、、ICMP、串口来发送/接收数据，下面先介绍TCP协议的读写操作对于读写方式，ASIO支持同步和异步两种方式，首先登场的是同步方式，下面请同步方式自我介绍一下：大家好！我是同步方式！我的主要特点就是执着！所有的操作都要完成或出错才会返回，不过偶的执着被大家称之为阻塞，实在是郁闷~~（场下一片嘘声），其实这样 也是有好处的，比如逻辑清晰，编程比较容易。]]></description><category></category></item><item><title><![CDATA[std::__cxx11::basic_string 和std::basic_string的不同]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/140215494</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/140215494</guid><author>xiaojun111111</author><pubDate>Fri, 05 Jul 2024 18:04:28 +0800</pubDate><description><![CDATA[总之，为了解决这一问题，可以尝试以下几种方法：确保项目中所有的代码和第三方库都使用相同版本的编译器进行编译，以保持一致的ABI和符号定义。提示找不到定义：setAccessKeyId(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)如果问题依旧存在，可以考虑更新项目中的代码，使其与C++11标准兼容，或者在必要时降级编译器版本以保持兼容性。nm中查看库中定义的函数是这样的。]]></description><category></category></item><item><title><![CDATA[sip中Via、Record-Route和Route set的区别和联系&SIP路由机制解析(zz)]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/139527903</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/139527903</guid><author>xiaojun111111</author><pubDate>Fri, 07 Jun 2024 15:23:16 +0800</pubDate><description><![CDATA[Record-Route的是各个想在后续请求对话中还继续接收请求和应答的Proxy，将自己的地址信息添加在Record-Route中来帮助协议生成最终的Route set（也就是为什么说对话中的请求和应答包含的是Route-set，对话外的请求包含的Record-Route的原因，Route set用在对话外的情况就是在注册时客户端最初不清楚该往哪里去注册，需要手动配置，总之一句话，Route set的作用就是强制让请求通过其包含的路由列表传输请求和应答）。楼主所说的是RFC3261中的内容。]]></description><category></category></item><item><title><![CDATA[docker 常用命令]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/131362770</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/131362770</guid><author>xiaojun111111</author><pubDate>Sat, 24 Jun 2023 15:53:15 +0800</pubDate><description><![CDATA[docker attach 1e560fca3906   这种方式进入容器，退出容器后，会导致容器停止。docker 连接会创建一个父子关系，其中父容器可以看到子容器的信息。docker 有一个连接系统允许将多个容器连接在一起，共享连接信息。端口映射并不是唯一把 docker 连接到另一个容器的方法。docker ps -a 查看所有的容器，包括未启动成功的。docker stop sip 停止一个容器。docker rm sip 删除一个容器。docker ps 查看有哪些容器。Docker 容器互联。]]></description><category></category></item><item><title><![CDATA[ubuntu中编译安装opensips并测试]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/131362638</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/131362638</guid><author>xiaojun111111</author><pubDate>Sat, 24 Jun 2023 15:52:54 +0800</pubDate><description><![CDATA[opensips 在ubuntu中编译、安装、使用]]></description><category></category></item><item><title><![CDATA[c++11 之emplace_back 与 push_back的区别]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/122123098</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/122123098</guid><author>xiaojun111111</author><pubDate>Fri, 24 Dec 2021 10:49:43 +0800</pubDate><description><![CDATA[c++开发中我们会经常用到插入操作对stl的各种容器进行操作，比如vector,map,set等。在引入右值引用，转移构造函数，转移复制运算符之前，通常使用push_back()向容器中加入一个右值元素(临时对象)时，首先会调用构造函数构造这个临时对象，然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题就是临时变量申请资源的浪费。
引入了右值引用，转移构造函数后，push_back()右值时就会调用构造函数和转移构造函数,如果可以在插入的时候直接构造，就只需要构造一次即可.]]></description><category></category></item><item><title><![CDATA[标准SIP发送双流BFCP协议报文分析（包括SDP中BFCP描述，BFCP客户端和服务端分别发送演示，以及演示流抢占等）]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/121212866</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/121212866</guid><author>xiaojun111111</author><pubDate>Mon, 08 Nov 2021 18:02:45 +0800</pubDate><description><![CDATA[做过视频会议的同学，如果使用的是标准SIP协议进行对接，不可避免会遇到发送和接收双流的问题，双流广义上指主流和演示流，这里讲的发送双流指的是演示流，一般用在开会时，展示PPT等内容。

   这里先来讲讲SIP携带的SDP中BFCP的协商问题，部分报文如下：

主叫INVITE报文：



被叫INVITE 200 OK部分报文：



主叫ACK中携带的SDP部分报文如下：



BFCP客户端和服务端连接后，需要发送Hello握手报文，接收端收到报文后，回复HelloAck报文，表示B...]]></description><category></category></item><item><title><![CDATA[FECC--摄像头控制信令H.281和H224]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/120448016</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/120448016</guid><author>xiaojun111111</author><pubDate>Fri, 24 Sep 2021 09:13:39 +0800</pubDate><description><![CDATA[1. 支持的消息类型
对于FECC协议来说，请求不会有对应的回复。因为摄像头的视觉反馈，可以替代实际响应的过程，FECC协议所需的是能够快速准确地传输控制信息。而ITU文档中为FECC制定了两个协议：H224规定如何传输FECC信令，H281中规定FECC信令的具体格式。
在FECC中支持以下消息类型：

（1）START ACTION——请求摄像机三轴进行运动
（2）CONTINUE ACTION——请求摄像机三轴继续运动
（3）STOP ACTION——请求摄像机三轴停止运动
（4）SELECT VID]]></description><category></category></item><item><title><![CDATA[C++ 字节对齐的总结(原因和作用)]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/120260213</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/120260213</guid><author>xiaojun111111</author><pubDate>Mon, 13 Sep 2021 09:12:18 +0800</pubDate><description><![CDATA[一、介绍
什么是字节对齐
　　现代计算机中内存空间都是按照byte划分的，从理论上讲似乎对任何类型的变量的访问可以从任何地址开始，但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问，这就需要各种类型数据按照一定的规则在空间上排列，而不是顺序的一个接一个的排放，这就是对齐。

字节对齐的原因和作用
　　各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构下编程必须保证字节]]></description><category></category></item><item><title><![CDATA[如何设计一个高并发系统]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/120151673</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/120151673</guid><author>xiaojun111111</author><pubDate>Tue, 07 Sep 2021 09:49:28 +0800</pubDate><description><![CDATA[1、面试题

如何设计一个高并发系统？

2、面试官心里分析

说实话，如果面试官问你这个题目，那么你必须要使出全身吃奶劲了。为啥？因为你没看到现在很多公司招聘的jd里都是说啥，有高并发就经验者优先。

所以如果你确实有真才实学，在互联网公司里干过高并发系统，那你确实拿offer基本如探囊取物，没啥问题。但是如果你要是真是干过高并发系统，面试官绝对绝对不会问这个问题，否则他就不太明智了。

假设你在某知名电商公司干过高并发系统，用户上亿，一天流量几十亿，高峰期并发量上万，甚至是十万。那么人家一定会仔细盘问你]]></description><category></category></item><item><title><![CDATA[OpenResty入门和使用实践]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/120083083</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/120083083</guid><author>xiaojun111111</author><pubDate>Fri, 03 Sep 2021 15:36:11 +0800</pubDate><description><![CDATA[文章目录
OpenResty入门和使用实践
一、前言
二、正文
1.简介
2.网关应用
3.下载和安装
4.组件
5.应用例子
1）计算器
2）灰度发布
OpenResty入门和使用实践
一、前言
环境：
LInux发行版: CentOS-7-x86_64-DVD-1804.iso

SSH工具：FinalShell

参考：
OpenResty：

​ http://openresty.org/cn/

​ http://openresty.org/cn/installation.html

CentOS]]></description><category></category></item><item><title><![CDATA[Linux core文件的生成、大小、路径查看和设置]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/119863451</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/119863451</guid><author>xiaojun111111</author><pubDate>Fri, 03 Sep 2021 11:11:16 +0800</pubDate><description><![CDATA[1.设置core文件大小
1）使用ulimit -c命令可查看core文件的生成开关。若结果为0，则表示关闭了此功能，不会生成core文件。
2）使用ulimit -c filesize命令，可以限制core文件的大小（filesize的单位为kbyte）。若ulimit -c unlimited，则表示core文件的大小不受限制。如果生成的信息超过此大小，将会被裁剪，最终生成一个不完整的core文件。在调试此core文 件的时候，gdb会提示错误。
可以将ulimit -c unlimited写入到.ba]]></description><category></category></item><item><title><![CDATA[H.323 capability calculation for H.264 video]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/119680290</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/119680290</guid><author>xiaojun111111</author><pubDate>Fri, 13 Aug 2021 17:39:08 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/wuyu92877/article/details/40737661



A sample packet of H.245 terminalCapabilitySet





Step 1: LEVEL(unsignedMin: 78 – Level 3.2)

H.264 Level: 3.2, we can find out the max capability of level 3.2 by referring to the H.264 level li]]></description><category></category></item><item><title><![CDATA[外部地址是什么意思_NAT网络地址转换]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/117324408</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/117324408</guid><author>xiaojun111111</author><pubDate>Thu, 27 May 2021 11:11:40 +0800</pubDate><description><![CDATA[目录

一、NAT是什么？
二、为什么需要NAT？
三、NAT的类型
四、NAT的配置

一、NAT是什么？

网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术，是一种将私有（保留）地址转化为合法IP地址的转换技术。

它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单，NAT不仅完美地解决了lP地址不足的问题，而且还能够有效地避免来自网络外部的攻击，隐藏并保护网络内部的计算机。





二、为什么需要NAT？

主要解决.]]></description><category></category></item><item><title><![CDATA[H323——460NAT穿透相关]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/117323186</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/117323186</guid><author>xiaojun111111</author><pubDate>Thu, 27 May 2021 10:31:03 +0800</pubDate><description><![CDATA[1. 概述
在H323中使用穿透相关的协议为H460.18和H460.19，H323的穿透协议利用了NAT和FW对于出站流量的限制比入站流量限制宽松的特性，从而实现了NAT穿透相关的功能。

2. 信令穿透
信令的NAT穿透的基本原理为当终端设备注册到相关的GK之后，会通过不断发送GRQ或者RRQ消息维持这一和GK之间在NAT/FW上的端口映射关系。建立这一关系之后，信令的流程就可以通过GK下发给终端设备，从而完成各项通话流程。相关的标准文档为H460.18。

在这样的基础上，H323引申出了一个新的概念]]></description><category></category></item><item><title><![CDATA[深析静态链接库和动态链接库相同函数覆盖及库调用顺序问题*************]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/116711550</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/116711550</guid><author>xiaojun111111</author><pubDate>Wed, 12 May 2021 16:07:11 +0800</pubDate><description><![CDATA[注意：编译器为gcc，若使用g++，请在库里面加上extern “C”
 两个静态库
  首先测试静态链接库，大概的代码如下：
  liba.c


#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include"libA.h"
void libA()
{
common();
}

void common()
{
printf("libA common!\n");
}

  liba.h


#i...]]></description><category></category></item><item><title><![CDATA[H323——H239演示功能]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/114328835</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/114328835</guid><author>xiaojun111111</author><pubDate>Wed, 03 Mar 2021 18:45:59 +0800</pubDate><description><![CDATA[1. 概述
H239在ITU文档中实际命名为Role management and additional media channels for ITU-T H.300-series terminals，意为H300系列中断的角色管理和额外没媒体流，H239是H323中用来开启辅流的信令流程规范，会为相关的媒体流添加角色，该文档包含了控制，声明，能力交换等机制。
在H239文档中定义了相关的几个术语，需要重点关注的是以下几个：

1.1 control &amp; indication: Messages, ]]></description><category></category></item><item><title><![CDATA[windows 下编译libcurl********]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/112287851</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/112287851</guid><author>xiaojun111111</author><pubDate>Wed, 06 Jan 2021 18:00:55 +0800</pubDate><description><![CDATA[转载：https://www.cnblogs.com/damizhou/p/11744096.html

有一个程序移植到到windows平台，再linux采用libcurl。在windows下准备也采用该库。在网上搜索了几位同行写的，步骤上面有缺失。

本文将以详细的步骤，介绍libcurl的编译。

下面是步骤：

1. 下载源代码，直接从github上clone仓库，就可以了。

  git clonehttps://github.com/curl/curl.git

2. 选择版本

 ...]]></description><category></category></item><item><title><![CDATA[Windows7(64位)环境下安装openssl详细步骤+图解]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/112277166</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/112277166</guid><author>xiaojun111111</author><pubDate>Wed, 06 Jan 2021 15:47:05 +0800</pubDate><description><![CDATA[本人同样也是刚刚接触openssl,看到一个安装教程就直接上手，结果走了很多弯路。建议大家多看些资料再安装，出现问题不要急着放弃，在网上去查一下问题代码，一个一个解决。阅读网上分享出来的安装教程，大家都是安装了好几次，耗时几天。我也是在查阅很多资料，耗时很久才安装成功，所以，也把我安装的过程分享出来。供大家参考，有什么不足，不对的地方欢迎大家指正。
（PS:如果你想看看原始的INSTALL文件，那么请打开OpenSSL的解压缩目录，下面有两个文件INSTALL.W32和INSTALL.W64，用记事本方式打]]></description><category></category></item><item><title><![CDATA[cmake命令行生成32位和64位项目]]></title><link>https://blog.youkuaiyun.com/xiaojun111111/article/details/112266723</link><guid>https://blog.youkuaiyun.com/xiaojun111111/article/details/112266723</guid><author>xiaojun111111</author><pubDate>Wed, 06 Jan 2021 13:28:28 +0800</pubDate><description><![CDATA[转载：https://www.cnblogs.com/pandamohist/p/13644953.html ，谢谢版主

本文演示环境：win10+VS2017

1、指定变量值

　　咱们常用命令【cmake ..】在build目录下配置生成项目和解决方案。 其实，这个命令还有其他用法。

　　指定CMakeLists.txt中的变量值。比如 ， fmt 库 的CMakeLists.txt中有一个变量 【BUILD_SHARED_LIBS】，可以在命令行指定其值：

cmake-DBUI...]]></description><category></category></item></channel></rss>