自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2025-05-09 17:10:16 940

原创 ffplay源码分析__audio_decode_frame()

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

2025-05-02 17:45:08 743

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

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

2025-04-22 11:38:41 1053

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

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

2025-04-21 21:52:23 929

原创 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 63

原创 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 696

原创 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 704

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

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

2025-04-08 17:52:19 30

原创 ffplay源码__stream_component_open函数分析

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

2025-03-17 11:26:47 680

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

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

2025-03-12 13:08:49 936

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

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

2025-03-11 09:17:32 848

原创 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 1893

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

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

2024-11-22 15:21:08 1952

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

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

2024-11-17 11:21:05 2434

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

windows环境vs2017编译sdl2.0库

2024-11-12 17:20:21 952

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关注的人

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