- 博客(108)
- 问答 (2)
- 收藏
- 关注
原创 深入理解ffmpeg第四章封装与解封装
书籍基本信息书名: 《深入理解FFmpeg》作者: 刘歧、杜金房、宋韶颍 等出版社: 电子工业出版社出版时间: 2020 年适合读者: FFmpeg 开发者、音视频工程师、对 FFmpeg 源码感兴趣的技术人员。深入理解。
2025-03-06 17:39:53
177
原创 去中心化技术P2P框架代码示例
第七步 接收到p2p连接请求,回发 NTY_PROTO_P2P_CONNECT_ACK 一方切换成p2p消息状态。一个典型的P2P打洞(UDP hole punching)的过程。第四步 p2p连接,把自己id和p2p id发送给服务器。或不p2p 发送消息】这是一个典型的P2P应用架构,类似于早期P2P通信软件的基本实现方式。【第八步 双方切换成p2p消息状态,消息发送。第九步:P2P模式消息接收,进行ack回复】第六步 接收到p2p方ip 进行udp连接。搜索正则过滤:第[^步]*步。
2025-03-03 15:17:06
421
原创 去中心化技术P2P框架
1.双方属于完全锥型NAT (1次 p2p大概率成功)2.双方属于限制类型nat (受限,则通过中继服务器转发,最终p2p)3.两边是对称nat ()4.NAT1为限制锥型NAT,NAT2为对称NAT。总结:步骤3由于是锥形,不会产生记录。所以需要额外记录这次nat ip:port,步骤4 又产生多余的记录。只能靠猜测4是ip:port+1的模式,进行尝试。最后客户机1根据上述两点进行猜测。
2025-02-25 15:27:35
1133
3
原创 深入理解ffmpeg第二章FFmpeg简介
FFmpeg 的许可证FFmpeg 的发布许可证取决于编译时的选项LGPL-2.1(及之后):适用于使用动态链接库的情况,允许闭源使用。GPL-2.0(及之后):适用于使用静态链接库或修改 FFmpeg 源代码的情况,要求开源。开发者可以根据需求选择合适的许可证版本。总结FFmpeg既是一个多媒体工具集(包含 ffmpeg、ffplay、ffprobe),也是一个开发套件(提供丰富的 API 和工具库)。其核心功能包括音视频编解码、格式转换、流媒体处理、色彩与采样率转换等。
2025-01-23 16:48:19
676
原创 深入理解ffmpeg第一章多媒体基础
傅里叶变换将时域信号转换为频域信号,揭示信号的频率组成。时域表示信号随时间的变化,频域表示信号中不同频率的振幅。通过旋转三维视图,可以更直观地观察频谱分布。时域和频域是同一信号的两种表示方式,各有其应用场景。声音的大小变化并不是线性的,即声音的刺激与人真正听到的感觉不是线性的,而是呈对数关系一个对数曲线示意图如图1-6所示,x轴为声音的刺激量,y轴为人的感觉量,即声音的响度(音量),声音的响度以分贝(dB)表示频率大小决定听到的内容。人耳对响度和频率的敏感度。
2025-01-21 12:50:25
883
原创 Android NDK开发入门2之适应idm环境
前面已经运行了一个简单的初始程序,现在我们来往初始程序添加类和函数,并成功运行的实验。上述讨论了如何导出不同的动态库,现在如果只想根据x86架构导出单个so库如何实现?1、可执⾏⼆进制⽂件的格式以及⽀持的内容类型,⼆进制⽂件如:程序、共享库...32位Intelx86架构,主要用于模拟器和部分低端设备。学习如何指定动态库导出路劲,并根据动态库切换,实现多种版本调用。64位Intelx86架构,主要用于模拟器和高性能设备。:主要用于模拟器,通过二进制翻译可以运行ARM架构的代码。
2025-01-07 18:06:32
1213
1
原创 Android NDK开发实战之环境搭建篇(so库,Gemini ai)
音视频安卓开发首先涉及到ffmpeg编译打包,先了解动态库之间的cpu架构差异性。然后再搭建可运行的Android 环境。
2025-01-04 11:54:54
1016
2
原创 ffmpeg filter 滤镜命令
FFmpeg filter滤镜是一种强大的功能,可以用于处理和操作视频和音频数据。视频处理调整视频分辨率、宽高比、帧率等属性执行视频剪辑和裁剪操作应用各种视觉特效,如模糊、锐化、色彩校正等合成多个视频源,如画中画、叠加文字等音频处理调整音量、均衡、混合多个音频轨道添加回声、噪音抑制等音频特效执行音频剪辑和拼接格式转换在不同的编解码器和容器格式之间进行转换,实现视频和音频的解复用操作。分析和调试测量视频和音频的质量指标,如 PSNR、SSIM 等获取视频和音频的元数据信息。
2025-01-03 14:44:24
1532
原创 音视频采集推流时间戳记录方案
落点值 = T = current systime - starttime //当前系统时间 – 起始时间。frameTimeStamp = current systime - start time //第一帧时间戳= 系统时间–起始时间。//如果当前帧的计算时间戳(CurrentFrameTS)与系统时间差值(T)的绝对值大于等于一个半帧间隔,那么我们就应该将当前帧的时间戳直接设置为系统时间差值T。初始化 starttime = systime。
2024-12-26 13:51:56
2223
原创 Easylogging++日志库介绍和崩溃解决方案
Easylogging++ 是一个轻量级、高性能且易于使用的 C++ 日志库。它被设计用于在 C++ 项目中提供可靠、灵活和可定制的日志记录功能。跨平台支持Easylogging++ 可以在 Windows、Linux 和 macOS 等主流操作系统上工作。它具有良好的跨平台兼容性。易于集成和使用Easylogging++ 只需要包含单个头文件就可以在项目中使用。它没有任何外部依赖,易于集成。它提供了直观的 API,使用起来非常简单,开发者可以快速上手。高度可配置。
2024-12-23 15:07:37
938
原创 boost asio 高性能服务器
这小部分主要就是socket绑定的内容。后续我们关注重点放在发送和接收数据。为什么要提供这些api?其实这里涉及到粘包问题:三个解决方案1.读固定字节 2.读特定符号停止 比如“\r\n” 3.header + body形式 头部放body长度。write_some 可以每次向指定的空间写入固定的字节数。read_until 一直读取,直到读取指定字符结束。read和send recvice/writer 一次阻塞读完,能保证数据不丢。
2024-12-22 23:32:07
1208
原创 播放器秒开优化2
我们在第一篇主要提到网络延迟优化以及较为细节的播放器参数优化。本篇我们结合业务场景,谈论优化点,首先提到容器格式,其次谈论预加载技术,最后根据场景细节分析优化点,最后谈到给预加载加一层代理缓存节点。
2024-12-11 13:44:08
748
原创 播放器秒开优化
结合公司实力进行优化,优先考虑缓存提速比如dns http这类连接耗时,tcp改进为fast open,cdn gop缓存机制。其次ijkplay源码,流媒体更改为格式固定版本,去除协议探测耗时。其次考虑源码参数,比如播放器缓存队列启动大小,引入池化技术。
2024-12-10 16:46:53
1294
原创 基于 http-flv 的端到端延迟优化
先让ai看看直播互动体验和商业应用场景(电商直播、在线教育等)需要低延迟高延迟会影响互动体验,降低用户参与度推流端延迟:编码、发送缓存等拉流端延迟:边缘节点加载延迟、本地缓存GOP Cache 策略:缓存 N 组 GOP 序列,降低加载延迟观众端本地缓存优化:解决网络抖动,但会增加总视觉延迟通过调整推流、转码、CDN 等配置,实现总视觉延迟 3-6 秒可能存在技术瓶颈,如网络带宽探测、播放流畅性等需要更复杂的算法和策略来平衡延迟和流畅性。
2024-12-10 14:06:26
696
原创 C++ 11重点总结2
std::recursive_timed_mutex,带超时的递归互斥量。包装可调用对象(如函数或 lambda 表达式)的类,可以异步执行该对象。std::recursive_mutex,递归互斥量,不带超时功能。std::time_mutex,带超时的独占互斥量,不能递归使用。std::mutex,独占的互斥量,不能递归使用。允许定义接受任意数量和类型参数的模板函数和模板类。折叠表达式(C++17)综合示例简单的线程池。
2024-11-27 19:16:44
797
原创 C++ 11重点总结1
auto_ptrunique_ptrshared_ptrweak_ptr: 自定义删除器。shared_ptrshared_ptrshared_ptrunique_ptrunique_ptrshared_ptr初始化灾难。new T会造成重复类型声明。代码可读性差删除器区别。需要指定删除器类型weak_ptrshared_ptrthisweak_ptr举个例子,监视某内存的释放。weak_ptr在使用前需要检查合法性。智能指针通常是安全的,但在多线程访问同一个shared_ptr对象时需要考虑线程安全性。
2024-11-27 15:45:11
1179
原创 OpenGL 变换
理论总结:向量与标量相加减乘除向量的长度计算向量取反向量单位化向量与向量相加减向量点乘向量叉乘矩阵介绍线性变换和仿射变换行主序和列主序矩阵与标量相加减和数乘计算虽然复杂,但是我们使用计算机计算,调库传参数足以。
2024-11-22 12:55:28
291
原创 OpenGL 纹理
纹理是什么,图片的坐标轴向在 OpenGL 中,纹理(Texture)是一种用于存储和管理二维图像数据的机制。它是一种非常重要的渲染技术,可以大大增强 3D 场景的细节和真实感。纹理的基本概念纹理图像纹理是由一个或多个二维图像组成的,也存在1D or 3D。这些图像包含了丰富的颜色和细节信息。纹理坐标纹理坐标是一个二维坐标系统,用于描述纹理图像上的某个位置。纹理坐标通常用 (s, t) 来表示,取值范围为 [0, 1]。还有r 和xyz相似。纹理映射将纹理图像映射到 3D 模型表面的过程叫做纹理映射。
2024-11-21 10:43:00
1070
原创 OpenGL 渲染
在OpenGL中,任何事物都在3D空间中,而屏幕和窗口却是2D像素数组,这导致OpenGL的大部分工作都是关于把3D坐标转变为适应你屏幕的2D像素。3D坐标转为2D坐标的处理过程是由OpenGL的图形渲染管线(Graphics Pipeline,大多译为管线,实际上指的是一堆原始图形数据途经一个输送管道,期间经过各种变化处理最终出现在屏幕的过程)管理的。图形渲染管线可以被划分为两个主要部分:第一部分把你的3D坐标转换为2D坐标,第二部分是把2D坐标转变为实际的有颜色的像素。
2024-11-19 22:45:56
926
原创 visual stdio 2022 搭建OpenGL环境
时间:2024年11月19日环境:windows 11 基于visual stdio 2022开发 64位。
2024-11-19 17:14:13
576
原创 播放器开发之ffmpeg 硬件解码方案
把解码当成解压缩文件,压缩算法越高级,得到的文件内存占用量就少。但是cpu使用率就高,硬件解码也是同一道理。硬件编解码器与软件编解码器的对比:硬件编解码器的输出质量通常低于优质的软件编解码器(如x264)。为了达到相同的感知质量,硬件编解码器需要更高的码率。在相同码率下,软件编解码器的输出质量通常更好。性能和效率:硬件编解码器的编解码速度更快,同时也更节省CPU资源。这使其更适合实时视频编解码的应用场景。功能支持:硬件编解码器往往只支持编解码器的部分功能配置,而不是全部。
2024-11-19 16:45:22
1513
原创 信令服务器设计之websocket基础
对于我们WebRTC项目而言,nodejs主要是实现信令服务器的功能,客户端和服务器端的交互我们选择websocket作 为通信协议,所以该章节的实战以websocket的使用为主。web客户端的websocket和nodejs服务器端的websocket有一定的差别,所以我们分开两部分进行讲解。本章节主要介绍后续信令服务器的协议websocket基本运用,后续对信令服务器进行详细描述学习资料分享。
2024-11-08 23:37:10
1218
原创 WebRTC基础理论和通话原理
WebRTC(Web RealTime Communication)是 Google于2010以6829万美元从 Global IP Solutions 公司购买,并 于2011年将其开源,旨在建立一个互联网浏览器间的实时通信的平台,让 WebRTC技术成为 H5标准之一。它定义了一组标准化的API,用于在浏览器和移动应用程序中进行实时语音、视频和数据通信,无需安装任何插件或其他软件。
2024-11-07 13:41:07
1170
原创 ubuntu编译ffmpeg
运行环境:vmware ubuntu 20.04时间:2024年10月24日权限问题:由于ubuntu权限问题 建议使用root权限编译,且~是根据用户组来进行定位的。
2024-10-26 20:32:24
992
原创 hls协议基础知识1
HLS (HTTP Live Streaming) 是由 Apple 公司开发的一种自适应比特率流媒体技术协议。它通过将整个视频流拆分成一系列小的 HTTP 文件片段来实现,每个片段描述了整个视频流的一小段时间。在播放过程中,客户端可以从多个不同码率的替代流中选择,从而根据可用带宽自动调整视频质量,确保流畅的播放体验。HLS 的主要特点包括:自适应比特率:HLS 可以根据用户的网络状况自动调整视频的码率和分辨率,确保视频播放的连续性。
2024-10-23 13:13:14
1646
qt creator idm
2024-07-10
Mysql中on与where关系
2023-08-26
G4.9 pool alloc 与SGI STL二级空间配置器内存管理是一样的吗?
2023-08-09
求解字符数组和字符‘带\0’问题
2021-06-12
C++中虚析构函数作用和继承
2021-05-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人