<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ltspyder的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ltspyder</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ltspyder]]></copyright><item><title><![CDATA[基本排序算法]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/126542768</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/126542768</guid><author>ltspyder</author><pubDate>Tue, 06 Sep 2022 09:43:55 +0800</pubDate><description><![CDATA[和数据量有关的操作比如+、-、*、/为参数操作。拿简单的选着排序为例子

第一轮在整个序列里找到最小的值和第一个位置的数进行交换，然后在1到N-1的的区间找最小值和1位置的数进行交换。把每个步骤的常数操作都记录下来。
可以得到表达式

只取最高阶项所有为O(N^2).
如果最高阶项相同则看实际跑的情况那个算法比较好。
选着排序代码如下：
额外空间复杂度
因为只是用了有限几个变量，i，satrt，min所有额外空间复杂度为（0）上面的是数字序列，下面的是位置。0和1位置的的数字进行比较小的放左边，大的放右边。]]></description><category></category></item><item><title><![CDATA[hi3516ev200进行rtmp推流报错“[SAMPLE_COMM_VENC_GetVencStreamProc]-2024: get venc stream time out, exit thr“]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/124314956</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/124314956</guid><author>ltspyder</author><pubDate>Thu, 21 Apr 2022 10:51:07 +0800</pubDate><description><![CDATA[hi3516ev200进行rtmp推流报错"[SAMPLE_COMM_VENC_GetVencStreamProc]-2024: get venc stream time out, exit thr"现象描述解决办法
现象描述
如下图所示我在运行rtmp推流程序之后显示提示获取视频流失败，导致线程退出，而上面的提示又是"[Func]:imx307_2l_write_register [Line]:140 [Info]:I2C_WRITE error!"，是与imx307相关的写寄存器错误，可能是sensor]]></description><category></category></item><item><title><![CDATA[使用x264编码器编码从设备获取的yuv数据]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123761583</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123761583</guid><author>ltspyder</author><pubDate>Sat, 26 Mar 2022 20:09:34 +0800</pubDate><description><![CDATA[使用x264编码器编码从设备获取的yuv数据实现步骤代码演示
需要注意的是从Ubuntu采集到的yuv数据是yuyv422格式的yuv数据，这个格式的原始数据是不能输入编码器进行编码的，所以我们要对yuv的格式进行一下转换参考
在Linux环境下使用ffmpeg将YUYV格式的yuv数据转换成yuv420p格式的yuv数据
实现步骤
前面已经通过设备获取到yuv格式的数据，并且进行了格式转换，现在只需要创建x264编码器并对编码器进行一些设置然后向编码器喂数据，和读数据即可，具体步骤如下：
1、查找编码器
]]></description><category></category></item><item><title><![CDATA[在Linux环境下使用ffmpeg将YUYV格式的yuv数据转换成yuv420p格式的yuv数据]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123720355</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123720355</guid><author>ltspyder</author><pubDate>Fri, 25 Mar 2022 10:45:44 +0800</pubDate><description><![CDATA[yuyv转换为yuv420p格式参考文章代码演示
参考文章
参考大佬的文章
参考雷神的文章，向雷神致敬
参考了这两篇文章还有网上的文章大部分都是从解码器输出的frame中的视频数据进行格式转换。由于自己刚刚入门，有一个需求是对packet.data摄像头读取的原始yuv数据进行格式转换，我的环境是Ubuntu18.04，在使用AVDictionary *option 设置图像的参数的时候使用，都能设置图像的分辨率和帧率
	av_dict_set(&amp;option,"video_size","640x4]]></description><category></category></item><item><title><![CDATA[在Ubuntu虚拟机使用ffmpeg采集摄像头的yuv视频数据]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123609415</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123609415</guid><author>ltspyder</author><pubDate>Sun, 20 Mar 2022 12:14:26 +0800</pubDate><description><![CDATA[在Ubuntu虚拟机使用ffmpeg采集摄像头的yuv数据使用命令从视频提取出yuv数据提取yuv视频数据单独提取视频的y分量或u、v分量通过摄像头获取yuv数据
使用命令从视频提取出yuv数据
提取yuv视频数据
提取命令：
ffmpeg -i ./cl.mp4 -an -c:v rawvideo -pix_fmt yuv420p out.yuv

./cl.mp4为当前目录下的cl.mp4视频文件
-an其中a代表是audio，n代表是none，意思就是过滤掉音频
-c:v代表的是视频的编解码器
raw]]></description><category></category></item><item><title><![CDATA[在Linux环境下使用ffmpeg将PCM音频数据编码成aac数据]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123554919</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123554919</guid><author>ltspyder</author><pubDate>Thu, 17 Mar 2022 17:44:25 +0800</pubDate><description><![CDATA[在Linux环境下使用ffmpeg将PCM音频数据编码成aac数据程序框图代码演示
程序框图
将pcm数据经过aac编码器编码成aac数据，我是将从设备上采集的数据经过重采样送入aac编码器进行编码，由于我的测试设备是Ubuntu 18.04虚拟机，采样率为44100hz，采样大小为有符号16位数，满足编码器的输入数据参数要求，所以也可以直接将从设备获取的音频数据送入编码器进行编码，无需经过重采样，但是下面的示例代码我是将从设备读取的音频数据经过重采样再送入编码器进行编码，但是我设置重采样的输入输出音频三元]]></description><category></category></item><item><title><![CDATA[在Linux环境下使用ffmpeg进行音频重采样]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123496406</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123496406</guid><author>ltspyder</author><pubDate>Tue, 15 Mar 2022 16:23:58 +0800</pubDate><description><![CDATA[在Linux环境下使用ffmpeg进行音频重采样关于音频重采样什么是音频重采样？什么是音频三元组？采样率采样大小通道数（声道数）音频流码率计算为什么要进行音频重采样如何使用ffmpeg实现音频重采样创建重采样上下文初始化重采样对每一个音频帧进行重采样代码演示：注意事项
感谢这位博主提供的参考文章
关于音频重采样
什么是音频重采样？
所谓音频重采样就是将音频的三元组（采样率，采样大小，通道数）的值转换成另外一组音频三元组的值。三元组中任何一组值发生改变
都称之为重采样，当然也可以三组数据都改变。
什么是音频三]]></description><category></category></item><item><title><![CDATA[基于线程池和使用openssl加密的TCP文件传输]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123443681</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123443681</guid><author>ltspyder</author><pubDate>Sun, 13 Mar 2022 18:11:16 +0800</pubDate><description><![CDATA[基于线程池和使用openssl加密的TCP文件传输主函数部分代码演示部分代码讲解线程池部分代码演示部分代码讲解对接客户端代码（消费者处理接客户端请求）代码演示部分代码调试问题客户端部分代码演示部分代码调试问题程序编译和证书，密钥的生成代码运行演示
主函数部分
在主函数完成线程池的初始化，socket初始化，以及SSL加密算法库的初始化和加密算法的加载。在完成这些任务的初始化后，在while（）循环里等待客户端的接入，一旦有客户端接入就将对接客户端所需要的参数和处理函数加入消费者任务链表，让消费者线程去处理客]]></description><category></category></item><item><title><![CDATA[在Linux环境下使用ffmpeg生成AAC数据报错Unknown encoder ‘libfdk_aac‘]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123281959</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123281959</guid><author>ltspyder</author><pubDate>Thu, 10 Mar 2022 17:00:45 +0800</pubDate><description><![CDATA[我们使用
ffmpeg -i ./cl.mp4 -vn -c:a libfdk_aac -ar 44100 -channels 2 -profile:a aac_he_v2 cl.aac

命令采集视频的音频acc数据报错
Unknown encoder 'libfdk_aac'

我的解决方法是重新编译安装，在执行config的时候加上–enable-libfdk-aac选项。

之前安装ffmpeg的时候没有加此选项导致没有编译出fdk。
解决方法：
由于此前我是使用源码的安装方式所以我就不用下载了，直]]></description><category></category></item><item><title><![CDATA[多路IO复用与异步IO]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123398931</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123398931</guid><author>ltspyder</author><pubDate>Thu, 10 Mar 2022 16:53:42 +0800</pubDate><description><![CDATA[多路IO复用与异步IO同步阻塞IO（BIO）与同步非阻塞IO（NIO）同步阻塞IO同步非阻塞IO多路IO复用select（）函数使用示例代码演示poll（）函数使用示例代码演示异步IO代码演示
什么时多路IO复用？ 多路IO复用是一种同步IO模型，，它可以实现一个线程可以同时监视多个文件描述符，一旦有某个文件描述符准备就绪，就会通知应用程序，对该文件描述符进行操作。在监视的各个文件描述符没有准备就绪的时候，应用程序线程就会阻塞，交出cpu，让cpu去执行其他的任务，以此提高cpu的利用率。
同步阻塞IO（B]]></description><category></category></item><item><title><![CDATA[使用指针与共同体测试机器的大小端]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123107656</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123107656</guid><author>ltspyder</author><pubDate>Thu, 24 Feb 2022 12:08:07 +0800</pubDate><description><![CDATA[使用指针与共同体测试机器的大小端共同体与大小端的概念C语言测试机器的大小端内存分布与测试原理
共同体与大小端的概念
共同体：
(1)共用体union和结构体struct在类型定义、变量定义、使用方法上很相似。
(2)共用体和结构体的不同：结构体类似于一个包裹，结构体中的成员彼此是独立存在的，分布在内存的不同单元中，他们只是被打包成一个整体叫做结构体而已；共用体中的各个成员其实是一体的，彼此不独立，他们使用同一个内存单元。可以理解为：有时候是这个元素，有时候是那个元素。更准确的说法是同一个内存空间有多种解释方]]></description><category></category></item><item><title><![CDATA[offsetof宏与container_of宏解析]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123092211</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123092211</guid><author>ltspyder</author><pubDate>Wed, 23 Feb 2022 20:28:51 +0800</pubDate><description><![CDATA[offsetof宏offsetof宏的作用container_of宏的作用offsetof宏的原理offsetof宏的原理宏的分析
offsetof宏的作用
用宏来计算结构体中某个元素和结构体首地址的偏移量（其实质是通过编译器来帮我们计算）。
container_of宏的作用
知道一个结构体中某个元素的指针，反推这个结构体变量的指针。有了container_of宏，我们可以从一个元素的指针得到整个结构体变量的指针，继而得到结构体中其他元素的指针。
offsetof宏的原理
我们虚拟一个type类型结构体变量]]></description><category></category></item><item><title><![CDATA[C语言结构体内存对齐]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123082969</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123082969</guid><author>ltspyder</author><pubDate>Wed, 23 Feb 2022 13:47:01 +0800</pubDate><description><![CDATA[结构体内存对齐的意义代码演示及运行结果分析代码演示运行结果展示运行结果分析。gcc对结构体对齐的支持
结构体内存对齐的意义
(1)结构体中元素对齐访问主要原因是为了配合硬件，也就是说硬件本身有物理上的限制，如果对齐排布和访问会提高效率，否则会大大降低效率。
(2)内存本身是一个物理器件（DDR内存芯片，SoC上的DDR控制器），本身有一定的局限性：如果内存每次访问时按照4字节对齐访问，那么效率是最高的；如果你不对齐访问效率要低很多。
(3)还有很多别的因素和原因，导致我们需要对齐访问。譬如Cache的一些.]]></description><category></category></item><item><title><![CDATA[C程序的储存空间分布]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/123073561</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/123073561</guid><author>ltspyder</author><pubDate>Tue, 22 Feb 2022 18:38:07 +0800</pubDate><description><![CDATA[C程序的储存空间分布正文段（代码段）一级目录一级目录一级目录一级目录

正文段（代码段）
一级目录
一级目录
一级目录
一级目录

]]></description><category></category></item><item><title><![CDATA[基于C语言的字符串提取]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/116431408</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/116431408</guid><author>ltspyder</author><pubDate>Wed, 05 May 2021 22:38:56 +0800</pubDate><description><![CDATA[基于C语言的字符串提取
提示：
一个中文汉字占三个字节空间，也就是char[3]=“粤”；才能装下，但是一般境况下用char a[]=“粤”，或者char* a=“粤”；这样就能装更多的字符串内容，使用更加方便。
#include &lt;stdio.h&gt;
void main()
{
      char buf[128]={"&lt;item desc=""车牌号""&gt;&lt;![CDATA[粤C6YJ19]]&gt;&lt;/item&gt;"};
      char a[3]={"粤"}]]></description><category></category></item><item><title><![CDATA[Linux——TCP/UDP网络编程]]></title><link>https://blog.youkuaiyun.com/ltspyder/article/details/115337202</link><guid>https://blog.youkuaiyun.com/ltspyder/article/details/115337202</guid><author>ltspyder</author><pubDate>Tue, 30 Mar 2021 22:53:54 +0800</pubDate><description><![CDATA[Linux网络编程TCP/UDP对比与字节序概念TCP Server实现步骤三级目录四级目录五级目录
TCP/UDP对比与字节序概念
TCP/UDP对比
1.TCP面向连接（如打电话要先拨号建立连接)；UDP是无连接的即发送
数据之前 不需要建立连接
2.TCP提供可靠的服务。也就是说，通过TCP连接传送的数据，无差
错，不丢失，不重复，且按序到达；UDP尽最大努力交付，即不保
证可靠交付，
3.TCP面向字节流，实际上是TCP把数据看成一连串无结构的字节流
UDP是面向报文的UDP没有拥塞控制，因此网络出]]></description><category></category></item></channel></rss>