自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (1)
  • 收藏
  • 关注

原创 第六章 音视频-FFmpeg实现播放器解码和对应数据处理

根据播放器框架步骤,上一章说完读AVPacket包后解码,读AVPacket可以把包放进队列,分为音频队列和视频队列进去入队。然后创建音频和视频解码线程thread,上面逻辑步骤自己实现。

2024-05-19 11:12:08 483

原创 第五章 音视频-FFmpeg实现播放器解封装、读AVPacket包

媒体文件进行解封装,在做播放器步骤前一个章节进行解封装,解封装可以自己进行C++ 或者c语言封装一个通过方法,获取相关结构体,结构体在第一章有做介绍,下面代码本人封装的一个通过方法,读取媒体文件可能只有音频或者视频,也可能同时有音视频,也可以只读取你要音频或者视频。

2024-05-19 10:51:37 448

原创 第四章 音视频-FFmpeg实现播放器思维

下图是播放器实现解码原理图下图播放器上层输出的对应接口设计图,按照播放器调用习惯去设计,可以根据自己需求。通过以上的解码原理和要实现接口框架,我们就可以形成做播放器的思维,可以根据前面几章节就可以知道,我们要先解封装,创建解码器,实现读包,这里要对应线程去读包,分别去解码音频和视频,在播放时候,视频跟音频同步,最后提供正常播放器接口给调用者。

2024-05-18 10:47:08 533

原创 第三章 音视频-FFmpeg对应AVFrame解码处理思路和用途

音频解码出来是pcm的格式,可能单通道,和对应格式位数、采样率,要转换你想要格式和采样率等就需要用到重采样。渲染要求也是可能,要进行格式转换,如做播放器;如果格式不是AV_PIX_FMT_YUV420P可以进行转换处理,可以用sws进行转换,也可以用libYUV进行转换,libYUV的效率更加高。),然后根据输入帧和输出帧的参数配置了重采样的参数。AVSampleFormat格式可以根据第二章,对应系统使用对应支持格式才可以播放对应pcm的音频数据。函数进行重采样,将输入帧的数据转换为输出帧的数据。

2024-05-18 10:03:59 422

原创 第二章 音视频-FFmpeg对应解析格式说明

FFmpeg 还提供了许多过滤器和工具,可以对音视频数据进行处理、转码、过滤等操作。因此,FFmpeg 是一个功能强大且高度可定制的多媒体处理框架,能够满足各种不同的音视频处理需求。结构体中存储的数据通常是解码后的音视频帧数据,因此其数据格式取决于解码后的数据内容。结构体中的数据格式取决于所表示的音视频帧的内容。在 FFmpeg 中,字段来确定,它表示帧数据的像素格式或采样格式。结构体的数据格式取决于所表示的音视频帧的内容和编解码后的数据格式。数组存储了指向帧数据的指针,而。等,而常见的采样格式包括。

2024-05-17 11:04:36 948

原创 第一章 音视频-FFmpeg解码流程和对应结构参数意义

正常媒体文件常用flv、mp4等,对应第一步解封装,查看封装是什么,然后找到对应的流,通过流判断音视频进行解码。

2024-05-17 10:45:40 1234

原创 第十四章 OpenGL ES-方框模糊(均值模糊)

方框模糊(Box Blur)是一种基本的图像模糊算法,其原理比较简单。在应用方框模糊时,对于每个像素,取周围一个固定大小的区域(比如3x3或5x5),然后计算该区域内所有像素的平均值,并将这个平均值赋给当前像素。这样做会使图像中的细节减少,从而产生一种模糊效果。方框模糊的原理并不复杂,但由于对每个像素都要进行计算,因此它可能会导致图像处理速度变慢。虽然方框模糊效果比较简单,但在某些场景下,它仍然可以被用来减轻图像噪点或者增加视觉效果。它模糊后的最终色值为RGB(67,18,48)

2024-04-12 16:31:05 339

原创 OpenGL Assimp 加载3D模型介绍

进行加载模型获取aiScene对象,这个所有数据来源,后面只要解析aiScene,解析对应节点,所要每个节点材质和aiMesh对应的顶点、纹理、法向量、网格面、骨骼信息// ...return 0;相当一个aiNode,获取根节点,然后递归找出所有子节点,为了解析aiMeshi++) {i++) {方法处理各种材质生成相应的纹理D是环境光材质、N是顶点法向量数据材质,S是反色光材质,根据自己路径进行加载相关材质生成纹理,进行顶点坐标、纹理坐标等处理,是网格面处理,

2024-04-11 09:59:51 489

原创 第十三章 OpenGL ES-RGB、HSV、HSL模型介绍

RGB颜色模型是一种用于创建各种颜色的方法,它基于红色(Red)、绿色(Green)和蓝色(Blue)三种颜色的组合。通过调节这三种颜色的强度和比例,可以生成多种不同的颜色。在计算机图形学和数字显示领域中,RGB颜色模型是最常用的颜色表示方式之一。可以把RGB颜色模型建立在一个RGB颜色立方体,如下图所示。

2024-04-09 15:03:16 1394

原创 第十二章 OpenGL ES 基础-色温、色调、亮度、对比度、饱和度、高光

图片的色温指的是图片中呈现出来的整体颜色偏暖或偏冷的程度。较高的色温会使图像看起来更加蓝色,而较低的色温则倾向于呈现更多的黄色和橙色。色温可以影响图像的氛围和情感表达。:色调是指图片色彩的整体质感,包括主要色调的选择和组合。通过调整色调,可以改变图像的整体色彩效果,营造特定的视觉风格或情绪。:亮度描述了图片中各个部分的明暗程度。增加亮度将使整体图像看起来更明亮,减小亮度则会使图像变得更暗。亮度的调整可以影响图像的整体视觉效果和光线感。。:对比度是描述图像中不同区域之间亮度差异的程度。

2024-04-09 11:38:44 1068

原创 第十一章 OpenGL ES 基础-基础光照

现实世界中的光照是极其复杂,难以计算的,因此OpenGL的光照使用的是简化的模型,其中一个模型被称为冯氏光照模型。1、环境(Ambient)光照2、漫反射(Diffuse)光照3、镜面(Specular)光照。

2024-04-01 10:47:48 673

原创 第八章 OpenGL ES 基础-MVP矩阵理解

MVP矩阵分别是模型(Model)、观察(View)、投影(Projection)三个矩阵。

2024-03-26 17:27:04 997

原创 第十章 OpenGL ES 基础-图像USM锐化

图片调整后的颜色应用于原始图像的RGB值,以使得图像看起来更加清晰和/或改变外观。

2024-03-20 15:29:56 232

原创 第九章 OpenGL ES 基础-高斯模糊原理

1、正态分布原理,对应公式2、高斯模糊,取任意点上下左右对称点位置像素进行正态分布处理,权重相加约等于1,标准高斯模糊,权重中间像素权重(百分比)最大,越往边上,权重(百分比)越小。3、高斯模糊分横竖方向两部,按一纬高斯模糊分别进行处理。

2024-03-20 15:05:43 1025

原创 OpenGL-贴纸方案

OpenGL渲染区域使用正交投影换算,正常OpenGL坐标是vertexData,这样的进行换算以上面的基础的渲染区域设置FBO的绘制区,进行贴纸绘制,对应的缩放、旋转、平移时候对矩阵的处理和顶点点位处理的方法说明m_position对应的是贴纸的坐标,对应的xy轴的坐标和宽高。

2024-03-13 18:09:24 1061

原创 音视频开发掌握知识圈

音视频开发是一个广泛而专业化的领域,需要掌握多方面的知识和技能。:了解数字信号处理原理、算法以及在音视频中的应用,包括滤波、采样、量化等内容。:熟悉音频编解码原理和常见的音频编码格式(如MP3、AAC、FLAC等),以及音频数据压缩、解压缩技术。:了解视频编解码的基本原理和常见视频编码标准(如H.264、H.265等),以及视频流的压缩和解压缩方法。:熟悉使用多媒体处理框架和库,比如FFmpeg、GStreamer等,用于处理音频、视频的播放、录制、转码等操作。

2024-03-13 18:08:04 820

原创 ffmpeg解码和渲染理解

FFmpeg 是一个功能强大的跨平台多媒体处理工具,包含了音视频编解码、封装/解封装、过滤器等功能。:首先需要初始化 FFmpeg 库,并注册相应的解码器和其他组件。:通过打开要解码的视频文件,该函数会读取文件头并准备进行解码。:通过获取视频流的详细信息,如视频时长、帧率等。:遍历各个流,找到视频流所在的索引。:通过视频流的编解码器 ID,在已注册的解码器中查找对应的解码器。:调用打开视频解码器,准备进行解码。:创建一个AVFrame结构体,用于存储解码后的原始视频帧数据。:创建一个AVPacket。

2024-03-11 17:32:08 1134

原创 第七章 OpenGL ES 基础-输入输出框架思维

*思维:**渲染正常以一个FBO为住,把它当显示的一条线用,FBO(A),另外一个FBO把它当绘制各种特效还是其他的大杂烩的一条线用,FBO(B),最后要显示时候FBO(A)和FBO(B)可以交换。

2024-03-11 17:13:22 639

原创 第三章 OpenGL ES 基础-基础-GLSL渲染纹理

vec4 :是四个分量的向量mat4 :是4x4的浮点矩阵渲染一张图片纹理写简单的shader在 OpenGL 中,线程调用 GLSL(OpenGL Shading Language)时通常需要注意一些关联问题,以确保正确的操作和流程。GLSL 着色器编译在一个线程中加载、编译和链接 GLSL 着色器程序。确保着色器程序在正确的上下文中创建,并且每个着色器程序都与合适的 OpenGL 上下文相关联。Uniform 和 Attribute 数据传递。

2024-03-08 09:41:31 1364

原创 第二章 OpenGL ES 基础-GLSL语法简单总结

在实际应用中,纹理类型在图形编程中广泛用于渲染纹理、实现阴影效果、生成复杂材质等方面。这些向量类型用于处理不同类型的数据,如位置、方向、颜色、纹理坐标等。:流控制与C语言类似,有if else,switch case,for,while,do while。在 GLSL 中,纹理函数用于从纹理中进行采样和处理像素颜色。:函数的定义与C语言类似,着色器的执行入口也是main()函数。**数组 **:与C语言数组类似,但GLSL中只能使用一维数组。数组:与C语言数组类似,但GLSL中只能使用一维数组。

2024-03-08 09:17:22 1415

原创 第一章 OpenGL ES 基础-屏幕、纹理、顶点坐标

GL_TRIANGLE_STRIP:指定要绘制的基本图元类型为三角形条带,即每三个顶点定义一个三角形,但从第三个顶点开始,每个新顶点都与前两个顶点一起构成一个新的三角形。坐标系 的 左下点(-1, -1),右下角(1,-1) , 左上角(-1, 1) , 右上角(1 , 1)坐标系 的 左下点 (0, 0),右下角(1 , 0) , 左上角(0, 1 ), 右上角(1, 1)0:指定了要渲染的顶点数组的起始索引,这里表示从顶点数组的第一个顶点开始。使用第二个顶点作为三角形条带的第二个顶点。

2024-03-07 15:26:15 1538

原创 OpenGL实现礼物特效方案(直播)

颜色表示中,RGBA 表示红色 (Red)、绿色 (Green)、蓝色 (Blue) 和透明度 (Alpha) 四个通道的值。每个通道的取值范围通常是从 0 到 1,其中:白色:RGBA 分别为 (1, 1, 1, 1),表示所有颜色通道的值都最大,因此呈现为白色。黑色:RGBA 分别为 (0, 0, 0, 1),表示所有颜色通道的值都最小,因此呈现为黑色。下图左边部分就分别是白色和黑色组成。

2024-03-07 11:34:41 615

原创 SoundTouch对音频处理(Android)

SoundTouch 是一个用于音频处理的开源库,主要用于改变音频的速度、音调和音量等特征。您可以在项目中使用 SoundTouch 库来实现音频处理的功能,比如变速播放、音高变化、混响效果等。:通过 SoundTouch 库可以实现变速播放音频文件,加快或减慢音频的播放速度,而不影响音频的音调。:SoundTouch 可以用于改变音频的音调,提高或降低音频的音高,而不改变音频的速度。:您可以使用 SoundTouch 库对音频进行各种处理,如混响效果、时长拉伸、剪辑等。

2024-03-06 16:39:48 1305 1

原创 第十六章 OpenGL ES-桶形畸变算法-常用VR

图像放大率随着距光轴的距离而减小。在这样的畸变中,直线在中心向外凸出,像桶一样。桶形畸变中,从图像的中心点到图像的边缘点图像的相对大小逐渐变小,看起来就像把一张正常大小的图片包裹在一个球上一样。鱼眼相机,就是利用这种类型的畸变将一个无限宽的物体平面映射成有限的图像区域来呈现出一种半球形状的效果的。当使用变焦镜头时如果把焦距调至镜头的中段就会出现桶形畸变,此外使用广角镜头时桶形畸变的效果最明显。呈现效果。

2024-03-06 15:06:25 1089

原创 第五章 OpenGL ES 基础-透视投影矩阵与正交投影矩阵

模型都是3D的,但屏幕是2D的。如何将3D空间投影到2D平面,还能保持深度的视觉效果?在OpenGL中,采用透视投影矩阵作用顶点来实现,即完成缩放、选择、位移之后,进行透视投影的操作。

2024-03-05 17:11:40 2641

原创 第四章 OpenGL ES 基础-位移、缩放、旋转原理

对应矩阵效果注意:必须是相同维度矩阵才行,比如23矩阵不能和33矩阵进行加减矩阵与标量数乘和矩阵与标量加减类似, 实际是对矩阵的每个元素和该标量进行相乘,如下图所示所以值其实就是两个矩阵行列式相乘的和,取出矩阵A的i行下的所有元素与矩阵B的j列下的所有元素进行相乘和。

2024-03-05 14:53:53 1017

原创 第十五章 OpenGL ES-VR 全景模式原理

VR 全景模式原理将画面渲染到球面上,相当于从球心去观察内部球面,观察到的画面 360 度无死角,与普通播平面渲染的本质区别在渲染图像部分,画面渲染到一个矩形平面上,而全景需要将画面渲染到球面,利用 OpenGL 构建一个球体。OpenGL ES 中所有 3D 物体均是由三角形构成的,构建一个球体只需要利用球坐标系中的经度角、维度角以及半径计算出球面点的三维坐标,最后这些坐标点构成一个个小矩形,每个矩形就可以分成 2 个三角形。

2024-03-04 17:54:19 1299

原创 Android使用陀螺仪

在Android应用中使用陀螺仪可以帮助实现各种功能,比如游戏控制、虚拟现实体验、运动追踪等。首先,需要获取设备上的陀螺仪传感器服务。可以通过类来获取。使用注册一个陀螺仪传感器监听器,以便获取传感器数据。监听器会在手机的陀螺仪传感器有新数据时得到通知。一旦注册了监听器,就可以在相应的回调方法中处理陀螺仪传感器提供的数据。通常,陀螺仪传感器提供的数据包括角速度(角速度变化率)等信息。可以根据陀螺仪传感器提供的数据,实现自定义的功能。例如,可以根据角速度数据计算设备的姿态、方向或者用于控制游戏。

2024-03-04 17:43:40 2971

原创 音频PCM介绍与运用

PCM (Pulse Code Modulation) 是一种数字音频编码方式,将模拟声音信号转换为数字信号的过程。在 PCM 中,声音信号被采样并量化为离散的数值,以便于数字化处理和传输。:模拟声音信号会以固定的时间间隔进行采样,并将每个采样点的振幅值记录下来。:采样得到的连续信号会通过量化器转换成离散数值。量化过程中,会将每个采样点的振幅值映射为一个对应的数字值。:最后,这些数字化的采样点按照特定规则编码成二进制数据,形成 PCM 数据流。

2024-03-01 10:45:48 1140

原创 YUV介绍和YUV与RGB转换

YUV420p 是一种常见的 YUV 格式,特点是色度(Chrominance)分量的采样率较低,因为人类对色度变化的敏感度相对较低。人眼对亮度更敏感:人眼对图像的亮度信息更敏感,而对色彩信息的感知度相对较低。因此,在视频和图像处理中,保留更多的亮度信息而降低色度分量的采样率可以在视觉上获得更好的平衡。有效压缩:YUV420p 通过在水平和垂直方向上对色度分量进行抽样以降低数据量,能够更有效地压缩图像数据。这在数字视频传输和存储中至关重要,尤其是在有限带宽或存储空间下。广泛支持。

2024-03-01 10:28:10 1242

原创 第六章 OpenGL ES 基础-FBO、VBO理解与运用

在 OpenGL 中,VBO 是 Vertex Buffer Object 的缩写,用于存储顶点数据(如位置、颜色、法线等)在显存中的缓冲区对象。使用 VBO 可以提高性能并减少 CPU 到 GPU 之间的数据传输。

2024-02-29 16:40:32 733

原创 音视频基础: I帧 P帧 B帧

在音视频编码中,P帧(Predictive-coded frame)是一种参考前向预测(Inter-frame prediction)技术生成的预测帧。P帧通常用于根据之前的图像帧进行运动估计和补偿,从而压缩视频数据。双向预测:B帧通过参考前面和后面的帧来进行预测,可以利用两个方向的运动信息来更准确地预测当前帧。存储空间最小:由于采用双向预测,B帧通常比P帧和I帧占用更少的存储空间,可以获得更高的压缩比。非关键帧:B帧不是视频序列中的关键帧,需要依赖其他帧(如I帧、P帧或之后的B帧)进行解码。

2024-02-29 16:18:17 1030

原创 第二章 Xshell5连接VM中虚拟系统Ubuntu1704

执行:sudo passwd 然后设置新密码。至此,Xshell连接Ubuntu成功。现在已经可以ping通虚拟机了。

2024-02-26 10:27:15 561

原创 第一章 Win10系统VM安装Ubuntu1704虚拟机

2.9、选择网络类型(NAT)

2024-02-26 10:14:15 472

原创 第三章 VMware虚拟机ubuntu显示屏幕太小,无法自适应解决办法

tar -zxvf VMwareTools-10.1.6-5214329.tar.gz

2024-02-23 10:26:10 1742

原创 android 使用X264编码视频

*** preset是编码速度* 可选项"ultrafast", "superfast", "veryfast", "faster", "fast", "medium", "slow",* "slower", "veryslow", "placebo",从最快到最慢。无特殊要求选fast即可。* tune是编码质量和画面细节相关的参数。*可选项"film"电影, "animation"动画, "grain"颗粒, "stillimage"静态图像,

2024-02-23 10:11:31 789 1

原创 libpng编译-android端(libpng官网下载是没有android编译脚本)

配置ubuntu的ndk环境1、执行 sudo vim /etc/profile,对Path的路径文件进行更改(如果vim系统没有安装的话,使用vi替换) 如果提示分别执行执行。

2024-02-22 16:28:09 537

原创 FFmpeg部分数据结构简介

封装格式上下文结构体,也是统称全局的结构体,保存了视频文件封装格式相关信息。

2024-02-22 11:18:46 1271

原创 BT709 YUV与RGB 色彩空间的转换(处理色差问题)

在libyuv⾥,由于其RGBA与我们常⻅的RGBA是反的,所以我们使⽤的是libyuv的ABGRToI420。常⻅的601,709的⾊彩空间,包括两种,⼀种是full range的,也就是取值范围在(0,255),⼀种。D65的意思是⾊温,,6500K,嗯,冷暖屏就是从这出来的,iPhone基本会⽐6500K⾼⼀点。所以,我们看到的系数变成了23,79,8,并且其没有对16定电话,使⽤的还是16,具体原因我看。row_neon.cc⾥,对UV的量化使⽤的是256量化的,对Y使⽤的是128。

2024-02-22 11:05:01 1508

原创 ffmpeg的pcm、yuv小知识点

pcm、yuv保存调用,写个通用工具方法,平时快速保存,和调用方便查看自己bug。

2024-02-22 10:41:29 897

x264在安卓的编码视频(RGBA、YUV420p两种格式),采用android照相机获取数据

x264在安卓的编码视频(RGBA、YUV420p两种格式),采用android照相机获取数据,编码出264文件,直接用的x264的动态库进行的,环境在android系统,代码比较全,可以学习和项目使用

2024-02-23

libpng-1.6.40-android 对应的是用android提供静态库动态库编译,在ubuntu的环境ndk-14

libpng-1.6.40-android 对应的是用android提供静态库动态库编译,在ubuntu的环境ndk-14编译出,提供编译命令,写狠完整,试过,提供线上使用,对应android.mk文件,执行./build.sh运行就行

2024-02-22

NdkDemo.zip

Ndk学习对应jni的数据类型实际调用和签名解说、cmake的用法,环境配置

2023-11-13

ffmpeg-片尾logo-水印

使用ffmpeg进行类似抖音在播放最后增加片尾logo视频-该demo只用滤镜的教程,对应解码然后滤镜,进行3秒的片尾logo生成,无做音频和视频合并

2023-08-28

ffmpeg-水印(第一章资源)-android环境调用ffmpeg的demo

ffmpeg-水印(第一章资源)-android环境调用ffmpeg的demo(适合学习) "snprintf(filter_args, sizeof(filter_args), "movie=%s[wm];[in][wm]overlay=5:5[out]", logoPath);"解说: [in]表示 初始化滤镜的 inputs->name = av_strdup("out"); [out]表示 初始化滤镜的 %s 是格式化字符串中的占位符,它将被 logoPath 的值替代。logoPath 是标志图像文件的路径或URL。 movie=%s[wm] 表示将加载 logoPath 指定的图像文件作为一个片段,并将其命名为 [wm]。 [in][wm]overlay=5:5[out] 表示将输入视频与 [wm] 进行叠加操作,即将 [wm] 以左上角坐标 (5, 5) 的位置叠加到输入流上,生成最终的输出流 [out]。

2023-08-24

webrtc源码的下载-对应ios-android-linux-mac-window等平台的编译文档

webrtc源码的下载-对应ios-android-linux-mac-window等平台的编译文档 举例mac端 //直接连外网代理,如何有连外面vpn就不需要,下面的连接是例子不能直接连改自己IP和端口 export http_proxy=http://192.168.0.122:1111 https_proxy=http://192.168.0.122:111 cd /Users/Documents/mac/com.unity.webrtc-2.4.0-exp.6/ //下载编译 ./BuildScripts~//build_libwebrtc_macos.sh

2023-08-23

webrtc移动端demo对应的android系统平台

webrtc移动端demo对应的android系统平台-有搭建好的服务器可以用-java代码,编译webrtc教程对应aar gn gen out/android --args='target_os="android" target_cpu="arm64" rtc_use_h264=true is_debug=true ffmpeg_branding="Chrome" use_rtti=true rtc_include_tests=false rtc_build_examples=false is_component_build=false' 全量编译 ninja -C out/android 非全量编译 ninja -C out/android AppRTCMobile python tools_webrtc/android/build_aar.py --output "libwebrtc.aar" --arch "armeabi-v7a" "arm64-v8a" --build-dir out/android

2023-08-23

android-openGL特效-黑白-抖动-灵魂出窍

demo实现在视频播放渲染android-openGL特效-黑白-抖动-灵魂出窍

2023-08-22

openGL转场特效的demo-左右开幕式 左右闭幕式 上下闭幕式 上下开幕式

openGL转场特效 左右开幕式 左右闭幕式 上下闭幕式 上下开幕式

2023-08-22

视频传输RTP协议解析

模拟获取一段数据头进行解析RTP头

2023-08-19

openGl-普通贴纸-获取NV21数据-openGL获取yuv数据

通过OpenGL纹理读取yuv数据,读取NV21格式、在安卓opengl端做一个普通贴纸教程,可以用照相机、视频编辑器中

2023-08-18

学安卓ndk完整的NdkDemo

学习ndk学习java层和c++的数据类型转换和c++的线程,从而CMake配置,通过这个demo在20分钟内可以很好学会ndk

2019-01-21

空空如也

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

TA关注的人

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