- 博客(178)
- 资源 (16)
- 收藏
- 关注
原创 linux音视频采集技术: v4l2
在 Linux 系统中,视频设备的支持和管理离不开 V4L2(Video for Linux 2)。作为 Linux 内核的一部分,V4L2 提供了一套统一的接口,允许开发者与视频设备(如摄像头、视频采集卡等)进行交互。无论是视频采集、处理,还是编码和显示,V4L2 都提供了强大的支持。本文将简单介绍一下 V4L2 的工作流程以及如何使用它进行视频采集。v4l2并没有提供单独封装的API接口,而是通过 ioctl 系统调用以及v4l2所提供的特定参数来对设备进行控制和采集。:查询设备能力。
2025-01-07 15:37:54
1186
原创 windows下搭建运行mediasoup-demo
从官网下载最新的LTS版本安装包后直接安装,我本地目前使用的版本是 v20.9.0。如果对npm默认源的访问有限制,那就需要使用代理或者修改源地址。
2024-12-12 17:07:04
720
原创 IPv6万能地址[::]使用的注意点
当这个选项被设置为 true(1)时,套接字将不接受IPv4映射地址,这意味着它将只接受IPv6通信。当设置为 false(0)时,套接字将同时接受IPv6通信和IPv4映射地址,使得可以在单个端口上同时监听IPv4和IPv6。需要注意的是,IPv6的万能地址绑定监听后实际是可以同时支持IPv4和IPv6的客户端连接的(双栈环境中)。为 false 在IPv4和IPv6双栈环境中非常有用,可以简化服务端的实现代码,从而减少开发工作量。另外需要注意,当有两个套接字同时监听IPv4和IPv6的相同端口,并且。
2024-12-06 17:54:51
368
原创 redis7.x源码分析:(6) bio后台服务
当任务到来时,主线程将任务添加到相应操作类型的任务队列中,并唤醒等待在该队列上的线程。redis的BIO(Background I/O)顾名思义:后台I/O服务,是Redis中用于处理一些需要异步执行的后台任务的一个线程池。由此我们也可以看出,redis其实并非真正的单线程程序,只是它的主要数据库读写处理流程是在主线程完成的,但内部是会启动多种线程来辅助提升效率的。除了BIO的线程外,后续我还会讲解网络IO多线程的代码实现,也会涉及到整体主流程框架的实现原理。作者:jwybobo2007。
2024-11-28 09:54:39
296
原创 redis7.x源码分析(目录)
redis7.x源码分析:(1) sds动态字符串redis7.x源码分析:(2) adlist双向链表redis7.x源码分析:(3) dict字典redis7.x源码分析:(4) ae事件处理器(一)redis7.x源码分析:(5) ae事件处理器(二)
2024-11-24 23:56:47
324
原创 redis7.x源码分析:(5) ae事件处理器(二)
Redis的定时器实现比较简单,它并未使用最小堆或者时间轮之类的方式来管理定时事件,而是直接使用一个双向链表把所有的定时器事件串起来,然后通过遍历去实现一些功能。从代码中可以看出,最早超时时间就是通过遍历链表找出超时时间when最小的事件来实现的。对于定时器的删除操作不会立即执行,而是将定时器修改为无效,在下一轮的 processTimeEvents 中处理。它是在 aeProcessEvents 的函数末尾调用的,通过遍历链表确认是否有事件超时,然后执行相应的超时回调。接上篇,接下来看定时器事件的处理。
2024-11-23 13:00:00
362
原创 redis7.x源码分析:(4) ae事件处理器(一)
ae模块是redis实现的Reactor模型的封装。它的主要代码实现集中在 ae.c 中,另外还提供了平台相关的io多路复用的封装,它们都实现了一套相同的poll接口,就类似于C++中提供了一个接口基类,由针对不同平台的派生类去实现。aeEventLoop中的events是用于保存fd注册事件的数组,它是以fd值作为索引来存取事件的。实际使用的io模型会根据编译时定义的宏在 ae.c 的代码头部直接引入。接下来再看一下ae相关接口,先看下fd相关实现。
2024-11-22 16:00:28
467
原创 redis7.x源码分析:(3) dict字典
另外,dict对hash值相同的key采用了常规的开链法存储,而unordered_map在采用开链法的前提下,又使用了_M_before_begin将不同桶中的链表串联成了一个大链表,从而将遍历速度优化为O(n);还有就是,dict为应对服务器性能上的特殊要求,设计成了双hash表的形式,这也使得它的rehash等操作存在一些特殊性。hash表的创建比较简单直接略过,先看下 _dictExpand 的实现,它在hash表扩容缩容和创建时都会用到。两者在代码实现层面存在一些差异,比如gnustl的。
2024-11-14 18:05:00
625
原创 redis7.x源码分析:(2) adlist双向链表
listNode中的value定义为void *,所以它可以被用来存储任意类型的数据。而对于不同的数据,在处理时可能需要用到不同的函数,因此在list中定义了3个函数指针,分别对应不同类型数据的复制、释放和对比功能。当对value进行处理时,如果设置了函数指针,就有可能会调用它们进行相应处理。链表是一种常用的数据结构(如果不了解,请先学习数据结构),由于c语言本身没有实现标准的链表库,所以redis自己实现了一个双向链表。双向链表在redis内部的使用非常的多,几乎所有模块中都有用到。
2024-11-12 18:03:49
359
原创 redis7.x源码分析:(1) sds动态字符串
其实它和C++标准库中的string在一定程度上是比较类似的,都是用来完成对字符串缓冲区的动态分配、管理以及其它一些相应操作的。另外,sds在设计中本身也是二进制安全的,而且sds会在末尾多分配1字节并且置’\0’,用于防止一些字符串操作的越界问题。sds的定义非常简单,直接就是一个char*的别名,因此sds本身具备C字符串的特性,可以使用strcpy、strlen等函数。sds在分配空间时,是包含头结构的,但真正返回的却是buf成员的地址,这就是sds具备C字符串的特性的原因。
2024-11-11 18:02:08
439
原创 linux下编译鸿蒙版curl、openssl
是一个用相对路径表示的统一编译安装目录,openssl和curl都会引用以及安装到这个目录下,所以要保证两个开源库使用的编译脚本中的这个相对路径指向同一目录。如果有什么问题的话,也可以自己手动改成想要的路径,两个脚本一致就行。目前我编译的全部都是静态库,如果需要编译动态库的话,还需要调整下编译脚本中的参数。具体的参数可以查看openssl和curl的编译说明。curl使用的版本是 7.81。如果中间没有错误的话,在。下会生成以下文件和文件夹。
2024-10-12 17:00:08
1305
原创 linux下不同库出现符号冲突的解决方式
在linux下开发时,可能会碰到不同库导出同名函数符号,导致行为异常的问题。举个例子:我的test.cpp需要链接以及,并且两个so库中都有一个同名的函数符号PrintInt,那在 test.cpp 中我想调用liba.so的PrintString时实际会调用函数符号呢?答案是根据链接顺序来。先链接先加载哪个库就会使用哪个库的符号。假设我们先链接加载的libb.so,那test实际会调用的就是libb.so中的PrintInt,这很明显不符合我们的期望,并且很可能会更一步导致crash。
2024-09-24 17:01:28
991
1
原创 ubuntu下miniconda安装方式
全部执行完毕后,重新登录终端,就可以进入默认的 base 环境。接下来可以继续使用命令创建和切换所需要的python环境。
2024-04-10 10:30:15
504
原创 es5标准下 javascript 类的一种继承方式
以ES5标准为例的继承方式 // 父类 function Base(a, b) { this.x = a; this.y = b; this.arr = [a, b]; } Base.prototype.add = function(a, b) { this.x += a; this.y += b; } // 子类 function Child(a, b, c) { Base.call(this, a, b); this.z = c; }
2021-03-04 11:20:57
256
1
原创 gdb分析coredump的几个常用命令介绍
1.info proc mappings显示各个模块(可执行程序、动态库等)segment映射的虚拟内存地址列表2.info register显示寄存器的值例:(gdb) info registerrax 0xdbbb6a00007f719b -2613378610517544549rbx 0x9e4b82c0 2655748800rcx 0x3 3rdx 0x0 0rsi
2020-12-09 10:35:22
1174
1
原创 linux errno参考
#define EPERM 1 /* Operation not permitted */#define ENOENT 2 /* No such file or directory */#define ESRCH 3 /* No such process */#define EINTR 4 /* Interrupted system call */#define EIO 5 /* I/O error */#define ENXIO 6 /* No such device .
2020-11-30 23:50:47
421
原创 【错误记录】xcode codesign失败
使用codesign签名APP时出现:because larger updated load commands do not fit (the program must be relinked using a larger -headerpad value) 的错误提示。原因猜测是文件头中的预留空间不够放置生成的签名数据解决方式:xcode连接参数other linker中添加-headerpad_max_install_names选项...
2020-09-27 10:34:41
455
原创 【WebRTC】几个重要sdp参数说明
o=- 2833773620626745940 2 IN IP4 127.0.0.1s=-t=0 0// ice模式: full / lite, 设置lite表示始终为controlled,不需要发起STUN binding探测,只需要回复 binding response, 在开发SFU服务时非常有用, 只需要服务器一方设置为lite (都为full时, 双向探测;都为lite时, 互不探测)a=ice-litea=group:BUNDLE 0 1a=msid-semantic: WMS i.
2020-09-07 15:53:48
5292
1
原创 【WebRTC】web前端+nodejs测试demo
1.服务端使用nodejs搭建,使用的module为express、nodejs-websocket。实现了简单的信令协商,代码如下:// server.jsvar ws = require("nodejs-websocket");var fs = require('fs');var https = require('https')var express = require('express');var app = express();var userList = {};var
2020-09-07 11:23:45
1415
1
原创 vscode编译调试linux c/c++
1.远程打开linux服务器上的开发工程文件夹(具体工程不进行介绍了),如:/home/user/my_pro2.在产生的 .vscode 文件夹下放置 launch.json,tasks.json 配置文件,内容如下:launch.json:{ "version": "0.2.0", "configurations": [ { // 工程项目名称 "name": "test1", "
2020-08-17 13:43:11
364
原创 linux下使用gclient工具报错的问题处理
Your PATH contains a literal "~", which works in some shells but will break when python tries to run subprocesses. Replace the "~" with $HOME.如果出现如上的错误,说明在 exportdepot_tools的路径时,使用了~符号来表示用户文件夹,而p...
2020-01-04 17:35:26
1454
原创 RTP序列号以及时间戳是否回绕的判断
int isNewerSequenceNumber(uint16_t sequence_number, uint16_t prev_sequence_number) { return sequence_number != prev_sequence_number && ((uint1...
2019-12-17 17:55:59
1010
原创 OSX以及IOS app 崩溃符号查找
奔溃信息:Thread 29 Crashed:0 my 0x000000010c27d2d4 0x10c14d000 + 12459081 my 0x000000010c287625 0x10c14d000 + 12877172 my 0x000000010c27669f 0x10c14d000 + 1...
2019-09-20 16:37:03
468
原创 macos下生成icns图标文件
1.新建文件夹,将图片放到该文件夹下,图片命名如下icon_16x16.pngicon_16x16@2x.pngicon_32x32.pngicon_32x32@2x.pngicon_128x128.pngicon_128x128@2x.pngicon_256x256.pngicon_256x256@2x.pngicon_512x512.pngicon_512x512@2x....
2019-02-14 17:15:23
1092
原创 QSlider样式qss美化
QSlider { background-color: rgba(22, 22, 22, 0.7); padding-top: 15px; padding-bottom: 15px; border-radius: 5px;}QSlider::add-page:vertical { background-color: #FF7826; width:5px; border-rad...
2018-12-26 14:43:56
3040
2
原创 解决mac下qt工程编译错误:Xcode not set up properly. You may need to confirm the license agreement by running
1.qt版本5.5.1(其它版本应该也类似)2.系统:mac os 10.12.5xcode版本>= 8.x打开:qt安装目录/5.5.1/clang_64/mkspecs/features/mac/default_pre.prf将:isEmpty($$list($$system("/usr/bin/xcrun -find xcrun 2>/dev/null")))
2017-08-14 17:35:01
1479
原创 ios版boost库编译
#!/bin/bash# 请自行修改路径,cd到boost解压后的目录下dir=`dirname $0`cd "$dir/../../public_libs/boost_1_56_0"# 如果库文件已存在,直接退出if [ -e ./stage/lib/libboost_date_time.a ]; then echo "libraries exist. no need to bui...
2016-12-29 18:04:33
3150
1
原创 Linux下利用双网卡构建网关截获数据包
eth0 作为其它设备网关(我的网段都是 192.168.1.*)echo 1 > /proc/sys/net/ipv4/ip_forwardecho 0 > /proc/sys/net/ipv4/tcp_timestampsiptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE iptables -t nat -A POSTROUTI
2016-04-19 18:25:55
950
翻译 boost中tokenizer的用法举例
例一:// simple_example_1.cpp#include#include#includeint main(){ using namespace std; using namespace boost; string s = "This is, a test"; tokenizer<> tok(s); for(tokenizer<>::ite
2014-04-02 19:22:51
1194
原创 flv文件AVCDecoderConfigurationRecord以及AudioSpecificConfig结构
H264和AAC数据流 RTMP推送的音视频流的封装形式和FLV格式相似,由此可知,向FMS推送H264和AAC直播流,需要首先发送"AVC sequence header"和"AAC sequence header",这两项数据包含的是重要的编码信息,没有它们,解码器将无法解码。 AVC sequence header就是AVCDecoderConfigurationReco
2013-07-02 10:08:55
18686
2
转载 malloc分配原理浅析 mmap关注焦点 如何优化分配内存
现象1 压力测试过程中,发现被测对象性能不够理想,具体表现为: 进程的系统态CPU消耗20,用户态CPU消耗10,系统idle大约70 2 用ps -o majflt,minflt -C program命令查看,发现majflt每秒增量为0,而minflt每秒增量大于10000。 初步分析majflt代表major fault,中文名叫大错误,min
2013-07-02 09:10:56
6864
转载 用 RPM 打包软件
http://www.ibm.com/developerworks/cn/linux/management/package/rpm/part1/index.htmlhttp://www.ibm.com/developerworks/cn/linux/management/package/rpm/part2/index.htmlhttp://www.ibm.com/developerwo
2013-06-25 17:04:26
751
转载 Shell 显示带颜色字体
格式: echo "/033[字背景颜色;字体颜色m字符串/033[控制码"如果单纯显示字体颜色可以固定控制码位0m。格式: echo "/033[字背景颜色;字体颜色m字符串/033[0m"字背景颜色范围:40 - 4940:黑 41:深红 42:绿 43:黄色 44:蓝色 45:紫色 46:深绿 47:白色 字颜色
2013-06-17 10:41:31
1019
转载 PE文件格式详解(下)
预定义段 一个Windows NT的应用程序典型地拥有9个预定义段,它们是.text、.bss、.rdata、.data、.rsrc、.edata、.idata、.pdata和.debug。一些应用程序不需要所有的这些段,同样还有一些应用程序为了自己特殊的需要而定义了更多的段。这种做法与MS-DOS和Windows 3.1中的代码段和数据段相似。事实上,应用程序定义一个独特的段的方法是使用标
2013-06-04 14:15:17
1101
转载 PE文件格式详解(上)
Windows NT 3.1引入了一种名为PE文件格式的新可执行文件格式。PE文件格式的规范包含在了MSDN的CD中(Specs and Strategy, Specifications, Windows NT File Format Specifications),但是它非常之晦涩。 然而这一的文档并未提供足够的信息,所以开发者们无法很好地弄懂PE格式。本文旨在解决这一问题,它会对整个
2013-06-04 14:12:57
836
原创 linux开发辅助命令(二)
1.查看进程打开的文件lsof2.查看ipv4,ipv6监听状态与对应进程lsof -Pnl +M -i4lsof -Pnl +M -i63.查看rpm安装信息rpm -ql 安装包名称4.修改当前shell的可打开描述符最大值ulimt -SHn 65535待续 ...
2013-05-30 09:20:04
766
linux开发常用帮助文档
2011-12-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人