自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 使用opencv将文字隐藏在图片中

灰度图像是单通道,彩色图像是3通道或者4通道,每个通道通常是1个字节。因为每一个像素点只能使用最低的那一位,所以我们的有效数据必须是0或者1,因此我们需要先对待隐藏图片进行处理,这里我们发现我们的有效文本信息是黑色,背景是白色,所以可以先通过阈值处理对图像进行二值化,这样有效数据就是0,无效数据就是1,处理后的图像显示如下。通过图像的按位或运算来写入隐藏信息,这里我们仍然保持G通道和R通道不变,写入后就可以将图片保存起来,需要注意的是只能使用无损压缩比如png格式进行保存,否则最低位会被破坏掉。

2024-10-28 17:40:31 509

原创 ekho移植,使用docker方案

,但是这个方案其实是挺麻烦的并且也踩了很多坑,因为所有依赖的库都需要进行交叉编译,依赖的库还有属于自己的依赖库,另外还需要进行交叉编译链的配置,这导致之前用交叉编译方案时仅仅编译了ekho8.0版本,而不是最新的9.0版本,并且因为pulseaudio交叉编译时遇到了没有解决的问题,导致使用ekho时不能直接播放需要借助aplay。因为我的目标主机是arm64架构,我的编译环境是x86-64架构,由于二者的架构不兼容,直接运行镜像会报错,需要使用QEMU(Quick Emulator) 来进行架构仿真。

2024-10-14 15:12:54 344

原创 ekho交叉编译全过程

3)这样espeak就被安装到arm_install目录下,在我机器的绝对路径是/home/linux/ekho_new/espeak-1.48.04-source/src/arm_install,后面会用到。1)从https://sourceforge.net/projects/e-guidedog/files/Ekho/8.0/下载ekho-8.0.tar.xz。1)从https://files.portaudio.com/download.html下载portaudio_v18_1.zip。

2024-10-12 09:57:50 478

原创 修改ffmpeg源码为rtsps协议增加证书校验功能

鉴于安全原因,我们将之前使用ffmpeg api实现的rtsp推流修改为rtsps,因为ffmpeg本身支持rtsps,所以我们只需编译配置ffmpeg时增加-enable-openssl参数,然后使用ffmpeg api时直接将rtsp替换为rtsps即可(以及对应的端口修改,同时服务端也需要支持rtsps)。

2024-09-24 13:45:28 870

原创 修改ffmpeg源码实现rtps协议(rtp over tls)

对于rtps_open,首先调用av_url_split获取协议的hostname(域名或者ip)、端口以及协议名,之后对协议名进行判断如果是rtps则表明我们要使用的底层协议是tls,因为ff_rtps_protocol的name字段是rtps,所以走到rtps_open时其协议名一定是rtps,也就是说这里的判断多此一举了,如果想同时支持TCP和TLS的话可以通过增加选项来实现。的代码,这里的更加简单,都不需要编解码,仅仅是转封装,不再描述。

2024-08-29 13:29:01 803

原创 记一次ffmpeg自动流选择遇到的问题

因为ffmpeg这个进程就是ffmpeg.c及相关源文件编译出来的,所以可以通过扒代码的方式来进行分析,最终通过代码调试,发现问题出在自动流选择的score计算上,具体就是AVStream的disposition上,A.mp4和B.mp4都包含两个视频流和两个音频流,但第一个音频流和第一个视频流被ffmpeg当作是默认流(也就是具有AV_DISPOSITION_DEFAULT标识),所以默认流的得分要比非默认流的得分大5000000,因此解释了上面“不合理“的地方。

2024-07-17 16:38:32 325

原创 使用fbdev进行屏幕图像采集

fbdev即frame buffer device,翻译为帧缓冲设备,代表了显示硬件的抽象,每个帧缓冲设备对应于一个显示屏或显示控制器。它通过/dev/fbx(如/dev/fb0)设备文件对外暴露,可以通过读写这些文件来进行图像的采集与图像的显示。

2024-07-10 14:43:30 511

原创 使用AES CTR模式实现任意位置数据加解密

最近对我们的项目进行安全优化,我们的服务程序在使用过程中会持续接受客户端的一些数据并追加写到文件中,文件写入完毕后还支持客户端的随机访问来获取这些结构化信息。CTR模式的关键是计数器,如果我们知道任意位置的计数器那么就可以进行解密,由于CTR模式的计数器是按照分组递增的,所以我们只要知道是哪一个分组即可,而AES进行加解密的分组大小不管是128位还是其他都是16字节,所以可以根据读取的数据所在的字节位置/16知道所在哪一个分组,然后再加上初始的计算器就得到了该分组的计数器了,之后解密就很简单了。

2024-07-03 17:48:45 2258

原创 ffmpeg API实现拉取rtsp流存储为图片

在avformat_open_input之后我们通常会调用avformat_find_stream_info来获取输入文件的流信息,这是因为提供的输入文件可能没有文件头或者文件头没有足够的信息,avformat_find_stream_info会尝试解码来获取更多的信息。和解码一样,新版本的ffmpeg使用avcodec_send_frame和avcodec_receive_packet来代替旧的编码接口avcodec_encode_video2来进行编码,其用法也和解码一样。

2024-06-26 15:14:58 2795

原创 http响应的数据部分长度

http是一个无状态的应用层请求/响应协议,其请求和响应消息都是由起始行、若干行头部(以空行表示结尾)和可选的数据部分,那么在进行http请求时,响应的数据部分长度该如何确定呢?

2024-06-24 13:09:39 502

原创 webrtc中媒体协商中的媒体数据方向

createOffer的参数表示了我们希望接受的媒体数据,代表了数据接收方向,在上面demo中实际上由offerOptions的offerToReceiveAudio和offerToReceiveVideo决定,当参数取值为true时表示我们希望接受对应类型的媒体数据。addTrack的参数表示了我们可以提供的媒体数据,代表了数据发送方向,在上面demo中track实际上由mediaOptions中的audio和video参数决定,当参数取值为true时表示我们可以提供对应类型的媒体数据用于发送。

2024-06-08 10:12:33 407

原创 ffmpeg可执行程序裁剪

最近我们在嵌入式板子上有一个需求,拉取网络摄像头的rtsp流保存为jpg/png图片,我们准备借助ffmpeg命令行工具去完成,命令行实现这个功能很简单,但是编译出的ffmpeg可执行程序的大小很大,因此我们尝试对ffmpeg可执行程序进行编译裁剪,最终我们发现按照下面方法后进行裁剪后的大小只有之前的1/4不到,解决了我们遇到的问题。

2024-05-29 15:28:17 1642

原创 ffmpeg进程优雅退出

有时我们会在程序中通过fork/execl方式调用ffmpeg进程执行某些命令,这通常比调用API更简单。然后我们等待这些命令执行完毕后ffmpeg进程自动就会结束,但如果我们的任务是需要长时间运行比如拉取rtsp流保存为mp4,我们希望这个工作可以随时终止,终止的时候ffmpeg要优雅的退出,即ffmpeg要可以在退出时执行写入mp4的元数据、正常关闭文件等清理工作,使他看起来就像是正常退出一样,ffmpeg可以吗?

2024-05-23 17:02:15 1102 1

空空如也

空空如也

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

TA关注的人

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