自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小诺的博客

博客内容来自于自己在学习过程中的经验总结或者转载,转载的内容会附上原网站。

  • 博客(81)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 nginx实现,一推多用(rtmp推流,rtmp+flv+hls(m3u8)同时拉流),使用案例+使用方法

最近做到的项目使用nginx,要将一个摄像头的视频流推送给前端,并要求同时支持3种推流方式——rtmp,http-flv,hls(m3u8)。在使用nginx时,也是遇到了诸多问题,一度差点放弃,在此做个记录,同时也方便后来人。使用案例我是在tx2上做的,所以例子中使用的是gstreamer进行推流,你可以使用其他推流方式,比如ffmpeg或者obs。...

2020-09-19 19:54:13 13681 4

原创 C++日常用的函数总结

windows API 部分检查一个目录是否存在#ifdef UNICODEstatic bool isExistDir(const std::wstring& dir){ WIN32_FIND_DATA FindFileData;#elsestatic bool isExistDir(const std::string& dir) WIN32_FIND_DA...

2020-04-10 17:43:38 876

原创 C++程序性能控制(cpu,内存,带宽,io)

常见的C++性能约束有:cpu,内存,网络带宽,磁盘读写(iops)。性能控制好的程序,也可以作为商用软件竞争的优势和亮点。在本文中将从控制与监控两个方向介绍各个性能点的处置方式。性能控制并不是万能的,而且多数控制方式仅能控制整个程序的最大值或者平均值,这并不是保证程序本身的性能占用就是合理的。无论哪种资源,都应该在方案设计阶段进行考虑,无论是处理过程中增加间歇,还是选择更加合理的数据结构等。

2023-10-03 16:10:50 662

原创 C++项目使用pytest自动化测试

pytest是python语言的自动化测试框架,在C++项目中也可以使用其对模块或接口上进行测试,弥补googletest的不足之处。

2023-10-02 12:52:10 641

原创 好文章收集

1. git rebase的使用你真的懂git rebase吗? - 简书

2022-03-11 09:06:16 197

原创 专属于程序员的一份面经

感觉自己有些膨胀,我竟然是面霸么?作为技术人员,面试细节上应该是要和其他岗位有所区别的,而且会存在相反的地方,想知道我是怎么一面就过,薪资翻倍的吗?1. 态度方面误区:有些程序员单独为了面试,会去专门练习口才,认为面试不好是因为自己不会说。实际上这点在我们程序员身上行不通,因为普遍认为程序员口才就是不好,干嘛要挑战面试官的观念呢?自己还很耽误功夫,所以还是从其他地方多做准备吧。在面试时,一定要表现出诚实的一面,当然更高境界是在他会问的方面诚实,在他不会问到的地方伪装强大。诚实是作为一名程序员非常.

2021-06-17 23:32:16 376

原创 一些常用的在线工具地址整理

这里收集整理一些程序猿常用的网站。欢迎进行补充。整理格式:名称:功能:使用体验:链接:文章目录通用文档格式类(正则,json等相关的)1. regex1012. Regulex3. json.cn4. ecotrust-canada绘图类(在线PS,流程图等)1. uupoop2. diagrams3. processon资源类网站(一些镜像网站)1. 清华镜像地址数学相关(如画函数曲线的)1. desmos其他1. 世界时钟通用文档格式类(正则,json等相关的)1. regex101.

2021-06-15 23:21:21 443

原创 最长的指定瑕疵度的元音字串 —— 最优解法(C++实现)

题目开头和结尾都是元音字母(aeiouAEIOU)的字符串为 元音字符串 ,其中混杂的非元音字母数量为其 瑕疵度 。比如:· “a” 、 “aa”是元音字符串,其瑕疵度都为0· “aiur”不是元音字符串(结尾不是元音字符)· “abira”是元音字符串,其瑕疵度为2现给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串。输入输出输入描述:首行输入是一个整数,表示预

2021-06-04 02:18:31 2413 3

原创 (C++)地上有一个m行和n列的方格。一个机器人从坐标x,y的格子开始移动,每一次只能向左,右,上,下四个方向移动一格

有意思的算法题小记。1. 题目@地上有一个m行和n列的方格。一个机器人从坐标x,y的格子开始移动,@ 每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。@例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),@因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?2. 思路这道题目可以使用动态规划来解答。动态规划问题的思考方式是,当前状态和前一个状态,后一个状态的关联有什.

2021-05-09 17:33:36 1036

原创 控制日志输出频率(C++)

通常我们在一段循环执行的代码内,要添加输出日志,通常我们还要控制一下输出频率,这里将其通过define进行代码简化。代码实现#define TIME_LIMIT_EXEC(interval) \ static uint64_t __last_time = 0;\ uint64_t __time = AppUtil::get_current_ms();\ bool do_exec = false;\ if .

2021-04-24 11:42:47 1019

原创 使用define定义函数(假定义)

有时我们想简化书写,但是这部分操作无法封装成函数,可以使用define进行封装。define定义在下面的define定义中,#topic 可以直接引用传入参数topic。而##name 可以放在调用的函数名中使用,这是我们正常的函数定义中,不方便实现的。#define REGISTER_DIAG_EVENT(topic, name) {\ Diagnose::register_diag_action(#topic, \ [ = ]() { \ .

2021-03-22 16:47:14 1280

原创 代码模拟电平触发方式(C++)

在电子电路基础中,触发方式有几种,包括高电平触发,低电平触发,上升沿触发,下降沿触发。在本文中将使用代码实现这几种方式。其中 message/messager.hpp 中使用的消息传递方式,在另一篇文章中有所介绍。https://blog.csdn.net/xiaonuo911teamo/article/details/112044036文章目录应用场景使用方式源码附件(就是上面引用的message.h)具体的例子应用场景想要以一种规律,触发一个事件,并且这种规律最终可以转化为上述的触发方式。.

2021-03-21 15:37:12 690

原创 protobuf(.proto)的使用

protobuf 是Google提供一个具有高效的协议数据交换格式工具库,已被广泛应用。通俗点说,就是将要发送的消息,通过protobuf格式发出去,自动进行封装。另一方对proto格式解析,直接得到原数据。注:适用linux使用方式通过编写一个要发送的消息格式文件(.proto文件),然后通过自动化生成工具,生成对应的处理类及其头文件。编写*.proto文件按如下格式填写你的消息。具体规范,https://blog.csdn.net/jiaweiok123/article/details/.

2021-03-08 19:46:27 1641

原创 ubuntu 上交叉编译 linaro 的库

交叉编译是在一个平台上编译另外一个平台可用的应用程序,此时可以想象,另外一个平台上的系统库不同,所以我们要指定编译时使用的系统库。另外一个平台上运行环境不同,内存的大小端等,所以我们要使用单独编译工具。即分别设置 SYSROOT 和 C_COMPILER / CXX_COMPILER编译linaro环境下的三方库这里介绍使用交叉编译的方式,编译三方库的过程。一般流程正常地,我们为cmake设置好要用的工具链,系统环境,以及编译输出的库路径,直接cd build && cmake.

2021-02-10 10:57:48 459

原创 计算算法运行时间巧妙方法

在写程序时,特别是执行算法步骤时,经常需要记录某段代码的执行时间。今天发现一个比之前写的更好的方法,所以在这里记录一下。之前自己写的:https://blog.csdn.net/xiaonuo911teamo/article/details/110037590实现思路和特点思路:利用类的构造,记录开始时间点,利用类的析构,记录结束时间点,并完成输出。特点:使用方便,封装度高。头文件就一个TimerCounter。构造参数flag,就是要记录时间部分的名字。构造参数enable_cout,表.

2021-01-15 18:37:21 946

原创 线程安全变量封装(C++)

在写使用多线程的项目的时候,经常需要给一个变量加锁保护。这里提供一个对需要加锁的变量使用的封装格式。这里提供普通变量以及std::vector和std::deque两个标准库的封装格式。其他的结构也是相似原理。使用方式 DoubleBufferData<int> data; data = 7; int m = data; std::cout << m << std::endl;单独变量封装#pragma once#include.

2020-12-31 19:28:47 613 2

原创 C++静态内存共享(常用于多个模块建的解耦合)

同一个程序的静态堆栈空间(static、全局变量所存放的位置)只有一个,所以我们可以利用这块空间进行不同so中的操作。比如,一个so负责声明,另一个so负责实现,而且不需要直接相互包含。下面给出一个例子,我会给出文件目录、所有文件内容以及编译脚本。其中clang++可以换成g++,版本需要支持c++17。目录结构-- helloworld -- libFuncImpl -- FuncImpl.h -- FuncImpl.cpp -- libFuncDecl -- FuncDecl..

2020-12-31 18:53:38 332

原创 mac上VScode如何配置C++使用(方法出自于官网,很傻瓜,也很明白)

下面的方法基本是照抄官网的,只是翻译了一下,再加上一丢丢自己的备注。本来不想麻烦的,因为VS code是很大众的编译器了,想着随便搜个教程,傻瓜式看着照搬就行了吧。结果不尽人意,排名靠前的试了试,都多少有问题,原理说的也不明白。最后还是自己去官网找了一下,英文看的不是很流利,但是非常傻瓜,使用方式,每一步的目的也都很清楚。在VS code中使用Clang++的方法在这篇指导中,你将学到如何在macOS系统中,使用Clang/LLVM的编译和调试器配置Visual Studio Code。下面.

2020-12-30 20:52:07 2327

原创 std::regex匹配正则表达式C++11

C++11中引入的这个正则表达式解析的还是挺好用的。代码unpack_call 的目的是将input拆分出name和value的值。这个例子没什么用,就看看效果就好例子:name: hello ; value: world打印输出:name: hello ; value: worldhelloworld#include <regex>static bool diag_call(const std::string& input){ // s 是匹配空格.

2020-12-24 21:02:19 885 1

转载 Linux errno详解

转自:https://www.cnblogs.com/Jimmy1988/p/7485133.html1. 错误码 / errnoLinux中系统调用的错误都存储于 errno中,errno由操作系统维护,存储就近发生的错误,即下一次的错误码会覆盖掉上一次的错误。PS: 只有当系统调用或者调用lib函数时出错,才会置位errno!查看系统中所有的errno所代表的含义,可以采用如下的代码:/* Function: obtain the errno string* char *stre.

2020-12-24 19:35:35 548 1

原创 C++你不知道的一个小技巧

你写C++使用模板吗?欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样.

2020-12-24 19:15:34 70 2

原创 类型安全转换汇总(C++)

平时在进行类型转换时,特别是从字符串转换为数字时,都要考虑安全问题。既不能默许,又应该及时发现处理,于是,自己写了安全的封装。正文static int32_t bool_to_int(const bool b)

2020-12-21 17:41:04 434

原创 C++级联Builder实现方式1

太简单的我就不记录了,下面的方式感觉封装效果非常好,可以视情况使用。摘选自Design Patterns in Modern C++ 一书中。类图表示源码#include <...>class PersonBuilder;class PersonAddressBuilder;class PersonJobBuilder;class Person{ // address std::string street_address, post_code, city; /.

2020-12-11 02:29:11 351

原创 gstreamer命令参数优化

原命令gst-launch-1.0 rtspsrc latency=8 location=rtsp://admin:[email protected]/h264/ch1/main/av_stream ! rtph264depay ! queue ! nvv4l2decoder ! nvvidconv ! video/x-raw, width=1280, height=720 ! nvvidconv ! nvv4l2h264enc profile=4 iframeinterval=30 bitr

2020-12-10 18:17:34 4857

原创 libjpeg-turbo测试解压缩性能

许久以前的代码,随便记录一下#include <stdio.h>#include <stdlib.h>#include <sys/time.h>#include <unistd.h>#include <sys/stat.h>#include <turbojpeg.h>typedef unsigned char uchar;typedef struct tjp_info { int outwidth; in.

2020-12-10 02:17:38 1226

原创 遍历目录下的所有文件

#include <dirent.h>#include <string.h>#include <iostream>#include <vector>#include <string>namespace {void Usage(const char* exe){ fprintf(stderr, "input params error, run this exe as following command line:\n"); fp

2020-12-09 02:31:36 456

原创 实用工具记忆(因为有些强大的工具,但是又不常用到,怕会忘记)

windowsVLD(Visual Leak Detector)windows上的内存泄漏检测工具Wiresharkwindows上的抓包工具WinHex二进制文件查看工具Typoramarkdown文档编写工具MPC-HC和VLC视频文件详细信息查看工具Datahammer二进制数据查看图像工具progressmonitor进程监管工具linuxvalgrindlinux上的内存泄漏检测工具...

2020-12-08 22:49:41 134

原创 创建linux容器的远程登录

需要使用到ssh,没有的话要提前安装。参考链接:https://www.jianshu.com/p/c4d4ee6f3663systemd-nspawn启动容器systemd-nspawn -D [directory] --machine [name],如:root@leez:~# ls /mnt/data4firefly-rk-dev.tar firefly-rk-prod firefly-rk-prod.tgzsystemd-nspawn -D /mnt/data4/firefly-.

2020-12-07 11:08:11 181

原创 经历过的有意思的技术问题-面试专用

硬件资源使用受限(nvu)简述:在使用硬件加速功能时,对于一个硬件来说,处理能力是有上限的,当两个模块都想使用同一个硬件进行加速时,会产生资源上的竞争,导致性能不如单独测试。项目实例:在pipeline架构中,ColorConv和mnn推理模块都可以使用nvu模块进行加速,在单独设计两个模块的硬件加速时,都是按照满载去设计的。故同时使用时,会出现性能下降的现象。软件的流量监控(linux)原本对于该问题的处理,我是没有什么思路的,多亏身边有linux的大佬。简述:linux是有文件系统的(.

2020-11-25 03:03:35 93

原创 ffmpeg ffprobe查看视频文件编码格式

输入/opt/ffmpeg/ffprobe file.mp4 -show_streams -select_streams v -print_format json 输出{ "streams": [ { "index": 0, "codec_name": "h264", "codec_long_name": "H.264/AVC/MPEG-4 AVC/MPEG-4 part 10", "profile": "Main",

2020-11-23 10:43:13 11026 1

原创 C++新特性(C++11, C++14, C++17, C++20)

作为使用的记录,方便后续的查询,欢迎大家一起来完善。我会定期根据使用频率调整顺序。大部分说明,都会出自C++reference,cppreference网站std::chrono::duration从C++11就有,14有强大的补充。下面列举我喜欢用的。#include <chrono>#include <iostream>int main(){ using namespace std::chrono_literals; auto halfmin = 30s.

2020-11-17 02:06:08 1805

原创 城市三级级联选择器-Qt版

因为一个项目中,要填写 省-市-县 这样结构的地址,所以需要一个关系结构。下面分享的代码是我稍微花了些时间找到的,Qt版本的。使用方法构造UIChinaCity结构,如果使用次数多,建议static结构,避免多次重复解析。getProvinceName 得到省份列表getCitysName 根据省份得到市区列表getRegionsName 根据省份,市区获得县的列表头文件#ifndef UICHINACITY_H#define UICHINACITY_H#include <.

2020-11-10 00:52:02 912

原创 Linux之select

在使用read,write函数在管道中处理数据时,会出现阻塞的现象。此时,可以使用fcntl设置read不阻塞。但是此时又有一个新的问题。如果在一个循环中,反复读取数据,则会频繁占用CPU,等同于for循环空转。所以,就需要select来解决问题了。使用select,可以设置管道端口的等待处理时间。比如说,在使用read时,提前设置好select,设置端口等待2s,当管道中没有数据时,read等待2s,仍然没有数据,则进行返回。使用示例说明直接看注释吧。 fd_set rd; // st.

2020-11-02 00:45:10 263

原创 使用ffmpeg实现管道输入输出,并连接在代码中

这次记录的问题比较复杂。cat test.flv | ffmpeg -i pipe:0 -c copy -f flv - > test2.flv上面这条命令可以看懂吧,就是将test.flv,没有进行任何操作,保存到了test2.flv中。不明白的话,跳到最后的知识扩展中,有解释。然后,我要做的就是在代码中完成前后的操作,即自己读文件,送入ffmpeg,再从ffmpeg中读到输出。这样做的目的是,我可以自由控制使用ffmpeg处理某些过程,而不是全部过程。示例代码思路下面提供代码是我.

2020-11-01 20:16:58 8021

原创 并发编程-信号量

此文作为笔记,记录代码片段。说明Semaphore 构造函数,count表示最多几个线程同时运行。Wait 等待可执行线程出现Signal 已准备好,请求执行代码片段class Semaphore {public: Semaphore(long count = 0) : count_(count) { } void Signal() { std::unique_lock<std::mutex> lock(mutex_); ++count_; //lo.

2020-10-31 20:52:00 153

原创 gstream推流实践命令整理

gstream 命令行使用整理gst-inspect-1.0 可以用来查询有哪些插件可用gst-inspect-1.0 + name 可以查看插件详情接口信息gst-launch-1.0 可拼接插件,执行命令gstream 部分插件介绍filesrc,rtspsrc 用于打开文件或者视频流matroskademux, flvdemux 解封装matroskamux, flvmux 封装nvv4l2decoder, nvv4l2decoder jetson上面的硬件解码器nvvidc

2020-10-31 20:40:12 2778 2

原创 图片直线检测,简易封装

在写工程时,经常会用到一些功能单一的函数。将其进行良好的封装,才便于下次使用。目录设计思路代码细节配置参数自定义直线类型(如果要在此基础上做更广阔的开发,应当独立结构)检测结构头文件源代码设计思路类对象的功能设计为:在一张特定的图像中检测出若干条直线每条直线有唯一id,方便外部储存和查找支持通过某点查询到直线可保存检测结果,便于二次免检测重用检测参数可配置使用opencv为基础库代码细节配置参数nModeValue设置输出的图像类型nCannyLowThreshold、n.

2020-10-16 18:09:27 112

原创 遍历删除vector中的元素(出自Stackoverflow,正统的stl方法)

本来是个很简单的遍历删除的问题,但是因为vector的机制,在连续释放空间时,会导致出错。自己思考无非是倒序删除,或者使用earse的返回值,感觉都有些别扭,不是我想要的精巧。所以打算在网上搜个精巧简短的代码直接用。找来找去,终于在Stack overflow上找到了这段代码,实测很好用,正是我想找的。代码满足Condition()的元素会被删除。Execution() 释放Deferred资源。const auto pred = [](Deferred& d){ return !d.Co.

2020-09-13 23:38:20 479

原创 在linux下对进程进行流量监控,使用procfs

最近在做视频直播,需要在直播断开的时候自动重新发起重连。原因可能由于摄像头rtsp服务器异常断开,或者网络原因需要重启发起直播请求。解决思路文件 /proc/xx/net/snmp,里面保存着实时的网络通讯数据,通过 cat /proc/xx/net/snmp 命令可以查看其内容。但是由于其内容不容易查看,实际输出如下所以,我们可以通过awk命令进行格式化输出,便于查看。(xx换成你要查看进程的id)cat /proc/xx/net/snmp | awk "(f==0) {name=$1; i.

2020-09-13 22:32:04 285

原创 如何将内网ip映射到外网

这个百度经验上就有,不过对于着急使用的我来说,差了最后一步。所以还是一起记上吧。第一步首先登陆你的路由器,就改密码那个。一般就用浏览器直接打开192.168.1.1就可以,账号密码有可能是 admin admin吧,默认可能是这个。不对的看下面的方法。windows + R输入 cmd回车输入 ipconfig找到 “默认网关”,后面就是路由器的地址了。第二步因为每个路由器品牌都不一样,所以只能自己找了。找到带有“虚拟”或者“转发规则”字样的就对了。第三步填上自己的ip,端口.

2020-08-12 10:56:02 20828

格式工厂1.85(绿色版)

新版本的格式工厂转换时总是出现各种各样的转换失败错误,偶然找到了这个版本。在这里分享一下。这个绿色版本很多新版本更好用。

2017-08-25

背包九讲(version 1.1 build 20071115)

一个很好的讲解背包的文件。 如果遇到打开之后无法显示,请参照https://jingyan.baidu.com/article/a948d65145f6ad0a2dcd2eae.html ,里面的方法试一下。

2017-03-27

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

TA关注的人

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