自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 资源 (3)
  • 收藏
  • 关注

原创 egrep+sed替换文件夹内所有文件的指定字符串

bash 使用

2023-03-07 17:45:58 211 1

原创 IntelliJ IDEA升级后http请求异常解决

具体报错:springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.io.IOError: java.io.FileNotFoundException: Invalid file path解决在pom.xml添加org.jboss.xnio依赖<dependency> <groupId>org.jboss.xnio</

2022-05-30 15:53:35 660 1

原创 新版本glib使用epoll代替poll

新版本的glib支持使用外部的事件循环代替内部的poll,这篇文章使用的glib版本是V2.70.0, 理解还很粗浅,但是demo能跑起来,还需要再详细研究一下参考的两个链接,多线程下使用及效率是怎样的都还不清楚。1、新API通过新的API g_main_context_new_with_flags 及新变量G_MAIN_CONTEXT_FLAGS_OWNERLESS_POLLING可以创建一个无主的poll,然后通过glib的一套API可以实现自己的事件循环。ubuntu18下的demo:#incl

2021-12-10 21:23:23 1156 3

原创 lsquic使用《二》--echo服务

   官方实现的echo的客户端及服务端demo功能是客户端发送字符服务端原样返回,但是实现比较复杂,对于熟悉流程来说不友好,因此参考这个lsquic-tutorial实现了一个简单版本的,主要用于理解流程。   lsquic的结构体变量定义后一定得memset将变量所有成员初始值设置为0(或者说NULL),不然会有意想不到的bug出现。1、client端1.1、数据输入并发送   客户端使用libev作为事件循环的驱动,不断侦听stdin输入,遇到换行符即启动调用lsquic_stream_wan

2021-12-09 20:54:27 3315

原创 lsquic使用《一》--概述

因为想使用下quic协议,所以开源框架中选了lsquic,C语音实现,支持客户端和服务端,然后文档也是开源框架中较为丰富的。支持QUIC V1、Draft-29、27,Q043,Q046及Q050。对应github的commit是:df67278304ce 。V3.03版本之后两个commit。1、lsquic特征与架构1.1、特征DPLPMTUD,一种在某一特定网络路径中探测单次能发送最大的UDP包大小的方法,因为QUIC是自己实现打包的故用这个方法能提升性能;ECN,显式拥塞通知;S

2021-11-23 20:30:09 6833

原创 ffmpeg 多文件指定时间进行混音命令

有多个音频文件需要混音,但是每个音频文件需要在指定的时间加入混音流程,如A、B、C三个文件,B、C分别在第5秒、第15秒混在输出文件中。1、命令结合adelay及amix filter完成ffmpeg -i fangtang.wav -i lx.wav -filter_complex "[1]adelay=delays=5000|5000[aud1];[0][aud1]amix=inputs=2" -y out.aac第二个文件 lx.wav的两个通道都延迟5000ms加入混音流程。若是最新版本

2021-09-29 10:23:58 1372

原创 Kaldi IO机制的一些概念及代码流程解析

1、ark,scp概念1.1 基本概念ark : 代表以二进制方式读或写文件,archive文件,该文件一般是特征文件或人类不可读的文件。scp: 代表以文本方式读或写文件,scp文件,一般人类可读。Kaldi读取或写文件由对应可执行程序参数的ark/scp位置决定,此处有rspecifier和wspecifier两个概念,分别对应输入及输出。执行程序时,命令参数中首先出现的是rspecifier,后出现的是wspecifier。 //读取wav.1.scp文件,输出写入到out.ark文件

2021-09-09 07:39:46 731

原创 webrtc服务器压测工具使用

  主要介绍3个开源的webrtc压力测试框架–kite,pion及srs_bench,以janu服务器为例。1、KITE   KITE整合了Selenium和Aullure。Selenium 是一个开源的浏览器自动化框架,支持集群化(grids),不同的节点可以运行不同的操作系统类型/版本、浏览器类型/版本,这样我们就可以在各种操作系统和浏览器的组合下自动化测试 Web 应用了。Allure 则是一个开源的测试报告工具,用来展示测试结果。有开源版本也有商用版本。重要特征:支持linux、win

2021-08-07 10:15:42 2504 2

原创 webrtc ice(rfc5245)记录

根据janus的ICE流程抓包记录rfc5245 ICE标准中的一些流程1、reflex及relay候选地址收集(rfc5245-4.1.1.2)   agent通过不带验证信息的Binding请求(stun协议)或Allocate请求(必须得有鉴权)[turn协议]获取server reflexive或relay地址。agent可能会按照一定的时间间隔发起新的stun或turn请求,比如500ms,这个请求可能是上次请求的重试也可能是新的host候选地址对。抓包2、peer reflexive

2021-07-20 20:42:22 325 1

原创 ffmpeg 音频混流--命令与代码说明

  ffmpeg可使用filter实现各种复杂的操作,混音只是其中一小部分功能。代码实现因为参考已经说的较为详细,我这里补充一些我认为重要的。1、命令实现ffmpeg -i dragen.opus -i Monsters.opus -filter_complex "[0:a]aresample=8000[a0];[1:a]adelay=delays=6400|6400,aresample=8000[a1];[a0][a1]amix=inputs=2" -b:a 20k -y mixer.aac -v

2021-05-28 21:11:55 3478

翻译 Janus服务器《四》--事件处理机制

1、总述虽然我们可以使用Admin API来控制及和janus服务器进行交互,但是Admin API是基于poll机制的,这就意味我们必须自动发起请求去获得我们需要的信息。如果janus处理的请求的数量巨大则我们会遇到性能问题,这将导致我们不能实时的获取我们需要的信息。若要实时获得关于会话、句柄(hsandle)相关的信息的话我们就得使用event机制。...

2021-05-09 19:11:01 398

翻译 Janus服务器《三》--Admin/Monitor API

1、Admin/Monitor API  用于向janus服务器查询一些和会话及句柄有关的信息,在查找媒体流层面问题时显得非常有用。目前Admin API只能用于信息查询不能与janus进行更多的交互(如强制删除会话),更多的交互还是得使用RESTful、Websockets等transport模块的API。该API只提供同步机制,如果你需要的是异步通知机制的话请使用janus的event handler。默认的根请求路径为/admin 。   该API接口默认是关闭的,你可以在相应的传输方式的配置文

2021-05-08 21:08:44 787

翻译 Janus服务器《二》--Transport 模块的API

  官方关于JanusRESTful、WebSockets等传输模块的API说明的文档的翻译。  从Janus的V0.0.6开始就实现了REST、WebSockets、RabbitMQ、MQTT、Nanomsg及UnixSockets接口用于和janus服务器进行交互。(这些通信方式均是可选的,都需要第三方库的支持)。所有这些接口统一使用的json消息进行通信。  其它接口和Rest接口有两处不同:《1》、访问特定session及handle时;《2》、部分的通知处理机制;1、REST接口1.

2021-05-05 21:37:33 836

原创 janus服务器《一》--总概述

  工作使用janus服务器但是网上相关资料比较少,于是准备翻译一下官方文档。1、janus框架结构  janus是基于SFU结构的WebRTC流媒体服务器,由C语言进行编写因此性能非常优秀,整体架构图如下:  janu主要由三部分组成,分别是Core、Plugin和Transport。  《1》、Core: Janus的核心部分,其功能是将传输涉及到的所有Janus连接在一起,实现了server端跟浏览器的交互、处理交互双方的会话(session)、处理媒体信令及协商。Core实现了WebRTC

2021-05-05 11:58:57 1825 2

原创 live555 性能优化整理

1、发送优化2、调度优化MultiFramedRTPSink.cpp的sendPacketIfNecessary函数3、内存分配优化《1》、定时器内存使用无锁内存池《2》、 server端SDP信息自己手动设置如果不自己手动设置,当客户端首次连接时server端会先创建对应媒体流如264流的source实例用于SDP协商,然后销毁,接着再创建用于实际视频流传输的source。自己手动设置后能省下一次source实例创建销毁、sdp设置的流程。5、参考《1》、基于live555 RTS

2021-01-06 16:52:10 1663 1

原创 海思webrtc交叉编译

一、准备1、在ubuntu14.04 64bit  因为arm-hisiv400-linux是32位的,故需要在该系统安装兼容32位程序运行的库,参考博客2、webrtc源码   (2019年9月之前的版本,这之后的版本默认是C++14的(由git log可获取该信息),用海思编译器编译会有问题,release版本的分支号branch-heads/m77,这个版本之前的应该都可以。本文使用m77分支)分支切换命令WebRTC developmentgit checkout -b hisi_br

2020-11-12 14:14:00 3287

原创 优化视频流传输涉及的编码技术

  整理目前接触到的一些提高视频流(某些)指标的H264/265的编码技术1、intra-refresh技术(帧内刷新技术)  帧内刷新技术能降低网络延时、降低网络压力,降低丢包率(传输出差率),平滑码流,但是会降低编码器的效率(即是编码复杂度提升),H264/265均支持该技术。海思芯片开启该功能后对比:《1》、码流类型;《2》、100帧1080P的264码流,CBR码率控制,大小差异;2、 长参考帧编码技术(Long-Term Reference LTR)  该技术可用于提高编码效率

2020-10-24 11:16:43 1461

原创 libcurl post带参数请求

1、参数特殊字符转换  curl_easy_escape函数及curl_escape函数都可以将参数中的所有不符合URL规定的字符转化为其对应的%XX 形式。  curl_escape函数是旧的API,其内部调用的是curl_easy_escape函数只不过handle设置为NULL了。两个函数调用返回的字符串都要调用curl_free或free函数释放。2、设置post参数  使用CURLOPT_POSTFIELDS添加post参数 CURL *curl; CURLcode res;

2020-07-22 16:38:49 3147

转载 SRS4.0使用GB28181资料收集

1、编译与测试2、配置与web demo使用3、ps流压测试4、信令交互

2020-07-07 15:29:36 1895

原创 ONVIF获取265的rtsp地址,ptz控制记录

1、获取url、ptz或imaging的一般流程《1》、注意  GetCapabilities是向下兼容的接口只能获取到设备支持的最基本功能。GetServices接口能获取到设备支持的所有功能,H265格式的RTSP地址的获取必须通过该接口获得。原文:《2》、onvif test工具的对比2、获取profiles  以获取H265的为例,需要onvif开发框架支持265,该环境搭建看参考6.1void GetProfileUsedMedia2(){ char media_a

2020-06-30 17:05:39 2238

原创 linux exec函数执行之前设置当前进程所有描述符FD_CLOEXEC

1、查看进程打开的描述符ll /proc/$PID/fd2、C语言获取当前进程打开的fd并设置FD_CLOEXEC#include <stdio.h>#include <errno.h>#include <unistd.h>#include <string.h>#include <dirent.h>#include<stdint.h>/* 将当前进程打开的所有描述符标志设置为CLOEXEC */static

2020-06-23 19:18:50 495

原创 linux mount函数nfs挂载

1、使用linux的mout函数挂载#include <stdio.h>#include <sys/mount.h>#include <errno.h>#include <unistd.h>#include <sys/stat.h>#include <sys/types.h>#include <string.h>#include <sys/stat.h>#include <string.h

2020-06-10 18:53:24 1141 4

原创 H264或HEVC及AAC音频的PS流打包

1、使用libmpeg使用libmpeg库完成PS流格式封装,对于GB28181

2020-04-30 14:39:48 2910

原创 libcurl Multi异步接口使用

1、multi异步接口实现文件上传demo《1》、设置easy接口#include <curl/curl.h>#include <curl/multi.h>/* mutil 句柄的最大连接数 */#define MAX_CONNECT_HANDLE_NUMS (15)/* 客制化的私有数据结构体 */typedef struct CustomPrivD...

2020-03-21 09:31:43 3334

原创 libcurl post二进制文件及GET下载文件

使用的版本curlcurl-7.69.1使用的easy接口1、二进制方式POST图片CURL *curl;CURLcode res;curl = curl_easy_init();if(curl) { curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_easy_setopt(curl, CURLOPT_URL...

2020-03-18 13:38:30 836

原创 jsoncpp构建及解析复杂数组

1、示例的json格式2、测试代码使用的版本jsonjson_0.10.7void test_video_list(){ Json::Value root; Json::Value calss_info; Json::FastWriter writer; Json::Value PointInfo; char* device = "dev...

2020-03-11 17:03:27 5773 1

原创 cmake编译本目录所有文件

目录结构如下:示例如下:cmake_minimum_required(VERSION 2.8)project(FILTER_SERVER)#设置编译器set(CMAKE_C_COMPILER g++)#添加编译选项add_definitions(-g -fpermissive -std=c++0x)#添加宏定义add_definitions(-DWITH_OPENSSL -D...

2020-03-06 15:18:49 6326

转载 转--ffmpeg改变音视频播放速率

How to speed up/slow down a video

2020-02-26 09:18:58 1207

转载 ffmpeg av_seek_frame操作难点

转载1、难点 seek 操作2、ffmpeg AVIOContext 自定义 IO 及 seek摘录:1、2、

2020-01-18 13:36:03 1547 1

原创 基于librtmp客户端记录(H264+AAC)

  基于librtmp开发rtmp客户端的demo,主要是按照雷神的demo(见5.1)来修改,修改后的demo能将获取到的音视频数据写成h264文件及aac文件。1、flv格式  介绍flv格式的博客有很多,个人觉得5.2及5.3结合起来看比较好,其中5.2的script tag应该得值是12才是对的。摘录些重要的。  flv的tag类型有三种,video(9), audio(8), s...

2020-01-14 08:48:14 502

原创 C++ shared_ptr自定义删除器类

1、智能指针删除器类因为用自己实现的内存池在释放内存时需要buffer的大小才可以,用函数和labda表达式不知道如何实现,所以用删除器类实现自定义的智能指针删除器。/* 智能指针删除器类 */class CustomerDeleter{public: CustomerDeleter(shared_ptr<RingMempool> MemPool, siz...

2019-12-28 10:06:45 1786

原创 AAC与PCM转化--libfaac及libfdk-aac使用

1、AAC的两种编码格式《1》、ADTS格式ADTS头包含了AAC文件的采样率、通道数、帧数据长度等信息,分为固定头信息和可变头信息两部分。ADTS头一般是7个字节(28bit+28bit)/8,若ADTS头的 protection_absent字段值为0时则为9个字节。固定头部信息结构体说明如下:profile的值等于 Audio Object Type的值减1,即是profile...

2019-12-13 21:40:36 3733

原创 ICE协议摘录---draft-ietf-mmusic-ice-19

1、简介  ICE协议是一种NAT穿透技术,用于通过offer/answer模型建立的基于UDP的流媒体传输场景(可以扩展来处理其它协议如TCP)。ICE协议是offer/answer模型的一种扩展,使用在SDP offers和SDP answers中提供的多个ip地址及端口工作,这些IP及端口会被用于连通性检查(connectivity check)。 连通性检查通过修正过的STUN协议[Se...

2019-10-20 10:54:12 637

原创 turn协议部分摘录----draft-ietf-behave-turn-14

1、简介  本文定义了一个名为TURN的协议,它允许两个处于NAT环境的主机利用中继进行通讯。client能够在TURN Server上分配资源,与peer(对端)进行通讯,也能够决定何时应该停止通讯。client需要关联一个TURN Server的地址作为中继,称为relayed server address。当client发送报文给TURN Server,TURN Server使用relay...

2019-10-20 10:01:37 374

原创 centos上TURN服务器搭建及测试

腾讯云公网ip:106.54.xxx.xxx腾讯云内网ip:172.17.0.14自己电脑IP:192.168.179.1331、配置文件cp /usr/local/etc/turnserver.conf.default /etc/turnserver/turnserver.confcp /home/wangc/turnserver-4.4.5.2/examples/etc/turn...

2019-10-17 20:01:33 3599

原创 libresamplerate及speexdsp两个音频重采样库使用

  记录libsamplerate及speex库进行音频重采样的使用。主要是将 48K HZ 16bit采样率,双通道PCM音频转为8K HZ,16bit采样率单通道PCM音频。一、libsamplerate1、SRC_DATA数据结构该数据结构用于将音频数据及控制参数传递给精简版及标准的API函数。  data_in: 指向传递给转换器的音频数据buffer,交错模式存放  data...

2019-09-27 15:27:38 3897 5

转载 整理 -- ffmpeg及nginx-rtmp在rtmp中扩展hevc

1、ffmpeg4.1扩展参考:打补丁及使用说明:https://github.com/ksvc/FFmpeg/wiki/instructions推流说明: https://github.com/ksvc/FFmpeg/wiki/hevcpushhttps://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/79063377修...

2019-09-07 11:06:19 1383 8

原创 ffmpeg 推rtsp/rtmp流

参考雷神的《最简单的基于FFmpeg的推流器(以推送RTMP为例)》以及另一位《使用ffmpeg将实时流保存为AVI》实现,然后对比两种实现方式。1、ffmpeg读rtsp/rtmp/内存数据再推流  这部分主要是参考雷神的,在此基础上实现了读取rtsp/rtmp流后再推rtsp/rtmp流,也实现了读取内存数据再推流。其中rtsp可推h264/h265流。flv只能推送h264,暂时265...

2019-08-22 09:55:37 5943 3

转载 ffmpeg接收媒体流时的设置--转

AVDictionary* options = NULL;av_dict_set(&options, "buffer_size", "1024000", 0); //增大“buffer_size”参数来提高画质,减少花屏现象av_dict_set(&options, "max_delay", "500000", 0); //TCP最大延时av_dict_set(&amp...

2019-08-22 09:40:31 1351

转载 TextStatuio+CTEX编写伪代码

1、安装CTEX及TextStatuio先安装CTEX再安装TextStatuio,两个安装好之后配置TextStuiode中文界面设置 option->Normal->language zh_CN配置用XeLatex编译,这样生成的pdf文件中文不会乱码2、demo3、参考最简单傻瓜式的 Latex+Texstudio 安装教学LaTeX写伪代码demoTexs...

2019-08-22 09:38:12 642

FFmpegRTSPServer.tar.gz

centos6.9上实现的借助ffmpeg读取本地avi或mp4文件来推送rtsp流,使用live555,支持aac,g711,h264。

2019-12-20

Haar+Adaboost人脸检测 C实现

Haar特征+Adaboost的C实现,MIT人脸库,部分简单功能借助opencv实现。内附两篇参考论文及博客参考

2018-12-22

从其他地方找到的用ARM驱动的OV5620

有需要的可以看看

2014-12-20

空空如也

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

TA关注的人

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