<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hclbeloved的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hclbeloved</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hclbeloved]]></copyright><item><title><![CDATA[webrtc-m79-测试peerconnectionserver的webclient-p2p-demo]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/132810159</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/132810159</guid><author>hclbeloved</author><pubDate>Mon, 11 Sep 2023 15:46:17 +0800</pubDate><description><![CDATA[测试peerconnectionserver的webclient-p2p-demo]]></description><category></category></item><item><title><![CDATA[webrtc-m79-msvc编译H264]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/132585502</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/132585502</guid><author>hclbeloved</author><pubDate>Wed, 30 Aug 2023 17:08:02 +0800</pubDate><description><![CDATA[webrtc-m79-msvc编译H264]]></description><category></category></item><item><title><![CDATA[创建ffmpeg vs2019工程]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/132584793</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/132584793</guid><author>hclbeloved</author><pubDate>Wed, 30 Aug 2023 16:25:49 +0800</pubDate><description><![CDATA[ffmpeg vs2019工程的生成]]></description><category></category></item><item><title><![CDATA[obs-vs2022编译]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/129485863</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/129485863</guid><author>hclbeloved</author><pubDate>Mon, 13 Mar 2023 09:56:36 +0800</pubDate><description><![CDATA[obs-vs2022编译]]></description><category></category></item><item><title><![CDATA[lua与c/c++的互调]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/125954209</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/125954209</guid><author>hclbeloved</author><pubDate>Sat, 23 Jul 2022 23:20:28 +0800</pubDate><description><![CDATA[lua与C/C++函数的互调都需要经过虚拟栈(通过来体现)来进行。lua调用C/C++函数就是想复用原始的C/C++函数的能力，但是又不能直接在lua代码中进行调用，必须通过虚拟栈，所以就需要先将原始的C/C++函数按照指定的模式进行封装；然后利用lua的CAPI将这个封装好的函数注册到lua中；最后在lua中调用这个封装好的函数；C/C++如果想调用在lua脚本中定义的函数，同样也是不能直接调用，也需要通过虚拟栈，所以也需要将lua函数按照指定的模式封装成C/C++函数，具体细节参考下面的分析；.....]]></description><category></category></item><item><title><![CDATA[webrtc-m79-采集的像素格式的VideoFrame到渲染窗口和编码器小结]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/124793564</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/124793564</guid><author>hclbeloved</author><pubDate>Mon, 16 May 2022 09:44:19 +0800</pubDate><description><![CDATA[1 相关类图













2 小结

不论视频流最终目的地是流向本地渲染模块还是要流向编码器，首先都要经过VideoTrack这个对象。webrtc::VideoTrack 和webrtc::VideoTrackSource 都实现了rtc::VideoSourceInterface&lt;VideoFrame&gt; 接口，也就是说他们都是视频流的生产者，
但是它们两个都不是视频源的最初的生产者，最初的视频生产者是 webrtc::test::VcmCapturer ；

代...]]></description><category></category></item><item><title><![CDATA[webrtc-m79-视频采集器到视频编码器流水线的建立]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/124769350</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/124769350</guid><author>hclbeloved</author><pubDate>Sat, 14 May 2022 20:05:43 +0800</pubDate><description><![CDATA[1 问题

视频采集器采集到像素格式的VideoFrame经过编码后才能通过P2PtransportChannel传递给对端，这其中就包括了两个主要环节：

第一个环节：采集器到编码器之间流水线的建立；

第二个环节：采集到的像素格式的VideoFrame沿着流水线送到编码器，并发送到对端；

2 采集器到编码器之间流水线的建立











3 相关代码

3.1 采集器到编码器之间流水线的建立


///////////////////////////////////////////////..]]></description><category></category></item><item><title><![CDATA[webrtc-m79-本地采集的视频渲染流程]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/124764682</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/124764682</guid><author>hclbeloved</author><pubDate>Sat, 14 May 2022 16:06:17 +0800</pubDate><description><![CDATA[1 问题

本文主要以windows为例，基于peerconnection_client的例子来讲解本地采集的视频是如何渲染到本地的窗口上的。

该问题主要分为两个环节：

第一个环节：需要建立渲染窗口到视频采集器的流水线的建立；

第二个环节：采集的视频沿着流水线送到渲染窗口；



注意：

视频采集器采集到的是像素格式(RGB或者YUV)的VideoFrame，此时还没有编码(比如：VP8/VP9/H264/H265等)成视频帧；



2 VideoTrack到渲染窗口流水线的建立








]]></description><category></category></item><item><title><![CDATA[GB28181-上级平台docker镜像]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/124175355</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/124175355</guid><author>hclbeloved</author><pubDate>Thu, 14 Apr 2022 16:56:06 +0800</pubDate><description><![CDATA[1 背景

基于resip写了一个上级平台服务，提供设备或者平台使用GB28181注册上来。目前提供的功能主要有：register;keepalive;catalog;invite;bye；

这个GB28181信令服务DMS使用的是ZLMEDIAKIT作为流媒体服务；目前是直接在DMS的配置文件中配置的ZLMEDIAKIT的地址，如果为了负载均衡等可以进行适当的修改；

2 结构图



restapi主要有三个接口：

2.1 获取catalog


GET请求
http://ip:port/v1/ca]]></description><category></category></item><item><title><![CDATA[CMAKE与_GLIBCXX_USE_CXX11_ABI]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/123754288</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/123754288</guid><author>hclbeloved</author><pubDate>Sat, 26 Mar 2022 13:21:18 +0800</pubDate><description><![CDATA[1 背景

将centos上的gcc 4.8.5升级到gcc 5.4.0后编译程序出现问题，发现存在_GLIBCXX_USE_CXX11_ABI的问题，但是所有的代码使用的都是gcc 5.4.0，按照理论不应该出现这个问题。

2 解决方案

查看cmake发现，cmake使用的gcc的版本是5.4.0，但是使用的g++的版本却是4.8.5，后面通过强制指定g++编译器的版本解决该问题，也就是为cmake指定编译器，比如：

CC=gcc CXX=g++ cmake ..

为cmake指定编译器还有其余的]]></description><category></category></item><item><title><![CDATA[thinkpadL13安装centos7找不到无线网卡]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/123754153</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/123754153</guid><author>hclbeloved</author><pubDate>Sat, 26 Mar 2022 13:12:15 +0800</pubDate><description><![CDATA[1 背景

安装完成之后识别不了无线网卡，执行iw dev命令效果如下：





2 解决方案

连接上有线网卡，升级内核，升级内核操作如下：

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
yum --enablerepo=elrepo-kernel install kernel-ml-]]></description><category></category></item><item><title><![CDATA[LeetCode-栈-逆波兰表达式求值]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/123115757</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/123115757</guid><author>hclbeloved</author><pubDate>Thu, 24 Feb 2022 16:56:14 +0800</pubDate><description><![CDATA[1 题目

150. 逆波兰表达式求值

剑指 Offer II 036. 后缀表达式

2 实现


class Solution {
public:
    int evalRPN(vector&lt;string&gt;&amp; tokens) {
        stack&lt;long&gt; s;
        for (auto&amp; str:tokens)
        {
            if (str.find_first_of("+-*\/") == string:]]></description><category></category></item><item><title><![CDATA[LeetCode-动态规划-路径的数目]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/123097536</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/123097536</guid><author>hclbeloved</author><pubDate>Wed, 23 Feb 2022 19:37:30 +0800</pubDate><description><![CDATA[1 题目

剑指 Offer II 098. 路径的数目

62. 不同路径

2 实现


class Solution {
public:
    vector&lt;vector&lt;long&gt;&gt; dp;
    int uniquePaths(int m, int n) {
        //方法一：使用 dfs 超时
        // int res = 0;
        // dfs(m, n, 0, 0, res);
        // return res;

  ]]></description><category></category></item><item><title><![CDATA[LeetCode-回溯算法]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/123089709</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/123089709</guid><author>hclbeloved</author><pubDate>Wed, 23 Feb 2022 14:42:02 +0800</pubDate><description><![CDATA[1 介绍

回溯问题的解决方法就是一个决策树的遍历过程，主要包括3个关键点：

(1) 路径：已经做出的选择；

(2)选择列表：能做出的所有选择的集合；

(3)结束条件：选择列表被用完作为决策树的终止条件；

2 题目

2.1 所有子集

剑指 Offer II 079. 所有子集

78. 子集


class Solution {
public:
	//利用回溯算法
	vector&lt;vector&lt;int&gt;&gt; s...]]></description><category></category></item><item><title><![CDATA[LeetCode-链表]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/123076306</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/123076306</guid><author>hclbeloved</author><pubDate>Wed, 23 Feb 2022 11:03:42 +0800</pubDate><description><![CDATA[1 链表排序

1.1 链表排序

剑指 Offer II 077. 链表排序

148. 排序链表

归并排序


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
	struct ListN]]></description><category></category></item><item><title><![CDATA[LeetCode-二分查找]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/123031489</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/123031489</guid><author>hclbeloved</author><pubDate>Sun, 20 Feb 2022 18:33:02 +0800</pubDate><description><![CDATA[1 二分查找介绍



2 题目

2.1

2.2

2.3

2.4

2.5

2.6

2.7

2.8

2.9

2.10

2.11
]]></description><category></category></item><item><title><![CDATA[LeetCode-异或]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/123022058</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/123022058</guid><author>hclbeloved</author><pubDate>Sat, 19 Feb 2022 18:39:20 +0800</pubDate><description><![CDATA[1 异或性质介绍

异或运算的性质：

如果 a ^ b = c 成立，那么a ^ c = b 与 b ^ c = a 均成立。

即 如果有三个数，满足其中两个数的异或值等于另一个值，那么这三个数的顺序可以任意调换。

注：利用这条性质，可以不使用第 3 个变量而交换两个变量的值。


void swap(int&amp; a, int &amp;b)
{
    a=a^b;
    b=a^b;
    a=a^b;
}

注：异或运算其实就是 二进制下不进位的加法，可利用此性质求解两个数的和。

2]]></description><category></category></item><item><title><![CDATA[Aho-Corasick(AC自动机)]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/122999114</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/122999114</guid><author>hclbeloved</author><pubDate>Fri, 18 Feb 2022 11:13:52 +0800</pubDate><description><![CDATA[1 介绍

trie树：LeetCode-Trie树_hclbeloved的博客-优快云博客

AC 自动机算法，全称是 Aho-Corasick 算法。其实，Trie 树跟 AC 自动机之间的关系，就像单串匹配中朴素的串匹配算法，跟 KMP 算法之间的关系一样，只不过前者针对的是多模式串而已。所以，AC 自动机实际上就是在 Trie 树之上，加了类似 KMP 的 next 数组，只不过此处的 next 数组是构建在树上的。

2 实现


// Trie4AhoCoras...]]></description><category></category></item><item><title><![CDATA[LeetCode-Trie树]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/122962181</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/122962181</guid><author>hclbeloved</author><pubDate>Wed, 16 Feb 2022 14:14:25 +0800</pubDate><description><![CDATA[1 Trie树

1.1 简介

Trie 树，也叫“字典树”。顾名思义，它是一个树形结构。它是一种专门处理字符串匹配的数据结构，用来解决在一组字符串集合中快速查找某个字符串的问题。

1.2 实现

Trie 树是一个多叉树，具体实现如下：


// TrieTree.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include &lt;string.h&gt;

class Trie
{
public:
	Trie()
	{
		roo...]]></description><category></category></item><item><title><![CDATA[LeetCode-线性排序-(桶排序、计数排序、基数排序)]]></title><link>https://blog.youkuaiyun.com/hclbeloved/article/details/122907550</link><guid>https://blog.youkuaiyun.com/hclbeloved/article/details/122907550</guid><author>hclbeloved</author><pubDate>Sun, 13 Feb 2022 14:15:44 +0800</pubDate><description><![CDATA[1 线性排序



2 题目

2.1

2.2

2.3


]]></description><category></category></item></channel></rss>