- 博客(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
QT+ffplay+opengl媒体播放器
2025-10-08
qt+ffplay+opengl播放器.rar
2025-08-05
ffplay.c+vs2017工程文件(ffplay播放器)
2025-02-12
windows环境下ffmpeg4.4.5-64位库文件(含ffplay).rar
2025-02-11
windows环境下ffmpeg4.4.5-32位库文件.rar
2025-02-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅