- 博客(140)
- 资源 (9)
- 收藏
- 关注

原创 webrtc-m79-视频采集器到视频编码器流水线的建立
1 问题视频采集器采集到像素格式的VideoFrame经过编码后才能通过P2PtransportChannel传递给对端,这其中就包括了两个主要环节:第一个环节:采集器到编码器之间流水线的建立;第二个环节:采集到的像素格式的VideoFrame沿着流水线送到编码器,并发送到对端;2 采集器到编码器之间流水线的建立3 相关代码3.1 采集器到编码器之间流水线的建立///////////////////////////////////////////////..
2022-05-14 20:05:43
1228

原创 webrtc-m79-本地采集的视频渲染流程
1 问题本文主要以windows为例,基于peerconnection_client的例子来讲解本地采集的视频是如何渲染到本地的窗口上的。该问题主要分为两个环节:第一个环节:需要建立渲染窗口到视频采集器的流水线的建立;第二个环节:采集的视频沿着流水线送到渲染窗口;注意:视频采集器采集到的是像素格式(RGB或者YUV)的VideoFrame,此时还没有编码(比如:VP8/VP9/H264/H265等)成视频帧;2 VideoTrack到渲染窗口流水线的建立
2022-05-14 16:06:17
735

原创 webrtc-m79-视频流的接收
void UDPPort::OnReadPacket(rtc::AsyncPacketSocket* socket, const char* data, size_t size, const rtc::SocketAddress& remote_addr, const int64_t&.
2021-05-23 21:43:33
939

原创 webrtc-m79-视频解码的流程
void VideoReceiveStream::Start() { RTC_DCHECK_RUN_ON(&worker_sequence_checker_); if (decoder_running_) { return; } const bool protected_by_fec = config_.rtp.protected_by_flexfec || rtp_video_stream_receive.
2021-05-23 21:29:41
1356

原创 webrtc-m79-视频流接收相关的几张类图
1 Call 的类图2 MediaChannel相关的类图3 RtpReceiver相关的类图4 VideoReceiveStream的类图5 RtpVideoStreamReceiver的类图
2021-05-11 20:09:54
572
原创 webrtc-m79-测试peerconnectionserver的webclient-p2p-demo
测试peerconnectionserver的webclient-p2p-demo
2023-09-11 15:46:17
864
原创 lua与c/c++的互调
lua与C/C++函数的互调都需要经过虚拟栈(通过来体现)来进行。lua调用C/C++函数就是想复用原始的C/C++函数的能力,但是又不能直接在lua代码中进行调用,必须通过虚拟栈,所以就需要先将原始的C/C++函数按照指定的模式进行封装;然后利用lua的CAPI将这个封装好的函数注册到lua中;最后在lua中调用这个封装好的函数;C/C++如果想调用在lua脚本中定义的函数,同样也是不能直接调用,也需要通过虚拟栈,所以也需要将lua函数按照指定的模式封装成C/C++函数,具体细节参考下面的分析;.....
2022-07-23 23:20:28
1802
原创 webrtc-m79-采集的像素格式的VideoFrame到渲染窗口和编码器小结
1 相关类图2 小结不论视频流最终目的地是流向本地渲染模块还是要流向编码器,首先都要经过VideoTrack这个对象。webrtc::VideoTrack 和webrtc::VideoTrackSource 都实现了rtc::VideoSourceInterface<VideoFrame> 接口,也就是说他们都是视频流的生产者,但是它们两个都不是视频源的最初的生产者,最初的视频生产者是 webrtc::test::VcmCapturer ;代...
2022-05-16 09:44:19
586
原创 GB28181-上级平台docker镜像
1 背景基于resip写了一个上级平台服务,提供设备或者平台使用GB28181注册上来。目前提供的功能主要有:register;keepalive;catalog;invite;bye;这个GB28181信令服务DMS使用的是ZLMEDIAKIT作为流媒体服务;目前是直接在DMS的配置文件中配置的ZLMEDIAKIT的地址,如果为了负载均衡等可以进行适当的修改;2 结构图restapi主要有三个接口:2.1 获取catalogGET请求http://ip:port/v1/ca
2022-04-14 16:56:06
724
原创 CMAKE与_GLIBCXX_USE_CXX11_ABI
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指定编译器还有其余的
2022-03-26 13:21:18
3289
原创 thinkpadL13安装centos7找不到无线网卡
1 背景安装完成之后识别不了无线网卡,执行iw dev命令效果如下:2 解决方案连接上有线网卡,升级内核,升级内核操作如下:rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.orgrpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpmyum --enablerepo=elrepo-kernel install kernel-ml-
2022-03-26 13:12:15
2499
原创 LeetCode-栈-逆波兰表达式求值
1 题目150. 逆波兰表达式求值剑指 Offer II 036. 后缀表达式2 实现class Solution {public: int evalRPN(vector<string>& tokens) { stack<long> s; for (auto& str:tokens) { if (str.find_first_of("+-*\/") == string:
2022-02-24 16:56:14
514
原创 LeetCode-动态规划-路径的数目
1 题目剑指 Offer II 098. 路径的数目62. 不同路径2 实现class Solution {public: vector<vector<long>> dp; int uniquePaths(int m, int n) { //方法一:使用 dfs 超时 // int res = 0; // dfs(m, n, 0, 0, res); // return res;
2022-02-23 19:37:30
343
原创 LeetCode-回溯算法
1 介绍回溯问题的解决方法就是一个决策树的遍历过程,主要包括3个关键点:(1) 路径:已经做出的选择;(2)选择列表:能做出的所有选择的集合;(3)结束条件:选择列表被用完作为决策树的终止条件;2 题目2.1 所有子集剑指 Offer II 079. 所有子集78. 子集class Solution {public: //利用回溯算法 vector<vector<int>> s...
2022-02-23 14:42:02
615
原创 LeetCode-链表
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
2022-02-23 11:03:42
467
原创 LeetCode-异或
1 异或性质介绍异或运算的性质:如果 a ^ b = c 成立,那么a ^ c = b 与 b ^ c = a 均成立。即 如果有三个数,满足其中两个数的异或值等于另一个值,那么这三个数的顺序可以任意调换。注:利用这条性质,可以不使用第 3 个变量而交换两个变量的值。void swap(int& a, int &b){ a=a^b; b=a^b; a=a^b;}注:异或运算其实就是 二进制下不进位的加法,可利用此性质求解两个数的和。2
2022-02-19 18:39:20
650
原创 Aho-Corasick(AC自动机)
1 介绍trie树:LeetCode-Trie树_hclbeloved的博客-CSDN博客AC 自动机算法,全称是 Aho-Corasick 算法。其实,Trie 树跟 AC 自动机之间的关系,就像单串匹配中朴素的串匹配算法,跟 KMP 算法之间的关系一样,只不过前者针对的是多模式串而已。所以,AC 自动机实际上就是在 Trie 树之上,加了类似 KMP 的 next 数组,只不过此处的 next 数组是构建在树上的。2 实现// Trie4AhoCoras...
2022-02-18 11:13:52
970
原创 LeetCode-Trie树
1 Trie树1.1 简介Trie 树,也叫“字典树”。顾名思义,它是一个树形结构。它是一种专门处理字符串匹配的数据结构,用来解决在一组字符串集合中快速查找某个字符串的问题。1.2 实现Trie 树是一个多叉树,具体实现如下:// TrieTree.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <string.h>class Trie{public: Trie() { roo...
2022-02-16 14:14:25
224
原创 LeetCode-快速排序的应用
1 快速排序void qSort(vector<int>& nums, int p, int r){ if (p < r) { int q = partition(nums,p,r); qSort(nums,p,q-1); qSort(nums,q+1,r); }}int partition(vector<int>& nums, int p, int r){ int
2022-02-12 22:16:51
316
原创 LeetCode-堆排序
1 介绍最大堆:priority_queue<int, vector<int>, less<int>> maxHeap;最小堆:priority_queue<int, vector<int>, greater<int>> minHeap;如果使用 priority_queue<int> 创建堆,默认创建的是最大堆;最小堆会在一些图算法中应用,比如...
2022-02-12 21:55:02
7451
原创 LeetCode-桶排序
1 桶排序介绍2 桶排序题目2.1 存在重复元素220. 存在重复元素 IIIclass Solution {public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { //方法一: 滑动窗口 //相当于用set维护一个窗口,这个set的size就是窗口大小 // set<long long> st
2022-02-12 21:46:24
320
原创 LeetCode-子数组-子字符串(也就是连续的序列)
1 解题思路 子数组以及子字符串(子串)就是连续的序列。既然是连续,常使用到的方法就是使用滑动窗口,滑动窗口的滑动条件就是题目的要求,滑动条件可以借助有序的set、multiset或者无序的unordered_set等来实现。 滑动窗口参考链接:CSDN 对比子序列的题目:CSDN2 子数组题目2.1 最大连续1的个数1004. 最大连续1的个数 IIIclass Solution {public: int longestOn...
2022-02-12 11:24:57
586
原创 LeetCode-子序列-字符串序列
1 最长递增子序列300. 最长递增子序列class Solution {public: int lengthOfLIS(vector<int>& nums) { int n = nums.size(); if (n == 0) { return 0; } //dp[i]: 以索引 i 处数字结尾的最长上升子序列的长度 vector<int&
2022-02-11 22:47:32
284
原创 LeetCode-哈希-存在重复元素 III
1 题目220. 存在重复元素 III剑指 Offer II 057. 值和下标之差都在给定的范围内2 代码实现class Solution {public: bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) { unordered_map<int, unordered_set<int>> m; int
2022-02-10 13:19:13
305
原创 LeetCode-哈希-最长连续序列
1 题目128. 最长连续序列剑指 Offer II 119. 最长连续序列2 代码实现2.1 最小堆(O(nlogn))class Solution {public: int longestConsecutive(vector<int>& nums) { priority_queue<int, vector<int>, greater<int>> minHeap; unordered_s
2022-02-09 17:11:12
332
原创 LeetCode-树-中序遍历(DFS)-二叉搜索树中两个节点之和
1 题目剑指 Offer II 056. 二叉搜索树中两个节点之和653. 两数之和 IV - 输入 BST2 代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {}
2022-02-09 13:51:15
369
原创 LeetCode-树-中序遍历(DFS)-二叉搜索树迭代器
1 题目173. 二叉搜索树迭代器剑指 Offer II 055. 二叉搜索树迭代器2 代码实现2.1 递归版本class BSTIterator {private: queue<TreeNode*> q;public: BSTIterator(TreeNode* root) { dfs(root); } int next() { int val = q.front()->val;
2022-02-09 13:38:36
715
原创 LeetCode-图-拓扑排序-重建序列
1 题目剑指 Offer II 115. 重建序列拓扑排序参考:图-有向图-无向图-二分图-拓扑排序_hclbeloved的博客-CSDN博客2 代码实现//拓扑排序class Solution {public: bool sequenceReconstruction(vector<int>& org, vector<vector<int>>& seqs) { if (seqs.empty())
2022-02-09 12:36:52
316
原创 LeetCode-树-中序遍历(DFS)-所有大于等于节点的值之和
1 题目剑指 Offer II 054. 所有大于等于节点的值之和538. 把二叉搜索树转换为累加树1038. 把二叉搜索树转换为累加树2 代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), ri
2022-02-08 19:20:19
254
原创 LeetCode-树-中序遍历(DFS)-二叉搜索树中的中序后继
1 题目剑指 Offer II 053. 二叉搜索树中的中序后继类似题目:LeetCode-树-中序遍历(DFS)-展平二叉搜索树_hclbeloved的博客-CSDN博客2 代码实现/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(
2022-02-08 18:52:02
125
原创 LeetCode-树-中序遍历(DFS)-展平二叉搜索树
1 题目剑指 Offer II 052. 展平二叉搜索树897. 递增顺序搜索树2 代码实现class Solution {public: TreeNode* increasingBST(TreeNode* root) { TreeNode *newRoot = NULL, *pre = NULL; queue<TreeNode*> q; dfs(root, q); while (!q.empty())
2022-02-08 17:23:36
249
原创 LeetCode-树-DFS-二叉树中的最大路径和
1 题目124. 二叉树中的最大路径和剑指 Offer II 051. 节点之和最大的路径2 解答/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * Tree
2022-02-08 12:15:49
298
原创 LeetCode-单调队列
1 买卖股票的最佳时机121. 买卖股票的最佳时机剑指 Offer 63. 股票的最大利润//单调队列class Solution {public: int maxProfit(vector<int>& prices) { int maxPro = 0; do { if (prices.size() < 2) break; de
2022-02-05 18:35:18
358
原创 所有节点对的最短路径(《算法导论3rd-P399》)
1 介绍求解一个图中所有节点对的最短路径,假设有解,也就是:图中不存在负权重的环。根据前面的文章,主要有两种解法:(1)图中存在负权重边,则遍历图中的节点,使其成为起始节点,调用BellmanFord算法即可。(2)图中不存在负权重边,则遍历图中的节点,使其成为起始节点,调用Dijkstra算法即可。BellmanFord和Dijkstra算法:单源最短路径(《算法导论3rd-P374》)_hclbel...
2022-02-04 19:28:29
878
原创 带有备忘录的DFS(同时起到防止重复访问的作用)
1 介绍参考之前的链接:深度优先(DFS)_hclbeloved的博客-CSDN博客深度优先为了防止重复访问,需要一个visited数组来记录之前已经走过的路,从而起到防止走回头路的作用。现有个题目在DFS中使用到了备忘录(类似于从上到下的动态规划中的备忘录)。 注意:从上到下的动态规划使用的也是递归,而DFS使用的也是递归。2 矩阵中的最长递增路径329. 矩阵中的最长递增路径剑指 Offer II 112. 最长递增路径2.1 传统的DFS求解...
2022-02-04 09:59:15
567
Rtsp2Rtmp从前端设备获取RTSP码流并将其转换成RTMP码流推送至RTMP SERVER
2018-10-27
使用libevent源码在VS2013下生成静态库
2015-06-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人