<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[洛的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/FPGATOM</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; FPGATOM]]></copyright><item><title><![CDATA[egrep+sed替换文件夹内所有文件的指定字符串]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/129387433</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/129387433</guid><author>FPGATOM</author><pubDate>Tue, 07 Mar 2023 17:45:58 +0800</pubDate><description><![CDATA[bash 使用]]></description><category></category></item><item><title><![CDATA[IntelliJ IDEA升级后http请求异常解决]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/125048040</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/125048040</guid><author>FPGATOM</author><pubDate>Mon, 30 May 2022 15:53:35 +0800</pubDate><description><![CDATA[具体报错：
springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.io.IOError: java.io.FileNotFoundException: Invalid file path

解决
在pom.xml添加org.jboss.xnio依赖
&lt;dependency&gt;
      &lt;groupId&gt;org.jboss.xnio&lt;/]]></description><category></category></item><item><title><![CDATA[新版本glib使用epoll代替poll]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/121864998</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/121864998</guid><author>FPGATOM</author><pubDate>Fri, 10 Dec 2021 21:23:23 +0800</pubDate><description><![CDATA[新版本的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]]></description><category></category></item><item><title><![CDATA[lsquic使用《二》--echo服务]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/121843878</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/121843878</guid><author>FPGATOM</author><pubDate>Thu, 09 Dec 2021 20:54:27 +0800</pubDate><description><![CDATA[   官方实现的echo的客户端及服务端demo功能是客户端发送字符服务端原样返回，但是实现比较复杂，对于熟悉流程来说不友好，因此参考这个lsquic-tutorial实现了一个简单版本的，主要用于理解流程。
   lsquic的结构体变量定义后一定得memset将变量所有成员初始值设置为0（或者说NULL），不然会有意想不到的bug出现。
1、client端
1.1、数据输入并发送
   客户端使用libev作为事件循环的驱动，不断侦听stdin输入，遇到换行符即启动调用lsquic_stream_wan]]></description><category></category></item><item><title><![CDATA[lsquic使用《一》--概述]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/121499748</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/121499748</guid><author>FPGATOM</author><pubDate>Tue, 23 Nov 2021 20:30:09 +0800</pubDate><description><![CDATA[因为想使用下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]]></description><category></category></item><item><title><![CDATA[ffmpeg 多文件指定时间进行混音命令]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/120543189</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/120543189</guid><author>FPGATOM</author><pubDate>Wed, 29 Sep 2021 10:23:58 +0800</pubDate><description><![CDATA[有多个音频文件需要混音，但是每个音频文件需要在指定的时间加入混音流程，如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加入混音流程。若是最新版本]]></description><category></category></item><item><title><![CDATA[Kaldi IO机制的一些概念及代码流程解析]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/120192866</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/120192866</guid><author>FPGATOM</author><pubDate>Thu, 09 Sep 2021 07:39:46 +0800</pubDate><description><![CDATA[1、ark，scp概念
1.1 基本概念

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


 //读取wav.1.scp文件，输出写入到out.ark文件]]></description><category></category></item><item><title><![CDATA[webrtc服务器压测工具使用]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/119479214</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/119479214</guid><author>FPGATOM</author><pubDate>Sat, 07 Aug 2021 10:15:42 +0800</pubDate><description><![CDATA[  主要介绍3个开源的webrtc压力测试框架–kite，pion及srs_bench，以janu服务器为例。
1、KITE
   KITE整合了Selenium和Aullure。Selenium 是一个开源的浏览器自动化框架，支持集群化（grids），不同的节点可以运行不同的操作系统类型/版本、浏览器类型/版本，这样我们就可以在各种操作系统和浏览器的组合下自动化测试 Web 应用了。Allure 则是一个开源的测试报告工具，用来展示测试结果。有开源版本也有商用版本。
重要特征：


支持linux、win]]></description><category></category></item><item><title><![CDATA[webrtc ice(rfc5245)记录]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/118943882</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/118943882</guid><author>FPGATOM</author><pubDate>Tue, 20 Jul 2021 20:42:22 +0800</pubDate><description><![CDATA[根据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]]></description><category></category></item><item><title><![CDATA[ffmpeg 音频混流--命令与代码说明]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/117373994</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/117373994</guid><author>FPGATOM</author><pubDate>Fri, 28 May 2021 21:11:55 +0800</pubDate><description><![CDATA[  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]]></description><category></category></item><item><title><![CDATA[Janus服务器《四》--事件处理机制]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/116562741</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/116562741</guid><author>FPGATOM</author><pubDate>Sun, 09 May 2021 19:11:01 +0800</pubDate><description><![CDATA[1、总述
虽然我们可以使用Admin API来控制及和janus服务器进行交互，但是Admin API是基于poll机制的，这就意味我们必须自动发起请求去获得我们需要的信息。如果janus处理的请求的数量巨大则我们会遇到性能问题，这将导致我们不能实时的获取我们需要的信息。若要实时获得关于会话、句柄（hsandle）相关的信息的话我们就得使用event机制。

...]]></description><category></category></item><item><title><![CDATA[Janus服务器《三》--Admin/Monitor API]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/116542796</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/116542796</guid><author>FPGATOM</author><pubDate>Sat, 08 May 2021 21:08:44 +0800</pubDate><description><![CDATA[1、Admin/Monitor API
  用于向janus服务器查询一些和会话及句柄有关的信息，在查找媒体流层面问题时显得非常有用。目前Admin API只能用于信息查询不能与janus进行更多的交互（如强制删除会话），更多的交互还是得使用RESTful、Websockets等transport模块的API。该API只提供同步机制，如果你需要的是异步通知机制的话请使用janus的event handler。默认的根请求路径为/admin 。 

  该API接口默认是关闭的，你可以在相应的传输方式的配置文]]></description><category></category></item><item><title><![CDATA[Janus服务器《二》--Transport 模块的API]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/116430491</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/116430491</guid><author>FPGATOM</author><pubDate>Wed, 05 May 2021 21:37:33 +0800</pubDate><description><![CDATA[  官方关于JanusRESTful、WebSockets等传输模块的API说明的文档的翻译。
  从Janus的V0.0.6开始就实现了REST、WebSockets、RabbitMQ、MQTT、Nanomsg及UnixSockets接口用于和janus服务器进行交互。（这些通信方式均是可选的，都需要第三方库的支持）。所有这些接口统一使用的json消息进行通信。
  其它接口和Rest接口有两处不同：
《1》、访问特定session及handle时；
《2》、部分的通知处理机制；

1、REST接口
1.]]></description><category></category></item><item><title><![CDATA[janus服务器《一》--总概述]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/116423027</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/116423027</guid><author>FPGATOM</author><pubDate>Wed, 05 May 2021 11:58:57 +0800</pubDate><description><![CDATA[  工作使用janus服务器但是网上相关资料比较少，于是准备翻译一下官方文档。
1、janus框架结构
  janus是基于SFU结构的WebRTC流媒体服务器，由C语言进行编写因此性能非常优秀，整体架构图如下：

  janu主要由三部分组成，分别是Core、Plugin和Transport。
  《1》、Core: Janus的核心部分，其功能是将传输涉及到的所有Janus连接在一起，实现了server端跟浏览器的交互、处理交互双方的会话（session）、处理媒体信令及协商。Core实现了WebRTC]]></description><category></category></item><item><title><![CDATA[live555 性能优化整理]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/112281687</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/112281687</guid><author>FPGATOM</author><pubDate>Wed, 06 Jan 2021 16:52:10 +0800</pubDate><description><![CDATA[1、发送优化

2、调度优化
MultiFramedRTPSink.cpp的sendPacketIfNecessary函数

3、内存分配优化
《1》、定时器内存使用无锁内存池

《2》、 server端SDP信息自己手动设置

如果不自己手动设置，当客户端首次连接时server端会先创建对应媒体流如264流的source实例用于SDP协商，然后销毁，接着再创建用于实际视频流传输的source。自己手动设置后能省下一次source实例创建销毁、sdp设置的流程。
5、参考
《1》、基于live555 RTS]]></description><category></category></item><item><title><![CDATA[海思webrtc交叉编译]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/109639506</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/109639506</guid><author>FPGATOM</author><pubDate>Thu, 12 Nov 2020 14:14:00 +0800</pubDate><description><![CDATA[一、准备
1、在ubuntu14.04 64bit
  因为arm-hisiv400-linux是32位的，故需要在该系统安装兼容32位程序运行的库,参考博客

2、webrtc源码
   (2019年9月之前的版本，这之后的版本默认是C++14的(由git log可获取该信息），用海思编译器编译会有问题，release版本的分支号branch-heads/m77，这个版本之前的应该都可以。本文使用m77分支)
分支切换命令WebRTC development
git checkout -b hisi_br]]></description><category></category></item><item><title><![CDATA[优化视频流传输涉及的编码技术]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/109256006</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/109256006</guid><author>FPGATOM</author><pubDate>Sat, 24 Oct 2020 11:16:43 +0800</pubDate><description><![CDATA[  整理目前接触到的一些提高视频流（某些）指标的H264/265的编码技术
1、intra-refresh技术（帧内刷新技术）
  帧内刷新技术能降低网络延时、降低网络压力，降低丢包率（传输出差率），平滑码流，但是会降低编码器的效率（即是编码复杂度提升），H264/265均支持该技术。

海思芯片开启该功能后对比：
《1》、码流类型；

《2》、100帧1080P的264码流，CBR码率控制，大小差异；

2、 长参考帧编码技术（Long-Term Reference LTR）
  该技术可用于提高编码效率]]></description><category></category></item><item><title><![CDATA[libcurl post带参数请求]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/107516327</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/107516327</guid><author>FPGATOM</author><pubDate>Wed, 22 Jul 2020 16:38:49 +0800</pubDate><description><![CDATA[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;
]]></description><category></category></item><item><title><![CDATA[SRS4.0使用GB28181资料收集]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/107182274</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/107182274</guid><author>FPGATOM</author><pubDate>Tue, 07 Jul 2020 15:29:36 +0800</pubDate><description><![CDATA[1、编译与测试
2、配置与web demo使用
3、ps流压测试
4、信令交互

]]></description><category></category></item><item><title><![CDATA[ONVIF获取265的rtsp地址，ptz控制记录]]></title><link>https://blog.youkuaiyun.com/FPGATOM/article/details/107045491</link><guid>https://blog.youkuaiyun.com/FPGATOM/article/details/107045491</guid><author>FPGATOM</author><pubDate>Tue, 30 Jun 2020 17:05:39 +0800</pubDate><description><![CDATA[1、获取url、ptz或imaging的一般流程

《1》、注意
  GetCapabilities是向下兼容的接口只能获取到设备支持的最基本功能。GetServices接口能获取到设备支持的所有功能，H265格式的RTSP地址的获取必须通过该接口获得。
原文：

《2》、onvif test工具的对比


2、获取profiles
  以获取H265的为例，需要onvif开发框架支持265,该环境搭建看参考6.1
void GetProfileUsedMedia2()
{
    char media_a]]></description><category></category></item></channel></rss>