自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 opengl__关于着色器texture2D()的输出值

由于在文件中,Y像素的范围为0~255,而着色器语言中,gl_FragColor用的rgb范围为0~1,所以texture2D(tex_y, textureOut).r是个0~1的值,这里猜测是把Y通道的值除以255,量化成了0~1的范围,所以用127和128测试。在用着色器编写YUV转化为RGB的过程种,用到了texture2D()函数,在着色器中是没有办法打印输出值,只能通过颜色输出判断texture2D()函数的输出值。如果上面的猜测成立,那么输出值应该是上一半是黑色,下一半是红色。

2025-09-16 20:31:22 743

原创 opengl学习__入门

本文介绍了OpenGL入门的基础知识。OpenGL是由Khronos组织维护的图形API规范,其具体实现由显卡厂商负责。现代OpenGL采用核心模式(Core-profile),相比早期立即渲染模式具有更高灵活性和效率,但学习难度较大。OpenGL本质上是一个状态机,通过设置上下文状态来控制图形渲染。此外,OpenGL使用对象(Object)的概念来管理各种状态设置,通过绑定/解绑对象来切换不同的渲染配置。文章建议从OpenGL 3.3开始学习,因其包含了现代OpenGL的核心架构。

2025-09-12 21:24:47 35

原创 QFFPlay播放器__显示函数video_display()

本文介绍了将ffplay的视频显示从SDL库改为QT OpenGLWidget的实现方案。通过OpenGL的shader方式利用GPU进行渲染,降低CPU占用率。关键步骤包括:1)使用sws_scale()将解码后的AVFrame转换为YUV420P格式;2)初始化HFrame结构存储转换后的视频数据;3)创建像素转换上下文img_convert_ctx;4)将转换后的数据存入HFrame缓冲区;5)发送信号通知OpenGL模块进行渲染。该方法通过GPU加速提高了视频渲染效率,同时保持了与原有解码流程的兼容

2025-08-07 20:46:36 859

原创 QFFPlayer播放器__ffplay.c移植到QT环境

本文记录了将ffplay.c从C语言移植到QT C++环境的过程。主要步骤包括:1)新建QT工程,配置ffmpeg和SDL库;2)创建MyFFPlay类继承QObject,将ffplay.c代码整体移植并修改为C++风格;3)处理编译错误,4)实现播放控制功能,包括start/stop/pause/seek等;5)修改原ffplay函数,添加信号机制与QT界面交互。移植过程中保留了原ffplay的核心逻辑,同时通过封装和信号机制实现了和界面的连接功能。

2025-08-07 15:47:51 1128

原创 QFFPlay播放器__QOpenglWidget显示YUV

本文介绍了使用QT的QOpenGLWidget显示YUV420P视频的实现方法。主要步骤包括:1. 初始化GLEW库管理OpenGL函数指针;2. 设置顶点数组对象(VAO)定义绘制区域;3. 创建纹理并选择线性过滤方式;4. 编写顶点和片段着色器程序,其中片段着色器实现了YUV到RGB的转换;5. 编译、链接并验证着色器程序;6. 在paintGL函数中完成纹理绑定、数据传递和绘制操作。该方法通过OpenGL的着色器程序高效实现了YUV视频的渲染显示,可作为视频播放器开发的基础模块。

2025-08-05 16:56:16 603

原创 QFFPlayer播放器__整体框架(QT+ffplay+opengl)

本文介绍了在QT框架下基于ffplay开发的简易视频播放器实现方案。该系统采用QMainWindow作为主框架,包含视频显示(HVideoWidget)、进度控制(HSeekWidget)和功能控制(HControlWidget)三大模块。其中HVideoWidget通过QOpenGLWidget实现YUV数据的高效渲染,MyFFplay类封装ffplay的解码和音视频同步功能;HSeekWidget提供进度条和时长显示;HControlWidget实现播放/暂停、快进快退等控制功能。

2025-08-05 14:18:38 403

原创 QFFPlay播放器(QT+ffplay+opengl)

ffplay是一款功能强大的播放器,qt是目前较流行的跨平台界面框架,本文在QT环境下,用ffplay的功能实现了一个简易的播放器。视频显示部分用QT模块QOpenGLWidget的shader方式显示,该方式能直接渲染yuv图片。目前支持的功能有:暂停,快进,快退,逐帧播放以及全屏功能,能根据指定时间播放媒体文件。

2025-08-05 11:25:26 305

原创 ffplay源码分析__逐帧播放step_to_next_frame()

本文介绍了视频逐帧播放模式的实现原理。当按下s键时,系统会调用step_to_next_frame()函数进入该模式:1)若当前处于暂停状态,先恢复播放;2)设置step=1标记进入逐帧模式。关键控制逻辑在video_refresh()中:当完成一帧播放时自动暂停视频,实现单帧播放效果。再次按s键会重复上述流程,保持逐帧播放状态。该模式下系统会跳过音视频同步检查,确保不丢帧。整个机制通过交替切换播放/暂停状态来实现精确的逐帧控制。

2025-07-22 18:09:21 488

原创 ffplay源码分析___暂停功能

本文分析了ffplay播放器的暂停功能实现机制。暂停功能通过SDL键盘事件触发,主要涉及视频播放停止、音频静音、解码线程阻塞、读取线程超时等待等处理。恢复播放时需重新计算视频时钟和帧显示时间,各线程恢复运行状态。具体实现包含:1)暂停时设置标志位使视频/音频播放停止;2)解码线程因FrameQueue满而阻塞;3)读取线程超时等待10ms;4)恢复时更新视频时钟和帧计时器。整个暂停/恢复流程通过多线程协作完成,确保播放状态的平滑切换。

2025-06-21 16:46:16 405

原创 ffplay源码分析__音视频同步video_refresh

video_refresh()是ffplay中负责视频刷新的核心函数,涉及音视频同步的关键逻辑。该函数通过FrameQueue管理视频帧,并使用多个辅助函数进行计算和同步。主要流程包括:1) 从FrameQueue中获取当前帧和下一帧;2) 计算帧间隔和显示延迟;3) 根据系统时间和帧显示时间判断是否显示下一帧;4) 更新视频时钟和显示帧。compute_target_delay()函数用于调整显示延迟,确保音视频同步。

2025-05-11 17:16:24 890

原创 ffplay源码分析__音视频同步compute_target_delay()

1、由于计算机系统大部分是分时系统,所以当负载过高或者设备性能差的时候,音频播放线程或者视频播放线程会出现调度不及时,导致视频画面已经更新了,但是声音还没放出来。2、视频和音频的解码速度也不一样,解码出来的数据也不一定马上就可以显示出来。3、视频和音频是两个独立的任务在运行,一帧的播放时间,难以精准控制。音视频解码及渲染的耗时不同,可能造成每一帧输出有一点细微差距,长久累计,不同步便越来越明显。

2025-05-09 17:10:16 1035

原创 ffplay源码分析__audio_decode_frame()

audio_decode_frame函数主要功能是从FrameQueue中取出解码后的音频数据,判断是否需要重采样。如果需要,把音频数据重采样后再给SDL使用。audio_decode_frame()可以分为三部分。第一部分从音频FrameQueue中读取解码后的音频数据,第二部分判断是否需要重采样,第三部分是重采样功能。

2025-05-02 17:45:08 888

原创 ffplay源码分析__解码函数decoder_decode_frame

decoder_decode_frame函数的主要功能是:判断从PacketQueue取出的MyAVpacketList序列号是否和Decoder的序列号一致,如果两者不一致,就一直从队列中取,直到取到的序列号一致为止。如果两者序列号一致,就用avcodec_send_packet函数向解码器输送数据,然后通过avcodec_receive_frame从解码器获取解码后的数据返回。正确取到解码数据后返回1,读取到解码器末尾时返回0,其余返回负数。

2025-04-22 11:38:41 1169

原创 win10环境下msys+vs2022编译ffmpeg6.1

本文是在windows10,msys2+vs2022的环境下,编译ffmpeg6.1。

2025-04-21 21:52:23 1036

原创 ffplay源码_video_display函数分析

本文分析了ffplay视频渲染核心函数video_display()的实现原理。该函数通过SDL2库将解码后的AVFrame渲染到屏幕,主要流程包括:1)初始化SDL窗口参数;2)设置背景色并清空缓冲区;3)根据视频格式创建或更新纹理;4)计算显示区域;5)复制纹理到渲染目标;6)提交渲染。关键点在于处理FFmpeg与SDL像素格式的映射转换,通过sws_scale()进行格式转换,使用SDL_RenderCopyEx()实现纹理渲染,最终调用SDL_RenderPresent()显示画面。

2025-04-17 16:49:08 166

原创 ffplay源码__音频解码线程audio_thread

audio_thread主要功能是从音频PacketQueue中读取数据并解码,然后把解码后的数据插入到音频FrameQueue中。audio_thread和video_thread基本流程一致,都用到解码函数decoder_decode_frame(),队列函数frame_queue_peek_writable()和frame_queue_push()。

2025-04-12 19:08:59 768

原创 ffplay源码分析__视频解码线程video_thread

video_thread线程是在read_thread线程中创建的,主要作用是从视频PacketQueue队列中获取AVPacket数据用于解码,并把解码后的数据封装成Frame,保存到视频的FrameQueue中。真正的解码是在decoder_decode_frame()中完成。把解码数据插入到队列是用三个函数完成,分别是frame_queue_peek_writable(),queue_picture(),frame_queue_push()。

2025-04-10 10:25:17 829

原创 ffplay源码分析__音频回调sdl_audio_callback

sdl_audio_callback 函数在 SDL 音频处理中扮演关键角色,它在单独的线程中被调用,负责向 SDL 音频驱动填充音频数据。该函数通过 audio_decode_frame 从音频帧队列中获取解码数据,并根据需要进行重采样。随后,数据被填充到 SDL 音频缓冲区中,如果缓冲区未满,则继续填充;如果发生错误,则输出静音。SDL 采用双缓冲机制,确保音频的连续播放。此外,音频时钟的更新依赖于缓冲区的填充状态,通过计算剩余数据和时间戳来同步音频播放时刻。

2025-04-08 17:52:19 189

原创 ffplay源码__stream_component_open函数分析

1、stream_component_open函数是在read_thread子线程被调用的。其中有三个地方调用了stream_component_open()函数,实际运行时只有音频和视频部分生效,所以又产生了两个子线程audio_thread和video_thread。

2025-03-17 11:26:47 734

原创 ffplay源码_read_thread线程分析(三)

本文详细介绍了在VS2017的Debug x86模式下调试运行FFplay的初始化过程。首先,通过SDL_CreateMutex()创建wait_mutex锁,用于配合SDL_CondWaitTimeout函数。接着,初始化媒体索引数组并分配AVPacket和AVFormatContext的内存。然后,设置中断回调函数和字典,用于处理耗时操作和传递额外参数。通过avformat_open_input()函数打开媒体文件,并获取媒体信息。随后,判断是否为网络流,并查找最佳媒体流。最后,打开音视频流,读取文件数

2025-03-12 13:08:49 980

原创 ffplay源码分析__stream_open函数(二)

本文分析了FFplay播放器的核心数据结构和初始化过程。重点解析了VideoState全局管理器的结构,包含音视频时钟、帧队列和解码器等关键组件;详细说明了FrameQueue、PacketQueue等核心数据结构的实现原理;并深入探讨了播放器初始化的各个步骤,包括参数设置、队列初始化、时钟同步机制建立等。通过VS2017环境下的调试分析,揭示了FFplay内部如何管理多媒体播放的全局状态,为理解其播放机制提供了基础框架。

2025-03-11 09:17:32 910

原创 win10环境下msys2+vs2017编译ffmpeg(64位含ffplay)

本文在win10下用msys2和vs2017编译ffmpeg 64位(包含ffplay),以及把ffplay.c移植到vs2017环境中,便于学习。ffmpeg 的源码是跨平台的,通过 configure(shell脚本) 实现不同平台的编译规则。在 configure 的时候指定--toolchain=msvc就可以使用 msvc 来编译 ffmpeg。

2024-11-29 12:07:19 2050

原创 win10环境下msys2+vs2017编译ffmpeg(32位含ffplay移植)

本文在win10下用msys2和vs2017编译ffmpeg32位。ffmpeg 的源码是跨平台的,通过 configure(shell脚本) 实现不同平台的编译规则。在 configure 的时候指定就可以 使用 msvc 来编译 ffmpeg。

2024-11-22 15:21:08 2167

原创 win10环境下msys2+mingw编译ffmpeg(64位含ffplay)

windows下用msys2 mingw64环境编译ffmpeg64位,包含ffplay.exe

2024-11-17 11:21:05 2699

原创 windows环境vs2017编译sdl2.0库

windows环境vs2017编译sdl2.0库

2024-11-12 17:20:21 1154

QT+ffplay+opengl媒体播放器

1、本工程是在windows环境下,ffplay源代码经过QT界面包装后实现的一个媒体播放器。 2、支持进度条跳转,快进快退,全屏,逐帧模式,音量调节。 3、全屏模式下也支持媒体控制,同2。 4、显示模块用了QOpenglWidget的着色器语言,通过硬件方式(GPU)把YUV转换成RGB,降低CPU占用率。 5、参考VLC和SDL的部分源码,实现了视频显示及界面优化。 6、适用于对播放器感兴趣的开发人员或音视频开发人员。

2025-10-08

qt+ffplay+opengl播放器.rar

1、本文件是基于QT6.8+vs2022下的一个ffplay视频播放器工程。界面基于QT的gui框架,播放器核心是ffplay,显示部分用的QOpenglWidget(基于shader方式),该方式能直接渲染YUV文件,降低CPU占用率。 2、音频播放依然采用SDL库。 3、目前支持的功能有:暂停,快进,快退,逐帧播放以及全屏功能,能根据指定时间播放视频文件。 4、支持播放的文件格式同ffmpeg支持的文件格式

2025-08-05

ffmpeg6.1.rar

win10环境下用VS2022编译的ffmpeg6.1库文件

2025-04-27

ffmpeg编译工具-msys2-x86-64-20250221

windows环境下编译ffmpeg时用到的msys软件,msys2-x86_64-20250221

2025-04-21

ffplay.c+vs2017工程文件(ffplay播放器)

本文件是ffplay.c源代码移植到vs2017环境下的工程文件,适用于音视频开发的程序人员,用于研究ffplay播放器的开发人员。

2025-02-12

windows环境下ffmpeg4.4.5-64位库文件(含ffplay).rar

win10环境下编译下的ffmpeg4.4.5,64位。里面有两个包,分别是在msys2+mingw64环境下和msys2+VS2017环境下编译的64位库,应用程序包括ffplay(含SDL相关库文件),ffmpeg,ffprobe程序,适用于windows环境下音视频开发的相关领域。

2025-02-11

windows环境下ffmpeg4.4.5-32位库文件.rar

该库文件是windows10环境下用vs2017编译的ffmpeg4.4.5库文件,应用程序含ffmpeg.exe,ffprobe.exe,用于音视频开发

2025-02-11

空空如也

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

TA关注的人

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