自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(221)
  • 资源 (6)
  • 收藏
  • 关注

原创 ubuntu-22.04 tenda U9安装wifi驱动

另外一个https://github.com/morrownr/USB-WiFi,还有更详细的整理,有兴趣可以看看进去,下面列出来几条预览。没精力花时间去改代码了,所以继续在github上找rtl8821CU,发现下面这个8821cu-20210916已经测试过了。了,比后面买的Tenda mini wifi好用还稳定,虽然mini wifi已经支持了linux驱动下载安装。相差不大,应该没问题,所以下下来试试,下面整理下简单过程方便参考,实际上看README.md足够详细了。,github上的代码(

2024-04-13 22:19:05 416

原创 实例分析AnnexB格式h264流startcode

我们知道,h264 流格式有两种:avcC与AnnexB。就是在 NALU 前面写上几个字节,这几个字节组成一个整数(大端字节序)这个整数表示了整个 NALU 的长度。在读取的时候,先把这个整数读出来,拿到这个 NALU 的长度,然后按照长度读取整个 NALU,我们不妨把这几个字节叫做NALU Body Length。就是在一个 NALU 前面加上三个或者四个字节,这些字节的内容是0 0 0 1或者0 0 1。当我们读取一个 H264 流的时候,一旦遇到0 0 0 1或者0 0 1。

2024-02-20 22:16:08 864 2

原创 找不到libpng16的符号

指定-L/usr/lib/x86_64-linux-gnu/ -lpng16可以解决上面的问题。找到libpng16所在目录。

2024-01-23 10:17:32 392

原创 avcodec send_packet和receive_frame

下面是解码的过程代码,对输入给解码器的pkt桢类型进行判断,关键桢打印出,解码出来的桢根据pict_type打印桢类型出I/P/B桢类型,从这里也可以看出来,没解码之前,AVPacket只能得到是否关键帧,要知道桢类型,必须在解码后。完整代码可以从上获取。

2024-01-14 20:41:04 1025

原创 在FFmpeg源码下增加自定义程序

所以参考tools/enum_options程序,在FFmpeg源码目录新增一个目录,修改Makefile相关代码,就可以编译生成类似ffmpeg/ffplay的可执行文件,放在vscode里面非常方便的展台调试。但是问题是在FFmpeg下编译的ffmpeg/ffplay都可以直接跟踪调试,自己编译的因为连接的系统的动态库,所以不能跟踪到代码里面。查找decode3的符号可以发现,这个是包含了所有FFmpeg的代码,不需要加载FFmpeg的动态库,所以FFmpeg中的源码更新后直接。

2024-01-14 15:13:13 508

原创 结构体的几个知识点

它使用了 C 语言中的指针算术和结构体偏移量来计算包含给定成员变量的结构体的指针。这是因为结构体中的每个成员都是独立的,它们的值可以分别指定。宏来计算成员变量在结构体中的偏移量,然后从成员变量的指针中减去该偏移量,得到包含该成员变量的结构体的指针。的一个方法是将其视为一个宏,它接受三个参数:指向成员变量的指针、结构体类型和成员变量的名称。

2023-12-13 22:16:46 397

原创 FFmpeg v4l2m2m的capture和output

发现FFmpeg v4l2m2m中encoder和decoder中的output和capture的细节,理解起来有点奇怪,记录如下。对应的是输入原始视频数据。编码器的主要作用是将原始视频数据压缩成指定codec格式的数据流,以便于传输和存储。对应的是输入的原始视频数据。解码器的主要作用是将编码后的视频数据解压缩成原始视频数据,以便于播放和处理。对应输出编码后的视频数据

2023-10-26 14:29:47 962

原创 ubuntu上ffmpeg使用framebuffer显示video

📣 这两个命令组合起来,可以看到第一个命令input.mp4解码写入到/dev/fb0后,通过第二个命令录制的output.mp4文件就是第一个的input.mp4的内容。下面这个命令使用了 FFmpeg 工具来录制 Linux 系统中的帧缓冲设备 (/dev/fb0) 的视频,并将其编码为 H.264 格式的 MP4 文件。上,从而在屏幕上显示视频。这个命令通常在嵌入式系统或类似的环境中使用,用于将视频输出到屏幕上。切换到虚拟tty,直接用第一条命令,就可以看到视频和输出log混合在一起在屏幕上显示了。

2023-09-07 09:18:43 1540

原创 FFplay播放avsync学习

ffmpeg以音频为主的同步,就是先获取当前音频帧render的时长,然后根据当前视频帧的pts计算视频帧和音频帧渲染的diff值,然后根据diff值,计算视频帧需要显示的时间长度。或者:视频晚了,晚的范围大于一个阈值:delay = 0然后根据delay计算是否送显示,并更新,最后显示是根据frame_timer。至于丢帧要看下后面的处理,当前的时间大于播放时间加上durationif(!goto retry;还有一个丢帧逻辑在中,在前面有提到。

2023-09-01 09:43:33 874

原创 FFmpeg rtp & rtp_mpegts的区别

其中,V表示协议版本号,P表示是否有填充,X表示是否有扩展头部,CC表示CSRC计数器,M表示是否是最后一个数据包,PT表示负载类型,sequence number表示序列号,timestamp表示时间戳,SSRC表示同步源标识符,CSRC表示贡献源标识符。所以,rtp muxer直接对音视频数据封包成rtp payload进行发送,而rtp_mpegts则对音视频数据先进行mpegts封装,然后再封装为rtp payload发送。具体来说,它会构建RTP头部,将数据写入输出流,并更新一些统计信息。

2023-08-29 15:01:46 1485 2

原创 ffmpeg rtp发送video和audio并播放

set audio-video sync. type (type=audio/video/ext),AV同步支持三个参数,前面的这个分离流发送,用ext做同步效果好一些,播放经过一段时间后,av同步比较好,能明显的听出来用ext同步,audio会被拉伸。这个用了copy,应该是acc的frame可能不是adts,在指定codec为aac后重编码后的aac是adts格式,video也是一样的,这个需要看代码确定一下。这里源文件是ts,也输出了sdp信息,但是指定对应的sdp播放失败。

2023-08-25 21:55:44 1205

原创 gstreamer-pipeline用法汇总

h264parse的src pad的sink caps是video/x-h264,经过处理,输出的caps是经过parse的,stream-format可以是avc,avc3, byte-stream。sink pad的caps是video/x-h264,可接收的收据stream-format只能是byte-stream,alignment只能是au。所以h264parse和v4l2h264dec放在一起,实际上不指定caps filter是可以的,可以完成自动协商。然后用gst-launch播放。

2023-08-10 10:57:09 385

原创 FFmpeg-channel rematrix

它可以将一个多声道音频信号从一种布局转换为另一种布局,例如从 5.1 到 7.1 或从立体声到环绕声。因为ffmpeg不支持12 channel播放,所以这个播放的时候会报错,需要指定layout才行,比如12channel,实际只播放8channel,这个就先不尝试了。这个命令将一个1声道、16kHz采样率的wav文件转换为12声道音频文件,并且每个声道的内容都相同。最终,这个命令会将单声道音频文件转换为12声道音频文件,每个声道的内容都相同。如果需要使用右声道,可以将。混合具有特定增益水平的通道。

2023-08-02 20:48:49 789

原创 向上取整再分析

计算机中的整数运算是向下取整的,也就是如果能整除,没有余数,那结果正好;如果不能整除,有余数,就将余数舍弃,保留相除后的整数部分。但此时正好和我们想要的结果(向上取整)相差一,正确的结果需要加上这个一。

2023-07-31 15:01:23 100

原创 FFmpeg-swresample的更新

其中int_sample_fmt就表示internal format,顾名思义,就是用于swresample内部的sample format格式。如果是0,那么audio conversion是都可以关掉的,这段代码在configure_filtergraph()函数中,flag设置为。:指定了保存的文件格式是PCM,不是wav,所以保存出来的文件按wav来解析是不对的,即使文件名为out.wav也不行。FFmpeg命令中,默认不指定aresample的时候是swr采样,使用soxr,就需要手动指定。

2023-07-29 17:15:22 735

原创 FFmpeg-两个文件mix重采样以那个为主

FFmpeg两个文件mix重采样以那个为主?对比发现,这个和-i参数后面的次序有关,默认会选用第一个的samplerate作为输出的samplerate。

2023-07-29 16:48:48 751

原创 FFmpeg aresample_swr_opts的解析

graph load的时候解析graph文本的过程,option来自filter的option,`aresample_swr_opts`是AVFilterGraph的option,而AVFilterGraph不在filter的list中,所以graph文本中不支持`aresample_swr_opts`。

2023-07-28 12:01:23 830

原创 LC3解码开发记录

对于的10.884ms的帧,采样率为44.1kHz,相应的比特率范围是14,700bps到294,000bps,对于7.5ms帧,比特率范围是19,600 bps 到 392,000 bps。可以判断,不同channel的数据是交错在一起的(ich等于0和ich等于1的时候,pcm只是偏移pcm_sbytes为2个字节,刚好是一个采样的字节数)从fp的文件中读取nch的一帧数据,frame_bytes是一帧数据的大小。是,十进制是20,存储的是frame的size,14后面紧跟frame的数据。

2023-07-24 22:43:14 491 2

原创 codec2play流程总结

Codec2.0(C2)是android系统为vendor提供的用于实现video/audio/filter模块的的HAL层接口API,vendor可用这个API实现他们自己的HAL层,Codec2.0是用于替换现有的OMX-IL。

2023-07-23 22:15:28 530

原创 AVPixFmtDescriptor结构理解和应用

FFmpeg里面有两个英文术语,plane跟components,这两个术语是不一样的,components可以翻译为分量。`plane` 翻译成中文是**平面的**意思,数据存储分为`packed`和`planar`,像NV12是半平面,Y和UV数据分开存储,但是UV是放在一起交错在一起的,所以plane是只有两个,但是存在YUV三个分量,所以`components`是3。

2023-07-21 10:07:39 287

原创 mp3 lsf扩展

今天在处理一个mp3的文件播放问题的时候,用ffmpeg把mp3的采样率重采样为16000,发现frame samples变成了576,看了下平时没有注意这个细节,一直都是习惯了1152个采样率的MP3,原来576属于MP3的LSF扩展。

2023-07-04 11:20:31 586

原创 smarc的编译问题

【代码】smarc的编译问题

2023-06-05 20:21:43 127

原创 FFmpeg dumpgraph的用法

FFmpeg的`dumpgraph`选项用于输出过滤器图的文本表示。要使用`dumpgraph`,可以运行以下命令

2023-05-18 10:39:00 405

原创 FFmpeg swresample的经验整理

resample_init的时候,会根据不同参数创建filter bank,在resample_common_int16中,通过filterbank计算输出的采样值,这个会计算到每个字节的数据,所以整体是比较耗时的。具体的,resample函数会对信号的每一个采样点进行处理,并通过计算与该采样点相邻的数据点的加权平均值来生成新的采样点。这里说的auto resampler是指ffmpeg中,在没有指定resampler的情况下,根据输入输出,自动调用resample的情况。

2023-04-16 22:10:38 846 1

原创 将s16le的音频流转换为float类型

这是一个将s16le格式音频文件转换为float类型并写入新文件的示例代码。

2023-04-06 15:09:07 634

原创 FFmpeg和Audacity噪声处理

FFmpeg 现在有3个原生filter来处理噪声背景:afftdn:使用FFT对音频样本进行降噪anlmdn:使用非局部均值算法减少音频样本中的宽带噪声arnndn:使用递归神经网络减少语音中的噪音。

2023-02-22 13:37:47 3233

原创 socket编程复习

再次用到socket编程,将socket相关的知识点做了简单整理,根据网络上大家的整理,又做了一些调整和汇总。

2023-02-19 22:43:58 365

原创 ubuntu编译FFmpeg代码

配置PKG_CONFIG_PATH后重新configure,然后再执行sudo make install(默认路径。建一个out目录,编译生成的临时文件都会放在out目录下,不会存在于代码目录,看着干净很多。这个configure项解决依赖问题,有些库可以直接安装dev库,有些需要自己编译。apt search xxx可以查找一些库可用apt安装的版本,找到之后,然后通过。将core文件统一生成到当前目录下,产生的文件名为core.pid。编译出来找不到ffplay,如果没有。找不到pyton2.7。

2023-02-16 10:29:21 344

原创 ffmpeg filter的理解

从整体看,filte rgraph包含filter chain,而filter chain又包含了filter,所以可以分为是三个层次去理解。filter graph是链接多个filter的有向图。没有输入的filter叫source,没有输出的filter叫sink。:是由一个或多个filter chain组成,filter chain之间使用分号。:是由一个或多个filter线性连接而成,filter之间使用逗号。连接到一个filter并从那里获取输入,有一个。

2023-02-16 10:09:47 720

原创 menuconfig与Kconfig入门学习

menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。menuconfig的使用方式通常是在编译系统之前在系统源代码根目录下执行命令从而打开一个图形化配置界面,再通过对各项的值按需配置从而达到影响系统编译结果的目的。menuconfig配置后的结果将会保存在对应模块根目录下的 .config 文件中。在编译时会加载.config文件中的配置项来决定编译结果。Kconfig严格来讲是一种编程语言,它拥有自己的语法及结构。

2023-01-04 13:35:28 4231

原创 Nuttx学习入门

NuttShell 是 NuttX 中使用的一个非常完整的 shell 系统,类似于 bash 和其他类似的选项。-l表明我们在 Linux 上使用,选择完配置之后,就会在source root目录生成.config文件,删掉这个文件,重新执行命令,就可以再生成一次。Apache NuttX 在 GitHub上,有两个主要的库,nuttx和apps,后者在技术上是可选的(但建议使用完整的功能集)同时,选择配置后会生成Make.def的符号链接,指向选择的Make.def文件,

2022-12-28 20:49:55 2933

原创 gst-openmax和openmax component的理解

FTB就是app取数据,把output空buffer送给codec, FBD就是codec把编解码后的数据填好送给app,ETB就是app把input数据送给codec, EBD就是codec把inputbuffer取走了,把input端的空buffer还给app。存放空的omx_buffer, 在GstBuffer过来之后,从in_port队列里面pop一个空的omx_buffer出来,将GstBuffer转换成omx_buffer, 通过。所以empty是input端,fill是output端。

2022-12-25 20:34:44 508

原创 gstreamer-hlsdemux插件的初始流程

在gst_soup_http_src_read_buffer部分,如果读不到buffer就会返回GST_FLOW_EOS,gst_base_src_loop中会根据GST_FLOW_EOS创建EOS event,然后push到pad上,gst_uri_downloader_sink_event中再释放downloader->priv->cond条件变量,这个条件变量会结束downloader uri的线程的等待,在gst_uri_downloader_fetch_uri_with_range中可以看到。

2022-12-25 14:30:41 723

原创 hls m3u8文件学习分析

M3U(MP3 URL)是一个以.m3u扩展名存储的音频播放列表文件,区别在于.m3u8文件使用UTF-8字符编码。M3U8是Unicode版本的M3U,用UTF-8编码。M3U8文件其实是(缩写为 HLS)协议的部分内容,用文本方式对媒体文件进行描述,由一系列标签组成。HLS 是一个由苹果公司提出的基于 HTTP 的流媒体网络传输协议。M3U8主要是可以做多码率的适配,根据网络带宽,客户端会选择一个适合自己码率的文件进行播放,保证视频流的流畅。以字符’#'开头的行可能是注释或者标签,标签以#EXT。

2022-12-23 22:31:57 3779 1

原创 Android HIDL和hwservicemanager

这些自动生成的文件可用来构建客户端/服务器实现链接到的共享库。用于构建此共享库的 Android.bp 文件由 hardware/interfaces/update-makefiles.sh 脚本自动生成。每次将新软件包添加到 hardware/interfaces 或在现有软件包中添加/移除 .hal 文件时,都必须重新运行该脚本,以确保生成的共享库是最新的。进程会按名称和版本号跟踪设备上正在运行的已注册 HIDL 接口,务器可以按名称注册 HIDL 接口实现,而客户端则可以按名称和版本号请求服务实现。

2022-12-23 22:03:55 1980

原创 gcc实例-几个编译选项

从我们的平台的编译参数上,存在这么几个选项,其中mthumb对代码的size影响较大,下面做一一分析。该优化选项会牺牲部分编译速度,除了执行-O1所执行的所有优化之外,还会采用几乎所有的目标配置支持的优化算法,用以提高目标代码的运行速度。-O, -O1:这两个命令的效果是一样的,目的都是在不影响编译速度的前提下,尽量采用一些优化算法降低代码大小和可执行代码的运行速度。-O3该选项除了执行-O2所有的优化选项之外,一般都是采取很多向量化算法,提高代码的并行执行程度,利用现代CPU中的流水线,Cache等。

2022-12-17 20:34:15 936

原创 gitlab限制push size的解决办法

这样分开push会推送更小的包,可以根据需要指定相应的commit id作为不同的分段节点。在页面的下面有一个脚本,特别适合原始commit特别多的,自己一个一个写。执行push时,无论大小,git将始终创建一个pack。执行这个脚本,即可成功push整个master分支。比如要push master分支,那么先。把master换成我要push的。在单位的gitlab上新建仓库。命令显然不太好操作。

2022-12-15 22:31:41 1959

原创 Gstreamer中pad的链接

pad相当与element的接口,那么element间的连接,实质上就是pad间的连接,所以这里总结下pad的链接。

2022-11-30 12:02:47 1173

原创 在gstreamer中做线程同步

这里分别用到了C++ condition_variable和glib的GCond和GMutex做线程同步,C++代码用在外部代码,glib的用法用在pipeline的代码中。

2022-11-30 11:20:29 808

原创 gstreamer registry文件

在我们的pipeline中,使用到pulsesink了,pulsesink在创建pipeline的时候总是碰到找不到的情况,通过分析发现,因为我们的插件有一部分不是放在标准路径,程序启动的时候,通过GST_PLUGIN_PATH指定的路径,并没有在加载插件的时候更新cache,而cache文件是按标准路径默认生成的。除了这些情况,缓存中可能有一些与当前进程无关的插件条目,这些被标记为对当前进程不可用。由于各种原因,在初始化时,缓存被存储在默认的注册表中,与当前进程无关的插件被标记为。

2022-11-28 16:30:45 491

实例分析AnnexB格式h264流startcode

h264stream

2024-02-20

连接器和加载器beta2.pdf

这是一本介绍连接器和加载器的文章,比较底层,但对于提高操作系统级别编程的朋友特别有好处.

2013-07-19

Effective.STL中文.rar

今天刚找到的资源,基本上都要注册才能下载,放在这里分享一下,资源分设为0,感谢支持。

2009-04-23

convBmptoArray.tar.gz

自己使用标准C写的一个bitmap图片转换工具,生成一个数组,只完成了24位图的转换,包括所有代码,运行环境:cygwin或者linux。

2008-12-06

C中的预编译宏定义.pdf

在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理. ... ...

2008-11-25

编译原理及实践.pdf

《编译原理及实践》,使用7-zip压缩,非影印清晰版,不喜欢影印版的朋友首选好书,附有编译器设计方案,给大家分享一下,得来不易,下载分数设的比较高。 目录 第1章 概论.pdf 第2章 词法分析.pdf 第3章 上下文无关文法及分析.pdf 第4章 自顶向下的分析.pdf 第5章 自底向上的分析.pdf 第6章 语义分析.pdf 第7章 运行时环境.pdf 第8章 代码生成.pdf 附录A 编译器设计方案.pdf

2008-10-30

空空如也

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

TA关注的人

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